Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(NODE-4078): allow comment with estimated doc count #3301

Merged
merged 4 commits into from
Jun 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/operations/estimated_document_count.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ export class EstimatedDocumentCountOperation extends CommandOperation<number> {
cmd.maxTimeMS = this.options.maxTimeMS;
}

// we check for undefined specifically here to allow falsy values
// eslint-disable-next-line no-restricted-syntax
if (this.options.comment !== undefined) {
dariakp marked this conversation as resolved.
Show resolved Hide resolved
cmd.comment = this.options.comment;
}

super.executeCommand(server, session, cmd, (err, response) => {
if (err) {
callback(err);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ function* generateTestCombinations() {
['aggregate', { pipeline: [] }] as const,
['insertMany', { documents: [{ name: 'john' }] }] as const,
['deleteOne', { filter: { toBeDeleted: true } }] as const,
['findOneAndReplace', { filter: { _id: 1 }, replacement: { x: 12 } }] as const
['findOneAndReplace', { filter: { _id: 1 }, replacement: { x: 12 } }] as const,
['estimatedDocumentCount', {}] as const
]) {
for (const falsyValue of falsyValues) {
yield { name, args: { ...args, comment: falsyValue } };
Expand Down
170 changes: 170 additions & 0 deletions test/spec/crud/unified/estimatedDocumentCount-comment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
{
"description": "estimatedDocumentCount-comment",
"schemaVersion": "1.0",
"createEntities": [
{
"client": {
"id": "client0",
"observeEvents": [
"commandStartedEvent"
]
}
},
{
"database": {
"id": "database0",
"client": "client0",
"databaseName": "edc-comment-tests"
}
},
{
"collection": {
"id": "collection0",
"database": "database0",
"collectionName": "coll0"
}
}
],
"initialData": [
{
"collectionName": "coll0",
"databaseName": "edc-comment-tests",
"documents": [
{
"_id": 1,
"x": 11
},
{
"_id": 2,
"x": 22
},
{
"_id": 3,
"x": 33
}
]
}
],
"tests": [
{
"description": "estimatedDocumentCount with document comment",
"runOnRequirements": [
{
"minServerVersion": "4.4.14"
}
],
"operations": [
{
"name": "estimatedDocumentCount",
"object": "collection0",
"arguments": {
"comment": {
"key": "value"
}
},
"expectResult": 3
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"count": "coll0",
"comment": {
"key": "value"
}
},
"commandName": "count",
"databaseName": "edc-comment-tests"
}
}
]
}
]
},
{
"description": "estimatedDocumentCount with string comment",
"runOnRequirements": [
{
"minServerVersion": "4.4.0"
}
],
"operations": [
{
"name": "estimatedDocumentCount",
"object": "collection0",
"arguments": {
"comment": "comment"
},
"expectResult": 3
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"count": "coll0",
"comment": "comment"
},
"commandName": "count",
"databaseName": "edc-comment-tests"
}
}
]
}
]
},
{
"description": "estimatedDocumentCount with document comment - pre 4.4.14, server error",
"runOnRequirements": [
{
"minServerVersion": "3.6.0",
"maxServerVersion": "4.4.13",
"topologies": [
"single",
"replicaset"
]
}
],
"operations": [
{
"name": "estimatedDocumentCount",
"object": "collection0",
"arguments": {
"comment": {
"key": "value"
}
},
"expectError": {
"isClientError": false
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"count": "coll0",
"comment": {
"key": "value"
}
},
"commandName": "count",
"databaseName": "edc-comment-tests"
}
}
]
}
]
}
]
}
95 changes: 95 additions & 0 deletions test/spec/crud/unified/estimatedDocumentCount-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
description: "estimatedDocumentCount-comment"

schemaVersion: "1.0"

createEntities:
- client:
id: &client0 client0
observeEvents: [ commandStartedEvent ]
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name edc-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: "estimatedDocumentCount with document comment"
runOnRequirements:
# https://jira.mongodb.org/browse/SERVER-63315
# Server supports count with comment of any type for comment starting from 4.4.14.
- minServerVersion: "4.4.14"
operations:
- name: estimatedDocumentCount
object: *collection0
arguments:
comment: &documentComment { key: "value"}
expectResult: 3
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
count: *collection0Name
comment: *documentComment
commandName: count
databaseName: *database0Name

- description: "estimatedDocumentCount with string comment"
runOnRequirements:
- minServerVersion: "4.4.0"
operations:
- name: estimatedDocumentCount
object: *collection0
arguments:
comment: &stringComment "comment"
expectResult: 3
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
count: *collection0Name
comment: *stringComment
commandName: count
databaseName: *database0Name

- description: "estimatedDocumentCount with document comment - pre 4.4.14, server error"
runOnRequirements:
- minServerVersion: "3.6.0"
maxServerVersion: "4.4.13"
# Server does not raise an error if topology is sharded.
# https://jira.mongodb.org/browse/SERVER-65954
topologies: [ single, replicaset ]
operations:
- name: estimatedDocumentCount
object: *collection0
arguments:
# Even though according to the docs count command does not support any
# comment for server version less than 4.4, no error is raised by such
# servers. Therefore, we have only one test with a document comment
# to test server errors.
# https://jira.mongodb.org/browse/SERVER-63315
# Server supports count with comment of any type for comment starting from 4.4.14.
comment: *documentComment
expectError:
isClientError: false
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
count: *collection0Name
comment: *documentComment
commandName: count
databaseName: *database0Name