示例#1
0
        public void CorrectlyInitializesADatabaseAndDoesNotSeed()
        {
            string serverName               = @"(localdb)\mssqllocaldb";
            string databaseName             = string.Format("TestContext_{0}", Guid.NewGuid().ToString().Replace("-", string.Empty));
            var    expectedMigrationHistory = new[]
            {
                "201506161504528_InitialCreate"
            };

            var config = new DbDeploymentManagerConfiguration()
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = TestUtils.BuildTestContextTestAssemblyPath(1),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Galen.Ci.EntityFramework.Initialization.CreateSecureSeededDatabaseIfNotExists`2[[Galen.Ci.EntityFramework.Tests.TestContext.Data.TestDbContext, Galen.Ci.EntityFramework.Tests.TestContext], [Galen.Ci.EntityFramework.Tests.TestContext.Data.TestDataSeeder, Galen.Ci.EntityFramework.Tests.TestContext]], Galen.Ci.EntityFramework.Initialization",
                    DisableForcedSeeding = true                     //Disable seeding
                }
            };

            try
            {
                var sut = new DbDeploymentManager(config, new AssemblyLoader(), new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, "Galen.Ci.EntityFramework.Tests.TestContext.Data.Migrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));

                var startingRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

                //Now that we are deployed, let's delete some data and see if the auto-seeding re-adds it
                TestUtils.ExecuteSqlCommand(serverName, databaseName, "DELETE FROM dbo.BasicEntities WHERE ID = 2");
                var postDeleteRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

                Assert.IsTrue(postDeleteRows.Count() == (startingRows.Count() - 1));

                sut = new DbDeploymentManager(config, new AssemblyLoader(), new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var postSeedingRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

                Assert.IsTrue(postSeedingRows.Count() == (startingRows.Count() - 1));

                Assert.AreEqual(1, TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, "Galen.Ci.EntityFramework.Tests.TestContext.Data.Migrations.Configuration"));
            }
            finally
            {
                //Be sure to clean up
                TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
            }
        }
示例#2
0
        public void CorrectlyMigratesUpward()
        {
            string serverName               = @"(localdb)\mssqllocaldb";
            string databaseName             = $"GalenTest_{Guid.NewGuid():N}";
            string deployedAssemblyPath     = TestUtils.BuildTestAssemblyPath(2);
            var    expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer",
            };

            var assemblyLoader = new AssemblyLoader();

            TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

            //Migration v2 to v3
            var config = new DbDeploymentManagerConfiguration()
            {
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(3),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            try
            {
                var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                Assert.AreEqual(1,
                                TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                //Be sure to clean up
                TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
            }
        }
示例#3
0
        public void CorrectlyMigratesDownward()
        {
            string serverName               = @"(localdb)\mssqllocaldb";
            string databaseName             = $"GalenTest_{Guid.NewGuid():N}";
            string deployedAssemblyPath     = TestUtils.BuildTestAssemblyPath(3);
            var    expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
            };

            var assemblyLoader = new AssemblyLoader();

            TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

            //Migration v3 to v1
            var config = new DbDeploymentManagerConfiguration()
            {
                TargetAssemblyPath           = TestUtils.BuildTestAssemblyPath(1),
                DeployedAssemblyOverridePath = deployedAssemblyPath,                    // we didn't initialize using the deployer, so this has to be specified
                Database = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            try
            {
                var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                Assert.AreEqual(1,
                                TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                //Be sure to clean up
                TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
            }
        }
		public void CorrectlyMigratesUpward()
		{
			string serverName = @"(localdb)\mssqllocaldb";
			string databaseName = $"GalenTest_{Guid.NewGuid():N}";
			string deployedAssemblyPath = TestUtils.BuildTestAssemblyPath(2);
			var expectedMigrationHistory = new[]
			{
					"201404181533201_InitialCreate",
					"201404181719410_AddedAddresInfoToCustomer",
					"201404181726158_MoveAddressInformationIntoContactInfo",
					"201404181729406_AddedRowVersionToDomainObjectBase",
					"201404181740359_AddedMultiplePropertiesToCustomer",
			};

			var assemblyLoader = new AssemblyLoader();
			TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

			//Migration v2 to v3
			var config = new DbDeploymentManagerConfiguration()
			{
				TargetAssemblyPath=TestUtils.BuildTestAssemblyPath(3),
				Database=new DatabaseEndpoint { ServerName=serverName, DatabaseName=databaseName },
				MigrationConfig=new MigrationConfigurationInfo
				{
				    Type = "Pinpoint.Test.Data.Migrations.Configuration"
				}
			};

			try
			{
				var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
				sut.Deploy();

			    Assert.AreEqual(1,
			        TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

				Assert.IsNotNull(migrationHistory);
				Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
				Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
			}
			finally
			{
				//Be sure to clean up
				TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
			}
		}
示例#5
0
        public void CorrectlyMigratesDownwardPastInitialMigration()
        {
            string serverName           = @"(localdb)\mssqllocaldb";
            string databaseName         = $"GalenTest_{Guid.NewGuid():N}";
            string deployedAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

            var assemblyLoader = new AssemblyLoader();

            TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);
            TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.AnotherTestContext", serverName, databaseName);

            //Migration v3 to v1
            var config = new DbDeploymentManagerConfiguration()
            {
                TargetAssemblyPath           = TestUtils.BuildTestAssemblyPath(1),
                DeployedAssemblyOverridePath = deployedAssemblyPath,                    // we didn't initialize using the deployer so this is required
                Database = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration"
                }
            };

            try
            {
                var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                Assert.AreEqual(1,
                                TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                //We expect all schema related to AnotherTestContext would be deleted
                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(0, migrationHistory.Count());
            }
            finally
            {
                //Be sure to clean up
                TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
            }
        }
		public void CorrectlyInitializesADatabaseAndDoesNotSeed()
		{
			string serverName = @"(localdb)\mssqllocaldb";
			string databaseName = string.Format("TestContext_{0}", Guid.NewGuid().ToString().Replace("-", string.Empty));
			var expectedMigrationHistory = new[]
			{
					"201506161504528_InitialCreate"
			};

			var config = new DbDeploymentManagerConfiguration()
			{
				Mode=DeploymentMode.InitializeOnly,
				TargetAssemblyPath=TestUtils.BuildTestContextTestAssemblyPath(1),
				Database=new DatabaseEndpoint { ServerName=serverName, DatabaseName=databaseName },
				InitializationConfig=new InitializerConfigurationInfo
				{
					Type = "Galen.Ci.EntityFramework.Initialization.CreateSecureSeededDatabaseIfNotExists`2[[Galen.Ci.EntityFramework.Tests.TestContext.Data.TestDbContext, Galen.Ci.EntityFramework.Tests.TestContext], [Galen.Ci.EntityFramework.Tests.TestContext.Data.TestDataSeeder, Galen.Ci.EntityFramework.Tests.TestContext]], Galen.Ci.EntityFramework.Initialization",
					DisableForcedSeeding = true //Disable seeding
				}
			};

			try
			{
				var sut = new DbDeploymentManager(config, new AssemblyLoader(), new SqlClientDbConnectionInfoBuilder());
				sut.Deploy();

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, "Galen.Ci.EntityFramework.Tests.TestContext.Data.Migrations.Configuration");

				Assert.IsNotNull(migrationHistory);
				Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
				Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));

				var startingRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

				//Now that we are deployed, let's delete some data and see if the auto-seeding re-adds it
				TestUtils.ExecuteSqlCommand(serverName, databaseName, "DELETE FROM dbo.BasicEntities WHERE ID = 2");
				var postDeleteRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

				Assert.IsTrue(postDeleteRows.Count()==(startingRows.Count()-1));

				sut=new DbDeploymentManager(config, new AssemblyLoader(), new SqlClientDbConnectionInfoBuilder());
				sut.Deploy();

				var postSeedingRows = TestUtils.GetRows(serverName, databaseName, "dbo.BasicEntities");

				Assert.IsTrue(postSeedingRows.Count()==(startingRows.Count()-1));

                Assert.AreEqual(1, TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, "Galen.Ci.EntityFramework.Tests.TestContext.Data.Migrations.Configuration"));
			}
			finally
			{
				//Be sure to clean up
				TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
			}
		}
		public void CorrectlyMigratesDownward()
		{
			string serverName = @"(localdb)\mssqllocaldb";
			string databaseName = $"GalenTest_{Guid.NewGuid():N}";
			string deployedAssemblyPath = TestUtils.BuildTestAssemblyPath(3);
			var expectedMigrationHistory = new[]
			{
				"201404181533201_InitialCreate",
				"201404181719410_AddedAddresInfoToCustomer",
			};

			var assemblyLoader = new AssemblyLoader();
			TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

			//Migration v3 to v1
			var config = new DbDeploymentManagerConfiguration()
			{
				TargetAssemblyPath=TestUtils.BuildTestAssemblyPath(1),
				DeployedAssemblyOverridePath=deployedAssemblyPath,      // we didn't initialize using the deployer, so this has to be specified
				Database=new DatabaseEndpoint { ServerName=serverName, DatabaseName=databaseName },
				MigrationConfig=new MigrationConfigurationInfo
					{
				    Type = "Pinpoint.Test.Data.Migrations.Configuration"
					}
			};

			try
			{
				var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
				sut.Deploy();

			    Assert.AreEqual(1,
			        TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

				Assert.IsNotNull(migrationHistory);
				Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
				Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
			}
			finally
			{
				//Be sure to clean up
				TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
			}
		}
        public void NoOpWhenInitializingOrMigratingToCurrentDeployedVersion()
        {
            const string serverName = @"(localdb)\mssqllocaldb";
            var databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            var currentAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

            // start at v3 - (this creates deployment history)
            var initializeOrMigrateConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOrMigrate,
                TargetAssemblyPath = currentAssemblyPath,
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            var expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initializeOrMigrateConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initializeOrMigrateConfig.Database.ServerName,
                    initializeOrMigrateConfig.Database.DatabaseName);

                throw;
            }

            try
            {
                // run another InitializeOrMigrate to the same version as what is deployed
                // (this is a close representation of how our release management works)
                var sut = new DbDeploymentManager(
                    initializeOrMigrateConfig,      // <-- reuse; same as before, nothing has changed
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // nothing should be different in deployment history
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                // nothing should be different in migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(initializeOrMigrateConfig.Database.ServerName, initializeOrMigrateConfig.Database.DatabaseName);
            }
        }
	    public void NoOpInitializationWhenInitializingToCurrentDeployedVersion()
	    {
            const string serverName = @"(localdb)\mssqllocaldb";
            var databaseName = $"GalenTest_{Guid.NewGuid():N}";

            string currentAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

            var assemblyLoader = new AssemblyLoader();
            TestUtils.InitializeDatabase(assemblyLoader, currentAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

            var initializeConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = currentAssemblyPath,      // use the current version as the target
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initializeConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // we expect no changes to migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));

                // no new deployment history should be created because no initialization nor migration should have occurred
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");
                Assert.AreEqual(0, actualDeploymentHistoryRowCount);
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(initializeConfig.Database.ServerName, initializeConfig.Database.DatabaseName);
            }
        }
	    public void NoOpMigrationWhenMigratingDownwardPastInitialMigrationUsingDeploymentHistoryWithoutAnOverride()
	    {
            const string serverName = @"(localdb)\mssqllocaldb";
            var databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            // start by initializing to v3
            var initialDeploymentConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(3),
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.AnotherTestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedInitialMigrationHistory = new[]
            {
                "201404181743108_InitialCreate"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initialDeploymentConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initialDeploymentConfig.Database.ServerName,
                    initialDeploymentConfig.Database.DatabaseName);

                throw;
            }

            // attempt to migrate downward from v3 past initial create using Deployment History
            // without specifying a deployed assembly override
            var downwardMigrationConfig = new DbDeploymentManagerConfiguration
            {
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(1),
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration"
                }
            };

            try
            {
                var sut = new DbDeploymentManager(
                    downwardMigrationConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // we expect no changes to migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName, 
                    databaseName, 
                    downwardMigrationConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));

                // no new deployment history should be created because no migration should have occurred
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(downwardMigrationConfig.Database.ServerName, downwardMigrationConfig.Database.DatabaseName);
            }
        }
		public void CorrectlyMigratesDownwardPastInitialMigration()
		{
			string serverName = @"(localdb)\mssqllocaldb";
			string databaseName = $"GalenTest_{Guid.NewGuid():N}";
			string deployedAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

			var assemblyLoader = new AssemblyLoader();
			TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);
			TestUtils.InitializeDatabase(assemblyLoader, deployedAssemblyPath, "Pinpoint.Test.Data.AnotherTestContext", serverName, databaseName);

			//Migration v3 to v1
			var config = new DbDeploymentManagerConfiguration()
			{
				TargetAssemblyPath=TestUtils.BuildTestAssemblyPath(1),
				DeployedAssemblyOverridePath=deployedAssemblyPath,      // we didn't initialize using the deployer so this is required
				Database=new DatabaseEndpoint { ServerName=serverName, DatabaseName=databaseName },
				MigrationConfig=new MigrationConfigurationInfo
				{
				    Type = "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration"
				}
			};

			try
			{
				var sut = new DbDeploymentManager(config, assemblyLoader, new SqlClientDbConnectionInfoBuilder());
				sut.Deploy();

			    Assert.AreEqual(1,
			        TestUtils.GetDeploymentHistoryRowCount(serverName, databaseName, config.MigrationConfig.Type));

                //We expect all schema related to AnotherTestContext would be deleted
                var migrationHistory = TestUtils.GetMigrationHistory(serverName, databaseName, config.MigrationConfig.Type);

				Assert.IsNotNull(migrationHistory);
				Assert.AreEqual(0, migrationHistory.Count());
			}
			finally
			{
				//Be sure to clean up
				TestUtils.DropDatabase(config.Database.ServerName, config.Database.DatabaseName);
			}
		}
        public void CorrectlyMigratesDownwardUsingDeploymentHistoryCreatedByInitialization()
        {
            const string serverName = @"(localdb)\mssqllocaldb";
            var databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            // start by initialization to v3
            var initialDeploymentConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(3),
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedInitialMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initialDeploymentConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initialDeploymentConfig.Database.ServerName,
                    initialDeploymentConfig.Database.DatabaseName);

                throw;
            }

            // migrate downward from v3 to v1 using Deployment History
            var downwardMigrationConfig = new DbDeploymentManagerConfiguration
            {
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(1),
                Database = new DatabaseEndpoint { ServerName = serverName, DatabaseName = databaseName },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            var expectedDownwardMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
            };

            try
            {
                var sut = new DbDeploymentManager(
                    downwardMigrationConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    downwardMigrationConfig.MigrationConfig.Type);
                Assert.AreEqual(2, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    downwardMigrationConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedDownwardMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedDownwardMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(downwardMigrationConfig.Database.ServerName, downwardMigrationConfig.Database.DatabaseName);
            }
        }
