public void CreateCommand_should_return_expected_result_when_WriteConcern_is_set( [Values(1, 2)] int w) { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var writeConcern = new WriteConcern(w); var subject = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings) { WriteConcern = writeConcern }; 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() } }, { "writeConcern", writeConcern.ToBsonDocument() } }; result.Should().Be(expectedResult); }
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 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", w } }; result.Should().Be(expectedResult); result["commitQuorum"].BsonType.Should().Be(BsonType.Int32); }
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 CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings) { CommitQuorum = commitQuorum }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.CreateIndexCommitQuorum.LastNotSupportedWireVersion); var exception = Record.Exception(() => subject.CreateCommand(session, connectionDescription)); exception.Should().BeOfType <NotSupportedException>(); }
public void CreateCommand_should_return_expected_result_when_creating_one_index() { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var subject = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings); var expectedResult = new BsonDocument { { "createIndexes", _collectionNamespace.CollectionName }, { "indexes", new BsonArray { requests[0].CreateIndexDocument() } } }; var result = subject.CreateCommand(); result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_MaxTime_is_Set(long maxTimeTicks, int expectedMaxTimeMS) { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var subject = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings); subject.MaxTime = TimeSpan.FromTicks(maxTimeTicks); 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() } }, { "maxTimeMS", expectedMaxTimeMS }, }; result.Should().Be(expectedResult); result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32); }
public void CreateCommand_should_return_expected_result_when_creating_two_indexes() { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)), new CreateIndexRequest(new BsonDocument("y", 1)) }; var subject = new CreateIndexesOperation(_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(), requests[1].CreateIndexDocument() } } }; result.Should().Be(expectedResult); }
public void CreateEncryptedCreateCollectionOperationIfConfigured_should_return_expected_result_when_EncryptedFields_is_set(string[] escCollectionStrElement, string[] eccCollectionStrElement, string[] ecocCollectionStrElement) { var encryptedFields = BsonDocument.Parse($@" {{ {GetFirstElementWithCommaOrEmpty(escCollectionStrElement)} {GetFirstElementWithCommaOrEmpty(eccCollectionStrElement)} {GetFirstElementWithCommaOrEmpty(ecocCollectionStrElement)} ""fields"" : [{{ ""path"" : ""firstName"", ""keyId"" : {{ ""$binary"" : {{ ""subType"" : ""04"", ""base64"" : ""AAAAAAAAAAAAAAAAAAAAAA=="" }} }}, ""bsonType"" : ""string"", ""queries"" : {{ ""queryType"" : ""equality"" }} }}, {{ ""path"" : ""ssn"", ""keyId"" : {{ ""$binary"" : {{ ""subType"" : ""04"", ""base64"": ""BBBBBBBBBBBBBBBBBBBBBB=="" }} }}, ""bsonType"" : ""string"" }}] }}"); var subject = CreateCollectionOperation.CreateEncryptedCreateCollectionOperationIfConfigured(_collectionNamespace, encryptedFields, _messageEncoderSettings, null); var session = OperationTestHelper.CreateSession(); var operations = ((CompositeWriteOperation <BsonDocument>)subject)._operations <BsonDocument>(); // esc AssertCreateCollectionCommand( operations[0], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(escCollectionStrElement)), encryptedFields: null, isMainOperation: false); // ecc AssertCreateCollectionCommand( operations[1], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(eccCollectionStrElement)), encryptedFields: null, isMainOperation: false); // eco AssertCreateCollectionCommand( operations[2], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(ecocCollectionStrElement)), encryptedFields: null, isMainOperation: false); // main AssertCreateCollectionCommand( operations[3], _collectionNamespace, encryptedFields, isMainOperation: true, withClusteredIndex: false); // __safeContent__ AssertIndex(operations[4], _collectionNamespace, index: new BsonDocument("__safeContent__", 1)); void AssertCreateCollectionCommand((IWriteOperation <BsonDocument> Operation, bool IsMainOperation) operationInfo, CollectionNamespace collectionNamespace, BsonDocument encryptedFields, bool isMainOperation, bool withClusteredIndex = true) { var expectedResult = new BsonDocument { { "create", collectionNamespace.CollectionName }, { "encryptedFields", encryptedFields, encryptedFields != null }, { "clusteredIndex", new BsonDocument { { "key", new BsonDocument("_id", 1) }, { "unique", true } }, withClusteredIndex } }; AssertCommand(operationInfo, isMainOperation, expectedResult); } void AssertIndex((IWriteOperation <BsonDocument> Operation, bool IsMainOperation) operationInfo, CollectionNamespace collectionNamespace, BsonDocument index) { var expectedResult = new BsonDocument { { "createIndexes", collectionNamespace.CollectionName }, { "indexes", BsonArray.Create(new [] { new BsonDocument { { "key", index }, { "name", IndexNameHelper.GetIndexName(index) } } }) } }; AssertCommand(operationInfo, isMainOperation: false, expectedResult); } void AssertCommand((IWriteOperation <BsonDocument> Operation, bool IsMainOperation) operationInfo, bool isMainOperation, BsonDocument expectedResult) { operationInfo.IsMainOperation.Should().Be(isMainOperation); var operation = operationInfo.Operation; var result = operation switch { CreateCollectionOperation createCollectionOperation => createCollectionOperation.CreateCommand(session), CreateIndexesOperation createIndexesOperation => createIndexesOperation.CreateCommand(session, OperationTestHelper.CreateConnectionDescription()), _ => throw new Exception($"Unexpected operation {operation}."), }; result.Should().Be(expectedResult); } string GetFirstElementWithCommaOrEmpty(string[] array) => array.First() != null ? $"{array.First()}," : string.Empty; string GetExpectedCollectionName(string[] array) { var first = array.First(); var last = array.Last(); if (first != null) { return(last); } else { return($"enxcol_.{_collectionNamespace.CollectionName}.{last}"); } } }