예제 #1
0
        public void Before()
        {
            _runner = MongoDbRunner.Start();
            _client = new MongoClient(_runner.ConnectionString);
            _db     = new MongoDatabase(_client);

            MongoMigrationClient.Initialize(_client, new MongoMigrationSettings {
                Database         = Names.Database,
                ConnectionString = _runner.ConnectionString
            });
        }
        public void When_inizialize_twice_Then_throw_exception()
        {
            // Arrange
            var registry       = Substitute.For <IComponentRegistry>();
            var mongoMigration = Substitute.For <IMongoMigration>();

            registry.Get <IMongoMigration>().Returns(mongoMigration);

            // Act
            MongoMigrationClient.Initialize(registry);

            Action comparison = () => MongoMigrationClient.Initialize(registry);

            // Assert
            comparison.Should().Throw <AlreadyInitializedException>();
        }
예제 #3
0
        static void Main(string[] args)
        {
            // Init MongoDB
            var runner = MongoDbRunner.StartForDebugging();
            var client = new MongoClient(runner.ConnectionString);

            client.GetDatabase("TestCars").DropCollection("Car");
            client.GetDatabase("TestCars").DropCollection("_migrations");
            client.GetDatabase("TestCars").DropCollection(nameof(SparePart));

            // Init MongoMigration
            MongoMigrationClient.Initialize(
                client,
                new MongoMigrationSettings()
            {
                ConnectionString = runner.ConnectionString,
                Database         = "TestCars"
            },
                new LightInjectAdapter(new LightInject.ServiceContainer()));

            Console.WriteLine("Apply database migrations: ");
            Console.WriteLine("\n");

            var migrationsCollection = client.GetDatabase("TestCars").GetCollection <BsonDocument>("_migrations");
            var migrations           = migrationsCollection.FindAsync(_ => true).Result.ToListAsync().Result;

            migrations.ForEach(r => Console.WriteLine(r + "\n"));

            var carsCollection   = client.GetDatabase("TestCars").GetCollection <Car>("Car");
            var addedInMigration = carsCollection.FindAsync(Builders <Car> .Filter.Eq(c => c.Type, "AddedInMigration")).Result.FirstOrDefault();

            Console.WriteLine("New Car was added and updated in database migrations: ");
            Console.WriteLine(addedInMigration?.ToBsonDocument() + "\n");

            Console.WriteLine("New collection was added in database: ");
            Console.WriteLine(nameof(SparePart) + "\n");

            Console.WriteLine("\n");
            Console.WriteLine("Press any Key to exit...");
            Console.Read();

            client.GetDatabase("TestCars").DropCollection("Car");
            client.GetDatabase("TestCars").DropCollection("_migrations");
        }
예제 #4
0
        private static void Main(string[] args)
        {
            // Arrange
            // Worm up MongoCache
            ClearCollection();
            AddDocumentsToCache();
            ClearCollection();

            // Act
            // Measure time of MongoDb processing without Mongo.Migration
            var sw = new Stopwatch();

            sw.Start();
            InsertMany(DOCUMENT_COUNT, false);
            MigrateAll(false);
            sw.Stop();

            ClearCollection();

            // Measure time of MongoDb processing without Mongo.Migration
            MongoMigrationClient.Initialize(_client, new MongoMigrationSettings());

            var swWithMigration = new Stopwatch();

            swWithMigration.Start();
            InsertMany(DOCUMENT_COUNT, true);
            MigrateAll(true);
            swWithMigration.Stop();

            ClearCollection();

            var result = swWithMigration.ElapsedMilliseconds - sw.ElapsedMilliseconds;

            System.Console.WriteLine(
                $"MongoDB: {sw.ElapsedMilliseconds}ms, Mongo.Migration: {swWithMigration.ElapsedMilliseconds}ms, Diff: {result}ms (Tolerance: {TOLERANCE_MS}ms), Documents: {DOCUMENT_COUNT}, Migrations per Document: 2");

            System.Console.ReadLine();
        }
