public void CreateCommand_should_return_expected_result_when_Sort_is_set( [Values(null, "{ x : 1 }", "{ y : 1 }")] string sortString) { var sort = sortString == null ? null : BsonDocument.Parse(sortString); var subject = new FindOneAndReplaceOperation <BsonDocument>(_collectionNamespace, _filter, _replacement, BsonDocumentSerializer.Instance, _messageEncoderSettings) { Sort = sort }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(); var result = subject.CreateCommand(session, connectionDescription, null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "update", _replacement }, { "sort", sort, sort != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_the_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 FindOneAndDeleteOperation <BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { Collation = collation }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion: Feature.Collation.FirstSupportedVersion); var result = subject.CreateCommand(session, connectionDescription, null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "collation", () => collation.ToBsonDocument(), collation != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_Comment_is_set( [Values(null, "test")] string comment) { var subject = new AggregateOperation <BsonDocument>(_collectionNamespace, __pipeline, __resultSerializer, _messageEncoderSettings) { Comment = comment, }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.AggregateComment.FirstSupportedVersion); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "aggregate", _collectionNamespace.CollectionName }, { "pipeline", new BsonArray(__pipeline) }, { "comment", () => comment, comment != null }, { "cursor", new BsonDocument() } }; result.Should().Be(expectedResult); }
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 FindOneAndReplaceOperation <BsonDocument>(_collectionNamespace, _filter, _replacement, BsonDocumentSerializer.Instance, _messageEncoderSettings) { WriteConcern = writeConcern }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(); var result = subject.CreateCommand(session, connectionDescription, null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "update", _replacement }, { "writeConcern", () => writeConcern.ToBsonDocument(), writeConcern != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_AllowPartialResults_is_set( [Values(null, false, true)] bool?allowPartialResults, [Values(ServerType.Standalone, ServerType.ShardRouter)] ServerType serverType) { var subject = new FindCommandOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings) { AllowPartialResults = allowPartialResults }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverType: serverType); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "find", _collectionNamespace.CollectionName }, { "allowPartialResults", () => allowPartialResults.Value, allowPartialResults.HasValue&& serverType == ServerType.ShardRouter } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_the_expected_result_when_AllowDiskUse_is_set( [Values(null, false, true)] bool?allowDiskUse) { var subject = new AggregateOperation <BsonDocument>(_collectionNamespace, __pipeline, __resultSerializer, _messageEncoderSettings) { AllowDiskUse = allowDiskUse }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.AggregateCursorResult.FirstSupportedVersion); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "aggregate", _collectionNamespace.CollectionName }, { "pipeline", new BsonArray(__pipeline) }, { "allowDiskUse", () => allowDiskUse.Value, allowDiskUse != null }, { "cursor", new BsonDocument() } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_MaxTime_is_set( [Values(null, 1, 2)] int?milliseconds) { var maxTime = milliseconds.HasValue ? TimeSpan.FromMilliseconds(milliseconds.Value) : (TimeSpan?)null; var subject = new DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings) { MaxTime = maxTime }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "distinct", _collectionNamespace.CollectionName }, { "key", _fieldName }, { "maxTimeMS", () => maxTime.Value.TotalMilliseconds, maxTime.HasValue } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_ReadConcern_is_set( [Values(null, ReadConcernLevel.Linearizable, ReadConcernLevel.Local)] ReadConcernLevel?level) { var readConcern = level.HasValue ? new ReadConcern(level.Value) : ReadConcern.Default; var subject = new DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings) { ReadConcern = readConcern }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.ReadConcern.FirstSupportedVersion); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "distinct", _collectionNamespace.CollectionName }, { "key", _fieldName }, { "readConcern", () => readConcern.ToBsonDocument(), !readConcern.IsServerDefault } }; result.Should().Be(expectedResult); }
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 DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings) { Collation = collation }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.Collation.FirstSupportedVersion); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "distinct", _collectionNamespace.CollectionName }, { "key", _fieldName }, { "collation", () => collation.ToBsonDocument(), collation != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_Filter_is_set( [Values(null, "{ x : 1 }", "{ x : 2 }")] string filterString) { var filter = filterString == null ? null : BsonDocument.Parse(filterString); var subject = new DistinctOperation <int>(_collectionNamespace, _valueSerializer, _fieldName, _messageEncoderSettings) { Filter = filter }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "distinct", _collectionNamespace.CollectionName }, { "key", _fieldName }, { "query", filter, filter != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_MaxTime_is_set(long maxTimeTicks, int expectedMaxTimeMS) { var subject = new GeoNearOperation <BsonDocument>(_collectionNamespace, _near, _resultSerializer, _messageEncoderSettings) { MaxTime = TimeSpan.FromTicks(maxTimeTicks) }; var connectionDescription = OperationTestHelper.CreateConnectionDescription(Feature.Collation.FirstSupportedVersion); var session = OperationTestHelper.CreateSession(); var result = subject.CreateCommand(connectionDescription, session); var expectedResult = new BsonDocument { { "geoNear", _collectionNamespace.CollectionName }, { "near", new BsonArray { 1, 2 } }, { "maxTimeMS", expectedMaxTimeMS } }; result.Should().Be(expectedResult); result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32); }
public void CreateCommand_should_return_the_expected_result_when_Hint_is_set( [Values(null, "{x: 1}")] string hintJson) { var hint = hintJson == null ? null : BsonDocument.Parse(hintJson); var subject = new AggregateToCollectionOperation(_collectionNamespace, __pipeline, _messageEncoderSettings) { Hint = hint }; 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() }, { "hint", () => hint, hint != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_Collation_is_set( [Values(null, "en_US")] string locale) { var collation = locale == null ? null : new Collation(locale); var subject = new AggregateToCollectionOperation(_collectionNamespace, __pipeline, _messageEncoderSettings) { Collation = collation }; 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) }, { "collation", () => collation.ToBsonDocument(), collation != null }, { "cursor", new BsonDocument() } }; result.Should().Be(expectedResult); }
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 CreateViewOperation(_databaseNamespace, _viewName, _collectionNamespace.CollectionName, _pipeline, _messageEncoderSettings) { Collation = collation }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion: Feature.Views.FirstSupportedVersion); var result = subject.CreateCommand(session, connectionDescription); var expectedResult = new BsonDocument { { "create", _viewName }, { "viewOn", _collectionNamespace.CollectionName }, { "pipeline", new BsonArray(_pipeline) }, { "collation", () => collation.ToBsonDocument(), collation != null } }; 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}"); } } }
public void CreateEncryptedDropCollectionOperationIfConfigured_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 = DropCollectionOperation.CreateEncryptedDropCollectionOperationIfConfigured(_collectionNamespace, encryptedFields, _messageEncoderSettings, null); var session = OperationTestHelper.CreateSession(); var operations = ((CompositeWriteOperation <BsonDocument>)subject)._operations <BsonDocument>(); // esc AssertDropCollectionCommand( operations[0], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(escCollectionStrElement)), encryptedFields: null, isMainOperation: false); // ecc AssertDropCollectionCommand( operations[1], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(eccCollectionStrElement)), encryptedFields: null, isMainOperation: false); // eco AssertDropCollectionCommand( operations[2], new CollectionNamespace(_collectionNamespace.DatabaseNamespace.DatabaseName, GetExpectedCollectionName(ecocCollectionStrElement)), encryptedFields: null, isMainOperation: false); // main AssertDropCollectionCommand( operations[3], _collectionNamespace, encryptedFields, isMainOperation: true); void AssertDropCollectionCommand((IWriteOperation <BsonDocument> Operation, bool IsMainOperation) operationInfo, CollectionNamespace collectionNamespace, BsonDocument encryptedFields, bool isMainOperation) { operationInfo.IsMainOperation.Should().Be(isMainOperation); var operation = operationInfo.Operation.Should().BeOfType <DropCollectionOperation>().Subject; var result = operation.CreateCommand(session); var expectedResult = new BsonDocument { { "drop", collectionNamespace.CollectionName }, }; 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}"); } } }