Skip to content

Commit

Permalink
feat(NODE-4078): allow comment with estimated doc count (#3301)
Browse files Browse the repository at this point in the history
Co-authored-by: Bailey Pearson <bailey.pearson@mongodb.com>
  • Loading branch information
durran and baileympearson committed Jun 30, 2022
1 parent f92895f commit bed1fe3
Show file tree
Hide file tree
Showing 4 changed files with 273 additions and 1 deletion.
6 changes: 6 additions & 0 deletions src/operations/estimated_document_count.ts
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) {
cmd.comment = this.options.comment;
}

super.executeCommand(server, session, cmd, (err, response) => {
if (err) {
callback(err);
Expand Down
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
@@ -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
@@ -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

0 comments on commit bed1fe3

Please sign in to comment.