public void MigrationTestsTests() { //IMPORTANT NOTIFICATION //Till I figure out a way, please delete the .db file or drop tables clean before running this //Switch the comments to test one technology or another var technology = DataManagerTechnology.SQLite; //var technology = DataManagerTechnology.MySql; var mysqlconnectionstring = "Data Source=localhost;Database=auroratest;User ID=auroratest;Password=test;"; var sqliteconnectionstring = string.Format("URI=file:{0},version=3", dbFileName); string connectionString = (technology == DataManagerTechnology.SQLite)?sqliteconnectionstring:mysqlconnectionstring; CreateEmptyDatabase(); DataSessionProvider sessionProvider = new DataSessionProvider(technology, connectionString); IDataConnector genericData = ((technology == DataManagerTechnology.SQLite)? (IDataConnector) new SQLiteLoader():new MySQLDataLoader()); genericData.ConnectToDatabase(connectionString); var migrators = new List <Migrator>(); var testMigrator0 = new TestMigrator(); migrators.Add(testMigrator0); var migrationManager = new MigrationManager(sessionProvider, genericData, migrators); Assert.AreEqual(testMigrator0.Version, migrationManager.LatestVersion, "Latest version is correct"); Assert.IsNull(migrationManager.GetDescriptionOfCurrentOperation(), "Description should be null before deciding what to do."); migrationManager.DetermineOperation(); var operationDescription = migrationManager.GetDescriptionOfCurrentOperation(); Assert.AreEqual(MigrationOperationTypes.CreateDefaultAndUpgradeToTarget, operationDescription.OperationType, "Operation type is correct."); Assert.AreEqual(testMigrator0.Version, operationDescription.CurrentVersion, "Current version is correct"); //There will be no migration because there is only one migrator which will provide the default Assert.IsNull(operationDescription.StartVersion, "Start migration version is correct"); Assert.IsNull(operationDescription.EndVersion, "End migration version is correct"); try { migrationManager.ExecuteOperation(); Assert.AreEqual(testMigrator0.Version, genericData.GetAuroraVersion(), "Version of settings is updated"); } catch (MigrationOperationException) { Assert.Fail("Something failed during execution we weren't expecting."); } bool valid = migrationManager.ValidateVersion(migrationManager.LatestVersion); Assert.AreEqual(true, valid, "Database is a valid version"); migrationManager.DetermineOperation(); var operationDescription2 = migrationManager.GetDescriptionOfCurrentOperation(); Assert.AreEqual(MigrationOperationTypes.DoNothing, operationDescription2.OperationType, "Operation type is correct."); Assert.AreEqual(testMigrator0.Version, operationDescription2.CurrentVersion, "Current version is correct"); Assert.IsNull(operationDescription2.StartVersion, "Start migration version is correct"); Assert.IsNull(operationDescription2.EndVersion, "End migration version is correct"); migrationManager.ExecuteOperation(); genericData.CloseDatabase(); }
public void MigrationTestsTests() { //IMPORTANT NOTIFICATION //Till I figure out a way, please delete the .db file or drop tables clean before running this //Switch the comments to test one technology or another var technology = DataManagerTechnology.SQLite; //var technology = DataManagerTechnology.MySql; var mysqlconnectionstring = "Data Source=localhost;Database=Universetest;User ID=Universetest;Password=test;"; var sqliteconnectionstring = string.Format("URI=file:{0},version=3", dbFileName); string connectionString = (technology==DataManagerTechnology.SQLite)?sqliteconnectionstring:mysqlconnectionstring; CreateEmptyDatabase(); DataSessionProvider sessionProvider = new DataSessionProvider(technology, connectionString); IDataConnector genericData = ((technology==DataManagerTechnology.SQLite)? (IDataConnector) new SQLiteLoader():new MySQLDataLoader()); genericData.ConnectToDatabase(connectionString); var migrators = new List<Migrator>(); var testMigrator0 = new TestMigrator(); migrators.Add(testMigrator0); var migrationManager = new MigrationManager(sessionProvider, genericData, migrators); Assert.AreEqual(testMigrator0.Version, migrationManager.LatestVersion, "Latest version is correct"); Assert.IsNull(migrationManager.GetDescriptionOfCurrentOperation(),"Description should be null before deciding what to do."); migrationManager.DetermineOperation(); var operationDescription = migrationManager.GetDescriptionOfCurrentOperation(); Assert.AreEqual(MigrationOperationTypes.CreateDefaultAndUpgradeToTarget, operationDescription.OperationType, "Operation type is correct."); Assert.AreEqual(testMigrator0.Version, operationDescription.CurrentVersion, "Current version is correct"); //There will be no migration because there is only one migrator which will provide the default Assert.IsNull(operationDescription.StartVersion, "Start migration version is correct"); Assert.IsNull(operationDescription.EndVersion, "End migration version is correct"); try { migrationManager.ExecuteOperation(); Assert.AreEqual(testMigrator0.Version, genericData.GetUniverseVersion(), "Version of settings is updated"); } catch(MigrationOperationException) { Assert.Fail("Something failed during execution we weren't expecting."); } bool valid = migrationManager.ValidateVersion(migrationManager.LatestVersion); Assert.AreEqual(true,valid,"Database is a valid version"); migrationManager.DetermineOperation(); var operationDescription2 = migrationManager.GetDescriptionOfCurrentOperation(); Assert.AreEqual(MigrationOperationTypes.DoNothing, operationDescription2.OperationType, "Operation type is correct."); Assert.AreEqual(testMigrator0.Version, operationDescription2.CurrentVersion, "Current version is correct"); Assert.IsNull(operationDescription2.StartVersion, "Start migration version is correct"); Assert.IsNull(operationDescription2.EndVersion, "End migration version is correct"); migrationManager.ExecuteOperation(); genericData.CloseDatabase(); }
public void ConfigurationCheckFailedTest() { this.CreateConfiguration(); var resourceName = Path.Combine(Path.GetFullPath("."), Guid.NewGuid().ToString("N")); using (var context = this.GetContext()) { var activeConfiguration = context.Configurations.First(r => r.Id == 1); activeConfiguration.Settings.MigratorTemplates.First().Configuration = $@" {{ TestMigrator.DefinedMigrationPoints = [ ""first"", ""second"", ] TestMigrator.Resources = [ ""{resourceName.Replace("\\", "\\\\")}"" ] KlusterKite.NodeManager.Migrators = [ ""KlusterKite.NodeManager.Tests.Migrations.TestMigrator, KlusterKite.NodeManager.Tests"" ] TestMigrator.ThrowOnGetMigratableResources = true }} "; context.SaveChanges(); } try { TestMigrator.SetMigrationPoint(resourceName, "first"); this.ActorOf( () => new MigratorForwarder( this.TestActor, this.Container.Resolve <UniversalContextFactory>(), this.Container.Resolve <IPackageRepository>()), "migrationActor"); this.ExpectMsg <ProcessingTheRequest>(); this.ExpectMsg <MigrationActorInitializationFailed>(TimeSpan.FromSeconds(30)); this.ExpectNoMsg(); } finally { File.Delete(resourceName); } }
public void MigrationUpgradeMigrationFailedTest() { this.CreateConfiguration(); var resourceName = Path.Combine(Path.GetFullPath("."), Guid.NewGuid().ToString("N")); using (var context = this.GetContext()) { var activeConfiguration = context.Configurations.First(r => r.Id == 1); var nextConfiguration = context.Configurations.First(r => r.Id == 2); activeConfiguration.Settings.MigratorTemplates.First().Configuration = $@" {{ TestMigrator.Dir = ""{Path.GetFullPath(".").Replace("\\", "\\\\")}"" TestMigrator.Dependence.DefinedMigrationPoints = [ ""first"" ] TestMigrator.Dependence.Resources = [ ""{resourceName.Replace("\\", "\\\\")}"" ] KlusterKite.NodeManager.Migrators = [ ""KlusterKite.NodeManager.Tests.Migrations.TestMigrator+Dependence, KlusterKite.NodeManager.Tests"" ] }} "; nextConfiguration.Settings.MigratorTemplates.First().Configuration = $@" {{ TestMigrator.Dir = ""{Path.GetFullPath(".").Replace("\\", "\\\\")}"" TestMigrator.Dependence.DefinedMigrationPoints = [ ""first"", ""second"", ] TestMigrator.Dependence.Resources = [ ""{resourceName.Replace("\\", "\\\\")}"" ] KlusterKite.NodeManager.Migrators = [ ""KlusterKite.NodeManager.Tests.Migrations.TestMigrator+Dependence, KlusterKite.NodeManager.Tests"" ] TestMigrator.ThrowOnMigrate = true }} "; context.SaveChanges(); } try { TestMigrator.SetMigrationPoint(resourceName, "first"); this.CreateMigration(); var actor = this.ActorOf( () => new MigratorForwarder( this.TestActor, this.Container.Resolve <UniversalContextFactory>(), this.Container.Resolve <IPackageRepository>()), "migrationActor"); this.ExpectMsg <ProcessingTheRequest>(); var state = this.ExpectMsg <MigrationActorMigrationState>(TimeSpan.FromSeconds(30)); this.ExpectNoMsg(); Assert.Equal(1, state.TemplateStates.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Position); Assert.Equal(1, state.TemplateStates[0].Migrators.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Migrators[0].Position); Assert.Equal(EnMigrationDirection.Upgrade, state.TemplateStates[0].Migrators[0].Direction); Assert.Equal(1, state.TemplateStates[0].Migrators[0].Resources.Count); Assert.Equal(EnResourcePosition.Source, state.TemplateStates[0].Migrators[0].Resources[0].Position); var resourceUpgrade = new ResourceUpgrade { TemplateCode = "migrator", MigratorTypeName = "KlusterKite.NodeManager.Tests.Migrations.TestMigrator+Dependence", ResourceCode = Path.GetFileName(resourceName), Target = EnMigrationSide.Destination }; actor.Tell(new[] { resourceUpgrade }.ToList()); var log = this.ExpectMsg <List <MigrationLogRecord> >(); Assert.Equal(1, log.Count); var record = log.First(); Assert.Equal(EnMigrationLogRecordType.OperationError, record.Type); Assert.Equal(1, record.MigrationId); Assert.Equal(2, record.ConfigurationId); Assert.Equal("migrator", record.MigratorTemplateCode); Assert.Equal("first", record.SourcePoint); Assert.Equal("second", record.DestinationPoint); Assert.Equal("Exception while migrating resource: Migrate failed", record.Message); state = this.ExpectMsg <MigrationActorMigrationState>(TimeSpan.FromSeconds(5)); this.ExpectNoMsg(); Assert.Equal(1, state.TemplateStates.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Position); Assert.Equal(1, state.TemplateStates[0].Migrators.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Migrators[0].Position); Assert.Equal(EnMigrationDirection.Upgrade, state.TemplateStates[0].Migrators[0].Direction); Assert.Equal(1, state.TemplateStates[0].Migrators[0].Resources.Count); Assert.Equal(EnResourcePosition.Source, state.TemplateStates[0].Migrators[0].Resources[0].Position); } finally { File.Delete(resourceName); } }
public void MigrationNoChangeTest() { this.CreateConfiguration(); var resourceName = Path.Combine(Path.GetFullPath("."), Guid.NewGuid().ToString("N")); using (var context = this.GetContext()) { var activeConfiguration = context.Configurations.First(r => r.Id == 1); var nextConfiguration = context.Configurations.First(r => r.Id == 2); nextConfiguration.Settings.MigratorTemplates.First().Configuration = $@" {{ TestMigrator.Dir = ""{Path.GetFullPath(".").Replace("\\", "\\\\")}"" TestMigrator.Dependence.DefinedMigrationPoints = [ ""first"" ] TestMigrator.Dependence.Resources = [ ""{resourceName.Replace("\\", "\\\\")}"" ] KlusterKite.NodeManager.Migrators = [ ""KlusterKite.NodeManager.Tests.Migrations.TestMigrator+Dependence, KlusterKite.NodeManager.Tests"" ] }} "; activeConfiguration.Settings.MigratorTemplates.First().Configuration = $@" {{ TestMigrator.Dir = ""{Path.GetFullPath(".").Replace("\\", "\\\\")}"" TestMigrator.Dependence.DefinedMigrationPoints = [ ""first"", ] TestMigrator.Dependence.Resources = [ ""{resourceName.Replace("\\", "\\\\")}"" ] KlusterKite.NodeManager.Migrators = [ ""KlusterKite.NodeManager.Tests.Migrations.TestMigrator+Dependence, KlusterKite.NodeManager.Tests"" ] }} "; context.SaveChanges(); } try { TestMigrator.SetMigrationPoint(resourceName, "first"); this.CreateMigration(); this.ActorOf( () => new MigratorForwarder( this.TestActor, this.Container.Resolve <UniversalContextFactory>(), this.Container.Resolve <IPackageRepository>()), "migrationActor"); this.ExpectMsg <ProcessingTheRequest>(); var state = this.ExpectMsg <MigrationActorMigrationState>(TimeSpan.FromSeconds(30)); this.ExpectNoMsg(); Assert.Equal(1, state.TemplateStates.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Position); Assert.Equal(1, state.TemplateStates[0].Migrators.Count); Assert.Equal(EnMigratorPosition.Present, state.TemplateStates[0].Migrators[0].Position); Assert.Equal(EnMigrationDirection.Stay, state.TemplateStates[0].Migrators[0].Direction); Assert.Equal(1, state.TemplateStates[0].Migrators[0].Resources.Count); Assert.Equal( EnResourcePosition.SourceAndDestination, state.TemplateStates[0].Migrators[0].Resources[0].Position); } finally { File.Delete(resourceName); } }