public void CreateCommand_should_throw_when_ReadConcern_is_set_but_not_supported()
        {
            var subject = new MapReduceOperation <BsonDocument>(_collectionNamespace, _mapFunction, _reduceFunction, _resultSerializer, _messageEncoderSettings)
            {
                ReadConcern = ReadConcern.Majority
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.ReadConcern.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

            exception.Should().BeOfType <MongoClientException>();
        }
        public void CreateCommand_should_throw_when_ReadConcern_is_set_but_not_supported()
        {
            var subject = new CountOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ReadConcern = new ReadConcern(ReadConcernLevel.Linearizable)
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.ReadConcern.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

            exception.Should().BeOfType <MongoClientException>();
        }
        public void CreateCommand_should_throw_when_ReadConcern_is_set_and_not_supported()
        {
            var subject = new DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings)
            {
                ReadConcern = new ReadConcern(ReadConcernLevel.Local)
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.ReadConcern.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

            exception.Should().BeOfType <MongoClientException>();
        }
        public void CreateCommand_should_throw_when_Collation_is_set_but_not_supported()
        {
            var subject = new CountOperation(_collectionNamespace, _messageEncoderSettings)
            {
                Collation = new Collation("en_US")
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.Collation.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

            exception.Should().BeOfType <NotSupportedException>();
        }
        public void CreateCommand_should_return_expected_result()
        {
            var subject        = new DropCollectionOperation(_collectionNamespace, _messageEncoderSettings);
            var expectedResult = new BsonDocument
            {
                { "drop", _collectionNamespace.CollectionName }
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_throw_when_Collation_is_set()
        {
            var subject = new AggregateOperation <BsonDocument>(_collectionNamespace, __pipeline, __resultSerializer, _messageEncoderSettings)
            {
                Collation = new Collation("en_US")
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.Collation.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

            exception.Should().BeOfType <NotSupportedException>();
        }
        public void CreateCommand_should_create_the_correct_command(
            [Values("3.0.0", "3.2.0")] string serverVersionString,
            [Values(null, ReadConcernLevel.Local, ReadConcernLevel.Majority)] ReadConcernLevel?readConcernLevel)
        {
            var serverVersion = SemanticVersion.Parse(serverVersionString);
            var filter        = new BsonDocument("x", 1);
            var limit         = 10;
            var maxDistance   = 30;
            var maxTime       = TimeSpan.FromMilliseconds(50);
            var near          = new BsonArray {
                10, 20
            };
            var readConcern = new ReadConcern(readConcernLevel);
            var subject     = new GeoSearchOperation <BsonDocument>(_collectionNamespace, near, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                Search      = filter,
                Limit       = limit,
                MaxDistance = maxDistance,
                MaxTime     = maxTime,
                ReadConcern = readConcern
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion);
            var session = OperationTestHelper.CreateSession();

            if (!readConcern.IsServerDefault && !Feature.ReadConcern.IsSupported(serverVersion))
            {
                var exception = Record.Exception(() => subject.CreateCommand(connectionDescription, session));

                exception.Should().BeOfType <MongoClientException>();
            }
            else
            {
                var result = subject.CreateCommand(connectionDescription, session);

                var expectedResult = new BsonDocument
                {
                    { "geoSearch", _collectionNamespace.CollectionName },
                    { "near", near },
                    { "limit", limit },
                    { "maxDistance", maxDistance },
                    { "search", filter },
                    { "maxTimeMS", (int)maxTime.TotalMilliseconds },
                    { "readConcern", () => readConcern.ToBsonDocument(), !readConcern.IsServerDefault }
                };
                result.Should().Be(expectedResult);
                result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32);
            }
        }
示例#8
0
        public void CreateCommand_should_throw_when_commitQuorum_is_specified_and_not_supported()
        {
            var requests     = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            var commitQuorum = CreateIndexCommitQuorum.Create(1);
            var subject      = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings)
            {
                CommitQuorum = commitQuorum
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion: Feature.CreateIndexCommitQuorum.LastNotSupportedVersion);

            var exception = Record.Exception(() => subject.CreateCommand(session, connectionDescription));

            exception.Should().BeOfType <NotSupportedException>();
        }
示例#9
0
        public void CreateCommand_should_return_expected_result()
        {
            var subject = new FindCommandOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            var connectionDescription = OperationTestHelper.CreateConnectionDescription();
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "find", _collectionNamespace.CollectionName }
            };

            result.Should().Be(expectedResult);
        }
示例#10
0
        public void CreateCommand_should_throw_when_read_concern_is_not_supported()
        {
            var mapFunction    = "function() { emit(this.x, this.v); }";
            var reduceFunction = "function(key, values) { var sum = 0; for (var i = 0; i < values.length; i++) { sum += values[i]; }; return sum; }";
            var subject        = new MapReduceLegacyOperation(_collectionNamespace, mapFunction, reduceFunction, _messageEncoderSettings)
            {
                ReadConcern = ReadConcern.Majority
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.ReadConcern.LastNotSupportedVersion);
            var session = OperationTestHelper.CreateSession();

            Action act = () => subject.CreateCommand(connectionDescription, session);

            act.ShouldThrow <MongoClientException>();
        }
示例#11
0
        public void CreateCommand_should_return_expected_result_when_ReadConcern_is_set(
            [Values(null, ReadConcernLevel.Linearizable, ReadConcernLevel.Local)] ReadConcernLevel?level)
        {
            var readConcern = level == null ? ReadConcern.Default : new ReadConcern(level);
            var subject     = new EstimatedDocumentCountOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ReadConcern = readConcern
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription();
            var session = OperationTestHelper.CreateSession();

            var result = CreateCommand(subject, connectionDescription, session);

            AssertCommandDocument(result, readConcern: readConcern.IsServerDefault?null: readConcern.ToBsonDocument());
        }
        public void CreateCommand_should_return_expected_result()
        {
            var subject = new DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings);

            var connectionDescription = OperationTestHelper.CreateConnectionDescription();
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "distinct", _collectionNamespace.CollectionName },
                { "key", _fieldName }
            };

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_expected_result()
        {
            var subject = new AggregateToCollectionOperation(_collectionNamespace, __pipeline, _messageEncoderSettings);
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            var expectedResult = new BsonDocument
            {
                { "aggregate", _collectionNamespace.CollectionName },
                { "pipeline", new BsonArray(__pipeline) },
                { "cursor", new BsonDocument() }
            };

            result.Should().Be(expectedResult);
        }
