コード例 #1
0
        public void CreateCommand_should_return_expected_result_when_Capped_is_set(
            [Values(null, false, true)]
            bool?capped)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Capped = capped
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "capped", () => capped.Value, capped != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #2
0
        public void CreateCommand_should_return_expected_result_when_MaxDocuments_is_set(
            [Values(null, 1L, 2L)]
            long?maxDocuments)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                MaxDocuments = maxDocuments
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "max", () => maxDocuments.Value, maxDocuments != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #3
0
        public void CreateCommand_should_return_expected_result_when_ValidationLevel_is_set(
            [Values(null, DocumentValidationLevel.Moderate, DocumentValidationLevel.Off)]
            DocumentValidationLevel?validationLevel)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ValidationLevel = validationLevel
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "validationLevel", () => validationLevel.ToString().ToLowerInvariant(), validationLevel != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #4
0
        public void CreateCommand_should_return_expected_result_when_StorageEngine_is_set(
            [Values(null, "{ awesome: true }")]
            string storageEngine)
        {
            var storageEngineDoc = storageEngine == null ? null : BsonDocument.Parse(storageEngine);
            var subject          = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                StorageEngine = storageEngineDoc
            };
            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "storageEngine", storageEngineDoc, storageEngine != null }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
コード例 #5
0
        public void CreateCommand_should_return_expected_result_when_UsePowerOf2Sizes_is_set(
            [Values(null, false, true)]
            bool?usePowerOf2Sizes)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                UsePowerOf2Sizes = usePowerOf2Sizes
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "flags", () => usePowerOf2Sizes.Value ? 1 : 0, usePowerOf2Sizes != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #6
0
        public void CreateCommand_should_return_expected_result_when_NoPadding_is_set(
            [Values(null, false, true)]
            bool?noPadding)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                NoPadding = noPadding
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "flags", () => noPadding.Value ? 2 : 0, noPadding != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #7
0
        public void Execute_should_create_collection_when_IndexOptionDefaults_is_set(
            [Values(false, true)] bool async)
        {
            var storageEngineOptions = new BsonDocument("mmapv1", new BsonDocument());
            var indexOptionDefaults  = new BsonDocument("storageEngine", storageEngineOptions);
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                IndexOptionDefaults = indexOptionDefaults
            };

            using (var binding = CoreTestConfiguration.GetReadWriteBinding())
            {
                var result = ExecuteOperation(subject, binding, async);

                result["ok"].ToBoolean().Should().BeTrue();
                var collectionInfo = GetCollectionInfo(binding, _collectionNamespace.CollectionName);
                Assert.That(collectionInfo["options"]["indexOptionDefaults"], Is.EqualTo(indexOptionDefaults));
            }
        }
コード例 #8
0
        public void CreateCommand_should_return_expected_result_when_ClusteredIndex_is_set(
            [Values(null, "{ key : { _id : 1 }, unique : true }", "{ key : { _id : 1 }, unique : true, name: 'clustered index name' }")]
            string clusteredIndex)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ClusteredIndex = clusteredIndex != null?BsonDocument.Parse(clusteredIndex) : null
            };
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "clusteredIndex", () => BsonDocument.Parse(clusteredIndex), clusteredIndex != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #9
0
        public void CreateCommand_should_return_expected_result_when_Validator_is_set(
            [Values(null, "{ x : 1 }", "{ x : 2 }")]
            string validatorString)
        {
            var validator = validatorString == null ? null : BsonDocument.Parse(validatorString);
            var subject   = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Validator = validator
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "validator", validator, validator != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #10
0
        public void Execute_should_throw_when_Collation_is_set_and_not_supported(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().DoesNotSupport(Feature.Collation);
            DropCollection();
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Collation = new Collation("en_US")
            };

            Exception exception;

            using (var binding = CoreTestConfiguration.GetReadWriteBinding(_session.Fork()))
            {
                exception = Record.Exception(() => ExecuteOperation(subject, binding, async));
            }

            exception.Should().BeOfType <NotSupportedException>();
        }
