File: runCommand.yml

package info (click to toggle)
ruby-mongo 2.23.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,020 kB
  • sloc: ruby: 110,810; makefile: 5
file content (319 lines) | stat: -rw-r--r-- 9,761 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
description: runCommand

schemaVersion: "1.3"

createEntities:
  - client:
      id: &client client
      useMultipleMongoses: false
      observeEvents: [commandStartedEvent]
  - database:
      id: &db db
      client: *client
      databaseName: *db
  - collection:
      id: &collection collection
      database: *db
      collectionName: *collection
  - database:
      id: &dbWithRC dbWithRC
      client: *client
      databaseName: *dbWithRC
      databaseOptions:
        readConcern: { level: 'local' }
  - database:
      id: &dbWithWC dbWithWC
      client: *client
      databaseName: *dbWithWC
      databaseOptions:
        writeConcern: { w: 0 }
  - session:
      id: &session session
      client: *client
  # Stable API test
  - client:
      id: &clientWithStableApi clientWithStableApi
      observeEvents: [commandStartedEvent]
      serverApi:
        version: "1"
        strict: true
  - database:
      id: &dbWithStableApi dbWithStableApi
      client: *clientWithStableApi
      databaseName: *dbWithStableApi

initialData:
- collectionName: *collection
  databaseName: *db
  documents: []

tests:
  - description: always attaches $db and implicit lsid to given command and omits default readPreference
    operations:
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                ping: 1
                $db: *db
                lsid: { $$exists: true }
                $readPreference: { $$exists: false }
              commandName: ping

  - description: always gossips the $clusterTime on the sent command
    runOnRequirements:
      # Only replicasets and sharded clusters have a $clusterTime
      - topologies: [ replicaset, sharded ]
    operations:
      # We have to run one command to obtain a clusterTime to gossip
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
        expectResult: { ok: 1 }
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              commandName: ping
          # Only check the shape of the second ping which should have the $clusterTime received from the first operation
          - commandStartedEvent:
              command:
                ping: 1
                $clusterTime: { $$exists: true }
              commandName: ping

  - description: attaches the provided session lsid to given command
    operations:
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
          session: *session
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                ping: 1
                lsid: { $$sessionLsid: *session }
                $db: *db
              commandName: ping

  - description: attaches the provided $readPreference to given command
    runOnRequirements:
      # Exclude single topology, which is most likely a standalone server
      - topologies: [ replicaset, load-balanced, sharded ]
    operations:
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
          readPreference:  &readPreference { mode: 'nearest' }
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                ping: 1
                $readPreference: *readPreference
                $db: *db
              commandName: ping

  - description: does not attach $readPreference to given command on standalone
    runOnRequirements:
      # This test assumes that the single topology contains a standalone server;
      # however, it is possible for a single topology to contain a direct
      # connection to another server type.
      # See: https://github.com/mongodb/specifications/blob/master/source/server-selection/server-selection.md#topology-type-single
      - topologies: [ single ]
    operations:
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
          readPreference: { mode: 'nearest' }
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                ping: 1
                $readPreference: { $$exists: false }
                $db: *db
              commandName: ping

  - description: does not attach primary $readPreference to given command
    operations:
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
          readPreference: { mode: 'primary' }
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                ping: 1
                $readPreference: { $$exists: false }
                $db: *db
              commandName: ping

  - description: does not inherit readConcern specified at the db level
    operations:
      - name: runCommand
        object: *dbWithRC
        # Test with a command that supports a readConcern option.
        # expectResult is intentionally omitted because some drivers
        # may automatically convert command responses into cursors.
        arguments:
          commandName: aggregate
          command: { aggregate: *collection, pipeline: [], cursor: {} }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection
                readConcern: { $$exists: false }
                $db: *dbWithRC
              commandName: aggregate

  - description: does not inherit writeConcern specified at the db level
    operations:
      - name: runCommand
        object: *dbWithWC
        arguments:
          commandName: insert
          command:
            insert: *collection
            documents: [ { foo: 'bar' } ]
            ordered: true
        expectResult: { ok: 1 }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                insert: *collection
                writeConcern: { $$exists: false }
                $db: *dbWithWC
              commandName: insert

  - description: does not retry retryable errors on given command
    runOnRequirements:
      - minServerVersion: "4.2"
    operations:
      - name: failPoint
        object: testRunner
        arguments:
          client: *client
          failPoint:
            configureFailPoint: failCommand
            mode: { times: 1 }
            data:
              failCommands: [ping]
              closeConnection: true
      - name: runCommand
        object: *db
        arguments:
          commandName: ping
          command: { ping: 1 }
        expectError:
          isClientError: true

  - description: attaches transaction fields to given command
    runOnRequirements:
      - minServerVersion: "4.0"
        topologies: [ replicaset ]
      - minServerVersion: "4.2"
        topologies: [ sharded, load-balanced ]
    operations:
      - name: withTransaction
        object: *session
        arguments:
          callback:
            - name: runCommand
              object: *db
              arguments:
                session: *session
                commandName: insert
                command:
                  insert: *collection
                  documents: [ { foo: 'transaction' } ]
                  ordered: true
              expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
    expectEvents:
      - client: *client
        events:
          - commandStartedEvent:
              command:
                insert: *collection
                documents: [ { foo: 'transaction' } ]
                ordered: true
                lsid: { $$sessionLsid: *session }
                txnNumber: 1
                startTransaction: true
                autocommit: false
                # omitted fields
                readConcern: { $$exists: false }
                writeConcern: { $$exists: false }
              commandName: insert
              databaseName: *db
          - commandStartedEvent:
              command:
                commitTransaction: 1
                lsid: { $$sessionLsid: *session }
                txnNumber: 1
                autocommit: false
                # omitted fields
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }
              commandName: commitTransaction
              databaseName: admin

  - description: attaches apiVersion fields to given command when stableApi is configured on the client
    runOnRequirements:
      - minServerVersion: "5.0"
    operations:
      - name: runCommand
        object: *dbWithStableApi
        arguments:
          commandName: ping
          command:
            ping: 1
        expectResult: { ok: 1 }
    expectEvents:
      - client: *clientWithStableApi
        events:
          - commandStartedEvent:
              command:
                ping: 1
                $db: *dbWithStableApi
                apiVersion: "1"
                apiStrict: true
                apiDeprecationErrors: { $$unsetOrMatches: false }
              commandName: ping