PYTHON-3123 Convert sessions spec tests to unified test format (#888)
Create implicit session _before_ starting a retryable read.
This commit is contained in:
parent
f8f34b0438
commit
a3f0f91588
@ -1720,9 +1720,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
# MongoDB < 4.9
|
||||
cmd = SON([("count", self.__name)])
|
||||
cmd.update(kwargs)
|
||||
return self._count_cmd(None, sock_info, read_preference, cmd, collation=None)
|
||||
return self._count_cmd(session, sock_info, read_preference, cmd, collation=None)
|
||||
|
||||
return self.__database.client._retryable_read(_cmd, self.read_preference, None)
|
||||
return self._retryable_non_cursor_read(_cmd, None)
|
||||
|
||||
def count_documents(
|
||||
self,
|
||||
@ -1807,9 +1807,13 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
return 0
|
||||
return result["n"]
|
||||
|
||||
return self.__database.client._retryable_read(
|
||||
_cmd, self._read_preference_for(session), session
|
||||
)
|
||||
return self._retryable_non_cursor_read(_cmd, session)
|
||||
|
||||
def _retryable_non_cursor_read(self, func, session):
|
||||
"""Non-cursor read helper to handle implicit session creation."""
|
||||
client = self.__database.client
|
||||
with client._tmp_session(session) as s:
|
||||
return client._retryable_read(func, self._read_preference_for(s), s)
|
||||
|
||||
def create_indexes(
|
||||
self,
|
||||
@ -2157,30 +2161,31 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
codec_options=codec_options, read_preference=ReadPreference.PRIMARY
|
||||
)
|
||||
read_pref = (session and session._txn_read_preference()) or ReadPreference.PRIMARY
|
||||
explicit_session = session is not None
|
||||
|
||||
def _cmd(session, server, sock_info, read_preference):
|
||||
cmd = SON([("listIndexes", self.__name), ("cursor", {})])
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
|
||||
with self.__database.client._tmp_session(session, False) as s:
|
||||
try:
|
||||
cursor = self._command(
|
||||
sock_info, cmd, read_preference, codec_options, session=s
|
||||
)["cursor"]
|
||||
except OperationFailure as exc:
|
||||
# Ignore NamespaceNotFound errors to match the behavior
|
||||
# of reading from *.system.indexes.
|
||||
if exc.code != 26:
|
||||
raise
|
||||
cursor = {"id": 0, "firstBatch": []}
|
||||
try:
|
||||
cursor = self._command(
|
||||
sock_info, cmd, read_preference, codec_options, session=session
|
||||
)["cursor"]
|
||||
except OperationFailure as exc:
|
||||
# Ignore NamespaceNotFound errors to match the behavior
|
||||
# of reading from *.system.indexes.
|
||||
if exc.code != 26:
|
||||
raise
|
||||
cursor = {"id": 0, "firstBatch": []}
|
||||
cmd_cursor = CommandCursor(
|
||||
coll, cursor, sock_info.address, session=s, explicit_session=session is not None
|
||||
coll, cursor, sock_info.address, session=session, explicit_session=explicit_session
|
||||
)
|
||||
cmd_cursor._maybe_pin_connection(sock_info)
|
||||
return cmd_cursor
|
||||
|
||||
return self.__database.client._retryable_read(_cmd, read_pref, session)
|
||||
with self.__database.client._tmp_session(session, False) as s:
|
||||
return self.__database.client._retryable_read(_cmd, read_pref, s)
|
||||
|
||||
def index_information(
|
||||
self,
|
||||
@ -2701,9 +2706,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
user_fields={"values": 1},
|
||||
)["values"]
|
||||
|
||||
return self.__database.client._retryable_read(
|
||||
_cmd, self._read_preference_for(session), session
|
||||
)
|
||||
return self._retryable_non_cursor_read(_cmd, session)
|
||||
|
||||
def _write_concern_for_cmd(self, cmd, session):
|
||||
raw_wc = cmd.get("writeConcern")
|
||||
|
||||
969
test/sessions/driver-sessions-dirty-session-errors.json
Normal file
969
test/sessions/driver-sessions-dirty-session-errors.json
Normal file
@ -0,0 +1,969 @@
|
||||
{
|
||||
"description": "driver-sessions-dirty-session-errors",
|
||||
"schemaVersion": "1.0",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.0",
|
||||
"topologies": [
|
||||
"replicaset"
|
||||
]
|
||||
},
|
||||
{
|
||||
"minServerVersion": "4.1.8",
|
||||
"topologies": [
|
||||
"sharded-replicaset"
|
||||
]
|
||||
}
|
||||
],
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"useMultipleMongoses": false,
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "test"
|
||||
}
|
||||
},
|
||||
{
|
||||
"session": {
|
||||
"id": "session0",
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "Dirty explicit session is discarded (insert)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"insert"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"$$unsetOrMatches": {
|
||||
"insertedId": {
|
||||
"$$unsetOrMatches": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 3
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"$$unsetOrMatches": {
|
||||
"insertedId": {
|
||||
"$$unsetOrMatches": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
},
|
||||
"txnNumber": 1
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
},
|
||||
"txnNumber": 1
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 3
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
},
|
||||
"txnNumber": 2
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
},
|
||||
{
|
||||
"_id": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Dirty explicit session is discarded (findAndModify)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"findAndModify"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"returnDocument": "Before"
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
},
|
||||
"txnNumber": 1,
|
||||
"readConcern": {
|
||||
"$$exists": false
|
||||
},
|
||||
"writeConcern": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "findAndModify",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
},
|
||||
"txnNumber": 1,
|
||||
"readConcern": {
|
||||
"$$exists": false
|
||||
},
|
||||
"writeConcern": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "findAndModify",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (insert)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"insert"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"$$unsetOrMatches": {
|
||||
"insertedId": {
|
||||
"$$unsetOrMatches": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
},
|
||||
"txnNumber": 1
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
},
|
||||
"txnNumber": 1
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (findAndModify)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"findAndModify"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"returnDocument": "Before"
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
},
|
||||
"txnNumber": 1,
|
||||
"readConcern": {
|
||||
"$$exists": false
|
||||
},
|
||||
"writeConcern": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "findAndModify",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
},
|
||||
"txnNumber": 1,
|
||||
"readConcern": {
|
||||
"$$exists": false
|
||||
},
|
||||
"writeConcern": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "findAndModify",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (read returning cursor)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"aggregate"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "aggregate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$project": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"expectResult": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "test",
|
||||
"pipeline": [
|
||||
{
|
||||
"$project": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "test",
|
||||
"pipeline": [
|
||||
{
|
||||
"$project": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (read not returning cursor)",
|
||||
"operations": [
|
||||
{
|
||||
"name": "failPoint",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"aggregate"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "countDocuments",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {}
|
||||
},
|
||||
"expectResult": 1
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "test",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {}
|
||||
},
|
||||
{
|
||||
"$group": {
|
||||
"_id": 1,
|
||||
"n": {
|
||||
"$sum": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "test",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {}
|
||||
},
|
||||
{
|
||||
"$group": {
|
||||
"_id": 1,
|
||||
"n": {
|
||||
"$sum": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
256
test/sessions/driver-sessions-server-support.json
Normal file
256
test/sessions/driver-sessions-server-support.json
Normal file
@ -0,0 +1,256 @@
|
||||
{
|
||||
"description": "driver-sessions-server-support",
|
||||
"schemaVersion": "1.0",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6"
|
||||
}
|
||||
],
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"useMultipleMongoses": false,
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "test"
|
||||
}
|
||||
},
|
||||
{
|
||||
"session": {
|
||||
"id": "session0",
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "Server supports explicit sessions",
|
||||
"operations": [
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"$$unsetOrMatches": {
|
||||
"insertedId": {
|
||||
"$$unsetOrMatches": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertSameLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
}
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$sessionLsid": "session0"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Server supports implicit sessions",
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"$$unsetOrMatches": {
|
||||
"insertedId": {
|
||||
"$$unsetOrMatches": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"expectResult": []
|
||||
},
|
||||
{
|
||||
"name": "assertSameLsidOnLastTwoCommands",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"client": "client0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "insert",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": {
|
||||
"$$type": "object"
|
||||
}
|
||||
},
|
||||
"commandName": "find",
|
||||
"databaseName": "session-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "test",
|
||||
"databaseName": "session-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,671 +0,0 @@
|
||||
{
|
||||
"runOn": [
|
||||
{
|
||||
"minServerVersion": "4.0",
|
||||
"topology": [
|
||||
"replicaset"
|
||||
]
|
||||
},
|
||||
{
|
||||
"minServerVersion": "4.1.8",
|
||||
"topology": [
|
||||
"sharded"
|
||||
]
|
||||
}
|
||||
],
|
||||
"database_name": "session-tests",
|
||||
"collection_name": "test",
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "Dirty explicit session is discarded",
|
||||
"clientOptions": {
|
||||
"retryWrites": true
|
||||
},
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"insert"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"insertedId": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 3
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"insertedId": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": "session0",
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
}
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": "session0",
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
}
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 3
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": "session0",
|
||||
"txnNumber": {
|
||||
"$numberLong": "2"
|
||||
}
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
},
|
||||
{
|
||||
"_id": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Dirty explicit session is discarded (non-bulk write)",
|
||||
"clientOptions": {
|
||||
"retryWrites": true
|
||||
},
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"findAndModify"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"returnDocument": "Before"
|
||||
},
|
||||
"result": {
|
||||
"_id": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": "session0",
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
},
|
||||
"readConcern": null,
|
||||
"writeConcern": null
|
||||
},
|
||||
"command_name": "findAndModify",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"lsid": "session0",
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
},
|
||||
"readConcern": null,
|
||||
"writeConcern": null
|
||||
},
|
||||
"command_name": "findAndModify",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (write)",
|
||||
"clientOptions": {
|
||||
"retryWrites": true
|
||||
},
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"insert"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"insertedId": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
}
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
}
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (non-bulk write)",
|
||||
"clientOptions": {
|
||||
"retryWrites": true
|
||||
},
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 1
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"findAndModify"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"returnDocument": "Before"
|
||||
},
|
||||
"result": {
|
||||
"_id": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
},
|
||||
"readConcern": null,
|
||||
"writeConcern": null
|
||||
},
|
||||
"command_name": "findAndModify",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"findAndModify": "test",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$inc": {
|
||||
"x": 1
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"txnNumber": {
|
||||
"$numberLong": "1"
|
||||
},
|
||||
"readConcern": null,
|
||||
"writeConcern": null
|
||||
},
|
||||
"command_name": "findAndModify",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (read)",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 2
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"aggregate"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "aggregate",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$project": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"error": true
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Dirty implicit session is discarded (non-cursor returning read)",
|
||||
"failPoint": {
|
||||
"configureFailPoint": "failCommand",
|
||||
"mode": {
|
||||
"times": 2
|
||||
},
|
||||
"data": {
|
||||
"failCommands": [
|
||||
"aggregate"
|
||||
],
|
||||
"closeConnection": true
|
||||
}
|
||||
},
|
||||
"operations": [
|
||||
{
|
||||
"name": "countDocuments",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {}
|
||||
},
|
||||
"error": true
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertDifferentLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,181 +0,0 @@
|
||||
{
|
||||
"runOn": [
|
||||
{
|
||||
"minServerVersion": "3.6.0"
|
||||
}
|
||||
],
|
||||
"database_name": "session-tests",
|
||||
"collection_name": "test",
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "Server supports explicit sessions",
|
||||
"operations": [
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"session": "session0",
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"insertedId": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "assertSessionNotDirty",
|
||||
"object": "testRunner",
|
||||
"arguments": {
|
||||
"session": "session0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "endSession",
|
||||
"object": "session0"
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertSameLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"lsid": "session0"
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
},
|
||||
"lsid": "session0"
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "Server supports implicit sessions",
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"insertedId": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"result": []
|
||||
},
|
||||
{
|
||||
"name": "assertSameLsidOnLastTwoCommands",
|
||||
"object": "testRunner"
|
||||
}
|
||||
],
|
||||
"expectations": [
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"insert": "test",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
],
|
||||
"ordered": true
|
||||
},
|
||||
"command_name": "insert",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command_started_event": {
|
||||
"command": {
|
||||
"find": "test",
|
||||
"filter": {
|
||||
"_id": -1
|
||||
}
|
||||
},
|
||||
"command_name": "find",
|
||||
"database_name": "session-tests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outcome": {
|
||||
"collection": {
|
||||
"data": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -15,7 +15,6 @@
|
||||
"""Test the client_session module."""
|
||||
|
||||
import copy
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from io import BytesIO
|
||||
@ -26,8 +25,7 @@ from pymongo.mongo_client import MongoClient
|
||||
sys.path[0:0] = [""]
|
||||
|
||||
from test import IntegrationTest, SkipTest, client_context, unittest
|
||||
from test.utils import EventListener, TestCreator, rs_or_single_client, wait_until
|
||||
from test.utils_spec_runner import SpecRunner
|
||||
from test.utils import EventListener, rs_or_single_client, wait_until
|
||||
|
||||
from bson import DBRef
|
||||
from gridfs import GridFS, GridFSBucket
|
||||
@ -1095,54 +1093,5 @@ class TestClusterTime(IntegrationTest):
|
||||
)
|
||||
|
||||
|
||||
class TestSpec(SpecRunner):
|
||||
RUN_ON_SERVERLESS = True
|
||||
# Location of JSON test specifications.
|
||||
TEST_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "sessions", "legacy")
|
||||
|
||||
def last_two_command_events(self):
|
||||
"""Return the last two command started events."""
|
||||
started_events = self.listener.results["started"][-2:]
|
||||
self.assertEqual(2, len(started_events))
|
||||
return started_events
|
||||
|
||||
def assert_same_lsid_on_last_two_commands(self):
|
||||
"""Run the assertSameLsidOnLastTwoCommands test operation."""
|
||||
event1, event2 = self.last_two_command_events()
|
||||
self.assertEqual(event1.command["lsid"], event2.command["lsid"])
|
||||
|
||||
def assert_different_lsid_on_last_two_commands(self):
|
||||
"""Run the assertDifferentLsidOnLastTwoCommands test operation."""
|
||||
event1, event2 = self.last_two_command_events()
|
||||
self.assertNotEqual(event1.command["lsid"], event2.command["lsid"])
|
||||
|
||||
def assert_session_dirty(self, session):
|
||||
"""Run the assertSessionDirty test operation.
|
||||
|
||||
Assert that the given session is dirty.
|
||||
"""
|
||||
self.assertIsNotNone(session._server_session)
|
||||
self.assertTrue(session._server_session.dirty)
|
||||
|
||||
def assert_session_not_dirty(self, session):
|
||||
"""Run the assertSessionNotDirty test operation.
|
||||
|
||||
Assert that the given session is not dirty.
|
||||
"""
|
||||
self.assertIsNotNone(session._server_session)
|
||||
self.assertFalse(session._server_session.dirty)
|
||||
|
||||
|
||||
def create_test(scenario_def, test, name):
|
||||
@client_context.require_test_commands
|
||||
def run_scenario(self):
|
||||
self.run_scenario(scenario_def, test)
|
||||
|
||||
return run_scenario
|
||||
|
||||
|
||||
test_creator = TestCreator(create_test, TestSpec, TestSpec.TEST_PATH)
|
||||
test_creator.create_tests()
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@ -23,7 +23,7 @@ from test import unittest
|
||||
from test.unified_format import generate_test_classes
|
||||
|
||||
# Location of JSON test specifications.
|
||||
TEST_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "sessions", "unified")
|
||||
TEST_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "sessions")
|
||||
|
||||
# Generate unified tests.
|
||||
globals().update(generate_test_classes(TEST_PATH, module=__name__))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user