public void Run_all_MySQL_migrations_work() { // Arrange int expectedNbMigration = Directory.GetFiles(MySQL.MigrationFolder).Length; var cnn = _dbContainer.CreateDbConnection(); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { EmbeddedResourceAssemblies = new[] { typeof(TestContext).Assembly }, EmbeddedResourceFilters = new[] { MySQL.MigrationFolderFilter }, CommandTimeout = 25 }; // Assert evolve.AssertInfoIsSuccessful(cnn, expectedNbRows: 0) .AssertMigrateIsSuccessful(cnn, expectedNbMigration) .AssertMigrateThrows <EvolveValidationException>(cnn, e => e.EmbeddedResourceAssemblies = new List <Assembly>(), locations: MySQL.ChecksumMismatchFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations: MySQL.MigrationFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1, e => e.MustEraseOnValidationError = true, locations: MySQL.ChecksumMismatchFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations: MySQL.MigrationFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 0, locations: MySQL.RepeatableFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertInfoIsSuccessful(cnn, expectedNbRows: expectedNbMigration + 2); }
public void Run_all_CockroachDB_migrations_work() { // Arrange var cnn = _dbContainer.CreateDbConnection(); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { Schemas = new[] { "evolve", "defaultdb" }, // MetadataTableSchema = evolve | migrations = defaultdb }; // Assert evolve.AssertInfoIsSuccessfulV2(cnn) .ChangeLocations(CockroachDB.MigrationFolder) .AssertInfoIsSuccessfulV2(cnn) .AssertMigrateIsSuccessfulV2(cnn) .AssertInfoIsSuccessfulV2(cnn); evolve.ChangeLocations(CockroachDB.ChecksumMismatchFolder) .AssertMigrateThrows <EvolveValidationException>(cnn) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .ChangeLocations(CockroachDB.MigrationFolder) .AssertInfoIsSuccessfulV2(cnn); evolve.ChangeLocations() .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertInfoIsSuccessfulV2(cnn); evolve.ChangeLocations(CockroachDB.MigrationFolder) .AssertMigrateIsSuccessfulV2(cnn) .AssertInfoIsSuccessfulV2(cnn); }
void Start() { canMove = true; //SpawnPoint //respawnPosition = transform.position; theLevelManager = FindObjectOfType <LevelManager>(); lastPositionScript = FindObjectOfType <LastPosition>(); evolveScript = FindObjectOfType <Evolve>(); tvPlayer = FindObjectOfType <PlayerController>(); transformationCloudScript = FindObjectOfType <TransformationCloud>(); hurtPlayerScript = FindObjectOfType <HurtPlayer>(); //Assign variables rb2d = gameObject.GetComponent <Rigidbody2D>(); anim = gameObject.GetComponent <Animator>(); //Start with full health currentHealth = maxHealth; //tvPlayer = FindObjectOfType<PlayerController>(); transform.position = lastPositionScript.pos; }
public void Execute() { try { using (var conn = _connectionFactory.GetConnection()) { conn.Open(); _logger.LogInformation("MySQL connectivity OK!"); var evolve = new Evolve(conn, msg => _logger.LogInformation(msg)) { EmbeddedResourceAssemblies = new[] { typeof(MySqlServerVerificationStartupAction).Assembly }, IsEraseDisabled = true }; evolve.Migrate(); } } catch (Exception ex) { _logger.LogError(ex, "Failed to connect to MySQL"); throw; } }
public void Run_all_SQLite_migrations_work() { var cnn = new SQLiteConnection($@"Data Source={Path.GetTempPath() + Guid.NewGuid().ToString()}.db;"); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { Locations = new List <string> { TestContext.SQLite.MigrationFolder }, Placeholders = new Dictionary <string, string> { ["${table4}"] = "table_4" }, }; int nbMigration = Directory.GetFiles(TestContext.SQLite.MigrationFolder).Length; // Migrate Sql_Scripts\Migration evolve.Migrate(); Assert.True(evolve.NbMigration == nbMigration, $"{nbMigration} migrations should have been applied, not {evolve.NbMigration}."); // Migrate: nothing to do. Database is already up to date. evolve.Migrate(); Assert.True(evolve.NbMigration == 0, $"There should be no more migration after a successful one, not {evolve.NbMigration}."); // Migrate Sql_Scripts\Checksum_mismatch: validation should fail due to a checksum mismatch. evolve.Locations = new List <string> { TestContext.SQLite.ChecksumMismatchFolder }; Assert.Throws <EvolveValidationException>(() => evolve.Migrate()); // Repair sucessfull evolve.Repair(); Assert.True(evolve.NbReparation == 1, $"There should be 1 migration repaired, not {evolve.NbReparation}."); // Migrate: nothing to do. Database is already up to date. evolve.Migrate(); Assert.True(evolve.NbMigration == 0, $"There should be no more migration after a successful one, not {evolve.NbMigration}."); // Erase cancelled (EraseDisabled = true) evolve.IsEraseDisabled = true; Assert.Throws <EvolveConfigurationException>(() => evolve.Erase()); // Erase sucessfull evolve.IsEraseDisabled = false; evolve.Erase(); Assert.True(evolve.NbSchemaErased == evolve.Schemas.Count(), $"{evolve.Schemas.Count()} schemas should have been erased, not {evolve.NbSchemaErased}."); // Migrate sucessfull after a validation error (MustEraseOnValidationError = true) evolve.Locations = new List <string> { TestContext.SQLite.MigrationFolder }; // Migrate Sql_Scripts\Migration evolve.Migrate(); Assert.True(evolve.NbMigration == nbMigration, $"{nbMigration} migrations should have been applied, not {evolve.NbMigration}."); evolve.Locations = new List <string> { TestContext.SQLite.ChecksumMismatchFolder }; // Migrate Sql_Scripts\Checksum_mismatch evolve.MustEraseOnValidationError = true; evolve.Migrate(); Assert.True(evolve.NbSchemaErased == evolve.Schemas.Count(), $"{evolve.Schemas.Count()} schemas should have been erased, not {evolve.NbSchemaErased}."); Assert.True(evolve.NbMigration == 1, $"1 migration should have been applied, not {evolve.NbMigration}."); }
public void Load_app_configuration_file_works() { var evolve = new Evolve(TestContext.AppConfigPath); Assert.Equal("Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;", evolve.ConnectionString); Assert.Equal("npgsql", evolve.Driver); Assert.True(new List <string>() { "migration", "dataset" }.SequenceEqual(evolve.Locations)); Assert.Equal("utf-16", evolve.Encoding.BodyName); Assert.Equal("Ver", evolve.SqlMigrationPrefix); Assert.Equal("@", evolve.SqlMigrationSeparator); Assert.Equal(".query", evolve.SqlMigrationSuffix); Assert.Equal("my_shema", evolve.Schemas.Single()); Assert.Equal("my_metadata_schema", evolve.MetadataTableSchema); Assert.Equal("metadata_store", evolve.MetadataTableName); Assert.Equal("@{", evolve.PlaceholderPrefix); Assert.Equal("@}", evolve.PlaceholderSuffix); Assert.Equal(new MigrationVersion("2_1_0"), evolve.TargetVersion); Assert.Equal(new MigrationVersion("1_1_0"), evolve.StartVersion); Assert.True(new List <string>() { "@{Schema@}", "@{Pwd@}" }.SequenceEqual(evolve.Placeholders.Keys)); Assert.True(new List <string>() { "my_schema", "password" }.SequenceEqual(evolve.Placeholders.Values)); Assert.True(evolve.IsEraseDisabled); Assert.True(evolve.MustEraseOnValidationError); Assert.Equal(evolve.Command, CommandOptions.Erase); }
public static Evolve AssertValidationThrows <T>(this Evolve evolve, int errorCount) where T : Exception { var ex = Assert.Throws <T>(() => evolve.Validate()); Assert.Contains($"{errorCount} error(s)", ex.Message); return(evolve); }
public void Run_all_PostgreSQL_migrations_work() { // Arrange string[] locations = AppVeyor ? new[] { PostgreSQL.MigrationFolder } : new[] { PostgreSQL.MigrationFolder, PostgreSQL.Migration11Folder }; // Add specific PostgreSQL 11 scripts int expectedNbMigration = AppVeyor ? Directory.GetFiles(PostgreSQL.MigrationFolder).Length : Directory.GetFiles(PostgreSQL.MigrationFolder).Length + 1; var cnn = _dbContainer.CreateDbConnection(); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { Schemas = new[] { "public", "unittest" }, MetadataTableSchema = "unittest", Placeholders = new Dictionary <string, string> { ["${schema1}"] = "unittest" } }; // Assert evolve.AssertInfoIsSuccessful(cnn, expectedNbRows: 0) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations) .AssertMigrateThrows <EvolveValidationException>(cnn, locations: PostgreSQL.ChecksumMismatchFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertMigrateThrows <EvolveValidationException>(cnn, locations: PostgreSQL.OutOfOrderFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1, e => e.OutOfOrder = true) .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1, e => e.MustEraseOnValidationError = true, locations: PostgreSQL.ChecksumMismatchFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 0, locations: PostgreSQL.RepeatableFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertInfoIsSuccessful(cnn, expectedNbRows: expectedNbMigration + 3); }
public void Scenario_check_validation() { // Step00: Validation succeeds when no script ever found Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step00") }) .AsserValidationIsSuccessful(); // Step01: Validation failed when pending scripts are found // And succeeds when they are all applied even with an `evolve-repeat-always` repeatable migration Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step01") }) .AssertValidationThrows <EvolveValidationException>(errorCount: 3); Evolve.AssertMigrateIsSuccessful(Cnn, repeatAlwaysCount: 1) .AsserValidationIsSuccessful(); // Step02: Validation failed because of a missing script Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step02") }) .AssertValidationThrows <EvolveValidationException>(errorCount: 2); // Step03: Validation failed because of an invalid checksum Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step03") }) .AssertValidationThrows <EvolveValidationException>(errorCount: 1); // Step04: Validation failed because of new cheksum of an existing repeatable migration Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step04") }) .AssertValidationThrows <EvolveValidationException>(errorCount: 1); // Step01: Validation succeeds Evolve.ChangeLocations(new[] { Path.Combine(ScenarioFolder, "Step01") }) .AsserValidationIsSuccessful(); }
public void Run_all_SQLite_migrations_work() { // Arrange int expectedNbMigration = Directory.GetFiles(SQLite.MigrationFolder).Length; var cnn = new SQLiteConnection($@"Data Source={Path.GetTempPath() + Guid.NewGuid().ToString()}.db;"); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { Placeholders = new Dictionary <string, string> { ["${table4}"] = "table_4" }, }; // Assert evolve.AssertInfoIsSuccessful(cnn, expectedNbRows: 0) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, locations: SQLite.MigrationFolder) .AssertMigrateThrows <EvolveValidationException>(cnn, locations: SQLite.ChecksumMismatchFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations: SQLite.MigrationFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1, e => e.MustEraseOnValidationError = true, locations: SQLite.ChecksumMismatchFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations: SQLite.MigrationFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 0, locations: SQLite.RepeatableFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertInfoIsSuccessful(cnn, expectedNbRows: expectedNbMigration + 2); }
private void OnTriggerEnter(Collider collider) { if (collider.tag == "heal") { audioSource.PlayOneShot(lifeUpSFX, FXVolume); GameObject healingPod = collider.gameObject; currentHealth += healingPod.GetComponent <Heal>().numHealthToRestore; currentHealth = Mathf.Min(currentHealth, maxHealth); healthBar.SetHealth(currentHealth); Destroy(healingPod); } if (collider.tag == "Pod") { if (havePodAlready) { return; } animator.ResetTrigger("Releasing"); animator.SetTrigger("Holding"); audioSource.PlayOneShot(pickUpSFX, FXVolume); havePodAlready = true; collider.isTrigger = false; collider.transform.parent = transform; collider.transform.localPosition = PickUpPosition; collider.transform.localEulerAngles = PickUpRotation; myPod = collider.gameObject; Evolve myEvolve = myPod.GetComponent <Evolve>(); myEvolve.podActivated = true; } }
void Start() { crouchTrigger.enabled = false; //Defaults to facing right. facingRight = true; //Enables mobility. canMove = true; //SpawnPoint respawnPosition = transform.position; //References to other scripts. theLevelManager = FindObjectOfType <LevelManager>(); lastPositionScript = FindObjectOfType <LastPosition>(); evolveScript = FindObjectOfType <Evolve>(); thePlayerController = FindObjectOfType <PlayerController>(); playerGun = FindObjectOfType <PlayerGun>(); //Assign variables rb2d = gameObject.GetComponent <Rigidbody2D>(); anim = gameObject.GetComponent <Animator>(); //Start with full health currentHealth = maxHealth; transform.position = lastPositionScript.pos; }
public void Load_multiple_json_configuration_files_works() { var evolve = new Evolve(TestContext.Json2ConfigPath, environmentName: "staging"); Assert.Equal("Server=srv1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;", evolve.ConnectionString); Assert.Equal("npgsql", evolve.Driver); Assert.True(new List <string>() { "migration" }.SequenceEqual(evolve.Locations)); Assert.Equal("utf-16", evolve.Encoding.BodyName); Assert.Equal("Ver", evolve.SqlMigrationPrefix); Assert.Equal("@", evolve.SqlMigrationSeparator); Assert.Equal(".query", evolve.SqlMigrationSuffix); Assert.Equal("my_shema", evolve.Schemas.Single()); Assert.Equal("my_metadata_schema", evolve.MetadataTableSchema); Assert.Equal("metadata_store", evolve.MetadataTableName); Assert.Equal("@{", evolve.PlaceholderPrefix); Assert.Equal("@}", evolve.PlaceholderSuffix); Assert.Equal(new MigrationVersion("2_1_0"), evolve.TargetVersion); Assert.Equal(new MigrationVersion("1_1_0"), evolve.StartVersion); Assert.True(new List <string>() { "@{Pwd@}", "@{Schema@}" }.SequenceEqual(evolve.Placeholders.Keys.OrderBy(x => x))); Assert.True(new List <string>() { "my_schema", "password" }.SequenceEqual(evolve.Placeholders.Values.OrderBy(x => x))); Assert.True(evolve.IsEraseDisabled); Assert.False(evolve.MustEraseOnValidationError); Assert.Equal(CommandOptions.Migrate, evolve.Command); Assert.False(evolve.EnableClusterMode); Assert.False(evolve.OutOfOrder); }
public void Scenario_retry_repeatable_migrations_until_no_error() { // Assert Evolve.AssertInfoIsSuccessful(Cnn) .AssertMigrateThrows <EvolveException>(Cnn); Evolve.AssertMigrateIsSuccessful(Cnn, e => e.RetryRepeatableMigrationsUntilNoError = true); }
public static Evolve AssertEraseThrows <T>(this Evolve evolve, IDbConnection cnn, Action <Evolve> arrange) where T : Exception { arrange(evolve); Assert.Throws <T>(() => evolve.Erase()); Assert.True(cnn.State == ConnectionState.Closed); return(evolve); }
// Use this for initialization void Start() { theSpriteRenderer = GetComponent <SpriteRenderer>(); theColliderBox.enabled = true; evolveScript = FindObjectOfType <Evolve>(); tvPlayer = FindObjectOfType <PlayerController>(); plasmaPlayer = FindObjectOfType <PlasmaPlayer>(); }
private static void StartSCProblem() { var bestClassifiers = new Individual[8]; CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; ECActivator.AddSourceAssemblies(new[] { Assembly.GetAssembly(typeof(IEvolutionState)), Assembly.GetAssembly(typeof(MultiClassifierProblem)) }); var parameters = Evolve.LoadParameterDatabase(new[] { "-file", @"Params\App\Iris\single.params" }); IEvolutionState state = Evolve.Initialize(parameters, 0); var date = DateTime.Now.Ticks.ToString(); var directoryName = "stats/" + date; var directory = System.IO.Directory.CreateDirectory(directoryName); var writer = new System.IO.StreamWriter(directoryName + "/multi_cl_stats.txt", false); // IEvolutionState state = Evolve.Initialize(Evolve.LoadParameterDatabase(new[] { "-file", @"Params\App\Iris\single.params" }), 0); for (var i = 0; i < 8; i++) { // parameters = Evolve.LoadParameterDatabase(new[] { "-file", @"Params\App\Iris\single.params", "-stat.file", @"out1.stat" }); if (i != 0) { state = Evolve.Initialize(parameters, 0); } MultiClassificationClass.Current = MultiClassificationClass.Labels[i]; // state.Output.FilePrefix = i.ToString(); state.Run(EvolutionState.C_STARTED_FRESH); var best = ((SimpleStatistics)((SimpleEvolutionState)state).Statistics).BestOfRun[0]; int humanGraph = state.Output.AddLog(directoryName + "/multi_cl_human_graph_" + MultiClassificationClass.Current + ".txt"); int ecjGraph = state.Output.AddLog(directoryName + "/multi_cl_ecj_graph_" + MultiClassificationClass.Current + ".txt"); ((GPIndividual)best).Trees[0].PrintStyle = GPTree.PRINT_STYLE_DOT; ((GPIndividual)best).Trees[0].PrintTreeForHumans(state, humanGraph); ((GPIndividual)best).Trees[0].PrintTree(state, ecjGraph); state.Output.Close(); // System.IO.File.Delete("out.stat"); bestClassifiers[i] = best; var writer2 = new System.IO.StreamWriter(directoryName + "/classifier_code_" + MultiClassificationClass.Current + ".txt"); var code = TreeReader.PrintCodeFromTree(((GPIndividual)best).Trees[0]); writer2.Write(code); writer2.Close(); var accuracy = (double)(1552 - ((KozaFitness)bestClassifiers[i].Fitness).StandardizedFitness) / 1552; writer.WriteLine("Klasyfikator dla gestu " + MultiClassificationClass.Labels[i]); writer.WriteLine("Ilość generacji: " + state.NumGenerations.ToString()); writer.WriteLine("Rozmiar drzewa: " + ((GPIndividual)bestClassifiers[i]).Size.ToString()); writer.WriteLine("Poprawność klasyfikacji: " + accuracy.ToString()); writer.WriteLine(); // ((GPIndividual)bestClassifiers[0]).Trees[0].Child.Eval //((GPIndividual)bestClassifiers[0]).Trees[0]. // ((SingleClassifierProblem)state.Evaluator.p_problem) } writer.Close(); CheckClassifierOnTestData(bestClassifiers, state, (int)ClassifierType.MULTI_CLASSIFIER, directoryName); }
public void Run_all_MySQL_migrations_work() { var cnn = new MySqlConnection($"Server=127.0.0.1;Port={TestContext.ContainerPort};Database={TestContext.DbName};Uid={TestContext.DbUser};Pwd={TestContext.DbPwd};"); var evolve = new Evolve(cnn, msg => Debug.WriteLine(msg)) { Locations = new List <string> { TestContext.MigrationFolder }, }; int nbMigration = Directory.GetFiles(TestContext.MigrationFolder).Length; // Migrate Sql_Scripts\Migration evolve.Migrate(); Assert.True(evolve.NbMigration == nbMigration, $"{nbMigration} migrations should have been applied, not {evolve.NbMigration}."); // Migrate: nothing to do. Database is already up to date. evolve.Migrate(); Assert.True(evolve.NbMigration == 0, $"There should be no more migration after a successful one, not {evolve.NbMigration}."); // Migrate Sql_Scripts\Checksum_mismatch: validation should fail due to a checksum mismatch. evolve.Locations = new List <string> { TestContext.ChecksumMismatchFolder }; Assert.Throws <EvolveValidationException>(() => evolve.Migrate()); // Repair sucessfull evolve.Repair(); Assert.True(evolve.NbReparation == 1, $"There should be 1 migration repaired, not {evolve.NbReparation}."); // Migrate: nothing to do. Database is already up to date. evolve.Migrate(); Assert.True(evolve.NbMigration == 0, $"There should be no more migration after a successful one, not {evolve.NbMigration}."); // Erase cancelled (EraseDisabled = true) evolve.IsEraseDisabled = true; Assert.Throws <EvolveConfigurationException>(() => evolve.Erase()); // Erase sucessfull evolve.IsEraseDisabled = false; evolve.Erase(); Assert.True(evolve.NbSchemaErased == evolve.Schemas.Count(), $"{evolve.Schemas.Count()} schemas should have been erased, not {evolve.NbSchemaErased}."); // Migrate sucessfull after a validation error (MustEraseOnValidationError = true) evolve.Locations = new List <string> { TestContext.MigrationFolder }; // Migrate Sql_Scripts\Migration evolve.Migrate(); Assert.True(evolve.NbMigration == nbMigration, $"{nbMigration} migrations should have been applied, not {evolve.NbMigration}."); evolve.Locations = new List <string> { TestContext.ChecksumMismatchFolder }; // Migrate Sql_Scripts\Checksum_mismatch evolve.MustEraseOnValidationError = true; evolve.Migrate(); Assert.True(evolve.NbSchemaErased == evolve.Schemas.Count(), $"{evolve.Schemas.Count()} schemas should have been erased, not {evolve.NbSchemaErased}."); Assert.True(evolve.NbMigration == 1, $"1 migration should have been applied, not {evolve.NbMigration}."); }
public void Scenario_retry_repeatable_migrations_until_no_progression() { // Arrange Evolve.RetryRepeatableMigrationsUntilNoError = true; // Assert Evolve.AssertInfoIsSuccessful(Cnn) .AssertMigrateThrows <EvolveException>(Cnn); }
public void Scenario_skip_migration_until_target_version_is_reached() { // Arrange Evolve.SkipNextMigrations = true; Evolve.TargetVersion = new("2_0"); // Assert Evolve.AssertMigrateIsSuccessful(Cnn); }
public static Evolve AssertEraseIsSuccessful(this Evolve evolve, IDbConnection cnn, Action <Evolve> arrange = null) { arrange?.Invoke(evolve); evolve.Erase(); Assert.True(evolve.NbSchemaErased == evolve.Schemas.Count(), $"{evolve.Schemas.Count()} schemas should have been erased, not {evolve.NbSchemaErased}."); Assert.True(cnn.State == ConnectionState.Closed); return(evolve); }
public void Scenario_repeatable_migration_executed_everytime() { for (int i = 1; i <= 3; i++) { Evolve.Migrate(); Assert.True(Evolve.AppliedMigrations.Count == 1, $"This repeat always migration should be executed each time."); Assert.True(MetadataTable.GetAllAppliedRepeatableMigration().Count() == i); Assert.False(MetadataTable.GetAllAppliedMigration().Any()); } }
public static Evolve AssertInfoIsSuccessful(this Evolve evolve, IDbConnection cnn, int expectedNbRows) { var rows = evolve.Info(); int nbRows = rows?.Count() ?? 0; Assert.True(nbRows == expectedNbRows, $"{expectedNbRows} rows should have been returned, not {nbRows}."); Assert.True(cnn.State == ConnectionState.Closed); return(evolve); }
public void Run_all_SQLServer_migrations_work() { // Arrange var cnn = new SqlConnection(_dbContainer.GetCnxStr(DbName)); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { Placeholders = new Dictionary <string, string> { ["${db}"] = DbName, ["${schema2}"] = "dbo" }, TargetVersion = new MigrationVersion("8_9"), }; // Assert evolve.AssertInfoIsSuccessful(cnn) .ChangeLocations(SqlServer.MigrationFolder) .AssertInfoIsSuccessful(cnn) .AssertMigrateIsSuccessful(cnn) .AssertInfoIsSuccessful(cnn); evolve.AssertMigrateThrows <EvolveConfigurationException>(cnn, e => e.StartVersion = new MigrationVersion("3.0")); evolve.ChangeLocations(SqlServer.ChecksumMismatchFolder) .AssertMigrateThrows <EvolveValidationException>(cnn, e => e.StartVersion = MigrationVersion.MinVersion) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .ChangeLocations(SqlServer.MigrationFolder) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations() .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations(SqlServer.MigrationFolder) .AssertMigrateIsSuccessful(cnn) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations(SqlServer.ChecksumMismatchFolder) .AssertMigrateIsSuccessful(cnn, e => e.MustEraseOnValidationError = true) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations(SqlServer.MigrationFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, e => e.StartVersion = new MigrationVersion("2.0")) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations(SqlServer.MigrationFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, e => e.StartVersion = MigrationVersion.MinVersion) .AssertInfoIsSuccessful(cnn); evolve.ChangeLocations(SqlServer.RepeatableFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 0) .AssertMigrateIsSuccessful(cnn); }
public void Scenario_drop_extension_should_work() { Evolve.Migrate(); // Do not use Evolve.Erase() because in this case it will execute DROP SCHEMA // We want to force erase of the schema object by object. DbHelper.GetSchema(SchemaName).Erase(); Assert.True(DbHelper.GetSchema(SchemaName).IsExists(), $"The schema [{SchemaName}] should exist."); Assert.True(DbHelper.GetSchema(SchemaName).IsEmpty(), $"The schema [{SchemaName}] should be empty."); }
public void Run_all_Cassandra_integration_tests_work() { // Arrange int expectedNbMigration = Directory.GetFiles(CassandraDb.MigrationFolder).Length; string metadataKeyspaceName = "my_keyspace_1"; // this name must also be declared in _evolve.cassandra.json var cnn = _dbContainer.CreateDbConnection(); var evolve = new Evolve(cnn, msg => _output.WriteLine(msg)) { CommandTimeout = 25, MetadataTableSchema = metadataKeyspaceName, MetadataTableName = "evolve_change_log", Placeholders = new Dictionary <string, string> { ["${keyspace}"] = metadataKeyspaceName }, SqlMigrationSuffix = ".cql" }; // Assert evolve.AssertInfoIsSuccessful(cnn, expectedNbRows: 0) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, locations: CassandraDb.MigrationFolder) .AssertMigrateThrows <EvolveConfigurationException>(cnn, e => e.StartVersion = new MigrationVersion("3.0")) .AssertMigrateThrows <EvolveValidationException>(cnn, e => e.StartVersion = MigrationVersion.MinVersion, CassandraDb.ChecksumMismatchFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertEraseThrows <EvolveConfigurationException>(cnn, e => e.IsEraseDisabled = true) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, locations: CassandraDb.MigrationFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1, e => e.MustEraseOnValidationError = true, CassandraDb.ChecksumMismatchFolder) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration - 2, e => e.StartVersion = new MigrationVersion("3"), CassandraDb.MigrationFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0, e => e.StartVersion = MigrationVersion.MinVersion) .AssertMigrateThrows <EvolveConfigurationException>(cnn, e => e.StartVersion = new MigrationVersion("3.0")) .AssertEraseIsSuccessful(cnn, e => e.StartVersion = MigrationVersion.MinVersion) .AssertEraseIsSuccessful(cnn, e => e.IsEraseDisabled = false) .AssertMigrateIsSuccessful(cnn, expectedNbMigration, null, locations: CassandraDb.MigrationFolder) .AssertRepairIsSuccessful(cnn, expectedNbReparation: 0, locations: CassandraDb.RepeatableFolder) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 1) .AssertMigrateIsSuccessful(cnn, expectedNbMigration: 0) .AssertInfoIsSuccessful(cnn, expectedNbRows: expectedNbMigration + 2) .AssertEraseIsSuccessful(cnn, e => e.StartVersion = MigrationVersion.MinVersion); //DefaultKeyspaceReplicationStrategy evolve.Locations = new[] { CassandraDb.MigrationFolder }; var configurationFileName = ConfigurationFile; File.Copy($"_{configurationFileName}", configurationFileName); var ex = Assert.Throws <EvolveSqlException>(() => evolve.Migrate()); Assert.Contains("Not enough replicas available for query at consistency", ex.Message); File.Delete(configurationFileName); // Call the second part of the Cassandra integration tests DialectTest.Run_all_Cassandra_integration_tests_work(_dbContainer); }
static void Main() { // This primes the activator so it knows where to look for types that will be created from parameters. ECActivator.AddSourceAssemblies(new [] { Assembly.GetAssembly(typeof(IEvolutionState)), Assembly.GetAssembly(typeof(MaxOnes)) }); Evolve.Run(new [] { "-file", @"Params\App\Tutorial1\tutorial1.params" }); Console.WriteLine("\nDone!"); Console.ReadLine(); }
public static Evolve AssertRepairIsSuccessful(this Evolve evolve, IDbConnection cnn, int expectedNbReparation, params string[] locations) { if (locations.Any()) { evolve.Locations = locations; } evolve.Repair(); Assert.True(evolve.NbReparation == expectedNbReparation, $"There should be {expectedNbReparation} migration repaired, not {evolve.NbReparation}."); Assert.True(cnn.State == ConnectionState.Closed); return(evolve); }
public static Evolve AssertInfoIsSuccessfulV2(this Evolve evolve, IDbConnection cnn) { // Act var rows = evolve.Info(); int nbRows = rows?.Count() ?? 0; // Assert Assert.True(nbRows == evolve.GetExpectedNbUiRow(), $"{evolve.GetExpectedNbUiRow()} rows should have been returned, not {nbRows}."); Assert.True(cnn.State == ConnectionState.Closed); return(evolve); }
public void Tutorial2Basic() { // This primes the activator so it knows where to look for types that will be created from parameters. ECActivator.AddSourceAssemblies(new[] { Assembly.GetAssembly(typeof(IEvolutionState)), Assembly.GetAssembly(typeof(Evaluator)), Assembly.GetAssembly(typeof(AddSubtract)) }); Evolve.Run(new[] { "-file", @"App/Tutorial2/Params/App/Tutorial2/tutorial2.params" }); context.WriteLine("\nDone!"); }