584 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			584 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
| {
 | |
|   "description": "runCursorCommand",
 | |
|   "schemaVersion": "1.9",
 | |
|   "runOnRequirements": [
 | |
|     {
 | |
|       "minServerVersion": "4.4"
 | |
|     }
 | |
|   ],
 | |
|   "createEntities": [
 | |
|     {
 | |
|       "client": {
 | |
|         "id": "failPointClient",
 | |
|         "useMultipleMongoses": false
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "client": {
 | |
|         "id": "commandClient",
 | |
|         "useMultipleMongoses": false,
 | |
|         "observeEvents": [
 | |
|           "commandStartedEvent",
 | |
|           "commandSucceededEvent"
 | |
|         ]
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "client": {
 | |
|         "id": "client",
 | |
|         "useMultipleMongoses": false,
 | |
|         "observeEvents": [
 | |
|           "commandStartedEvent"
 | |
|         ],
 | |
|         "ignoreCommandMonitoringEvents": [
 | |
|           "killCursors"
 | |
|         ]
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "database": {
 | |
|         "id": "commandDb",
 | |
|         "client": "commandClient",
 | |
|         "databaseName": "commandDb"
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "database": {
 | |
|         "id": "db",
 | |
|         "client": "client",
 | |
|         "databaseName": "db"
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "collection": {
 | |
|         "id": "collection",
 | |
|         "database": "db",
 | |
|         "collectionName": "collection"
 | |
|       }
 | |
|     }
 | |
|   ],
 | |
|   "initialData": [
 | |
|     {
 | |
|       "collectionName": "collection",
 | |
|       "databaseName": "db",
 | |
|       "documents": [
 | |
|         {
 | |
|           "_id": 1,
 | |
|           "x": 11
 | |
|         },
 | |
|         {
 | |
|           "_id": 2,
 | |
|           "x": 22
 | |
|         },
 | |
|         {
 | |
|           "_id": 3,
 | |
|           "x": 33
 | |
|         },
 | |
|         {
 | |
|           "_id": 4,
 | |
|           "x": 44
 | |
|         },
 | |
|         {
 | |
|           "_id": 5,
 | |
|           "x": 55
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   ],
 | |
|   "tests": [
 | |
|     {
 | |
|       "description": "errors if timeoutMode is set without timeoutMS",
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "runCursorCommand",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "commandName": "find",
 | |
|             "command": {
 | |
|               "find": "collection"
 | |
|             },
 | |
|             "timeoutMode": "cursorLifetime"
 | |
|           },
 | |
|           "expectError": {
 | |
|             "isClientError": true
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "description": "error if timeoutMode is cursorLifetime and cursorType is tailableAwait",
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "runCursorCommand",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "commandName": "find",
 | |
|             "command": {
 | |
|               "find": "collection"
 | |
|             },
 | |
|             "timeoutMode": "cursorLifetime",
 | |
|             "cursorType": "tailableAwait"
 | |
|           },
 | |
|           "expectError": {
 | |
|             "isClientError": true
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "description": "Non-tailable cursor lifetime remaining timeoutMS applied to getMore if timeoutMode is unset",
 | |
|       "runOnRequirements": [
 | |
|         {
 | |
|           "serverless": "forbid"
 | |
|         }
 | |
|       ],
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "failPoint",
 | |
|           "object": "testRunner",
 | |
|           "arguments": {
 | |
|             "client": "failPointClient",
 | |
|             "failPoint": {
 | |
|               "configureFailPoint": "failCommand",
 | |
|               "mode": {
 | |
|                 "times": 2
 | |
|               },
 | |
|               "data": {
 | |
|                 "failCommands": [
 | |
|                   "find",
 | |
|                   "getMore"
 | |
|                 ],
 | |
|                 "blockConnection": true,
 | |
|                 "blockTimeMS": 60
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "runCursorCommand",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "commandName": "find",
 | |
|             "timeoutMS": 100,
 | |
|             "command": {
 | |
|               "find": "collection",
 | |
|               "batchSize": 2
 | |
|             }
 | |
|           },
 | |
|           "expectError": {
 | |
|             "isTimeoutError": true
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "expectEvents": [
 | |
|         {
 | |
|           "client": "client",
 | |
|           "events": [
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "find",
 | |
|                 "command": {
 | |
|                   "find": "collection",
 | |
|                   "maxTimeMS": {
 | |
|                     "$$type": [
 | |
|                       "int",
 | |
|                       "long"
 | |
|                     ]
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "getMore",
 | |
|                 "command": {
 | |
|                   "getMore": {
 | |
|                     "$$type": [
 | |
|                       "int",
 | |
|                       "long"
 | |
|                     ]
 | |
|                   },
 | |
|                   "collection": "collection",
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": true
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "description": "Non=tailable cursor iteration timeoutMS is refreshed for getMore if timeoutMode is iteration - failure",
 | |
|       "runOnRequirements": [
 | |
|         {
 | |
|           "serverless": "forbid"
 | |
|         }
 | |
|       ],
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "failPoint",
 | |
|           "object": "testRunner",
 | |
|           "arguments": {
 | |
|             "client": "failPointClient",
 | |
|             "failPoint": {
 | |
|               "configureFailPoint": "failCommand",
 | |
|               "mode": {
 | |
|                 "times": 1
 | |
|               },
 | |
|               "data": {
 | |
|                 "failCommands": [
 | |
|                   "getMore"
 | |
|                 ],
 | |
|                 "blockConnection": true,
 | |
|                 "blockTimeMS": 60
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "runCursorCommand",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "commandName": "find",
 | |
|             "command": {
 | |
|               "find": "collection",
 | |
|               "batchSize": 2
 | |
|             },
 | |
|             "timeoutMode": "iteration",
 | |
|             "timeoutMS": 100,
 | |
|             "batchSize": 2
 | |
|           },
 | |
|           "expectError": {
 | |
|             "isTimeoutError": true
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "expectEvents": [
 | |
|         {
 | |
|           "client": "client",
 | |
|           "events": [
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "find",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "find": "collection",
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": false
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "getMore",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "getMore": {
 | |
|                     "$$type": [
 | |
|                       "int",
 | |
|                       "long"
 | |
|                     ]
 | |
|                   },
 | |
|                   "collection": "collection",
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": false
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "description": "Tailable cursor iteration timeoutMS is refreshed for getMore - failure",
 | |
|       "runOnRequirements": [
 | |
|         {
 | |
|           "serverless": "forbid"
 | |
|         }
 | |
|       ],
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "failPoint",
 | |
|           "object": "testRunner",
 | |
|           "arguments": {
 | |
|             "client": "failPointClient",
 | |
|             "failPoint": {
 | |
|               "configureFailPoint": "failCommand",
 | |
|               "mode": {
 | |
|                 "times": 1
 | |
|               },
 | |
|               "data": {
 | |
|                 "failCommands": [
 | |
|                   "getMore"
 | |
|                 ],
 | |
|                 "blockConnection": true,
 | |
|                 "blockTimeMS": 60
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "dropCollection",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "collection": "cappedCollection"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "createCollection",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "collection": "cappedCollection",
 | |
|             "capped": true,
 | |
|             "size": 4096,
 | |
|             "max": 3
 | |
|           },
 | |
|           "saveResultAsEntity": "cappedCollection"
 | |
|         },
 | |
|         {
 | |
|           "name": "insertMany",
 | |
|           "object": "cappedCollection",
 | |
|           "arguments": {
 | |
|             "documents": [
 | |
|               {
 | |
|                 "_id": 1,
 | |
|                 "x": 11
 | |
|               },
 | |
|               {
 | |
|                 "_id": 2,
 | |
|                 "x": 22
 | |
|               }
 | |
|             ]
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "createCommandCursor",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "commandName": "find",
 | |
|             "command": {
 | |
|               "find": "cappedCollection",
 | |
|               "batchSize": 1,
 | |
|               "tailable": true
 | |
|             },
 | |
|             "timeoutMode": "iteration",
 | |
|             "timeoutMS": 100,
 | |
|             "batchSize": 1,
 | |
|             "cursorType": "tailable"
 | |
|           },
 | |
|           "saveResultAsEntity": "tailableCursor"
 | |
|         },
 | |
|         {
 | |
|           "name": "iterateUntilDocumentOrError",
 | |
|           "object": "tailableCursor"
 | |
|         },
 | |
|         {
 | |
|           "name": "iterateUntilDocumentOrError",
 | |
|           "object": "tailableCursor",
 | |
|           "expectError": {
 | |
|             "isTimeoutError": true
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "expectEvents": [
 | |
|         {
 | |
|           "client": "client",
 | |
|           "events": [
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "drop"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "create"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "insert"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "find",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "find": "cappedCollection",
 | |
|                   "tailable": true,
 | |
|                   "awaitData": {
 | |
|                     "$$exists": false
 | |
|                   },
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": false
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "getMore",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "getMore": {
 | |
|                     "$$type": [
 | |
|                       "int",
 | |
|                       "long"
 | |
|                     ]
 | |
|                   },
 | |
|                   "collection": "cappedCollection",
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": false
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "description": "Tailable cursor awaitData iteration timeoutMS is refreshed for getMore - failure",
 | |
|       "runOnRequirements": [
 | |
|         {
 | |
|           "serverless": "forbid"
 | |
|         }
 | |
|       ],
 | |
|       "operations": [
 | |
|         {
 | |
|           "name": "failPoint",
 | |
|           "object": "testRunner",
 | |
|           "arguments": {
 | |
|             "client": "failPointClient",
 | |
|             "failPoint": {
 | |
|               "configureFailPoint": "failCommand",
 | |
|               "mode": {
 | |
|                 "times": 1
 | |
|               },
 | |
|               "data": {
 | |
|                 "failCommands": [
 | |
|                   "getMore"
 | |
|                 ],
 | |
|                 "blockConnection": true,
 | |
|                 "blockTimeMS": 60
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "dropCollection",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "collection": "cappedCollection"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "createCollection",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "collection": "cappedCollection",
 | |
|             "capped": true,
 | |
|             "size": 4096,
 | |
|             "max": 3
 | |
|           },
 | |
|           "saveResultAsEntity": "cappedCollection"
 | |
|         },
 | |
|         {
 | |
|           "name": "insertMany",
 | |
|           "object": "cappedCollection",
 | |
|           "arguments": {
 | |
|             "documents": [
 | |
|               {
 | |
|                 "foo": "bar"
 | |
|               },
 | |
|               {
 | |
|                 "fizz": "buzz"
 | |
|               }
 | |
|             ]
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "createCommandCursor",
 | |
|           "object": "db",
 | |
|           "arguments": {
 | |
|             "command": {
 | |
|               "find": "cappedCollection",
 | |
|               "tailable": true,
 | |
|               "awaitData": true
 | |
|             },
 | |
|             "cursorType": "tailableAwait",
 | |
|             "batchSize": 1
 | |
|           },
 | |
|           "saveResultAsEntity": "tailableCursor"
 | |
|         },
 | |
|         {
 | |
|           "name": "iterateUntilDocumentOrError",
 | |
|           "object": "tailableCursor"
 | |
|         },
 | |
|         {
 | |
|           "name": "iterateUntilDocumentOrError",
 | |
|           "object": "tailableCursor",
 | |
|           "expectError": {
 | |
|             "isTimeoutError": true
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "expectEvents": [
 | |
|         {
 | |
|           "client": "client",
 | |
|           "events": [
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "drop"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "create"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "insert"
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "find",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "find": "cappedCollection",
 | |
|                   "tailable": true,
 | |
|                   "awaitData": true,
 | |
|                   "maxTimeMS": {
 | |
|                     "$$exists": true
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             {
 | |
|               "commandStartedEvent": {
 | |
|                 "commandName": "getMore",
 | |
|                 "databaseName": "db",
 | |
|                 "command": {
 | |
|                   "getMore": {
 | |
|                     "$$type": [
 | |
|                       "int",
 | |
|                       "long"
 | |
|                     ]
 | |
|                   },
 | |
|                   "collection": "cappedCollection"
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   ]
 | |
| }
 |