コード例 #11
0
        public void constructor_should_initialize_subject()
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings);

            subject.CollectionNamespace.Should().BeSameAs(_collectionNamespace);
            subject.MessageEncoderSettings.Should().BeSameAs(_messageEncoderSettings);

            subject.AutoIndexId.Should().NotHaveValue();
            subject.Capped.Should().NotHaveValue();
            subject.Collation.Should().BeNull();
            subject.IndexOptionDefaults.Should().BeNull();
            subject.MaxDocuments.Should().NotHaveValue();
            subject.MaxSize.Should().NotHaveValue();
            subject.StorageEngine.Should().BeNull();
            subject.UsePowerOf2Sizes.Should().NotHaveValue();
            subject.ValidationAction.Should().BeNull();
            subject.ValidationLevel.Should().BeNull();
            subject.Validator.Should().BeNull();
            subject.WriteConcern.Should().BeNull();
        }
コード例 #12
0
        public void CreateCommand_should_return_expected_result_when_MaxSize_is_set(
            [Values(null, 1L, 2L)]
            long?maxSize)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                MaxSize = maxSize
            };
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "size", () => maxSize.Value, maxSize != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #13
0
        public void CreateCommand_should_return_expected_result_when_IndexOptionDefaults_is_set(
            [Values(null, "{ x : 1 }", "{ x : 2 }")]
            string indexOptionDefaultsString)
        {
            var indexOptionDefaults = indexOptionDefaultsString == null ? null : BsonDocument.Parse(indexOptionDefaultsString);
            var subject             = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                IndexOptionDefaults = indexOptionDefaults
            };

            var result = subject.CreateCommand(null);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "indexOptionDefaults", () => indexOptionDefaults, indexOptionDefaults != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #14
0
        public void CreateCommand_should_return_expected_result_when_ValidationAction_is_set(
            [Values(null, DocumentValidationAction.Error, DocumentValidationAction.Warn)]
            DocumentValidationAction?validationAction)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ValidationAction = validationAction
            };
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "validationAction", () => validationAction.ToString().ToLowerInvariant(), validationAction != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #15
0
        public void CreateCommand_should_return_expected_result_when_Collation_is_set(
            [Values(null, "en_US", "fr_CA")]
            string locale)
        {
            var collation = locale == null ? null : new Collation(locale);
            var subject   = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Collation = collation
            };

            var result = subject.CreateCommand(Feature.Collation.FirstSupportedVersion);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "collation", () => collation.ToBsonDocument(), collation != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #16
0
        public void CreateCommand_should_return_expected_result_when_AutoIndexId_is_set(
            [Values(null, false, true)]
            bool?autoIndexId)
        {
#pragma warning disable 618
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                AutoIndexId = autoIndexId
            };
#pragma warning restore
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "autoIndexId", () => autoIndexId.Value, autoIndexId != null }
            };
            result.Should().Be(expectedResult);
        }
コード例 #17
0
        public void Execute_should_create_collection_when_Validator_is_set(
            [Values(false, true)] bool async)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ValidationAction = DocumentValidationAction.Error,
                ValidationLevel  = DocumentValidationLevel.Strict,
                Validator        = new BsonDocument("_id", new BsonDocument("$exists", true))
            };

            using (var binding = CoreTestConfiguration.GetReadWriteBinding())
            {
                var result = ExecuteOperation(subject, binding, async);

                result["ok"].ToBoolean().Should().BeTrue();
                var collectionInfo = GetCollectionInfo(binding, _collectionNamespace.CollectionName);
                Assert.That(collectionInfo["options"]["validator"], Is.EqualTo(new BsonDocument("_id", new BsonDocument("$exists", true))));
                Assert.That(collectionInfo["options"]["validationAction"].AsString, Is.EqualTo("error"));
                Assert.That(collectionInfo["options"]["validationLevel"].AsString, Is.EqualTo("strict"));
            }
        }