예제 #5
0
        public void When_migrating_number_of_documents()
        {
            // Arrange
            // Worm up MongoCache
            ClearCollection();
            AddDocumentsToCache();
            ClearCollection();

            // Act
            // Measure time of MongoDb processing without Mongo.Migration
            InsertMany(DOCUMENT_COUNT, false);
            var sw = new Stopwatch();

            sw.Start();
            MigrateAll(false);
            sw.Stop();

            ClearCollection();

            // Measure time of MongoDb processing without Mongo.Migration
            InsertMany(DOCUMENT_COUNT, true);
            var swWithMigration = new Stopwatch();

            swWithMigration.Start();
            MongoMigrationClient.Initialize(_client);
            swWithMigration.Stop();

            ClearCollection();

            var result = swWithMigration.ElapsedMilliseconds - sw.ElapsedMilliseconds;

            Console.WriteLine(
                $"MongoDB: {sw.ElapsedMilliseconds}ms, Mongo.Migration: {swWithMigration.ElapsedMilliseconds}ms, Diff: {result}ms (Tolerance: {TOLERANCE_MS}ms), Documents: {DOCUMENT_COUNT}, Migrations per Document: 2");

            // Assert
            result.Should().BeLessThan(TOLERANCE_MS);
        }
예제 #6
0
        static void Main(string[] args)
        {
            var testsDb       = "tests-db";
            var carCollection = "Car";
            // Init MongoDB
            var runner = MongoDbRunner.StartForDebugging();
            var client = new MongoClient(runner.ConnectionString);

            client.GetDatabase(testsDb).DropCollection(carCollection);

            // Insert old and new version of cars into MongoDB
            var cars = new List <BsonDocument>
            {
                new BsonDocument {
                    { "Dors", 3 }, { "Type", "Cabrio" }, { "UnnecessaryField", "" }
                },
                new BsonDocument {
                    { "Dors", 5 }, { "Type", "Combi" }, { "UnnecessaryField", "" }
                },
                new BsonDocument {
                    { "Doors", 3 }, { "Type", "Truck" }, { "UnnecessaryField", "" }, { "Version", "0.0.1" }
                },
                new BsonDocument {
                    { "Doors", 5 }, { "Type", "Van" }, { "Version", "0.1.1" }
                }
            };

            var bsonCollection =
                client.GetDatabase(testsDb).GetCollection <BsonDocument>(carCollection);

            bsonCollection.InsertManyAsync(cars).Wait();


            // Init MongoMigration
            MongoMigrationClient.Initialize(client, new LightInjectAdapter(new LightInject.ServiceContainer()));

            Console.WriteLine("Migrate from:");
            cars.ForEach(c => Console.WriteLine(c.ToBsonDocument() + "\n"));

            // Migrate old version to current version by reading collection
            var typedCollection = client.GetDatabase("TestCars").GetCollection <Car>("Car");
            var result          = typedCollection.FindAsync(_ => true).Result.ToListAsync().Result;

            Console.WriteLine("To:");
            result.ForEach(r => Console.WriteLine(r.ToBsonDocument() + "\n"));

            // Create new car and add it with current version number into MongoDB
            var id   = ObjectId.GenerateNewId();
            var type = "Test" + id;
            var car  = new Car {
                Doors = 2, Type = type
            };

            typedCollection.InsertOne(car);
            var test = typedCollection.FindAsync(Builders <Car> .Filter.Eq(c => c.Type, type)).Result.Single();

            var aggregate = typedCollection.Aggregate()
                            .Match(new BsonDocument {
                { "Dors", 3 }
            });
            var results = aggregate.ToListAsync().Result;

            Console.WriteLine("New Car was created with version: " + test.Version);
            Console.WriteLine("\n");

            Console.WriteLine("\n");
            Console.WriteLine("Press any Key to exit...");
            Console.Read();

            client.GetDatabase(testsDb).DropCollection(carCollection);
        }
예제 #7
0
 public void TearDown()
 {
     MongoMigrationClient.Reset();
     _client = null;
     _runner.Dispose();
 }
예제 #8
0
        public void After()
        {
            MongoMigrationClient.Reset();

            _runner.Dispose();
        }
예제 #9
0
 public void InitMigrations()
 {
     MongoMigrationClient.Initialize(client, new LightInjectAdapter(new LightInject.ServiceContainer()));
 }
 public void TearDown()
 {
     MongoMigrationClient.Reset();
 }