Skip to content

DRIVERS-1872 Add sessions spec tests to verify explicit sessions were created on the correct client #1754

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

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
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
9 changes: 2 additions & 7 deletions source/sessions/tests/README.md
Original file line number Diff line number Diff line change
@@ -84,14 +84,9 @@ Repeat the above for all methods that take a session parameter.

### 5. Session argument is for the right client

- Create `client1` and `client2`
- Get `database` from `client1`
- Get `collection` from `database`
- Start `session` from `client2`
- Call `collection.insertOne(session,...)`
- Assert that an error was reported because `session` was not started from `client1`
Removed.

Repeat the above for all methods that take a session parameter.
Tested in the unified test "driver-sessions-argument-for-correct-client".

### 6. No further operations can be performed using a session after `endSession` has been called

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
description: driver-sessions-argument-for-correct-client

schemaVersion: "1.0"

createEntities:
- client:
id: &client0 client0
- client:
id: &client1 client1
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name session-tests
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name test
- session:
id: &session1 session1
client: *client1

tests:
- description: Session argument is for the right client
operations:
- name: insertOne
object: *collection0
arguments:
session: *session1
document: { _id: 2 }
expectError:
isClientError: true
- name: insertMany
object: *collection0
arguments:
session: *session1
documents: [ { _id: 1 } ]
expectError:
isClientError: true
- name: deleteOne
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
expectError:
isClientError: true
- name: deleteMany
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
expectError:
isClientError: true
- name: updateOne
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
update: { $set: { x: 2 } }
expectError:
isClientError: true
- name: updateMany
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
update: { $set: { x: 2 } }
expectError:
isClientError: true
- name: updateSearchIndex
object: *collection0
arguments:
session: *session1
name: test index
definition: {}
expectError:
isClientError: true
- name: replaceOne
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
replacement: { x: 2 }
expectError:
isClientError: true
- name: aggregate
object: *collection0
arguments:
session: *session1
pipeline: []
expectError:
isClientError: true
- name: bulkWrite
object: *collection0
arguments:
session: *session1
requests: []
expectError:
isClientError: true
- name: estimatedDocumentCount
object: *collection0
arguments:
session: *session1
expectError:
isClientError: true
- name: distinct
object: *collection0
arguments:
session: *session1
fieldName: x
filter: {}
expectError:
isClientError: true
- name: find
object: *collection0
arguments:
session: *session1
filter: { _id: 1 }
expectError:
isClientError: true
- name: findOne
object: *collection0
arguments:
session: *session1
filter: { _id: 1 }
expectError:
isClientError: true
- name: findOneAndDelete
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
expectError:
isClientError: true
- name: findOneAndReplace
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
replacement: { x: 2 }
expectError:
isClientError: true
- name: findOneAndUpdate
object: *collection0
arguments:
session: *session1
filter: { x: 3 }
update: { $set: { x: 2 } }
expectError:
isClientError: true
- name: countDocuments
object: *collection0
arguments:
session: *session1
filter: {}
expectError:
isClientError: true
- name: createFindCursor
object: *collection0
arguments:
session: *session1
filter: {}
expectError:
isClientError: true
- name: createIndex
object: *collection0
arguments:
session: *session1
name: foo
keys: { x: 1 }
expectError:
isClientError: true
- name: createSearchIndex
object: *collection0
arguments:
session: *session1
model: {}
expectError:
isClientError: true
- name: createSearchIndexes
object: *collection0
arguments:
session: *session1
models: []
expectError:
isClientError: true
- name: dropIndex
object: *collection0
arguments:
session: *session1
name: x_1
expectError:
isClientError: true
- name: dropIndexes
object: *collection0
arguments:
session: *session1
expectError:
isClientError: true
- name: dropSearchIndex
object: *collection0
arguments:
session: *session1
name: x_1
expectError:
isClientError: true
- name: listIndexes
object: *collection0
arguments:
session: *session1
expectError:
isClientError: true
- name: listSearchIndexes
object: *collection0
arguments:
session: *session1
expectError:
isClientError: true
- name: listCollections
object: *database0
arguments:
session: *session1
expectError:
isClientError: true
- name: listCollectionNames
object: *database0
arguments:
session: *session1
expectError:
isClientError: true
- name: dropCollection
object: *database0
arguments:
collection: collection0
session: *session1
expectError:
isClientError: true
- name: listDatabases
object: *client0
arguments:
session: *session1
expectError:
isClientError: true
- description: Session argument is for the right client (clientBulkWrite)
runOnRequirements:
- minServerVersion: "8.0"
operations:
- name: clientBulkWrite
object: *client0
arguments:
models: []
session: *session1
expectError:
isClientError: true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where from we get the list of operations? Should we also test the following commands (I've reviewed C# Driver public API that accepts session as a parameter)?

  • MongoClient.DropDatabase
  • MongoClient.ListDatabaseNames
  • MongoClient.Watch
  • MongoDatabase.CreateCollection
  • MongoDatabase.CreateView
  • MongoDatabase.RenameCollection
  • MongoDatabase.RunCommand
  • MongoDatabase.Watch
  • Collection.AggregateToCollection
  • Collection.Watch