示例#14
0
        public void CreateCommand_should_return_the_expected_result()
        {
            var subject               = new AggregateOperation <BsonDocument>(_collectionNamespace, __pipeline, __resultSerializer, _messageEncoderSettings);
            var serverVersion         = Feature.AggregateCursorResult.FirstSupportedVersion;
            var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion);
            var session               = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "aggregate", _collectionNamespace.CollectionName },
                { "pipeline", new BsonArray(__pipeline) },
                { "cursor", new BsonDocument() }
            };

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_the_expected_result()
        {
            var subject = new FakeMapReduceOperation(_collectionNamespace, _mapFunction, _reduceFunction, _messageEncoderSettings);
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            var expectedResult = new BsonDocument
            {
                { "mapReduce", _collectionNamespace.CollectionName },
                { "map", _mapFunction },
                { "reduce", _reduceFunction },
                { "out", new BsonDocument("fake", 1) }
            };

            result.Should().Be(expectedResult);
        }
示例#16
0
        public void CreateCommand_should_return_expected_result()
        {
            var subject = new GeoNearOperation <BsonDocument>(_collectionNamespace, _near, _resultSerializer, _messageEncoderSettings);

            var connectionDescription = OperationTestHelper.CreateConnectionDescription();
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "geoNear", _collectionNamespace.CollectionName },
                { "near", new BsonArray {
                      1, 2
                  } }
            };

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_expected_result_when_creating_one_index()
        {
            var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            var subject  = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings);
            var session  = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            var expectedResult = new BsonDocument
            {
                { "createIndexes", _collectionNamespace.CollectionName },
                { "indexes", new BsonArray {
                      requests[0].CreateIndexDocument(null)
                  } }
            };

            result.Should().Be(expectedResult);
        }
示例#18
0
        public void CreateCommand_should_return_expected_result(
            [Values(null, 100L)] long?transactionNumber)
        {
            var subject = new FindOneAndReplaceOperation <BsonDocument>(_collectionNamespace, _filter, _replacement, BsonDocumentSerializer.Instance, _messageEncoderSettings);
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription, transactionNumber);

            var expectedResult = new BsonDocument
            {
                { "findAndModify", _collectionNamespace.CollectionName },
                { "query", _filter },
                { "update", _replacement },
                { "txnNumber", () => transactionNumber, transactionNumber != null }
            };

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_expected_result(
            [Values("a", "b")]
            string viewName)
        {
            var subject = new CreateViewOperation(_databaseNamespace, viewName, _collectionNamespace.CollectionName, _pipeline, _messageEncoderSettings);
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            var expectedResult = new BsonDocument
            {
                { "create", viewName },
                { "viewOn", _collectionNamespace.CollectionName },
                { "pipeline", new BsonArray(_pipeline) }
            };

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_expected_result_when_MaxTime_is_set(long maxTimeTicks, int expectedMaxTimeMS)
        {
            var subject = new CountOperation(_collectionNamespace, _messageEncoderSettings)
            {
                MaxTime = TimeSpan.FromTicks(maxTimeTicks)
            };
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "count", _collectionNamespace.CollectionName },
                { "maxTimeMS", expectedMaxTimeMS }
            };

            result.Should().Be(expectedResult);
            result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32);
        }
