Example #1
0
        public void TestGapsAreFound()
        {
            var migration = A.Fake <IMigration>();

            ImportedMigration[] importedMigrations =
            {
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null), false),
                new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null), false),
                new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null), false),
            };
            IMigrationMetadata[] executedMigrations =
            {
                new MigrationMetadata(1, DefaultModuleName, null),
                new MigrationMetadata(3, DefaultModuleName, null),
            };

            var selector = new MigrationSelector(importedMigrations, executedMigrations);

            IEnumerable <ApplicableMigration> applicableMigrations;
            IEnumerable <IMigrationMetadata>  unidentifiedMigrations;

            selector.GetMigrationsTo(long.MaxValue, m => true, out applicableMigrations, out unidentifiedMigrations);

            Assert.AreEqual(1, applicableMigrations.Count());
            Assert.AreEqual(2, applicableMigrations.First().Migration.Metadata.Timestamp);
            Assert.AreEqual(MigrationDirection.Up, applicableMigrations.First().Direction);
            CollectionAssert.IsEmpty(unidentifiedMigrations);
        }
        public void TestReverting()
        {
            var migration = MockRepository.GenerateStub <IReversibleMigration>();

            ImportedMigration[] importedMigrations =
            {
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)),
                new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null)),
                new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null)),
            };
            IMigrationMetadata[] executedMigrations =
            {
                new MigrationMetadata(1, DefaultModuleName, null),
                new MigrationMetadata(2, DefaultModuleName, null),
                new MigrationMetadata(3, DefaultModuleName, null),
            };

            var selector = new MigrationSelector(importedMigrations, executedMigrations);

            IEnumerable <ApplicableMigration> applicableMigrations;
            IEnumerable <IMigrationMetadata>  unidentifiedMigrations;

            selector.GetMigrationsTo(2, s => true, out applicableMigrations, out unidentifiedMigrations);

            Assert.AreEqual(1, applicableMigrations.Count());
            Assert.AreEqual(3, applicableMigrations.First().Metadata.Timestamp);
            Assert.AreEqual(MigrationDirection.Down, applicableMigrations.First().Metadata.Direction);
            CollectionAssert.IsEmpty(unidentifiedMigrations);
        }
Example #3
0
        private IMigrationBatch FetchMigrationsTo(ComposablePartCatalog catalog, long timestamp)
        {
            // import all migrations
            DateTime start = DateTime.Now;
            var      timestampProviders = InitializeTimestampProviders(catalog, _options.ModuleSelector);
            IEnumerable <ImportedMigration> availableMigrations = ImportAllMigrations(catalog, timestampProviders);

            Log.Verbose(LogCategory.Performance, "Importing migrations took {0}s", (DateTime.Now - start).TotalSeconds);

            // initialize command execution/scripting dispatching
            ISqlDispatcher dispatcher = new SqlDispatcher(_options.ScriptingOptions, _provider, _providerMetadata);

            // initialize versioning component and get executed migrations
            IVersioning versioning         = InitializeVersioning(catalog, dispatcher);
            var         executedMigrations = new List <IMigrationMetadata>(versioning.ExecutedMigrations);

            // create migration batch
            var migrationSelector = new MigrationSelector(availableMigrations, executedMigrations);
            IEnumerable <ApplicableMigration> applicableMigrations;
            IEnumerable <IMigrationMetadata>  unidentifiedMigrations;

            migrationSelector.GetMigrationsTo(timestamp, _options.ModuleSelector, out applicableMigrations, out unidentifiedMigrations);
            return(new MigrationBatch(
// ReSharper disable RedundantEnumerableCastCall
                       applicableMigrations.Select(m => new MigrationStep(m.Implementation, m.Metadata, _connectionInfo, _provider, _providerMetadata, _dbConnectionFactory, dispatcher)).Cast <IMigrationStep>(),
// ReSharper restore RedundantEnumerableCastCall
                       unidentifiedMigrations,
                       versioning,
                       _options));
        }
Example #4
0
        private static void MigrateAssembly(string connectionString, Assembly assembly)
        {
            var migrationSelector = new MigrationSelector(connectionString);
            var migrator          = new Migrator(connectionString, DbPlatform.SqlServer2014, new MigrationOptions
            {
                MigrationSelector = migrationSelector.Select
            });

            Console.WriteLine($"Updating to latest db version, assembly: {assembly.GetName().Name}");
            var migrations = migrator.FetchMigrations(assembly);

            Console.WriteLine($"{migrations.Steps.Count} pending migrations");
            migrator.MigrateAll(assembly);
            Console.WriteLine("Done");
        }
        public void TestDuplicateMigrationsThrowInvalidMigrationException()
        {
            var migration = MockRepository.GenerateStub <IMigration>();

            ImportedMigration[] importedMigrations =
            {
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)),
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)),
            };
            IMigrationMetadata[] executedMigrations =
            {
            };

            var selector = new MigrationSelector(importedMigrations, executedMigrations);

            Assert.IsNotNull(selector, "Just to satisfy R# and FxCop.");
        }
        public void TestRevertingThrowsWhenImpossible()
        {
            var migration = MockRepository.GenerateStub <IMigration>();

            ImportedMigration[] importedMigrations =
            {
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)),
                new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null)),
                new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null)),
            };
            IMigrationMetadata[] executedMigrations =
            {
                new MigrationMetadata(1, DefaultModuleName, null),
                new MigrationMetadata(2, DefaultModuleName, null),
                new MigrationMetadata(3, DefaultModuleName, null),
            };

            var selector = new MigrationSelector(importedMigrations, executedMigrations);

            IEnumerable <ApplicableMigration> applicableMigrations;
            IEnumerable <IMigrationMetadata>  unidentifiedMigrations;

            selector.GetMigrationsTo(2, s => true, out applicableMigrations, out unidentifiedMigrations);
        }
Example #7
0
        public void TestRevertingThrowsWhenImpossible()
        {
            var migration = A.Fake <IMigration>();

            ImportedMigration[] importedMigrations =
            {
                new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null), false),
                new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null), false),
                new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null), false),
            };
            IMigrationMetadata[] executedMigrations =
            {
                new MigrationMetadata(1, DefaultModuleName, null),
                new MigrationMetadata(2, DefaultModuleName, null),
                new MigrationMetadata(3, DefaultModuleName, null),
            };

            var selector = new MigrationSelector(importedMigrations, executedMigrations);

            IEnumerable <ApplicableMigration> applicableMigrations;
            IEnumerable <IMigrationMetadata>  unidentifiedMigrations;

            Assert.Throws <IrreversibleMigrationException>(() => selector.GetMigrationsTo(2, m => true, out applicableMigrations, out unidentifiedMigrations));
        }