1{
2  "runOn": [
3    {
4      "minServerVersion": "4.1.8",
5      "topology": [
6        "sharded"
7      ]
8    }
9  ],
10  "database_name": "transaction-tests",
11  "collection_name": "test",
12  "data": [
13    {
14      "_id": 1
15    },
16    {
17      "_id": 2
18    }
19  ],
20  "tests": [
21    {
22      "description": "countDocuments",
23      "useMultipleMongoses": true,
24      "operations": [
25        {
26          "name": "startTransaction",
27          "object": "session0"
28        },
29        {
30          "name": "countDocuments",
31          "object": "collection",
32          "arguments": {
33            "filter": {
34              "_id": 2
35            },
36            "session": "session0"
37          },
38          "result": 1
39        },
40        {
41          "name": "countDocuments",
42          "object": "collection",
43          "arguments": {
44            "filter": {
45              "_id": 2
46            },
47            "session": "session0"
48          },
49          "result": 1
50        },
51        {
52          "name": "countDocuments",
53          "object": "collection",
54          "arguments": {
55            "filter": {
56              "_id": 2
57            },
58            "session": "session0"
59          },
60          "result": 1
61        },
62        {
63          "name": "countDocuments",
64          "object": "collection",
65          "arguments": {
66            "filter": {
67              "_id": 2
68            },
69            "session": "session0"
70          },
71          "result": 1
72        },
73        {
74          "name": "countDocuments",
75          "object": "collection",
76          "arguments": {
77            "filter": {
78              "_id": 2
79            },
80            "session": "session0"
81          },
82          "result": 1
83        },
84        {
85          "name": "countDocuments",
86          "object": "collection",
87          "arguments": {
88            "filter": {
89              "_id": 2
90            },
91            "session": "session0"
92          },
93          "result": 1
94        },
95        {
96          "name": "countDocuments",
97          "object": "collection",
98          "arguments": {
99            "filter": {
100              "_id": 2
101            },
102            "session": "session0"
103          },
104          "result": 1
105        },
106        {
107          "name": "countDocuments",
108          "object": "collection",
109          "arguments": {
110            "filter": {
111              "_id": 2
112            },
113            "session": "session0"
114          },
115          "result": 1
116        },
117        {
118          "name": "commitTransaction",
119          "object": "session0"
120        }
121      ],
122      "outcome": {
123        "collection": {
124          "data": [
125            {
126              "_id": 1
127            },
128            {
129              "_id": 2
130            }
131          ]
132        }
133      }
134    },
135    {
136      "description": "distinct",
137      "useMultipleMongoses": true,
138      "operations": [
139        {
140          "name": "startTransaction",
141          "object": "session0"
142        },
143        {
144          "name": "distinct",
145          "object": "collection",
146          "arguments": {
147            "fieldName": "_id",
148            "session": "session0"
149          },
150          "result": [
151            1,
152            2
153          ]
154        },
155        {
156          "name": "distinct",
157          "object": "collection",
158          "arguments": {
159            "fieldName": "_id",
160            "session": "session0"
161          },
162          "result": [
163            1,
164            2
165          ]
166        },
167        {
168          "name": "distinct",
169          "object": "collection",
170          "arguments": {
171            "fieldName": "_id",
172            "session": "session0"
173          },
174          "result": [
175            1,
176            2
177          ]
178        },
179        {
180          "name": "distinct",
181          "object": "collection",
182          "arguments": {
183            "fieldName": "_id",
184            "session": "session0"
185          },
186          "result": [
187            1,
188            2
189          ]
190        },
191        {
192          "name": "distinct",
193          "object": "collection",
194          "arguments": {
195            "fieldName": "_id",
196            "session": "session0"
197          },
198          "result": [
199            1,
200            2
201          ]
202        },
203        {
204          "name": "distinct",
205          "object": "collection",
206          "arguments": {
207            "fieldName": "_id",
208            "session": "session0"
209          },
210          "result": [
211            1,
212            2
213          ]
214        },
215        {
216          "name": "distinct",
217          "object": "collection",
218          "arguments": {
219            "fieldName": "_id",
220            "session": "session0"
221          },
222          "result": [
223            1,
224            2
225          ]
226        },
227        {
228          "name": "distinct",
229          "object": "collection",
230          "arguments": {
231            "fieldName": "_id",
232            "session": "session0"
233          },
234          "result": [
235            1,
236            2
237          ]
238        },
239        {
240          "name": "commitTransaction",
241          "object": "session0"
242        }
243      ],
244      "outcome": {
245        "collection": {
246          "data": [
247            {
248              "_id": 1
249            },
250            {
251              "_id": 2
252            }
253          ]
254        }
255      }
256    },
257    {
258      "description": "find",
259      "useMultipleMongoses": true,
260      "operations": [
261        {
262          "name": "startTransaction",
263          "object": "session0"
264        },
265        {
266          "name": "find",
267          "object": "collection",
268          "arguments": {
269            "filter": {
270              "_id": 2
271            },
272            "session": "session0"
273          },
274          "result": [
275            {
276              "_id": 2
277            }
278          ]
279        },
280        {
281          "name": "find",
282          "object": "collection",
283          "arguments": {
284            "filter": {
285              "_id": 2
286            },
287            "session": "session0"
288          },
289          "result": [
290            {
291              "_id": 2
292            }
293          ]
294        },
295        {
296          "name": "find",
297          "object": "collection",
298          "arguments": {
299            "filter": {
300              "_id": 2
301            },
302            "session": "session0"
303          },
304          "result": [
305            {
306              "_id": 2
307            }
308          ]
309        },
310        {
311          "name": "find",
312          "object": "collection",
313          "arguments": {
314            "filter": {
315              "_id": 2
316            },
317            "session": "session0"
318          },
319          "result": [
320            {
321              "_id": 2
322            }
323          ]
324        },
325        {
326          "name": "find",
327          "object": "collection",
328          "arguments": {
329            "filter": {
330              "_id": 2
331            },
332            "session": "session0"
333          },
334          "result": [
335            {
336              "_id": 2
337            }
338          ]
339        },
340        {
341          "name": "find",
342          "object": "collection",
343          "arguments": {
344            "filter": {
345              "_id": 2
346            },
347            "session": "session0"
348          },
349          "result": [
350            {
351              "_id": 2
352            }
353          ]
354        },
355        {
356          "name": "find",
357          "object": "collection",
358          "arguments": {
359            "filter": {
360              "_id": 2
361            },
362            "session": "session0"
363          },
364          "result": [
365            {
366              "_id": 2
367            }
368          ]
369        },
370        {
371          "name": "find",
372          "object": "collection",
373          "arguments": {
374            "filter": {
375              "_id": 2
376            },
377            "session": "session0"
378          },
379          "result": [
380            {
381              "_id": 2
382            }
383          ]
384        },
385        {
386          "name": "commitTransaction",
387          "object": "session0"
388        }
389      ],
390      "outcome": {
391        "collection": {
392          "data": [
393            {
394              "_id": 1
395            },
396            {
397              "_id": 2
398            }
399          ]
400        }
401      }
402    },
403    {
404      "description": "insertOne",
405      "useMultipleMongoses": true,
406      "operations": [
407        {
408          "name": "startTransaction",
409          "object": "session0"
410        },
411        {
412          "name": "insertOne",
413          "object": "collection",
414          "arguments": {
415            "document": {
416              "_id": 3
417            },
418            "session": "session0"
419          },
420          "result": {
421            "insertedId": 3
422          }
423        },
424        {
425          "name": "insertOne",
426          "object": "collection",
427          "arguments": {
428            "document": {
429              "_id": 4
430            },
431            "session": "session0"
432          },
433          "result": {
434            "insertedId": 4
435          }
436        },
437        {
438          "name": "insertOne",
439          "object": "collection",
440          "arguments": {
441            "document": {
442              "_id": 5
443            },
444            "session": "session0"
445          },
446          "result": {
447            "insertedId": 5
448          }
449        },
450        {
451          "name": "insertOne",
452          "object": "collection",
453          "arguments": {
454            "document": {
455              "_id": 6
456            },
457            "session": "session0"
458          },
459          "result": {
460            "insertedId": 6
461          }
462        },
463        {
464          "name": "insertOne",
465          "object": "collection",
466          "arguments": {
467            "document": {
468              "_id": 7
469            },
470            "session": "session0"
471          },
472          "result": {
473            "insertedId": 7
474          }
475        },
476        {
477          "name": "insertOne",
478          "object": "collection",
479          "arguments": {
480            "document": {
481              "_id": 8
482            },
483            "session": "session0"
484          },
485          "result": {
486            "insertedId": 8
487          }
488        },
489        {
490          "name": "insertOne",
491          "object": "collection",
492          "arguments": {
493            "document": {
494              "_id": 9
495            },
496            "session": "session0"
497          },
498          "result": {
499            "insertedId": 9
500          }
501        },
502        {
503          "name": "insertOne",
504          "object": "collection",
505          "arguments": {
506            "document": {
507              "_id": 10
508            },
509            "session": "session0"
510          },
511          "result": {
512            "insertedId": 10
513          }
514        },
515        {
516          "name": "commitTransaction",
517          "object": "session0"
518        }
519      ],
520      "outcome": {
521        "collection": {
522          "data": [
523            {
524              "_id": 1
525            },
526            {
527              "_id": 2
528            },
529            {
530              "_id": 3
531            },
532            {
533              "_id": 4
534            },
535            {
536              "_id": 5
537            },
538            {
539              "_id": 6
540            },
541            {
542              "_id": 7
543            },
544            {
545              "_id": 8
546            },
547            {
548              "_id": 9
549            },
550            {
551              "_id": 10
552            }
553          ]
554        }
555      }
556    },
557    {
558      "description": "mixed read write operations",
559      "useMultipleMongoses": true,
560      "operations": [
561        {
562          "name": "startTransaction",
563          "object": "session0"
564        },
565        {
566          "name": "insertOne",
567          "object": "collection",
568          "arguments": {
569            "document": {
570              "_id": 3
571            },
572            "session": "session0"
573          },
574          "result": {
575            "insertedId": 3
576          }
577        },
578        {
579          "name": "countDocuments",
580          "object": "collection",
581          "arguments": {
582            "filter": {
583              "_id": 3
584            },
585            "session": "session0"
586          },
587          "result": 1
588        },
589        {
590          "name": "countDocuments",
591          "object": "collection",
592          "arguments": {
593            "filter": {
594              "_id": 3
595            },
596            "session": "session0"
597          },
598          "result": 1
599        },
600        {
601          "name": "countDocuments",
602          "object": "collection",
603          "arguments": {
604            "filter": {
605              "_id": 3
606            },
607            "session": "session0"
608          },
609          "result": 1
610        },
611        {
612          "name": "countDocuments",
613          "object": "collection",
614          "arguments": {
615            "filter": {
616              "_id": 3
617            },
618            "session": "session0"
619          },
620          "result": 1
621        },
622        {
623          "name": "countDocuments",
624          "object": "collection",
625          "arguments": {
626            "filter": {
627              "_id": 3
628            },
629            "session": "session0"
630          },
631          "result": 1
632        },
633        {
634          "name": "insertOne",
635          "object": "collection",
636          "arguments": {
637            "document": {
638              "_id": 4
639            },
640            "session": "session0"
641          },
642          "result": {
643            "insertedId": 4
644          }
645        },
646        {
647          "name": "insertOne",
648          "object": "collection",
649          "arguments": {
650            "document": {
651              "_id": 5
652            },
653            "session": "session0"
654          },
655          "result": {
656            "insertedId": 5
657          }
658        },
659        {
660          "name": "insertOne",
661          "object": "collection",
662          "arguments": {
663            "document": {
664              "_id": 6
665            },
666            "session": "session0"
667          },
668          "result": {
669            "insertedId": 6
670          }
671        },
672        {
673          "name": "insertOne",
674          "object": "collection",
675          "arguments": {
676            "document": {
677              "_id": 7
678            },
679            "session": "session0"
680          },
681          "result": {
682            "insertedId": 7
683          }
684        },
685        {
686          "name": "commitTransaction",
687          "object": "session0"
688        }
689      ],
690      "outcome": {
691        "collection": {
692          "data": [
693            {
694              "_id": 1
695            },
696            {
697              "_id": 2
698            },
699            {
700              "_id": 3
701            },
702            {
703              "_id": 4
704            },
705            {
706              "_id": 5
707            },
708            {
709              "_id": 6
710            },
711            {
712              "_id": 7
713            }
714          ]
715        }
716      }
717    },
718    {
719      "description": "multiple commits",
720      "useMultipleMongoses": true,
721      "operations": [
722        {
723          "name": "startTransaction",
724          "object": "session0"
725        },
726        {
727          "name": "insertMany",
728          "object": "collection",
729          "arguments": {
730            "documents": [
731              {
732                "_id": 3
733              },
734              {
735                "_id": 4
736              }
737            ],
738            "session": "session0"
739          },
740          "result": {
741            "insertedIds": {
742              "0": 3,
743              "1": 4
744            }
745          }
746        },
747        {
748          "name": "assertSessionPinned",
749          "object": "testRunner",
750          "arguments": {
751            "session": "session0"
752          }
753        },
754        {
755          "name": "commitTransaction",
756          "object": "session0"
757        },
758        {
759          "name": "assertSessionPinned",
760          "object": "testRunner",
761          "arguments": {
762            "session": "session0"
763          }
764        },
765        {
766          "name": "commitTransaction",
767          "object": "session0"
768        },
769        {
770          "name": "commitTransaction",
771          "object": "session0"
772        },
773        {
774          "name": "commitTransaction",
775          "object": "session0"
776        },
777        {
778          "name": "commitTransaction",
779          "object": "session0"
780        },
781        {
782          "name": "commitTransaction",
783          "object": "session0"
784        },
785        {
786          "name": "commitTransaction",
787          "object": "session0"
788        },
789        {
790          "name": "commitTransaction",
791          "object": "session0"
792        },
793        {
794          "name": "commitTransaction",
795          "object": "session0"
796        },
797        {
798          "name": "commitTransaction",
799          "object": "session0"
800        },
801        {
802          "name": "assertSessionPinned",
803          "object": "testRunner",
804          "arguments": {
805            "session": "session0"
806          }
807        }
808      ],
809      "outcome": {
810        "collection": {
811          "data": [
812            {
813              "_id": 1
814            },
815            {
816              "_id": 2
817            },
818            {
819              "_id": 3
820            },
821            {
822              "_id": 4
823            }
824          ]
825        }
826      }
827    },
828    {
829      "description": "remain pinned after non-transient error on commit",
830      "useMultipleMongoses": true,
831      "operations": [
832        {
833          "name": "startTransaction",
834          "object": "session0"
835        },
836        {
837          "name": "insertMany",
838          "object": "collection",
839          "arguments": {
840            "documents": [
841              {
842                "_id": 3
843              },
844              {
845                "_id": 4
846              }
847            ],
848            "session": "session0"
849          },
850          "result": {
851            "insertedIds": {
852              "0": 3,
853              "1": 4
854            }
855          }
856        },
857        {
858          "name": "assertSessionPinned",
859          "object": "testRunner",
860          "arguments": {
861            "session": "session0"
862          }
863        },
864        {
865          "name": "targetedFailPoint",
866          "object": "testRunner",
867          "arguments": {
868            "session": "session0",
869            "failPoint": {
870              "configureFailPoint": "failCommand",
871              "mode": {
872                "times": 1
873              },
874              "data": {
875                "failCommands": [
876                  "commitTransaction"
877                ],
878                "errorCode": 51
879              }
880            }
881          }
882        },
883        {
884          "name": "commitTransaction",
885          "object": "session0",
886          "result": {
887            "errorLabelsOmit": [
888              "TransientTransactionError"
889            ],
890            "errorCode": 51
891          }
892        },
893        {
894          "name": "assertSessionPinned",
895          "object": "testRunner",
896          "arguments": {
897            "session": "session0"
898          }
899        },
900        {
901          "name": "commitTransaction",
902          "object": "session0"
903        },
904        {
905          "name": "assertSessionPinned",
906          "object": "testRunner",
907          "arguments": {
908            "session": "session0"
909          }
910        }
911      ],
912      "outcome": {
913        "collection": {
914          "data": [
915            {
916              "_id": 1
917            },
918            {
919              "_id": 2
920            },
921            {
922              "_id": 3
923            },
924            {
925              "_id": 4
926            }
927          ]
928        }
929      }
930    },
931    {
932      "description": "unpin after transient error within a transaction",
933      "useMultipleMongoses": true,
934      "operations": [
935        {
936          "name": "startTransaction",
937          "object": "session0"
938        },
939        {
940          "name": "insertOne",
941          "object": "collection",
942          "arguments": {
943            "session": "session0",
944            "document": {
945              "_id": 3
946            }
947          },
948          "result": {
949            "insertedId": 3
950          }
951        },
952        {
953          "name": "targetedFailPoint",
954          "object": "testRunner",
955          "arguments": {
956            "session": "session0",
957            "failPoint": {
958              "configureFailPoint": "failCommand",
959              "mode": {
960                "times": 1
961              },
962              "data": {
963                "failCommands": [
964                  "insert"
965                ],
966                "closeConnection": true
967              }
968            }
969          }
970        },
971        {
972          "name": "insertOne",
973          "object": "collection",
974          "arguments": {
975            "session": "session0",
976            "document": {
977              "_id": 4
978            }
979          },
980          "result": {
981            "errorLabelsContain": [
982              "TransientTransactionError"
983            ],
984            "errorLabelsOmit": [
985              "UnknownTransactionCommitResult"
986            ]
987          }
988        },
989        {
990          "name": "abortTransaction",
991          "object": "session0"
992        }
993      ],
994      "expectations": [
995        {
996          "command_started_event": {
997            "command": {
998              "insert": "test",
999              "documents": [
1000                {
1001                  "_id": 3
1002                }
1003              ],
1004              "ordered": true,
1005              "readConcern": null,
1006              "lsid": "session0",
1007              "txnNumber": {
1008                "$numberLong": "1"
1009              },
1010              "startTransaction": true,
1011              "autocommit": false,
1012              "writeConcern": null
1013            },
1014            "command_name": "insert",
1015            "database_name": "transaction-tests"
1016          }
1017        },
1018        {
1019          "command_started_event": {
1020            "command": {
1021              "insert": "test",
1022              "documents": [
1023                {
1024                  "_id": 4
1025                }
1026              ],
1027              "ordered": true,
1028              "readConcern": null,
1029              "lsid": "session0",
1030              "txnNumber": {
1031                "$numberLong": "1"
1032              },
1033              "startTransaction": null,
1034              "autocommit": false,
1035              "writeConcern": null
1036            },
1037            "command_name": "insert",
1038            "database_name": "transaction-tests"
1039          }
1040        },
1041        {
1042          "command_started_event": {
1043            "command": {
1044              "abortTransaction": 1,
1045              "lsid": "session0",
1046              "txnNumber": {
1047                "$numberLong": "1"
1048              },
1049              "startTransaction": null,
1050              "autocommit": false,
1051              "writeConcern": null,
1052              "recoveryToken": 42
1053            },
1054            "command_name": "abortTransaction",
1055            "database_name": "admin"
1056          }
1057        }
1058      ],
1059      "outcome": {
1060        "collection": {
1061          "data": [
1062            {
1063              "_id": 1
1064            },
1065            {
1066              "_id": 2
1067            }
1068          ]
1069        }
1070      }
1071    },
1072    {
1073      "description": "unpin after transient error within a transaction and commit",
1074      "useMultipleMongoses": true,
1075      "clientOptions": {
1076        "heartbeatFrequencyMS": 30000
1077      },
1078      "operations": [
1079        {
1080          "name": "startTransaction",
1081          "object": "session0"
1082        },
1083        {
1084          "name": "insertOne",
1085          "object": "collection",
1086          "arguments": {
1087            "session": "session0",
1088            "document": {
1089              "_id": 3
1090            }
1091          },
1092          "result": {
1093            "insertedId": 3
1094          }
1095        },
1096        {
1097          "name": "targetedFailPoint",
1098          "object": "testRunner",
1099          "arguments": {
1100            "session": "session0",
1101            "failPoint": {
1102              "configureFailPoint": "failCommand",
1103              "mode": {
1104                "times": 7
1105              },
1106              "data": {
1107                "failCommands": [
1108                  "insert",
1109                  "isMaster"
1110                ],
1111                "closeConnection": true
1112              }
1113            }
1114          }
1115        },
1116        {
1117          "name": "insertOne",
1118          "object": "collection",
1119          "arguments": {
1120            "session": "session0",
1121            "document": {
1122              "_id": 4
1123            }
1124          },
1125          "result": {
1126            "errorLabelsContain": [
1127              "TransientTransactionError"
1128            ],
1129            "errorLabelsOmit": [
1130              "UnknownTransactionCommitResult"
1131            ]
1132          }
1133        },
1134        {
1135          "name": "commitTransaction",
1136          "object": "session0",
1137          "result": {
1138            "errorLabelsContain": [
1139              "TransientTransactionError"
1140            ],
1141            "errorLabelsOmit": [
1142              "UnknownTransactionCommitResult"
1143            ],
1144            "errorCodeName": "NoSuchTransaction"
1145          }
1146        }
1147      ],
1148      "expectations": [
1149        {
1150          "command_started_event": {
1151            "command": {
1152              "insert": "test",
1153              "documents": [
1154                {
1155                  "_id": 3
1156                }
1157              ],
1158              "ordered": true,
1159              "readConcern": null,
1160              "lsid": "session0",
1161              "txnNumber": {
1162                "$numberLong": "1"
1163              },
1164              "startTransaction": true,
1165              "autocommit": false,
1166              "writeConcern": null
1167            },
1168            "command_name": "insert",
1169            "database_name": "transaction-tests"
1170          }
1171        },
1172        {
1173          "command_started_event": {
1174            "command": {
1175              "insert": "test",
1176              "documents": [
1177                {
1178                  "_id": 4
1179                }
1180              ],
1181              "ordered": true,
1182              "readConcern": null,
1183              "lsid": "session0",
1184              "txnNumber": {
1185                "$numberLong": "1"
1186              },
1187              "startTransaction": null,
1188              "autocommit": false,
1189              "writeConcern": null
1190            },
1191            "command_name": "insert",
1192            "database_name": "transaction-tests"
1193          }
1194        },
1195        {
1196          "command_started_event": {
1197            "command": {
1198              "commitTransaction": 1,
1199              "lsid": "session0",
1200              "txnNumber": {
1201                "$numberLong": "1"
1202              },
1203              "startTransaction": null,
1204              "autocommit": false,
1205              "writeConcern": null,
1206              "recoveryToken": 42
1207            },
1208            "command_name": "commitTransaction",
1209            "database_name": "admin"
1210          }
1211        }
1212      ],
1213      "outcome": {
1214        "collection": {
1215          "data": [
1216            {
1217              "_id": 1
1218            },
1219            {
1220              "_id": 2
1221            }
1222          ]
1223        }
1224      }
1225    }
1226  ]
1227}
1228