コード例 #18
0
        public async Task ExecuteAsync_should_create_collection_when_AutoIndexId_is_set(
            [Values(false, true)]
            bool autoIndexId)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                AutoIndexId = autoIndexId
            };

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                var result = await subject.ExecuteAsync(binding, CancellationToken.None);

                result["ok"].ToBoolean().Should().BeTrue();

                var listIndexesOperation = new ListIndexesOperation(_collectionNamespace, _messageEncoderSettings);
                var indexes = await listIndexesOperation.ExecuteAsync(binding, CancellationToken.None);

                indexes.Count().Should().Be(autoIndexId ? 1 : 0);
            }
        }
コード例 #19
0
        public async Task ExecuteAsync_should_create_collection_when_UsePowerOf2Sizes_is_set(
            [Values(false, true)]
            bool usePowerOf2Sizes)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                UsePowerOf2Sizes = usePowerOf2Sizes
            };

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                var result = await subject.ExecuteAsync(binding, CancellationToken.None);

                result["ok"].ToBoolean().Should().BeTrue();

                var stats = await GetCollectionStatsAsync(binding);

                stats["ns"].ToString().Should().Be(_collectionNamespace.FullName);
                stats["userFlags"].ToInt32().Should().Be(usePowerOf2Sizes ? 1 : 0);
            }
        }
コード例 #20
0
        public async Task ExecuteAsync_should_create_collection_when_AutoIndexId_is_set(
            [Values(false, true)]
            bool autoIndexId)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                AutoIndexId = autoIndexId
            };

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                var result = await subject.ExecuteAsync(binding);

                result["ok"].ToBoolean().Should().BeTrue();

                var stats = await GetCollectionStatsAsync(binding);

                stats["ns"].ToString().Should().Be(_collectionNamespace.FullName);
                stats["systemFlags"].ToInt32().Should().Be(autoIndexId ? 1 : 0);
            }
        }
コード例 #21
0
        public void CreateCommand_should_return_expected_result_when_StorageEngine_is_set(
            [Values(null, "{ x : 1 }", "{ x : 2 }")]
            string storageEngineString)
        {
            var storageEngine = storageEngineString == null ? null : BsonDocument.Parse(storageEngineString);
            var subject       = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                StorageEngine = storageEngine
            };
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "storageEngine", storageEngine, storageEngineString != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #22
0
        public void CreateCommand_should_return_expected_result_when_WriteConcern_is_set(
            [Values(null, 1, 2)]
            int?w)
        {
            var writeConcern = w.HasValue ? new WriteConcern(w.Value) : null;
            var subject      = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                WriteConcern = writeConcern
            };
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(session);

            var expectedResult = new BsonDocument
            {
                { "create", _collectionNamespace.CollectionName },
                { "writeConcern", () => writeConcern.ToBsonDocument(), writeConcern != null }
            };

            result.Should().Be(expectedResult);
        }
コード例 #23
0
        protected void CreateCollection(CollectionNamespace collectionNamespace, bool changeStreamPreAndPostImages = false)
        {
            var operation = new CreateCollectionOperation(collectionNamespace, _messageEncoderSettings);

            ExecuteOperation(operation);

            if (changeStreamPreAndPostImages)
            {
                var command = new BsonDocument()
                {
                    { "collMod", _collectionNamespace.CollectionName },
                    { "changeStreamPreAndPostImages", new BsonDocument()
                      {
                          { "enabled", true }
                      } }
                };

                var collModOperation = new WriteCommandOperation <BsonDocument>(_collectionNamespace.DatabaseNamespace, command, BsonDocumentSerializer.Instance, _messageEncoderSettings);
                ExecuteOperation(collModOperation);
            }
        }
コード例 #24
0
        public void Execute_should_throw_when_a_write_concern_error_occurs(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().Supports(Feature.CommandsThatWriteAcceptWriteConcern).ClusterType(ClusterType.ReplicaSet);
            DropCollection();
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                WriteConcern = new WriteConcern(9)
            };

            var exception = Record.Exception(() =>
            {
                using (var binding = CoreTestConfiguration.GetReadWriteBinding(_session.Fork()))
                {
                    ExecuteOperation(subject, binding, false);
                }
            });

            exception.Should().BeOfType <MongoWriteConcernException>();
        }
