Пример #1
0
        public async Task TestCollectionModelFullFail()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            foreach (var variation in Enumerable.Range(1, 2))
            {
                CollectionModel model = CreateCollectionModel(variation);

                var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                    ReCreate = true
                });

                bool result = await package.Apply(_workContext);

                result.Should().BeTrue();

                package = new CollectionModelPackage(db, model, new CollectionModelSettings());
                result  = await package.Test(_workContext);

                result.Should().BeTrue();

                model.Indexes[0].Keys.Add(new IndexKey {
                    FieldName = "xxxx"
                });
                result = await package.Test(_workContext);

                result.Should().BeFalse();

                await db.DropCollection(_workContext, _collectionName);
            }

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #2
0
        public async Task ApplyUpdateRemovedCollection()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            CollectionModel model = CreateCollectionModel(3);

            var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await VerifyCollectionModel(db, model)).Should().BeTrue();

            model = CreateCollectionModel(0);

            var updatePackage = new CollectionModelPackage(db, model, new CollectionModelSettings {
                Remove = true
            });

            result = await updatePackage.Apply(_workContext);

            result.Should().BeTrue();

            (await db.CollectionExist(_workContext, _collectionName)).Should().BeFalse();

            await db.DropCollection(_workContext, _collectionName);

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #3
0
        public async Task ApplyCappedCollectionModelWithoutIndex()
        {
            const int maxDocuments   = 100;
            const int maxSizeInBytes = maxDocuments * 1000;

            var model = new CappedCollectionModel
            {
                CollectionName       = _collectionName,
                MaxSizeInBytes       = maxSizeInBytes,
                MaxNumberOfDocuments = maxDocuments,
            };

            var package = new CollectionModelPackage(_documentDatabase, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await _documentDatabase.CollectionExist(_workContext, _collectionName)).Should().BeTrue();
            CollectionDetailV1 detail = await _documentDatabase.GetCollectionDetail(_workContext, _collectionName);

            detail.Should().NotBeNull();
            detail.Name.Should().Be(_collectionName);
            detail.Type.Should().Be("collection");
            detail.Readonly.Should().BeFalse();
            detail.Capped.Should().BeTrue();
            detail.MaxDocuments.Should().HaveValue();
            detail.MaxDocuments.Should().Be(maxDocuments);
            detail.MaxSizeInBytes.Should().HaveValue();
            detail.MaxSizeInBytes.Should().BeGreaterOrEqualTo(maxSizeInBytes);
        }
Пример #4
0
        public CreateIndexState(CollectionModelPackage parent, CollectionIndex index)
        {
            Verify.IsNotNull(nameof(parent), parent);
            Verify.IsNotNull(nameof(index), index);
            Verify.IsNotEmpty(nameof(index.Name), index.Name);

            Parent = parent;
            Index  = index;
        }
Пример #5
0
        public async Task ApplyCappedCollectionModelWithIndex()
        {
            const int maxDocuments   = 100;
            const int maxSizeInBytes = maxDocuments * 1000;

            var model = new CappedCollectionModel
            {
                CollectionName       = _collectionName,
                MaxSizeInBytes       = maxSizeInBytes,
                MaxNumberOfDocuments = maxDocuments,
                Indexes = new List <CollectionIndex>
                {
                    new CollectionIndex
                    {
                        Name   = "TestIndex_1",
                        Unique = true,
                        Keys   = new List <IndexKey>
                        {
                            new IndexKey {
                                FieldName = "Field1", Descending = false
                            },
                        }
                    }
                }
            };

            var package = new CollectionModelPackage(_documentDatabase, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await _documentDatabase.CollectionExist(_workContext, _collectionName)).Should().BeTrue();
            CollectionDetailV1 detail = await _documentDatabase.GetCollectionDetail(_workContext, _collectionName);

            detail.Should().NotBeNull();
            detail.Name.Should().Be(_collectionName);
            detail.Type.Should().Be("collection");
            detail.Readonly.Should().BeFalse();
            detail.Capped.Should().BeTrue();
            detail.MaxDocuments.Should().HaveValue();
            detail.MaxDocuments.Should().Be(maxDocuments);
            detail.MaxSizeInBytes.Should().HaveValue();
            detail.MaxSizeInBytes.Should().BeGreaterOrEqualTo(maxSizeInBytes);

            IDocumentCollection <TestDocument> collection = _documentDatabase.GetCollection <TestDocument>(_collectionName);
            IndexDetailV1 indexDetail = await collection.Index.GetIndexDetail(_workContext, model.Indexes[0].Name);

            indexDetail.Should().NotBeNull();
            indexDetail.Keys.Count.Should().Be(1);

            model.Indexes[0].IsEquals(indexDetail).Should().BeTrue();
        }
        /// <summary>
        /// Apply collection model, create collection and its create indexes
        /// </summary>
        /// <param name="context">context</param>
        /// <returns>task</returns>
        public async Task ApplyCollectionModels(IWorkContext context)
        {
            Verify.IsNotNull(nameof(context), context);
            context = context.WithTag(_tag);

            IDocumentDatabase db = _documentServer.GetDatabase(_configuration.DatabaseName);

            foreach (var model in _models)
            {
                context.Telemetry.Info(context, $"{nameof(ApplyCollectionModels)} for collection={model.CollectionName}");

                var package = new CollectionModelPackage(db, model);
                await package.Apply(context).ConfigureAwait(false);
            }
        }
