Beispiel #1
0
        public void CreateCommand_should_return_expected_result_when_CommitQuorum_with_w_is_Set(
            [Values(1, 2, 3)] int w)
        {
            var requests     = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            var commitQuorum = CreateIndexCommitQuorum.Create(w);
            var subject      = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings)
            {
                CommitQuorum = commitQuorum
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion: Feature.CreateIndexCommitQuorum.FirstSupportedVersion);

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

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

            result.Should().Be(expectedResult);
            result["commitQuorum"].BsonType.Should().Be(BsonType.Int32);
        }
        public void CreateOperation_should_return_expected_result(
            [Values(null, 1, 2)] int?w,
            [Values(null, -10000, 0, 1, 42, 9000, 10000, 10001)] int?maxTimeTicks)
        {
            var requests     = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            var commitQuorum = w.HasValue ? CreateIndexCommitQuorum.Create(w.Value) : null;
            var maxTime      = maxTimeTicks == null ? (TimeSpan?)null : TimeSpan.FromTicks(maxTimeTicks.Value);
            var writeConcern = new WriteConcern(1);
            var subject      = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings)
            {
                CommitQuorum = commitQuorum,
                MaxTime      = maxTime,
                WriteConcern = writeConcern
            };

            var result = subject.CreateOperation();

            result.Should().BeOfType <CreateIndexesUsingCommandOperation>();
            var operation = (CreateIndexesUsingCommandOperation)result;

            operation.CollectionNamespace.Should().BeSameAs(_collectionNamespace);
            operation.CommitQuorum.Should().BeSameAs(commitQuorum);
            operation.MaxTime.Should().Be(maxTime);
            operation.MessageEncoderSettings.Should().BeSameAs(_messageEncoderSettings);
            operation.Requests.Should().Equal(requests);
            operation.WriteConcern.Should().BeSameAs(writeConcern);
        }
        public void CreateCommand_should_return_expected_result_when_CommitQuorum_with_mode_is_Set(
            [Values("abc", "def")] string mode)
        {
            var requests     = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            var commitQuorum = CreateIndexCommitQuorum.Create(mode);
            var subject      = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings)
            {
                CommitQuorum = commitQuorum
            };
            var session = OperationTestHelper.CreateSession();
            var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.CreateIndexCommitQuorum.FirstSupportedWireVersion);

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

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

            result.Should().Be(expectedResult);
            result["commitQuorum"].BsonType.Should().Be(BsonType.String);
        }
Beispiel #4
0
        public void Create_with_w_should_return_expected_result(
            [Values(1, 2, 3)] int w)
        {
            var subject = CreateIndexCommitQuorum.Create(w);

            var s = subject.Should().BeOfType <CreateIndexCommitQuorumWithW>().Subject;

            s.W.Should().Be(w);
        }
Beispiel #5
0
        public void Create_with_mode_should_return_expected_result(
            [Values("abc", "def")] string mode)
        {
            var subject = CreateIndexCommitQuorum.Create(mode);

            var s = subject.Should().BeOfType <CreateIndexCommitQuorumWithMode>().Subject;

            s.Mode.Should().Be(mode);
        }
Beispiel #6
0
        public void CommitQuorum_get_and_set_should_work(
            [Values(null, 1, 2)] int?w)
        {
            var subject = new CreateIndexesUsingCommandOperation(_collectionNamespace, Enumerable.Empty <CreateIndexRequest>(), _messageEncoderSettings);
            var value   = w.HasValue ? CreateIndexCommitQuorum.Create(w.Value) : null;

            subject.CommitQuorum = value;
            var result = subject.CommitQuorum;

            result.Should().BeSameAs(value);
        }
Beispiel #7
0
        public void CommitQuorum_set_should_have_expected_result(
            [Values(null, 1, 2)] int?w)
        {
            var commitQuorum = w.HasValue ? CreateIndexCommitQuorum.Create(w.Value) : null;
            var subject      = new CreateOneIndexOptions()
            {
                CommitQuorum = commitQuorum
            };

            subject.CommitQuorum = commitQuorum;

            subject.CommitQuorum.Should().Be(commitQuorum);
        }
Beispiel #8
0
        public void CommitQuorum_get_should_return_expected_result(
            [Values(null, 1, 2)] int?w)
        {
            var commitQuorum = w.HasValue ? CreateIndexCommitQuorum.Create(w.Value) : null;
            var subject      = new CreateOneIndexOptions()
            {
                CommitQuorum = commitQuorum
            };

            var result = subject.CommitQuorum;

            result.Should().BeSameAs(commitQuorum);
        }
Beispiel #9
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>();
        }
Beispiel #10
0
        public void Execute_should_work_when_commitQuorum_is_specified(
            [Values(1, "majority", "votingMembers")] object commitQuorumCase,
            [Values(false, true)] bool async)
        {
            RequireServer.Check().ClusterTypes(ClusterType.ReplicaSet, ClusterType.Sharded).Supports(Feature.CreateIndexCommitQuorum);
            DropCollection();
            var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) };
            CreateIndexCommitQuorum commitQuorum;

            if (commitQuorumCase is int w)
            {
                commitQuorum = CreateIndexCommitQuorum.Create(w);
            }
            else if (commitQuorumCase is string mode)
            {
                switch (mode)
                {
                case "majority": commitQuorum = CreateIndexCommitQuorum.Majority; break;

                case "votingMembers": commitQuorum = CreateIndexCommitQuorum.VotingMembers; break;

                default: commitQuorum = CreateIndexCommitQuorum.Create(mode); break;
                }
            }
            else
            {
                throw new ArgumentException($"Invalid commitQuorumCase: {commitQuorumCase}.", nameof(commitQuorumCase));
            }
            var subject = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings)
            {
                CommitQuorum = commitQuorum
            };

            ExecuteOperation(subject, async);

            var indexes = ListIndexes();

            indexes.Select(index => index["name"].AsString).Should().BeEquivalentTo(new[] { "_id_", "x_1" });
        }