Exemple #1
0
        public async Task NullEntitiesOnInsertManyTest()
        {
            MongodbConfig  mongodbConfig = MongoDbHelper.GetMongodbConfig();
            IMongoDatabase database      = MongodbProvider.GetDatabase(mongodbConfig);
            IMongodbSaveRepository <Test> saveRepository = new MongodbSaveRepository <Test>(database);

            await Assert.ThrowsAsync <ArgumentNullException>(() => saveRepository.InsertManyAsync(null));
        }
        public async Task InsertManyVsInsertOne()
        {
            MongodbConfig          mongodbConfig  = MongoDbHelper.GetMongodbConfig();
            IMongoDatabase         database       = MongodbProvider.GetDatabase(mongodbConfig);
            ISaveRepository <Test> saveRepository = new MongodbSaveRepository <Test>(database);
            Stopwatch stopwatch = new Stopwatch();

            IList <Test> tests = TestHelper.CreateRandomTests(100);

            // First insert in order establish the connection
            await saveRepository.InsertAsync(tests.ElementAt(0));

            // One-by-one insert
            stopwatch.Restart();
            foreach (Test test in tests)
            {
                await saveRepository.InsertAsync(test);
            }
            stopwatch.Stop();
            TimeSpan oneByOneTime = stopwatch.Elapsed;

            // Multi-thread insert
            stopwatch.Restart();
            IList <Task> tasks = new List <Task>();

            foreach (Test test in tests)
            {
                tasks.Add(saveRepository.InsertAsync(test));
            }
            await Task.WhenAll(tasks);

            stopwatch.Stop();
            TimeSpan multiThreadTime = stopwatch.Elapsed;

            // Insert many (bulk)
            stopwatch.Restart();
            await saveRepository.InsertManyAsync(tests);

            stopwatch.Stop();
            TimeSpan bulkTime = stopwatch.Elapsed;

            Assert.True(
                TimeSpan.Compare(oneByOneTime, multiThreadTime) == 1 &&
                TimeSpan.Compare(multiThreadTime, bulkTime) == 1);
        }
Exemple #3
0
        public async Task MultipleEntityIntegralTest()
        {
            MongodbConfig  mongodbConfig = MongoDbHelper.GetMongodbConfig();
            IMongoDatabase database      = MongodbProvider.GetDatabase(mongodbConfig);
            IMongodbSaveRepository <Test> saveRepository   = new MongodbSaveRepository <Test>(database);
            IGetRepository <Test>         getRepository    = new MongodbGetRepository <Test>(database);
            IDeleteRepository <Test>      deleteRepository = new MongodbDeleteRepository <Test>(database);

            Test newTest1 = new Test()
            {
                BoolField      = true,
                NumberField    = 1,
                ObjectId       = Guid.NewGuid().ToString(),
                StringField    = "multiple-object-1",
                TimestampField = DateTime.UtcNow
            };

            Test newTest2 = new Test()
            {
                BoolField      = true,
                NumberField    = 2,
                ObjectId       = Guid.NewGuid().ToString(),
                StringField    = "multiple-object-2",
                TimestampField = DateTime.UtcNow.AddMinutes(1)
            };

            IList <Test> newTests = new List <Test>()
            {
                newTest1, newTest2
            };

            await saveRepository.InsertManyAsync(newTests);

            IEnumerable <Test> savedTests = await getRepository.GetAllByConditionsAsync(x =>
                                                                                        x.ObjectId == newTest1.ObjectId ||
                                                                                        x.ObjectId == newTest2.ObjectId);

            Assert.True(savedTests.Count() == 2);

            Test savedTest1 = savedTests.Single(x =>
                                                x.ObjectId == newTest1.ObjectId &&
                                                x.NumberField == newTest1.NumberField &&
                                                x.StringField == newTest1.StringField &&
                                                DateTimeHelper.AreEquals(x.TimestampField, newTest1.TimestampField) &&
                                                x.BoolField == newTest1.BoolField);

            Test savedTest2 = savedTests.Single(x =>
                                                x.ObjectId == newTest2.ObjectId &&
                                                x.NumberField == newTest2.NumberField &&
                                                x.StringField == newTest2.StringField &&
                                                DateTimeHelper.AreEquals(x.TimestampField, newTest2.TimestampField) &&
                                                x.BoolField == newTest2.BoolField);

            string modifiedStringField = "modified-multiple-objects";
            UpdateDefinition <Test> updateDefinition = Builders <Test> .Update.Set(x => x.StringField, modifiedStringField);

            await saveRepository.UpdateManyAsync(
                x =>
                x.ObjectId == newTest1.ObjectId ||
                x.ObjectId == newTest2.ObjectId,
                updateDefinition);

            IEnumerable <Test> modifiedTests = await getRepository.GetAllByConditionsAsync(x =>
                                                                                           x.StringField == modifiedStringField &&
                                                                                           (x.ObjectId == savedTest1.ObjectId || x.ObjectId == savedTest2.ObjectId));

            Assert.True(modifiedTests.Count() == 2);

            Test modifiedTest1 = modifiedTests.Single(x =>
                                                      x.ObjectId == newTest1.ObjectId &&
                                                      x.NumberField == newTest1.NumberField &&
                                                      x.StringField == modifiedStringField &&
                                                      DateTimeHelper.AreEquals(x.TimestampField, newTest1.TimestampField) &&
                                                      x.BoolField == newTest1.BoolField);

            Test modifiedTest2 = modifiedTests.Single(x =>
                                                      x.ObjectId == newTest2.ObjectId &&
                                                      x.NumberField == newTest2.NumberField &&
                                                      x.StringField == modifiedStringField &&
                                                      DateTimeHelper.AreEquals(x.TimestampField, newTest2.TimestampField) &&
                                                      x.BoolField == newTest2.BoolField);

            await deleteRepository.DeleteAllByConditionsAsync(x =>
                                                              x.StringField == modifiedStringField);

            IEnumerable <Test> deletedTests = await getRepository.GetAllByConditionsAsync(x => x.StringField == modifiedStringField);

            Assert.True(deletedTests == null || deletedTests.Count() == 0);
        }