示例#13
0
        public void NoOpWhenInitializingOrMigratingToCurrentDeployedVersion()
        {
            const string serverName   = @"(localdb)\mssqllocaldb";
            var          databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            var currentAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

            // start at v3 - (this creates deployment history)
            var initializeOrMigrateConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOrMigrate,
                TargetAssemblyPath = currentAssemblyPath,
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            var expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initializeOrMigrateConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initializeOrMigrateConfig.Database.ServerName,
                    initializeOrMigrateConfig.Database.DatabaseName);

                throw;
            }

            try
            {
                // run another InitializeOrMigrate to the same version as what is deployed
                // (this is a close representation of how our release management works)
                var sut = new DbDeploymentManager(
                    initializeOrMigrateConfig,      // <-- reuse; same as before, nothing has changed
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // nothing should be different in deployment history
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                // nothing should be different in migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    initializeOrMigrateConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(initializeOrMigrateConfig.Database.ServerName, initializeOrMigrateConfig.Database.DatabaseName);
            }
        }
示例#14
0
        public void NoOpInitializationWhenInitializingToCurrentDeployedVersion()
        {
            const string serverName   = @"(localdb)\mssqllocaldb";
            var          databaseName = $"GalenTest_{Guid.NewGuid():N}";

            string currentAssemblyPath = TestUtils.BuildTestAssemblyPath(3);

            var assemblyLoader = new AssemblyLoader();

            TestUtils.InitializeDatabase(assemblyLoader, currentAssemblyPath, "Pinpoint.Test.Data.TestContext", serverName, databaseName);

            var initializeConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = currentAssemblyPath,      // use the current version as the target
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initializeConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // we expect no changes to migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedMigrationHistory.SequenceEqual(migrationHistory));

                // no new deployment history should be created because no initialization nor migration should have occurred
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");
                Assert.AreEqual(0, actualDeploymentHistoryRowCount);
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(initializeConfig.Database.ServerName, initializeConfig.Database.DatabaseName);
            }
        }