示例#21
0
        public void CreateCommand_should_return_the_expected_result_when_using_causal_consistency(
            [Values(null, ReadConcernLevel.Linearizable, ReadConcernLevel.Local)] ReadConcernLevel?level)
        {
            var readConcern = level == null ? ReadConcern.Default : new ReadConcern(level);
            var subject     = new EstimatedDocumentCountOperation(_collectionNamespace, _messageEncoderSettings)
            {
                ReadConcern = readConcern
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(supportsSessions: true);
            var session = OperationTestHelper.CreateSession(true, new BsonTimestamp(100));

            var result = CreateCommand(subject, connectionDescription, session);

            var expectedReadConcernDocument = readConcern.ToBsonDocument();

            expectedReadConcernDocument["afterClusterTime"] = new BsonTimestamp(100);

            AssertCommandDocument(result, readConcern: expectedReadConcernDocument);
        }
示例#22
0
        public void CreateCommand_should_return_expected_result_when_MaxTime_is_Set(long maxTimeTicks, int expectedMaxTimeMS)
        {
            var indexName = "x_1";
            var maxTime   = TimeSpan.FromTicks(maxTimeTicks);
            var subject   = new DropIndexOperation(_collectionNamespace, indexName, _messageEncoderSettings);

            subject.MaxTime = maxTime;
            var expectedResult = new BsonDocument
            {
                { "dropIndexes", _collectionNamespace.CollectionName },
                { "index", indexName },
                { "maxTimeMS", expectedMaxTimeMS }
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            result.Should().Be(expectedResult);
            result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32);
        }
        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 session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

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

            result.Should().Be(expectedResult);
        }
        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 connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

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

            result.Should().Be(expectedResult);
        }
        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 session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

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

            result.Should().Be(expectedResult);
        }
        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 session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

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

            result.Should().Be(expectedResult);
        }
示例#27
0
        public void CreateCommand_should_return_expected_result_when_dropTarget_is_provided(
            [Values(false, true)]
            bool dropTarget)
        {
            var subject = new RenameCollectionOperation(_collectionNamespace, _newCollectionNamespace, _messageEncoderSettings)
            {
                DropTarget = dropTarget
            };
            var expectedResult = new BsonDocument
            {
                { "renameCollection", _collectionNamespace.FullName },
                { "to", _newCollectionNamespace.FullName },
                { "dropTarget", dropTarget }
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

            result.Should().Be(expectedResult);
        }
        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 session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription();

            var result = subject.CreateCommand(session, connectionDescription);

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

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_create_the_correct_command(
            [Values(WireVersion.Server30, WireVersion.Server32)] int maxWireVersion,
            [Values(null, ReadConcernLevel.Local, ReadConcernLevel.Majority)] ReadConcernLevel?readConcernLevel)
        {
            var filter      = new BsonDocument("x", 1);
            var limit       = 10;
            var maxDistance = 30;
            var maxTime     = TimeSpan.FromMilliseconds(50);
            var near        = new BsonArray {
                10, 20
            };
            var readConcern = new ReadConcern(readConcernLevel);
            var subject     = new GeoSearchOperation <BsonDocument>(_collectionNamespace, near, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                Search      = filter,
                Limit       = limit,
                MaxDistance = maxDistance,
                MaxTime     = maxTime,
                ReadConcern = readConcern
            };

            var connectionDescription = OperationTestHelper.CreateConnectionDescription(maxWireVersion);
            var session = OperationTestHelper.CreateSession();

            var result = subject.CreateCommand(connectionDescription, session);

            var expectedResult = new BsonDocument
            {
                { "geoSearch", _collectionNamespace.CollectionName },
                { "near", near },
                { "limit", limit },
                { "maxDistance", maxDistance },
                { "search", filter },
                { "maxTimeMS", (int)maxTime.TotalMilliseconds },
                { "readConcern", () => readConcern.ToBsonDocument(), !readConcern.IsServerDefault }
            };

            result.Should().Be(expectedResult);
            result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32);
        }
        public void ReadConcern_document_should_contain_the_expected_values(
            [Values(false, true)] bool supportsSessions,
            [Values(false, true)] bool causallyConsistent,
            [Values(null, 10L)] long?operationTime,
            [Values(null, ReadConcernLevel.Majority)] ReadConcernLevel?level)
        {
            var           connectionDescription = OperationTestHelper.CreateConnectionDescription(supportsSessions: supportsSessions);
            BsonTimestamp timestamp             = operationTime == null ? null : new BsonTimestamp(operationTime.Value);
            var           session = OperationTestHelper.CreateSession(causallyConsistent, timestamp);

            var readConcern = ReadConcern.Default;

            if (level != null)
            {
                readConcern = readConcern.With(level.Value);
            }

            var command = new BsonDocument();

            ReadConcernHelper.AppendReadConcern(command, readConcern, connectionDescription, session);

            if ((!supportsSessions || !causallyConsistent || operationTime == null) && level == null)
            {
                command.ElementCount.Should().Be(0);
            }
            else
            {
                command.Contains("readConcern").Should().BeTrue();
            }

            if (level != null)
            {
                command["readConcern"]["level"].AsString.Should().Be("majority");
            }

            if (supportsSessions && causallyConsistent && operationTime != null)
            {
                command["readConcern"]["afterClusterTime"].AsBsonTimestamp.Value.Should().Be(operationTime.Value);
            }
        }