1runOn:
2    -
3        minServerVersion: "4.0"
4        topology: ["single", "replicaset"]
5    -
6        minServerVersion: "4.1.7"
7        topology: ["sharded"]
8
9database_name: &database_name "retryable-reads-tests"
10collection_name: &collection_name "coll"
11
12data: []
13
14tests:
15    -
16        description: "ListIndexNames succeeds after InterruptedAtShutdown"
17        failPoint: &failCommand_failPoint
18            configureFailPoint: failCommand
19            mode: { times: 1 }
20            data: { failCommands: [listIndexes], errorCode: 11600 }
21        operations:
22            - &retryable_operation
23                name: listIndexNames
24                object: collection
25        expectations:
26            - &retryable_command_started_event
27                command_started_event:
28                    command:
29                        listIndexes: *collection_name
30                    database_name: *database_name
31            - *retryable_command_started_event
32    -
33        description: "ListIndexNames succeeds after InterruptedDueToReplStateChange"
34        failPoint:
35            <<: *failCommand_failPoint
36            data: { failCommands: [listIndexes], errorCode: 11602 }
37        operations: [*retryable_operation]
38        expectations:
39             - *retryable_command_started_event
40             - *retryable_command_started_event
41    -
42        description: "ListIndexNames succeeds after NotMaster"
43        failPoint:
44            <<: *failCommand_failPoint
45            data: { failCommands: [listIndexes], errorCode: 10107 }
46        operations: [*retryable_operation]
47        expectations:
48             - *retryable_command_started_event
49             - *retryable_command_started_event
50    -
51        description: "ListIndexNames succeeds after NotMasterNoSlaveOk"
52        failPoint:
53            <<: *failCommand_failPoint
54            data: { failCommands: [listIndexes], errorCode: 13435 }
55        operations: [*retryable_operation]
56        expectations:
57             - *retryable_command_started_event
58             - *retryable_command_started_event
59    -
60        description: "ListIndexNames succeeds after NotMasterOrSecondary"
61        failPoint:
62            <<: *failCommand_failPoint
63            data: { failCommands: [listIndexes], errorCode: 13436 }
64        operations: [*retryable_operation]
65        expectations:
66             - *retryable_command_started_event
67             - *retryable_command_started_event
68    -
69        description: "ListIndexNames succeeds after PrimarySteppedDown"
70        failPoint:
71            <<: *failCommand_failPoint
72            data: { failCommands: [listIndexes], errorCode: 189 }
73        operations: [*retryable_operation]
74        expectations:
75             - *retryable_command_started_event
76             - *retryable_command_started_event
77    -
78        description: "ListIndexNames succeeds after ShutdownInProgress"
79        failPoint:
80            <<: *failCommand_failPoint
81            data: { failCommands: [listIndexes], errorCode: 91 }
82        operations: [*retryable_operation]
83        expectations:
84             - *retryable_command_started_event
85             - *retryable_command_started_event
86    -
87        description: "ListIndexNames succeeds after HostNotFound"
88        failPoint:
89            <<: *failCommand_failPoint
90            data: { failCommands: [listIndexes], errorCode: 7 }
91        operations: [*retryable_operation]
92        expectations:
93             - *retryable_command_started_event
94             - *retryable_command_started_event
95    -
96        description: "ListIndexNames succeeds after HostUnreachable"
97        failPoint:
98            <<: *failCommand_failPoint
99            data: { failCommands: [listIndexes], errorCode: 6 }
100        operations: [*retryable_operation]
101        expectations:
102             - *retryable_command_started_event
103             - *retryable_command_started_event
104    -
105        description: "ListIndexNames succeeds after NetworkTimeout"
106        failPoint:
107            <<: *failCommand_failPoint
108            data: { failCommands: [listIndexes], errorCode: 89 }
109        operations: [*retryable_operation]
110        expectations:
111             - *retryable_command_started_event
112             - *retryable_command_started_event
113    -
114        description: "ListIndexNames succeeds after SocketException"
115        failPoint:
116            <<: *failCommand_failPoint
117            data: { failCommands: [listIndexes], errorCode: 9001 }
118        operations: [*retryable_operation]
119        expectations:
120             - *retryable_command_started_event
121             - *retryable_command_started_event
122    -
123        description: "ListIndexNames fails after two NotMaster errors"
124        failPoint:
125            <<: *failCommand_failPoint
126            mode: { times: 2 }
127            data: { failCommands: [listIndexes], errorCode: 10107 }
128        operations:
129            - &retryable_operation_fails
130                <<: *retryable_operation
131                error: true
132        expectations:
133             - *retryable_command_started_event
134             - *retryable_command_started_event
135    -
136        description: "ListIndexNames fails after NotMaster when retryReads is false"
137        clientOptions:
138            retryReads: false
139        failPoint:
140            <<: *failCommand_failPoint
141            data: { failCommands: [listIndexes], errorCode: 10107 }
142        operations: [*retryable_operation_fails]
143        expectations:
144             - *retryable_command_started_event
145