1{
2  "runOn": [
3    {
4      "minServerVersion": "4.0",
5      "topology": [
6        "replicaset"
7      ]
8    },
9    {
10      "minServerVersion": "4.1.8",
11      "topology": [
12        "sharded"
13      ]
14    }
15  ],
16  "database_name": "transaction-tests",
17  "collection_name": "test",
18  "data": [],
19  "tests": [
20    {
21      "description": "run command with default read preference",
22      "operations": [
23        {
24          "name": "startTransaction",
25          "object": "session0"
26        },
27        {
28          "name": "runCommand",
29          "object": "database",
30          "command_name": "insert",
31          "arguments": {
32            "session": "session0",
33            "command": {
34              "insert": "test",
35              "documents": [
36                {
37                  "_id": 1
38                }
39              ]
40            }
41          },
42          "result": {
43            "n": 1
44          }
45        },
46        {
47          "name": "commitTransaction",
48          "object": "session0"
49        }
50      ],
51      "expectations": [
52        {
53          "command_started_event": {
54            "command": {
55              "insert": "test",
56              "documents": [
57                {
58                  "_id": 1
59                }
60              ],
61              "readConcern": null,
62              "lsid": "session0",
63              "txnNumber": {
64                "$numberLong": "1"
65              },
66              "startTransaction": true,
67              "autocommit": false,
68              "writeConcern": null
69            },
70            "command_name": "insert",
71            "database_name": "transaction-tests"
72          }
73        },
74        {
75          "command_started_event": {
76            "command": {
77              "commitTransaction": 1,
78              "lsid": "session0",
79              "txnNumber": {
80                "$numberLong": "1"
81              },
82              "startTransaction": null,
83              "autocommit": false,
84              "writeConcern": null
85            },
86            "command_name": "commitTransaction",
87            "database_name": "admin"
88          }
89        }
90      ]
91    },
92    {
93      "description": "run command with secondary read preference in client option and primary read preference in transaction options",
94      "clientOptions": {
95        "readPreference": "secondary"
96      },
97      "operations": [
98        {
99          "name": "startTransaction",
100          "object": "session0",
101          "arguments": {
102            "options": {
103              "readPreference": {
104                "mode": "Primary"
105              }
106            }
107          }
108        },
109        {
110          "name": "runCommand",
111          "object": "database",
112          "command_name": "insert",
113          "arguments": {
114            "session": "session0",
115            "command": {
116              "insert": "test",
117              "documents": [
118                {
119                  "_id": 1
120                }
121              ]
122            }
123          },
124          "result": {
125            "n": 1
126          }
127        },
128        {
129          "name": "commitTransaction",
130          "object": "session0"
131        }
132      ],
133      "expectations": [
134        {
135          "command_started_event": {
136            "command": {
137              "insert": "test",
138              "documents": [
139                {
140                  "_id": 1
141                }
142              ],
143              "readConcern": null,
144              "lsid": "session0",
145              "txnNumber": {
146                "$numberLong": "1"
147              },
148              "startTransaction": true,
149              "autocommit": false,
150              "writeConcern": null
151            },
152            "command_name": "insert",
153            "database_name": "transaction-tests"
154          }
155        },
156        {
157          "command_started_event": {
158            "command": {
159              "commitTransaction": 1,
160              "lsid": "session0",
161              "txnNumber": {
162                "$numberLong": "1"
163              },
164              "startTransaction": null,
165              "autocommit": false,
166              "writeConcern": null
167            },
168            "command_name": "commitTransaction",
169            "database_name": "admin"
170          }
171        }
172      ]
173    },
174    {
175      "description": "run command with explicit primary read preference",
176      "operations": [
177        {
178          "name": "startTransaction",
179          "object": "session0"
180        },
181        {
182          "name": "runCommand",
183          "object": "database",
184          "command_name": "insert",
185          "arguments": {
186            "session": "session0",
187            "command": {
188              "insert": "test",
189              "documents": [
190                {
191                  "_id": 1
192                }
193              ]
194            },
195            "readPreference": {
196              "mode": "Primary"
197            }
198          },
199          "result": {
200            "n": 1
201          }
202        },
203        {
204          "name": "commitTransaction",
205          "object": "session0"
206        }
207      ],
208      "expectations": [
209        {
210          "command_started_event": {
211            "command": {
212              "insert": "test",
213              "documents": [
214                {
215                  "_id": 1
216                }
217              ],
218              "readConcern": null,
219              "lsid": "session0",
220              "txnNumber": {
221                "$numberLong": "1"
222              },
223              "startTransaction": true,
224              "autocommit": false,
225              "writeConcern": null
226            },
227            "command_name": "insert",
228            "database_name": "transaction-tests"
229          }
230        },
231        {
232          "command_started_event": {
233            "command": {
234              "commitTransaction": 1,
235              "lsid": "session0",
236              "txnNumber": {
237                "$numberLong": "1"
238              },
239              "startTransaction": null,
240              "autocommit": false,
241              "writeConcern": null
242            },
243            "command_name": "commitTransaction",
244            "database_name": "admin"
245          }
246        }
247      ]
248    },
249    {
250      "description": "run command fails with explicit secondary read preference",
251      "operations": [
252        {
253          "name": "startTransaction",
254          "object": "session0"
255        },
256        {
257          "name": "runCommand",
258          "object": "database",
259          "command_name": "find",
260          "arguments": {
261            "session": "session0",
262            "command": {
263              "find": "test"
264            },
265            "readPreference": {
266              "mode": "Secondary"
267            }
268          },
269          "result": {
270            "errorContains": "read preference in a transaction must be primary"
271          }
272        }
273      ]
274    },
275    {
276      "description": "run command fails with secondary read preference from transaction options",
277      "operations": [
278        {
279          "name": "startTransaction",
280          "object": "session0",
281          "arguments": {
282            "options": {
283              "readPreference": {
284                "mode": "Secondary"
285              }
286            }
287          }
288        },
289        {
290          "name": "runCommand",
291          "object": "database",
292          "command_name": "find",
293          "arguments": {
294            "session": "session0",
295            "command": {
296              "find": "test"
297            }
298          },
299          "result": {
300            "errorContains": "read preference in a transaction must be primary"
301          }
302        }
303      ]
304    }
305  ]
306}
307