Beispiel #1
0
        public async Task UpgradeToLatestAvailableVersionTest()
        {
            var settings      = new UpgradeSettings();
            var verCollection = _database.GetCollection <DbVersion>(settings.VersionCollectionName);
            await _database.DropCollectionAsync(settings.VersionCollectionName);

            var dbLock  = new MongoDbLock(_settings, _database);
            var tracker = new MongoMigrationTracker(_settings, _database);

            //Step2: Apply upgrade chain
            var upgrades = new MigrationChain(new List <IUpgradeLink>
            {
                new UpgradeStub("0.0", "0.1"),
                new UpgradeStub("0.1", "0.2"),
                new UpgradeStub("0.2", "0.3"),
            });

            var upgrader = new MongoMigrator(
                _database,
                upgrades,
                new UpgradeStub(null, "0.0"),
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());
            await upgrader.UpgradeOrInit();

            var ver = (await verCollection.FindAsync(e => true)).First();

            Assert.AreEqual(Version.Parse("0.3"), ver.Version, "After init, DB should marked with the latest version");
            Assert.IsTrue(ver.AutoUpgradeEnabled);
        }
Beispiel #2
0
        public async Task InitToTheLastVersionTest()
        {
            var settings      = new UpgradeSettings();
            var verCollection = _database.GetCollection <DbVersion>(settings.VersionCollectionName);
            await _database.DropCollectionAsync(settings.VersionCollectionName);

            var dbLock   = new MongoDbLock(_settings, _database);
            var tracker  = new MongoMigrationTracker(_settings, _database);
            var upgrades = new MigrationChain(new List <IUpgradeLink>
            {
                new UpgradeStub("0.0", "0.1"),
                new UpgradeStub("0.1", "0.2"),
                new UpgradeStub("0.2", "0.3"),
            });
            var upgrader = new MongoMigrator(
                _database,
                upgrades,
                null,
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());

            await upgrader.UpgradeOrInit();

            var ver = (await verCollection.FindAsync(e => true)).First();

            Assert.AreEqual(Version.Parse("0.3"), ver.Version);
            Assert.IsTrue(ver.AutoUpgradeEnabled);
            Assert.IsNull(ver.LastUpgradeError);
        }
Beispiel #3
0
        public async Task InitFailTest()
        {
            var settings      = new UpgradeSettings();
            var verCollection = _database.GetCollection <DbVersion>(settings.VersionCollectionName);
            await _database.DropCollectionAsync(settings.VersionCollectionName);

            var dbLock   = new MongoDbLock(_settings, _database);
            var tracker  = new MongoMigrationTracker(_settings, _database);
            var upgrades = new MigrationChain(new List <IUpgradeLink>
            {
                new UpgradeStub("0.0", "0.1"),
                new UpgradeStub("0.1", "0.2"),
                new UpgradeStub("0.2", "0.3"),
            });
            var upgrader = new MongoMigrator(
                _database,
                upgrades,
                new UpgradeStub(null, "0.0", (s, db, log) => throw new Exception("test init failed")),
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());

            var ex = Assert.ThrowsAsync <MigrationException>(upgrader.UpgradeOrInit);

            Assert.IsNotNull(ex.InnerException);
            Assert.AreEqual("test init failed", ex.InnerException?.Message);

            var ver = (await verCollection.FindAsync(e => true)).First();

            Assert.IsNull(ver.Version);
            Assert.IsFalse(ver.AutoUpgradeEnabled);
            Assert.IsNotNull(ver.LastUpgradeError);
            Assert.IsTrue(ver.LastUpgradeError.Contains("test init failed"));
        }
Beispiel #4
0
        public async Task EmptyUpgradeListTest()
        {
            var settings      = new UpgradeSettings();
            var verCollection = _database.GetCollection <DbVersion>(settings.VersionCollectionName);
            await _database.DropCollectionAsync(settings.VersionCollectionName);

            var dbLock  = new MongoDbLock(_settings, _database);
            var tracker = new MongoMigrationTracker(_settings, _database);

            var upgrader = new MongoMigrator(
                _database,
                new MigrationChain(null),
                null,
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());

            await upgrader.UpgradeOrInit();

            var ver = (await verCollection.FindAsync(e => true)).First();

            Assert.IsNull(ver.Version);
            Assert.IsTrue(ver.AutoUpgradeEnabled);
        }
Beispiel #5
0
        public async Task UpgradeWithDifferentVerCollectionNameTest()
        {
            var settings = new UpgradeSettings {
                VersionCollectionName = "testtestete"
            };
            var verCollection = _database.GetCollection <DbVersion>(settings.VersionCollectionName);
            await _database.DropCollectionAsync(settings.VersionCollectionName);

            var dbLock  = new MongoDbLock(settings, _database);
            var tracker = new MongoMigrationTracker(settings, _database);

            //Step1: init db
            var upgrader = new MongoMigrator(
                _database,
                new MigrationChain(null),
                new UpgradeStub(null, "0.0"),
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());
            await upgrader.UpgradeOrInit();

            var ver = (await verCollection.FindAsync(e => true)).First();

            Assert.AreEqual(Version.Parse("0.0"), ver.Version);

            //Step2: Apply upgrade chain
            var upgrades = new MigrationChain(new List <IUpgradeLink>
            {
                new UpgradeStub("0.0", "0.1"),
                new UpgradeStub("0.1", "0.2"),
                new UpgradeStub("0.2", "0.3"),
            });

            upgrader = new MongoMigrator(
                _database,
                upgrades,
                new UpgradeStub(null, "0.0", (s, db, log) => throw new Exception("test init failed")),
                settings,
                dbLock,
                tracker,
                new NullLoggerFactory());
            await upgrader.UpgradeOrInit();

            ver = (await verCollection.FindAsync(e => true)).First();
            Assert.AreEqual(Version.Parse("0.3"), ver.Version);
            Assert.IsTrue(ver.AutoUpgradeEnabled);
        }