示例#1
0
        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();
        }
示例#2
0
        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);
            }
        }