public void Projection_get_and_set_should_work(
            [Values(null, "{ a : 1 }", "{ b : 1 }")]
            string json)
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);
            var value   = json == null ? null : BsonDocument.Parse(json);

            subject.Projection = value;
            var result = subject.Projection;

            result.Should().Be(value);
        }
        public void MaxTime_set_should_throw_when_value_is_invalid(
            [Values(-10001, -9999, -1)] long maxTimeTicks)
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);
            var value   = TimeSpan.FromTicks(maxTimeTicks);

            var exception = Record.Exception(() => subject.MaxTime = value);

            var e = exception.Should().BeOfType <ArgumentOutOfRangeException>().Subject;

            e.ParamName.Should().Be("value");
        }
        public async Task ExecuteAsync_should_find_all_the_documents_matching_the_query()
        {
            RequireServer.Check();
            EnsureTestData();
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            var cursor = await ExecuteOperationAsync(subject);

            var result = await ReadCursorToEndAsync(cursor);

            result.Should().HaveCount(5);
        }
Example #4
0
        public void CollectionNamespace_get_should_return_expected_result(
            [Values("a", "b")]
            string collectionName)
        {
            var databaseNamespace   = new DatabaseNamespace("test");
            var collectionNamespace = new CollectionNamespace(databaseNamespace, collectionName);
            var subject             = new FindOpcodeOperation <BsonDocument>(collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            var result = subject.CollectionNamespace;

            result.Should().Be(collectionNamespace);
        }
        public void MaxTime_get_and_set_should_work(
            [Values(null, 1)]
            int?seconds)
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);
            var value   = seconds == null ? (TimeSpan?)null : TimeSpan.FromSeconds(seconds.Value);

            subject.MaxTime = value;
            var result = subject.MaxTime;

            result.Should().Be(value);
        }
Example #6
0
        public void Snapshot_get_and_set_should_work(
            [Values(null, false, true)]
            bool?value)
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);

#pragma warning disable 618
            subject.Snapshot = value;
            var result = subject.Snapshot;
#pragma warning restore

            result.Should().Be(value);
        }
Example #7
0
        public void MessageEncoderSettings_get_should_return_expected_result(
            [Values(GuidRepresentation.CSharpLegacy, GuidRepresentation.Standard)]
            GuidRepresentation guidRepresentation)
        {
            var messageEncoderSettings = new MessageEncoderSettings {
                { "GuidRepresentation", guidRepresentation }
            };
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, messageEncoderSettings);

            var result = subject.MessageEncoderSettings;

            result.Should().BeEquivalentTo(messageEncoderSettings);
        }
Example #8
0
        public async Task ExecuteAsync_should_find_all_the_documents_matching_the_query_when_split_across_batches()
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                BatchSize = 2
            };

            var cursor = await ExecuteOperationAsync(subject);

            var result = await ReadCursorToEndAsync(cursor);

            result.Should().HaveCount(5);
        }
Example #9
0
        public void Execute_should_throw_when_maxTime_is_exceeded(
            [Values(false, true)] bool async)
        {
            RequireServer.Check().ClusterTypes(ClusterType.Standalone, ClusterType.ReplicaSet);
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            subject.MaxTime = TimeSpan.FromSeconds(9001);

            using (var failPoint = FailPoint.ConfigureAlwaysOn(_cluster, _session, FailPointName.MaxTimeAlwaysTimeout))
            {
                var exception = Record.Exception(() => ExecuteOperation(subject, failPoint.Binding, async));

                exception.Should().BeOfType <MongoExecutionTimeoutException>();
            }
        }
Example #10
0
        public async Task ExecuteAsync_should_find_all_the_documents_matching_the_query_when_split_across_batches()
        {
            RequireServer.Check().VersionLessThan("3.5.0"); // TODO: should work against 3.6.0 but doesn't in Evergreen (works locally)
            EnsureTestData();
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                BatchSize = 2
            };

            using (var cursor = await ExecuteOperationAsync(subject))
            {
                var result = await ReadCursorToEndAsync(cursor);

                result.Should().HaveCount(5);
            }
        }
        internal FindOpcodeOperation <TDocument> CreateFindOpcodeOperation()
        {
            if (!_readConcern.IsServerDefault)
            {
                throw new MongoClientException($"ReadConcern {_readConcern} is not supported by FindOpcodeOperation.");
            }
            if (_collation != null)
            {
                throw new NotSupportedException($"OP_QUERY does not support collations.");
            }
            if (_allowDiskUse.HasValue)
            {
                throw new NotSupportedException($"OP_QUERY does not support allowDiskUse.");
            }

#pragma warning disable 618
            var operation = new FindOpcodeOperation <TDocument>(
                _collectionNamespace,
                _resultSerializer,
                _messageEncoderSettings)
            {
                AllowPartialResults = _allowPartialResults,
                BatchSize           = _batchSize,
                Comment             = _comment,
                CursorType          = _cursorType,
                Filter          = _filter,
                FirstBatchSize  = _firstBatchSize,
                Hint            = _hint,
                Limit           = (_singleBatch ?? false) ? -Math.Abs(_limit.Value) : _limit,
                Max             = _max,
                MaxScan         = _maxScan,
                MaxTime         = _maxTime,
                Min             = _min,
                Modifiers       = _modifiers,
                NoCursorTimeout = _noCursorTimeout,
                OplogReplay     = _oplogReplay,
                Projection      = _projection,
                ShowRecordId    = _showRecordId,
                Skip            = _skip,
                Snapshot        = _snapshot,
                Sort            = _sort
            };

            return(operation);
        }
Example #12
0
        public async Task ExecuteAsync_should_find_documents_matching_options()
        {
            var subject = new FindOpcodeOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                Comment    = "funny",
                Filter     = BsonDocument.Parse("{ y : 1 }"),
                Limit      = 4,
                MaxTime    = TimeSpan.FromSeconds(20),
                Projection = BsonDocument.Parse("{ y : 1 }"),
                Skip       = 1,
                Sort       = BsonDocument.Parse("{ _id : -1 }")
            };

            var cursor = await ExecuteOperationAsync(subject);

            var result = await ReadCursorToEndAsync(cursor);

            result.Should().HaveCount(1);
        }
Example #13
0
 public FindOpcodeExplainOperation(FindOpcodeOperation <BsonDocument> explainOperation)
 {
     _explainOperation = explainOperation;
 }