Пример #7
0
        public async Task SmallCappedOverFiveCollectionTest()
        {
            const int maxDocuments        = 10;
            const int maxSizeInBytes      = maxDocuments * 1000;
            const int createDocumentCount = maxDocuments + 5;

            var model = new CappedCollectionModel
            {
                CollectionName       = _collectionName,
                MaxSizeInBytes       = maxSizeInBytes,
                MaxNumberOfDocuments = maxDocuments,
            };

            var package = new CollectionModelPackage(_documentDatabase, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            IDocumentCollection <TestDocument> collection = _documentDatabase.GetCollection <TestDocument>(_collectionName);

            foreach (var index in Enumerable.Range(0, createDocumentCount))
            {
                TestDocument doc = CreateTestDocument(index);
                await collection.Insert(_workContext, doc);
            }

            long count = await collection.Count(_workContext);

            count.Should().Be(maxDocuments);

            IEnumerable <TestDocument> results = await collection.Find(_workContext, new BsonDocument());

            results.Should().NotBeNull();
            results.Count().Should().Be(maxDocuments);

            int testIndex = createDocumentCount - maxDocuments;

            foreach (var item in results.OrderBy(x => x.Index))
            {
                TestDocument compareDoc = CreateTestDocument(testIndex++);
                item.IsEqual(compareDoc).Should().BeTrue();
            }
        }
Пример #8
0
        public async Task ApplyCollectionModelFull()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            var model = new CollectionModel
            {
                CollectionName = _collectionName,
                Indexes        = new List <CollectionIndex>
                {
                    new CollectionIndex
                    {
                        Name   = "TestIndex_1",
                        Unique = true,
                        Keys   = new List <IndexKey>
                        {
                            new IndexKey {
                                FieldName = "Field1", Descending = false
                            },
                        }
                    }
                }
            };

            var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await db.CollectionExist(_workContext, _collectionName)).Should().BeTrue();
            IDocumentCollection <TestDocument> collection = db.GetCollection <TestDocument>(_collectionName);

            IndexDetailV1 detail = await collection.Index.GetIndexDetail(_workContext, model.Indexes[0].Name);

            detail.Should().NotBeNull();
            detail.Keys.Count.Should().Be(1);

            model.Indexes[0].IsEquals(detail).Should().BeTrue();

            await db.DropCollection(_workContext, _collectionName);

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #9
0
        public async Task ApplyCollectionModelMultipleIndexesFull()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            CollectionModel model = CreateCollectionModel(2);

            var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await VerifyCollectionModel(db, model)).Should().BeTrue();

            await db.DropCollection(_workContext, _collectionName);

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #10
0
        public async Task ApplyCollectionModelCompositeKeyFull()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            var model = new CollectionModel
            {
                CollectionName = _collectionName,
                Indexes        = new List <CollectionIndex>
                {
                    new CollectionIndex
                    {
                        Name   = "TestIndex_1",
                        Unique = true,
                        Keys   = new List <IndexKey>
                        {
                            new IndexKey {
                                FieldName = "Field1", Descending = false
                            },
                            new IndexKey {
                                FieldName = "Field2", Descending = true
                            },
                        }
                    }
                }
            };

            var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            (await VerifyCollectionModel(db, model)).Should().BeTrue();

            await db.DropCollection(_workContext, _collectionName);

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #11
0
        public async Task TestCollectionModelFull()
        {
            IDocumentDatabase db = _documentServer.GetDatabase(_workContext, _dbName);

            CollectionModel model = CreateCollectionModel(1);

            var package = new CollectionModelPackage(db, model, new CollectionModelSettings {
                ReCreate = true
            });

            bool result = await package.Apply(_workContext);

            result.Should().BeTrue();

            package = new CollectionModelPackage(db, model, new CollectionModelSettings());
            result  = await package.Test(_workContext);

            result.Should().BeTrue();

            await db.DropCollection(_workContext, _collectionName);

            await _documentServer.DropDatabase(_workContext, _dbName);
        }
Пример #12
0
 public RemoveCollectionState(CollectionModelPackage parent)
 {
     Parent = parent;
 }
Пример #13
0
        public RemoveIndexesNotInSource(CollectionModelPackage parent)
        {
            Verify.IsNotNull(nameof(parent), parent);

            Parent = parent;
        }
Пример #14
0
 public CreateCollectionState(CollectionModelPackage parent)
 {
     Parent = parent;
 }