Skip to content

Commit

Permalink
CSHARP-4184: Sync'd distinct-commnet tests from CRUD spec and updated…
Browse files Browse the repository at this point in the history
… unified runner. (#843)
  • Loading branch information
JamesKovacs authored Jul 6, 2022
1 parent cc23814 commit 0b606c1
Show file tree
Hide file tree
Showing 3 changed files with 288 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
{
"description": "distinct-comment",
"schemaVersion": "1.0",
"createEntities": [
{
"client": {
"id": "client0",
"observeEvents": [
"commandStartedEvent"
]
}
},
{
"database": {
"id": "database0",
"client": "client0",
"databaseName": "distinct-comment-tests"
}
},
{
"collection": {
"id": "collection0",
"database": "database0",
"collectionName": "coll0"
}
}
],
"initialData": [
{
"collectionName": "coll0",
"databaseName": "distinct-comment-tests",
"documents": [
{
"_id": 1,
"x": 11
},
{
"_id": 2,
"x": 22
},
{
"_id": 3,
"x": 33
}
]
}
],
"tests": [
{
"description": "distinct with document comment",
"runOnRequirements": [
{
"minServerVersion": "4.4.14"
}
],
"operations": [
{
"name": "distinct",
"object": "collection0",
"arguments": {
"fieldName": "x",
"filter": {},
"comment": {
"key": "value"
}
},
"expectResult": [ 11, 22, 33 ]
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"distinct": "coll0",
"key": "x",
"query": {},
"comment": {
"key": "value"
}
},
"commandName": "distinct",
"databaseName": "distinct-comment-tests"
}
}
]
}
]
},
{
"description": "distinct with string comment",
"runOnRequirements": [
{
"minServerVersion": "4.4.0"
}
],
"operations": [
{
"name": "distinct",
"object": "collection0",
"arguments": {
"fieldName": "x",
"filter": {},
"comment": "comment"
},
"expectResult": [ 11, 22, 33 ]
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"distinct": "coll0",
"key": "x",
"query": {},
"comment": "comment"
},
"commandName": "distinct",
"databaseName": "distinct-comment-tests"
}
}
]
}
]
},
{
"description": "distinct with document comment - pre 4.4, server error",
"runOnRequirements": [
{
"minServerVersion": "3.6.0",
"maxServerVersion": "4.4.13"
}
],
"operations": [
{
"name": "distinct",
"object": "collection0",
"arguments": {
"fieldName": "x",
"filter": {},
"comment": {
"key": "value"
}
},
"expectError": {
"isClientError": false
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"distinct": "coll0",
"key": "x",
"query": {},
"comment": {
"key": "value"
}
},
"commandName": "distinct",
"databaseName": "distinct-comment-tests"
}
}
]
}
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
description: "distinct-comment"

schemaVersion: "1.0"

createEntities:
- client:
id: &client0 client0
observeEvents: [ commandStartedEvent ]
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name distinct-comment-tests
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name coll0

initialData:
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }

tests:
- description: "distinct with document comment"
runOnRequirements:
# https://jira.mongodb.org/browse/SERVER-44847
# Server supports distinct with comment of any type for comment starting from 4.4.14.
- minServerVersion: "4.4.14"
operations:
- name: distinct
object: *collection0
arguments:
fieldName: &fieldName x
filter: &filter {}
comment: &documentComment { key: "value"}
expectResult: [ 11, 22, 33 ]
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
distinct: *collection0Name
key: *fieldName
query: *filter
comment: *documentComment
commandName: distinct
databaseName: *database0Name

- description: "distinct with string comment"
runOnRequirements:
- minServerVersion: "4.4.0"
operations:
- name: distinct
object: *collection0
arguments:
fieldName: *fieldName
filter: *filter
comment: &stringComment "comment"
expectResult: [ 11, 22, 33 ]
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
distinct: *collection0Name
key: *fieldName
query: *filter
comment: *stringComment
commandName: distinct
databaseName: *database0Name

- description: "distinct with document comment - pre 4.4, server error"
runOnRequirements:
- minServerVersion: "3.6.0"
maxServerVersion: "4.4.13"
operations:
- name: distinct
object: *collection0
arguments:
fieldName: *fieldName
filter: *filter
comment: *documentComment
expectError:
isClientError: false
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
distinct: *collection0Name
key: *fieldName
query: *filter
comment: *documentComment
commandName: distinct
databaseName: *database0Name
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,20 @@ public class UnifiedDistinctOperation : IUnifiedEntityTestOperation
private readonly IMongoCollection<BsonDocument> _collection;
private readonly string _fieldName;
private readonly FilterDefinition<BsonDocument> _filter;
private readonly DistinctOptions _options;
private readonly IClientSessionHandle _session;

public UnifiedDistinctOperation(
IMongoCollection<BsonDocument> collection,
string fieldName,
FilterDefinition<BsonDocument> filter,
DistinctOptions options,
IClientSessionHandle session)
{
_collection = collection;
_fieldName = fieldName;
_filter = filter;
_options = options;
_session = session;
}

Expand All @@ -44,8 +47,8 @@ public OperationResult Execute(CancellationToken cancellationToken)
try
{
using var cursor = _session == null
? _collection.Distinct<BsonValue>(_fieldName, _filter, cancellationToken: cancellationToken)
: _collection.Distinct<BsonValue>(_session, _fieldName, _filter, cancellationToken: cancellationToken);
? _collection.Distinct<BsonValue>(_fieldName, _filter, _options, cancellationToken)
: _collection.Distinct<BsonValue>(_session, _fieldName, _filter, _options, cancellationToken);

var result = cursor.ToList(cancellationToken);

Expand All @@ -62,8 +65,8 @@ public async Task<OperationResult> ExecuteAsync(CancellationToken cancellationTo
try
{
using var cursor = _session == null
? await _collection.DistinctAsync<BsonValue>(_fieldName, _filter, cancellationToken: cancellationToken)
: await _collection.DistinctAsync<BsonValue>(_session, _fieldName, _filter, cancellationToken: cancellationToken);
? await _collection.DistinctAsync<BsonValue>(_fieldName, _filter, _options, cancellationToken)
: await _collection.DistinctAsync<BsonValue>(_session, _fieldName, _filter, _options, cancellationToken);

var result = await cursor.ToListAsync(cancellationToken);

Expand Down Expand Up @@ -91,12 +94,16 @@ public UnifiedDistinctOperation Build(string targetCollectionId, BsonDocument ar

string fieldName = null;
FilterDefinition<BsonDocument> filter = null;
DistinctOptions options = null;
IClientSessionHandle session = null;

foreach (var argument in arguments)
{
switch (argument.Name)
{
case "comment":
options = new DistinctOptions { Comment = argument.Value };
break;
case "fieldName":
fieldName = argument.Value.AsString;
break;
Expand All @@ -111,7 +118,7 @@ public UnifiedDistinctOperation Build(string targetCollectionId, BsonDocument ar
}
}

return new UnifiedDistinctOperation(collection, fieldName, filter, session);
return new UnifiedDistinctOperation(collection, fieldName, filter, options, session);
}
}
}

0 comments on commit 0b606c1

Please sign in to comment.