コード例 #25
0
        public void Execute_should_create_collection_when_Collation_is_set(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().Supports(Feature.Collation);
            DropCollection();
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Collation = new Collation("en_US")
            };

            BsonDocument info;

            using (var binding = CoreTestConfiguration.GetReadWriteBinding(_session.Fork()))
            {
                ExecuteOperation(subject, binding, async);
                info = GetCollectionInfo(binding);
            }

            info["options"]["collation"]["locale"].AsString.Should().Be("en_US");
        }
        public void Execute_should_create_collection_when_UsePowerOf2Sizes_is_set(
            [Values(false, true)]
            bool usePowerOf2Sizes,
            [Values(false, true)]
            bool async)
        {
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                UsePowerOf2Sizes = usePowerOf2Sizes
            };

            using (var binding = CoreTestConfiguration.GetReadWriteBinding())
            {
                var result = ExecuteOperation(subject, binding, async);

                result["ok"].ToBoolean().Should().BeTrue();

                var stats = GetCollectionStats(binding, async);
                stats["ns"].ToString().Should().Be(_collectionNamespace.FullName);
                stats["userFlags"].ToInt32().Should().Be(usePowerOf2Sizes ? 1 : 0);
            }
        }
コード例 #27
0
        public async Task ExecuteAsync_should_create_collection_when_MaxSize_is_set()
        {
            var maxSize = 10000L;
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Capped  = true,
                MaxSize = maxSize
            };

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                var result = await subject.ExecuteAsync(binding, CancellationToken.None);

                result["ok"].ToBoolean().Should().BeTrue();

                var stats = await GetCollectionStatsAsync(binding);

                stats["ns"].ToString().Should().Be(_collectionNamespace.FullName);
                stats["capped"].ToBoolean().Should().BeTrue();
                // TODO: not sure how to verify that the maxSize took effect
            }
        }
        public void Execute_should_create_collection_when_MaxSize_is_set(
            [Values(false, true)]
            bool async)
        {
            var maxSize = 10000L;
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Capped  = true,
                MaxSize = maxSize
            };

            using (var binding = CoreTestConfiguration.GetReadWriteBinding())
            {
                var result = ExecuteOperation(subject, binding, async);

                result["ok"].ToBoolean().Should().BeTrue();

                var stats = GetCollectionStats(binding, async);
                stats["ns"].ToString().Should().Be(_collectionNamespace.FullName);
                stats["capped"].ToBoolean().Should().BeTrue();
                // TODO: not sure how to verify that the maxSize took effect
            }
        }
コード例 #29
0
        public void Execute_should_create_collection_when_UsePowerOf2Sizes_is_set(
            [Values(false, true)]
            bool usePowerOf2Sizes,
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().ClusterTypes(ClusterType.Standalone, ClusterType.ReplicaSet).StorageEngine("mmapv1");
            DropCollection();
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                UsePowerOf2Sizes = usePowerOf2Sizes
            };

            BsonDocument info;

            using (var binding = CoreTestConfiguration.GetReadWriteBinding(_session.Fork()))
            {
                ExecuteOperation(subject, binding, async);
                info = GetCollectionInfo(binding);
            }

            info["options"]["flags"].Should().Be(usePowerOf2Sizes ? 1 : 0);
        }
コード例 #30
0
        public void Execute_should_create_collection_when_AutoIndexId_is_set(
            [Values(false, true)]
            bool autoIndexId,
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check();
            DropCollection();
            var subject = new CreateCollectionOperation(_collectionNamespace, _messageEncoderSettings)
            {
                AutoIndexId = autoIndexId
            };

            BsonDocument info;

            using (var binding = CoreTestConfiguration.GetReadWriteBinding(_session.Fork()))
            {
                ExecuteOperation(subject, binding, async);
                info = GetCollectionInfo(binding);
            }

            info["options"]["autoIndexId"].ToBoolean().Should().Be(autoIndexId);
        }