public void Add_WhenGivenNonEmptyFolder_ShouldDeleteFolderWhenDisposed() { //---------------Set up test pack------------------- var tempFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(tempFolder); var f1 = Path.Combine(tempFolder, Guid.NewGuid().ToString()); File.WriteAllBytes(f1, RandomValueGen.GetRandomBytes(100, 200)); var f2 = Path.Combine(tempFolder, RandomValueGen.GetRandomString(10, 20)); File.WriteAllBytes(f2, Encoding.UTF8.GetBytes(RandomValueGen.GetRandomString(100, 200))); //---------------Assert Precondition---------------- Assert.IsTrue(Directory.Exists(tempFolder)); Assert.IsTrue(File.Exists(f1)); Assert.IsTrue(File.Exists(f2)); //---------------Execute Test ---------------------- using (var ad = new AutoDeleter()) { ad.Add(tempFolder); } //---------------Test Result ----------------------- Assert.IsFalse(File.Exists(f1)); Assert.IsFalse(File.Exists(f2)); Assert.IsFalse(Directory.Exists(tempFolder)); }
public void AlterTable_MigrationRequiresAutomaticDelete_AndProcessorHasUndoDisabled_ShouldNotThrow() { var tempResources = WriteOutFirebirdEmbeddedLibrariesToCurrentWorkingDirectory(); var tempFile = Path.GetTempFileName(); using (var deleter = new AutoDeleter(tempFile)) { File.Delete(tempFile); deleter.Add(tempResources); var connectionString = GetConnectionStringToTempDatabaseAt(tempFile); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; try { using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var announcer = new TextWriterAnnouncer(System.Console.Out); announcer.ShowSql = true; var options = FirebirdOptions.AutoCommitBehaviour(); options.TruncateLongNames = false; processor = new FirebirdProcessor(connection, new FirebirdGenerator(options), announcer, new ProcessorOptions(), new FirebirdDbFactory(), options); processor.FBOptions.UndoEnabled = false; var runner = new MigrationRunner(Assembly.GetExecutingAssembly(), runnerContext, processor); runner.Up(new MigrationWhichCreatesTwoRelatedTables()); processor.CommitTransaction(); FbConnection.ClearPool(connection); } //---------------Assert Precondition---------------- Assert.IsTrue(ForeignKeyExists(connectionString, MigrationWhichCreatesTwoRelatedTables.ForeignKeyName), "Foreign key does not exist after first migration"); using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var announcer = new TextWriterAnnouncer(System.Console.Out); announcer.ShowSql = true; var options = FirebirdOptions.AutoCommitBehaviour(); processor = new FirebirdProcessor(connection, new FirebirdGenerator(options), announcer, new ProcessorOptions(), new FirebirdDbFactory(), options); processor.FBOptions.UndoEnabled = false; var runner = new MigrationRunner(Assembly.GetExecutingAssembly(), runnerContext, processor); runner.Up(new MigrationWhichAltersTableWithFK()); processor.CommitTransaction(); } Assert.IsTrue(ForeignKeyExists(connectionString, MigrationWhichCreatesTwoRelatedTables.ForeignKeyName), "Foreign key does not exist after second migration"); } catch (Exception ex) { try { File.Copy(tempFile, "C:\\tmp\\fm_tests.fdb", true); } catch { } throw ex; } } }
private string CreateTemporaryDefaultsFile() { var tempPath = Path.GetTempPath(); var tempDefaultsPath = DumpDefaultsFileAt(tempPath, $"{Path.GetFileName(DatabasePath)}.cnf"); _autoDeleter.Add(tempDefaultsPath); return(tempDefaultsPath); }
private AutoDeleter GetFreshTempFileForDB() { var tempResources = WriteOutFirebirdEmbeddedLibraries(); var tempFile = Path.GetTempFileName(); var deleter = new AutoDeleter(tempFile); File.Delete(tempFile); deleter.Add(tempResources); return(deleter); }
public void RenameTable_WhenOriginalTableContainsMultipleRows_ShouldNotFailToMigrate() { //---------------Set up test pack------------------- var tempResources = WriteOutFirebirdEmbeddedLibrariesToCurrentWorkingDirectory(); var tempFile = Path.GetTempFileName(); using (var deleter = new AutoDeleter(tempFile)) { File.Delete(tempFile); // Firebird will b0rk if it has to create a database where a file already exists deleter.Add(tempResources); var connectionString = GetConnectionStringToTempDatabaseAt(tempFile); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var runner = CreateFirebirdEmbeddedRunnerFor(connection, runnerContext, out processor); runner.Up(new CreateTableMigration()); runner.Up(new AddDataMigration(1)); runner.Up(new AddDataMigration(2)); runner.Up(new AddDataMigration(3)); //---------------Assert Precondition---------------- connection.Open(); using (var cmd = new FbCommand("select count(*) as \"TheCount\" from \"TheTable\"", connection)) { using (var reader = cmd.ExecuteReader()) { Assert.IsTrue(reader.Read()); Assert.AreEqual(3, Convert.ToInt32(reader["TheCount"])); } } //---------------Execute Test ---------------------- Exception thrown = null; try { runner.Up(new RenameTableMigration()); } catch (Exception ex) { thrown = ex; } //---------------Test Result ----------------------- Assert.IsNull(thrown); } } }
public void Add_WhenGivenFilePathForExistingFile_ShouldDeleteFileWhenDisposed() { //---------------Set up test pack------------------- var tempFile = Path.GetTempFileName(); //---------------Assert Precondition---------------- Assert.IsTrue(File.Exists(tempFile)); //---------------Execute Test ---------------------- using (var ad = new AutoDeleter()) { ad.Add(tempFile); } //---------------Test Result ----------------------- Assert.IsFalse(File.Exists(tempFile)); }
public void Add_WhenGivenEmptyFolder_ShouldDeleteFolderWhenDisposed() { //---------------Set up test pack------------------- var tempFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(tempFolder); //---------------Assert Precondition---------------- Assert.IsTrue(Directory.Exists(tempFolder)); //---------------Execute Test ---------------------- using (var ad = new AutoDeleter()) { ad.Add(tempFolder); } //---------------Test Result ----------------------- Assert.IsFalse(Directory.Exists(tempFolder)); }
public void RenamingTable_WhenTableHasTextBlobs_ShouldCreateNewTableWithTextBlobsNotBinaryBlobs() { var tempResources = WriteOutFirebirdEmbeddedLibrariesToCurrentWorkingDirectory(); var tempFile = Path.GetTempFileName(); using (var deleter = new AutoDeleter(tempFile)) { File.Delete(tempFile); // Firebird will b0rk if it has to create a database where a file already exists deleter.Add(tempResources); var connectionString = GetConnectionStringToTempDatabaseAt(tempFile); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var runner = CreateFirebirdEmbeddedRunnerFor(connection, runnerContext, out processor); runner.Up(new MigrationWhichCreatesTableWithTextBlob()); //---------------Assert Precondition---------------- var fieldName = "TheColumn"; var tableName = "TheTable"; var expectedFieldType = 261; var expectedFieldSubType = 1; AssertThatFieldHasCorrectTypeAndSubType(fieldName, tableName, connection, expectedFieldType, expectedFieldSubType); //---------------Execute Test ---------------------- runner.Up(new MigrationWhichRenamesTableWithTextBlob()); //---------------Test Result ----------------------- tableName = "TheNewTable"; AssertThatFieldHasCorrectTypeAndSubType(fieldName, tableName, connection, expectedFieldType, expectedFieldSubType); } } }
public void AlterTable_MigrationRequiresAutomaticDelete_AndProcessorHasUndoDisabled_ShouldNotThrow() { // this test was originally created to investigate an issue with foreign key names but in the process, // I found that FirebirdProcessor.CreateSequenceForIdentity doesn't respect FBOptions.UndoEnabled. Since // Undo isn't implemented for Firebird, a migration runner always has to turn it off, but even with it off, // the migrations below will fail unless CreateSequenceForIdentity is appropriately altered var tempResources = WriteOutFirebirdEmbeddedLibrariesToCurrentWorkingDirectory(); var tempFile = Path.GetTempFileName(); using (var deleter = new AutoDeleter(tempFile)) { File.Delete(tempFile); deleter.Add(tempResources); var connectionString = GetConnectionStringToTempDatabaseAt(tempFile); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; try { using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var announcer = new TextWriterAnnouncer(System.Console.Out); announcer.ShowSql = true; var options = FirebirdOptions.AutoCommitBehaviour(); options.TruncateLongNames = false; processor = new FirebirdProcessor(connection, new FirebirdGenerator(options), announcer, new ProcessorOptions(), new FirebirdDbFactory(), options); processor.FBOptions.UndoEnabled = false; var runner = new MigrationRunner(Assembly.GetExecutingAssembly(), runnerContext, processor); runner.Up(new MigrationWhichCreatesTwoRelatedTables()); processor.CommitTransaction(); FbConnection.ClearPool(connection); } //---------------Assert Precondition---------------- Assert.IsTrue(ForeignKeyExists(connectionString, MigrationWhichCreatesTwoRelatedTables.ForeignKeyName), "Foreign key does not exist after first migration"); using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var announcer = new TextWriterAnnouncer(System.Console.Out); announcer.ShowSql = true; var options = FirebirdOptions.AutoCommitBehaviour(); processor = new FirebirdProcessor(connection, new FirebirdGenerator(options), announcer, new ProcessorOptions(), new FirebirdDbFactory(), options); processor.FBOptions.UndoEnabled = false; var runner = new MigrationRunner(Assembly.GetExecutingAssembly(), runnerContext, processor); runner.Up(new MigrationWhichAltersTableWithFK()); processor.CommitTransaction(); } Assert.IsTrue(ForeignKeyExists(connectionString, MigrationWhichCreatesTwoRelatedTables.ForeignKeyName), "Foreign key does not exist after second migration"); } catch (Exception ex) { try { File.Copy(tempFile, "C:\\tmp\\fm_tests.fdb", true); } catch { } throw ex; } } }
private AutoDeleter GetFreshTempFileForDB() { var tempResources = WriteOutFirebirdEmbeddedLibraries(); var tempFile = Path.GetTempFileName(); var deleter = new AutoDeleter(tempFile); File.Delete(tempFile); deleter.Add(tempResources); return deleter; }