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": "commit", 22 "operations": [ 23 { 24 "name": "startTransaction", 25 "object": "session0" 26 }, 27 { 28 "name": "insertOne", 29 "object": "collection", 30 "arguments": { 31 "session": "session0", 32 "document": { 33 "_id": 1 34 } 35 }, 36 "result": { 37 "insertedId": 1 38 } 39 }, 40 { 41 "name": "commitTransaction", 42 "object": "session0" 43 }, 44 { 45 "name": "startTransaction", 46 "object": "session0" 47 }, 48 { 49 "name": "insertOne", 50 "object": "collection", 51 "arguments": { 52 "session": "session0", 53 "document": { 54 "_id": 2 55 } 56 }, 57 "result": { 58 "insertedId": 2 59 } 60 }, 61 { 62 "name": "commitTransaction", 63 "object": "session0" 64 } 65 ], 66 "expectations": [ 67 { 68 "command_started_event": { 69 "command": { 70 "insert": "test", 71 "documents": [ 72 { 73 "_id": 1 74 } 75 ], 76 "ordered": true, 77 "readConcern": null, 78 "lsid": "session0", 79 "txnNumber": { 80 "$numberLong": "1" 81 }, 82 "startTransaction": true, 83 "autocommit": false, 84 "writeConcern": null 85 }, 86 "command_name": "insert", 87 "database_name": "transaction-tests" 88 } 89 }, 90 { 91 "command_started_event": { 92 "command": { 93 "commitTransaction": 1, 94 "lsid": "session0", 95 "txnNumber": { 96 "$numberLong": "1" 97 }, 98 "startTransaction": null, 99 "autocommit": false, 100 "writeConcern": null 101 }, 102 "command_name": "commitTransaction", 103 "database_name": "admin" 104 } 105 }, 106 { 107 "command_started_event": { 108 "command": { 109 "insert": "test", 110 "documents": [ 111 { 112 "_id": 2 113 } 114 ], 115 "ordered": true, 116 "readConcern": { 117 "afterClusterTime": 42 118 }, 119 "lsid": "session0", 120 "txnNumber": { 121 "$numberLong": "2" 122 }, 123 "startTransaction": true, 124 "autocommit": false, 125 "writeConcern": null 126 }, 127 "command_name": "insert", 128 "database_name": "transaction-tests" 129 } 130 }, 131 { 132 "command_started_event": { 133 "command": { 134 "commitTransaction": 1, 135 "lsid": "session0", 136 "txnNumber": { 137 "$numberLong": "2" 138 }, 139 "startTransaction": null, 140 "autocommit": false, 141 "writeConcern": null 142 }, 143 "command_name": "commitTransaction", 144 "database_name": "admin" 145 } 146 } 147 ], 148 "outcome": { 149 "collection": { 150 "data": [ 151 { 152 "_id": 1 153 }, 154 { 155 "_id": 2 156 } 157 ] 158 } 159 } 160 }, 161 { 162 "description": "rerun commit after empty transaction", 163 "operations": [ 164 { 165 "name": "startTransaction", 166 "object": "session0" 167 }, 168 { 169 "name": "commitTransaction", 170 "object": "session0" 171 }, 172 { 173 "name": "commitTransaction", 174 "object": "session0" 175 }, 176 { 177 "name": "startTransaction", 178 "object": "session0" 179 }, 180 { 181 "name": "insertOne", 182 "object": "collection", 183 "arguments": { 184 "session": "session0", 185 "document": { 186 "_id": 1 187 } 188 }, 189 "result": { 190 "insertedId": 1 191 } 192 }, 193 { 194 "name": "commitTransaction", 195 "object": "session0" 196 } 197 ], 198 "expectations": [ 199 { 200 "command_started_event": { 201 "command": { 202 "insert": "test", 203 "documents": [ 204 { 205 "_id": 1 206 } 207 ], 208 "ordered": true, 209 "readConcern": null, 210 "lsid": "session0", 211 "txnNumber": { 212 "$numberLong": "2" 213 }, 214 "startTransaction": true, 215 "autocommit": false, 216 "writeConcern": null 217 }, 218 "command_name": "insert", 219 "database_name": "transaction-tests" 220 } 221 }, 222 { 223 "command_started_event": { 224 "command": { 225 "commitTransaction": 1, 226 "lsid": "session0", 227 "txnNumber": { 228 "$numberLong": "2" 229 }, 230 "startTransaction": null, 231 "autocommit": false, 232 "writeConcern": null 233 }, 234 "command_name": "commitTransaction", 235 "database_name": "admin" 236 } 237 } 238 ], 239 "outcome": { 240 "collection": { 241 "data": [ 242 { 243 "_id": 1 244 } 245 ] 246 } 247 } 248 }, 249 { 250 "description": "multiple commits in a row", 251 "operations": [ 252 { 253 "name": "startTransaction", 254 "object": "session0" 255 }, 256 { 257 "name": "insertOne", 258 "object": "collection", 259 "arguments": { 260 "session": "session0", 261 "document": { 262 "_id": 1 263 } 264 }, 265 "result": { 266 "insertedId": 1 267 } 268 }, 269 { 270 "name": "commitTransaction", 271 "object": "session0" 272 }, 273 { 274 "name": "commitTransaction", 275 "object": "session0" 276 }, 277 { 278 "name": "commitTransaction", 279 "object": "session0" 280 } 281 ], 282 "expectations": [ 283 { 284 "command_started_event": { 285 "command": { 286 "insert": "test", 287 "documents": [ 288 { 289 "_id": 1 290 } 291 ], 292 "ordered": true, 293 "readConcern": null, 294 "lsid": "session0", 295 "txnNumber": { 296 "$numberLong": "1" 297 }, 298 "startTransaction": true, 299 "autocommit": false, 300 "writeConcern": null 301 }, 302 "command_name": "insert", 303 "database_name": "transaction-tests" 304 } 305 }, 306 { 307 "command_started_event": { 308 "command": { 309 "commitTransaction": 1, 310 "lsid": "session0", 311 "txnNumber": { 312 "$numberLong": "1" 313 }, 314 "startTransaction": null, 315 "autocommit": false, 316 "writeConcern": null 317 }, 318 "command_name": "commitTransaction", 319 "database_name": "admin" 320 } 321 }, 322 { 323 "command_started_event": { 324 "command": { 325 "commitTransaction": 1, 326 "lsid": "session0", 327 "txnNumber": { 328 "$numberLong": "1" 329 }, 330 "startTransaction": null, 331 "autocommit": false, 332 "writeConcern": { 333 "w": "majority", 334 "wtimeout": 10000 335 } 336 }, 337 "command_name": "commitTransaction", 338 "database_name": "admin" 339 } 340 }, 341 { 342 "command_started_event": { 343 "command": { 344 "commitTransaction": 1, 345 "lsid": "session0", 346 "txnNumber": { 347 "$numberLong": "1" 348 }, 349 "startTransaction": null, 350 "autocommit": false, 351 "writeConcern": { 352 "w": "majority", 353 "wtimeout": 10000 354 } 355 }, 356 "command_name": "commitTransaction", 357 "database_name": "admin" 358 } 359 } 360 ], 361 "outcome": { 362 "collection": { 363 "data": [ 364 { 365 "_id": 1 366 } 367 ] 368 } 369 } 370 }, 371 { 372 "description": "write concern error on commit", 373 "operations": [ 374 { 375 "name": "startTransaction", 376 "object": "session0", 377 "arguments": { 378 "options": { 379 "writeConcern": { 380 "w": 10 381 } 382 } 383 } 384 }, 385 { 386 "name": "insertOne", 387 "object": "collection", 388 "arguments": { 389 "session": "session0", 390 "document": { 391 "_id": 1 392 } 393 }, 394 "result": { 395 "insertedId": 1 396 } 397 }, 398 { 399 "name": "commitTransaction", 400 "object": "session0", 401 "result": { 402 "errorLabelsOmit": [ 403 "TransientTransactionError", 404 "UnknownTransactionCommitResult" 405 ] 406 } 407 } 408 ], 409 "outcome": { 410 "collection": { 411 "data": [ 412 { 413 "_id": 1 414 } 415 ] 416 } 417 } 418 }, 419 { 420 "description": "commit without start", 421 "operations": [ 422 { 423 "name": "commitTransaction", 424 "object": "session0", 425 "result": { 426 "errorContains": "no transaction started" 427 } 428 } 429 ], 430 "expectations": [], 431 "outcome": { 432 "collection": { 433 "data": [] 434 } 435 } 436 }, 437 { 438 "description": "commit after no-op abort", 439 "operations": [ 440 { 441 "name": "startTransaction", 442 "object": "session0" 443 }, 444 { 445 "name": "abortTransaction", 446 "object": "session0" 447 }, 448 { 449 "name": "commitTransaction", 450 "object": "session0", 451 "result": { 452 "errorContains": "Cannot call commitTransaction after calling abortTransaction" 453 } 454 } 455 ], 456 "expectations": [], 457 "outcome": { 458 "collection": { 459 "data": [] 460 } 461 } 462 }, 463 { 464 "description": "commit after abort", 465 "operations": [ 466 { 467 "name": "startTransaction", 468 "object": "session0" 469 }, 470 { 471 "name": "insertOne", 472 "object": "collection", 473 "arguments": { 474 "session": "session0", 475 "document": { 476 "_id": 1 477 } 478 }, 479 "result": { 480 "insertedId": 1 481 } 482 }, 483 { 484 "name": "abortTransaction", 485 "object": "session0" 486 }, 487 { 488 "name": "commitTransaction", 489 "object": "session0", 490 "result": { 491 "errorContains": "Cannot call commitTransaction after calling abortTransaction" 492 } 493 } 494 ], 495 "expectations": [ 496 { 497 "command_started_event": { 498 "command": { 499 "insert": "test", 500 "documents": [ 501 { 502 "_id": 1 503 } 504 ], 505 "ordered": true, 506 "readConcern": null, 507 "lsid": "session0", 508 "txnNumber": { 509 "$numberLong": "1" 510 }, 511 "startTransaction": true, 512 "autocommit": false, 513 "writeConcern": null 514 }, 515 "command_name": "insert", 516 "database_name": "transaction-tests" 517 } 518 }, 519 { 520 "command_started_event": { 521 "command": { 522 "abortTransaction": 1, 523 "lsid": "session0", 524 "txnNumber": { 525 "$numberLong": "1" 526 }, 527 "startTransaction": null, 528 "autocommit": false, 529 "writeConcern": null 530 }, 531 "command_name": "abortTransaction", 532 "database_name": "admin" 533 } 534 } 535 ] 536 }, 537 { 538 "description": "multiple commits after empty transaction", 539 "operations": [ 540 { 541 "name": "startTransaction", 542 "object": "session0" 543 }, 544 { 545 "name": "insertOne", 546 "object": "collection", 547 "arguments": { 548 "session": "session0", 549 "document": { 550 "_id": 1 551 } 552 }, 553 "result": { 554 "insertedId": 1 555 } 556 }, 557 { 558 "name": "abortTransaction", 559 "object": "session0" 560 }, 561 { 562 "name": "startTransaction", 563 "object": "session0" 564 }, 565 { 566 "name": "commitTransaction", 567 "object": "session0" 568 }, 569 { 570 "name": "commitTransaction", 571 "object": "session0" 572 }, 573 { 574 "name": "startTransaction", 575 "object": "session0" 576 }, 577 { 578 "name": "insertOne", 579 "object": "collection", 580 "arguments": { 581 "session": "session0", 582 "document": { 583 "_id": 1 584 } 585 }, 586 "result": { 587 "insertedId": 1 588 } 589 }, 590 { 591 "name": "abortTransaction", 592 "object": "session0" 593 } 594 ], 595 "expectations": [ 596 { 597 "command_started_event": { 598 "command": { 599 "insert": "test", 600 "documents": [ 601 { 602 "_id": 1 603 } 604 ], 605 "ordered": true, 606 "readConcern": null, 607 "lsid": "session0", 608 "txnNumber": { 609 "$numberLong": "1" 610 }, 611 "startTransaction": true, 612 "autocommit": false, 613 "writeConcern": null 614 }, 615 "command_name": "insert", 616 "database_name": "transaction-tests" 617 } 618 }, 619 { 620 "command_started_event": { 621 "command": { 622 "abortTransaction": 1, 623 "lsid": "session0", 624 "txnNumber": { 625 "$numberLong": "1" 626 }, 627 "startTransaction": null, 628 "autocommit": false, 629 "writeConcern": null 630 }, 631 "command_name": "abortTransaction", 632 "database_name": "admin" 633 } 634 }, 635 { 636 "command_started_event": { 637 "command": { 638 "insert": "test", 639 "documents": [ 640 { 641 "_id": 1 642 } 643 ], 644 "ordered": true, 645 "readConcern": { 646 "afterClusterTime": 42 647 }, 648 "lsid": "session0", 649 "txnNumber": { 650 "$numberLong": "3" 651 }, 652 "startTransaction": true, 653 "autocommit": false, 654 "writeConcern": null 655 }, 656 "command_name": "insert", 657 "database_name": "transaction-tests" 658 } 659 }, 660 { 661 "command_started_event": { 662 "command": { 663 "abortTransaction": 1, 664 "lsid": "session0", 665 "txnNumber": { 666 "$numberLong": "3" 667 }, 668 "startTransaction": null, 669 "autocommit": false, 670 "writeConcern": null 671 }, 672 "command_name": "abortTransaction", 673 "database_name": "admin" 674 } 675 } 676 ], 677 "outcome": { 678 "collection": { 679 "data": [] 680 } 681 } 682 }, 683 { 684 "description": "reset session state commit", 685 "clientOptions": { 686 "retryWrites": false 687 }, 688 "operations": [ 689 { 690 "name": "startTransaction", 691 "object": "session0" 692 }, 693 { 694 "name": "insertOne", 695 "object": "collection", 696 "arguments": { 697 "session": "session0", 698 "document": { 699 "_id": 1 700 } 701 }, 702 "result": { 703 "insertedId": 1 704 } 705 }, 706 { 707 "name": "commitTransaction", 708 "object": "session0" 709 }, 710 { 711 "name": "insertOne", 712 "object": "collection", 713 "arguments": { 714 "session": "session0", 715 "document": { 716 "_id": 2 717 } 718 }, 719 "result": { 720 "insertedId": 2 721 } 722 }, 723 { 724 "name": "commitTransaction", 725 "object": "session0", 726 "result": { 727 "errorContains": "no transaction started" 728 } 729 } 730 ], 731 "expectations": [ 732 { 733 "command_started_event": { 734 "command": { 735 "insert": "test", 736 "documents": [ 737 { 738 "_id": 1 739 } 740 ], 741 "ordered": true, 742 "readConcern": null, 743 "lsid": "session0", 744 "txnNumber": { 745 "$numberLong": "1" 746 }, 747 "startTransaction": true, 748 "autocommit": false, 749 "writeConcern": null 750 }, 751 "command_name": "insert", 752 "database_name": "transaction-tests" 753 } 754 }, 755 { 756 "command_started_event": { 757 "command": { 758 "commitTransaction": 1, 759 "lsid": "session0", 760 "txnNumber": { 761 "$numberLong": "1" 762 }, 763 "startTransaction": null, 764 "autocommit": false, 765 "writeConcern": null 766 }, 767 "command_name": "commitTransaction", 768 "database_name": "admin" 769 } 770 }, 771 { 772 "command_started_event": { 773 "command": { 774 "insert": "test", 775 "documents": [ 776 { 777 "_id": 2 778 } 779 ], 780 "ordered": true, 781 "readConcern": null, 782 "lsid": "session0", 783 "txnNumber": null, 784 "startTransaction": null, 785 "autocommit": null 786 }, 787 "command_name": "insert", 788 "database_name": "transaction-tests" 789 } 790 } 791 ], 792 "outcome": { 793 "collection": { 794 "data": [ 795 { 796 "_id": 1 797 }, 798 { 799 "_id": 2 800 } 801 ] 802 } 803 } 804 }, 805 { 806 "description": "reset session state abort", 807 "clientOptions": { 808 "retryWrites": false 809 }, 810 "operations": [ 811 { 812 "name": "startTransaction", 813 "object": "session0" 814 }, 815 { 816 "name": "insertOne", 817 "object": "collection", 818 "arguments": { 819 "session": "session0", 820 "document": { 821 "_id": 1 822 } 823 }, 824 "result": { 825 "insertedId": 1 826 } 827 }, 828 { 829 "name": "abortTransaction", 830 "object": "session0" 831 }, 832 { 833 "name": "insertOne", 834 "object": "collection", 835 "arguments": { 836 "session": "session0", 837 "document": { 838 "_id": 2 839 } 840 }, 841 "result": { 842 "insertedId": 2 843 } 844 }, 845 { 846 "name": "abortTransaction", 847 "object": "session0", 848 "result": { 849 "errorContains": "no transaction started" 850 } 851 } 852 ], 853 "expectations": [ 854 { 855 "command_started_event": { 856 "command": { 857 "insert": "test", 858 "documents": [ 859 { 860 "_id": 1 861 } 862 ], 863 "ordered": true, 864 "readConcern": null, 865 "lsid": "session0", 866 "txnNumber": { 867 "$numberLong": "1" 868 }, 869 "startTransaction": true, 870 "autocommit": false, 871 "writeConcern": null 872 }, 873 "command_name": "insert", 874 "database_name": "transaction-tests" 875 } 876 }, 877 { 878 "command_started_event": { 879 "command": { 880 "abortTransaction": 1, 881 "lsid": "session0", 882 "txnNumber": { 883 "$numberLong": "1" 884 }, 885 "startTransaction": null, 886 "autocommit": false, 887 "writeConcern": null 888 }, 889 "command_name": "abortTransaction", 890 "database_name": "admin" 891 } 892 }, 893 { 894 "command_started_event": { 895 "command": { 896 "insert": "test", 897 "documents": [ 898 { 899 "_id": 2 900 } 901 ], 902 "ordered": true, 903 "readConcern": null, 904 "lsid": "session0", 905 "txnNumber": null, 906 "startTransaction": null, 907 "autocommit": null 908 }, 909 "command_name": "insert", 910 "database_name": "transaction-tests" 911 } 912 } 913 ], 914 "outcome": { 915 "collection": { 916 "data": [ 917 { 918 "_id": 2 919 } 920 ] 921 } 922 } 923 } 924 ] 925} 926