public async Task Migrations_in_a_race_do_not_throw()
        {
            InitializeDatabase <MigrationsTestEventStore>();

            var columnName = Any.CamelCaseName(3);
            var barrier    = new Barrier(2);

            var migrator = new AnonymousMigrator(c =>
            {
                c.Execute(string.Format(@"alter table [eventstore].[events] add {0} nvarchar(50) null", columnName));
                barrier.SignalAndWait(10000);
            }, version);

            var task1 = Task.Run(() => InitializeDatabase <MigrationsTestEventStore>(migrator));
            var task2 = Task.Run(() => InitializeDatabase <MigrationsTestEventStore>(migrator));

            await Task.WhenAll(task1, task2);

            using (var context = new MigrationsTestEventStore())
            {
                var result = context.QueryDynamic(
                    @"SELECT * FROM sys.columns WHERE name='@columnName'",
                    new Dictionary <string, object> {
                    { "columnName", columnName }
                }).Single();
                result.Should().BeEmpty();
            }
        }
        public void Migrations_are_not_run_more_than_once()
        {
            var callCount = 0;
            var migrator  = new AnonymousMigrator(c => { callCount++; }, version);

            InitializeDatabase <MigrationsTestEventStore>(migrator);
            InitializeDatabase <MigrationsTestEventStore>(migrator);

            callCount.Should().Be(1);
        }
        public void When_a_migration_signals_that_it_was_not_applied_then_no_record_is_created_in_the_migrations_table()
        {
            var migrator = new AnonymousMigrator(c => new MigrationResult
            {
                MigrationWasApplied = false
            }, version);

            InitializeDatabase <MigrationsTestEventStore>(migrator);

            GetAppliedVersions <MigrationsTestEventStore>()
            .Should().NotContain(v => v == version.ToString());
        }
示例#4
0
        public void Migrations_run_in_the_specified_order()
        {
            var calls = new List <string>();

            var first = new AnonymousMigrator(c => { calls.Add("first"); },
                                              new Version(version.Major, version.Minor, version.Build, 1));
            var second = new AnonymousMigrator(c => { calls.Add("second"); },
                                               new Version(version.Major, version.Minor, version.Build, 2));

            InitializeDatabase <MigrationsTestEventStore>(second, first);

            calls.Should().ContainInOrder("first", "second");
        }
        public void A_migration_with_an_earlier_version_number_can_be_applied_later_if_they_have_different_scopes()
        {
            var higherVersion = new AnonymousMigrator(
                c => { },
                new Version(version.Major, version.Minor, version.Build, 2),
                "Scope1");
            var lowerVersion = new AnonymousMigrator(
                c => { },
                new Version(version.Major, version.Minor, version.Build),
                "Scope2");

            InitializeDatabase <MigrationsTestEventStore>(higherVersion);
            InitializeDatabase <MigrationsTestEventStore>(lowerVersion);

            var appliedMigrations = GetAppliedVersions <MigrationsTestEventStore>();

            appliedMigrations.Should().Contain(m => m == version + ".2");
            appliedMigrations.Should().Contain(m => m == version.ToString());
        }