示例#15
0
        public void NoOpMigrationWhenMigratingDownwardPastInitialMigrationUsingDeploymentHistoryWithoutAnOverride()
        {
            const string serverName   = @"(localdb)\mssqllocaldb";
            var          databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            // start by initializing to v3
            var initialDeploymentConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(3),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.AnotherTestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedInitialMigrationHistory = new[]
            {
                "201404181743108_InitialCreate"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initialDeploymentConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initialDeploymentConfig.Database.ServerName,
                    initialDeploymentConfig.Database.DatabaseName);

                throw;
            }

            // attempt to migrate downward from v3 past initial create using Deployment History
            // without specifying a deployed assembly override
            var downwardMigrationConfig = new DbDeploymentManagerConfiguration
            {
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(1),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration"
                }
            };

            try
            {
                var sut = new DbDeploymentManager(
                    downwardMigrationConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                // we expect no changes to migration history
                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    downwardMigrationConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));

                // no new deployment history should be created because no migration should have occurred
                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.AnotherTestContextMigrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(downwardMigrationConfig.Database.ServerName, downwardMigrationConfig.Database.DatabaseName);
            }
        }
示例#16
0
        public void CorrectlyMigratesDownwardUsingDeploymentHistoryCreatedByInitialization()
        {
            const string serverName   = @"(localdb)\mssqllocaldb";
            var          databaseName = $"GalenTest_{Guid.NewGuid():N}";

            var assemblyLoader = new AssemblyLoader();

            // start by initialization to v3
            var initialDeploymentConfig = new DbDeploymentManagerConfiguration
            {
                Mode = DeploymentMode.InitializeOnly,
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(3),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                InitializationConfig = new InitializerConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Initializers.TestContextCreateDatabaseIfNotExists"
                }
            };

            var expectedInitialMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
                "201404181726158_MoveAddressInformationIntoContactInfo",
                "201404181729406_AddedRowVersionToDomainObjectBase",
                "201404181740359_AddedMultiplePropertiesToCustomer"
            };

            try
            {
                var sut = new DbDeploymentManager(
                    initialDeploymentConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");
                Assert.AreEqual(1, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    "Pinpoint.Test.Data.Migrations.Configuration");

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedInitialMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedInitialMigrationHistory.SequenceEqual(migrationHistory));
            }
            catch
            {
                // clean up if there was a problem
                TestUtils.DropDatabase(
                    initialDeploymentConfig.Database.ServerName,
                    initialDeploymentConfig.Database.DatabaseName);

                throw;
            }

            // migrate downward from v3 to v1 using Deployment History
            var downwardMigrationConfig = new DbDeploymentManagerConfiguration
            {
                TargetAssemblyPath = TestUtils.BuildTestAssemblyPath(1),
                Database           = new DatabaseEndpoint {
                    ServerName = serverName, DatabaseName = databaseName
                },
                MigrationConfig = new MigrationConfigurationInfo
                {
                    Type = "Pinpoint.Test.Data.Migrations.Configuration"
                }
            };

            var expectedDownwardMigrationHistory = new[]
            {
                "201404181533201_InitialCreate",
                "201404181719410_AddedAddresInfoToCustomer",
            };

            try
            {
                var sut = new DbDeploymentManager(
                    downwardMigrationConfig,
                    assemblyLoader,
                    new SqlClientDbConnectionInfoBuilder());
                sut.Deploy();

                var actualDeploymentHistoryRowCount = TestUtils.GetDeploymentHistoryRowCount(
                    serverName,
                    databaseName,
                    downwardMigrationConfig.MigrationConfig.Type);
                Assert.AreEqual(2, actualDeploymentHistoryRowCount);

                var migrationHistory = TestUtils.GetMigrationHistory(
                    serverName,
                    databaseName,
                    downwardMigrationConfig.MigrationConfig.Type);

                Assert.IsNotNull(migrationHistory);
                Assert.AreEqual(expectedDownwardMigrationHistory.Length, migrationHistory.Count());
                Assert.IsTrue(expectedDownwardMigrationHistory.SequenceEqual(migrationHistory));
            }
            finally
            {
                // be sure to clean up
                TestUtils.DropDatabase(downwardMigrationConfig.Database.ServerName, downwardMigrationConfig.Database.DatabaseName);
            }
        }