...

Text file src/go.mongodb.org/mongo-driver/testdata/run-command/runCommand.yml

Documentation: go.mongodb.org/mongo-driver/testdata/run-command

     1description: runCommand
     2
     3schemaVersion: "1.3"
     4
     5createEntities:
     6  - client:
     7      id: &client client
     8      useMultipleMongoses: false
     9      observeEvents: [commandStartedEvent]
    10  - database:
    11      id: &db db
    12      client: *client
    13      databaseName: *db
    14  - collection:
    15      id: &collection collection
    16      database: *db
    17      collectionName: *collection
    18  - database:
    19      id: &dbWithRC dbWithRC
    20      client: *client
    21      databaseName: *dbWithRC
    22      databaseOptions:
    23        readConcern: { level: 'local' }
    24  - database:
    25      id: &dbWithWC dbWithWC
    26      client: *client
    27      databaseName: *dbWithWC
    28      databaseOptions:
    29        writeConcern: { w: 0 }
    30  - session:
    31      id: &session session
    32      client: *client
    33  # Stable API test
    34  - client:
    35      id: &clientWithStableApi clientWithStableApi
    36      observeEvents: [commandStartedEvent]
    37      serverApi:
    38        version: "1"
    39        strict: true
    40  - database:
    41      id: &dbWithStableApi dbWithStableApi
    42      client: *clientWithStableApi
    43      databaseName: *dbWithStableApi
    44
    45initialData:
    46- collectionName: *collection
    47  databaseName: *db
    48  documents: []
    49
    50tests:
    51  - description: always attaches $db and implicit lsid to given command and omits default readPreference
    52    operations:
    53      - name: runCommand
    54        object: *db
    55        arguments:
    56          commandName: ping
    57          command: { ping: 1 }
    58        expectResult: { ok: 1 }
    59    expectEvents:
    60      - client: *client
    61        events:
    62          - commandStartedEvent:
    63              command:
    64                ping: 1
    65                $db: *db
    66                lsid: { $$exists: true }
    67                $readPreference: { $$exists: false }
    68              commandName: ping
    69
    70  - description: always gossips the $clusterTime on the sent command
    71    runOnRequirements:
    72      # Only replicasets and sharded clusters have a $clusterTime
    73      - topologies: [ replicaset, sharded ]
    74    operations:
    75      # We have to run one command to obtain a clusterTime to gossip
    76      - name: runCommand
    77        object: *db
    78        arguments:
    79          commandName: ping
    80          command: { ping: 1 }
    81        expectResult: { ok: 1 }
    82      - name: runCommand
    83        object: *db
    84        arguments:
    85          commandName: ping
    86          command: { ping: 1 }
    87        expectResult: { ok: 1 }
    88    expectEvents:
    89      - client: *client
    90        events:
    91          - commandStartedEvent:
    92              commandName: ping
    93          # Only check the shape of the second ping which should have the $clusterTime received from the first operation
    94          - commandStartedEvent:
    95              command:
    96                ping: 1
    97                $clusterTime: { $$exists: true }
    98              commandName: ping
    99
   100  - description: attaches the provided session lsid to given command
   101    operations:
   102      - name: runCommand
   103        object: *db
   104        arguments:
   105          commandName: ping
   106          command: { ping: 1 }
   107          session: *session
   108        expectResult: { ok: 1 }
   109    expectEvents:
   110      - client: *client
   111        events:
   112          - commandStartedEvent:
   113              command:
   114                ping: 1
   115                lsid: { $$sessionLsid: *session }
   116                $db: *db
   117              commandName: ping
   118
   119  - description: attaches the provided $readPreference to given command
   120    runOnRequirements:
   121      # Exclude single topology, which is most likely a standalone server
   122      - topologies: [ replicaset, sharded-replicaset, load-balanced, sharded ]
   123    operations:
   124      - name: runCommand
   125        object: *db
   126        arguments:
   127          commandName: ping
   128          command: { ping: 1 }
   129          readPreference:  &readPreference { mode: 'nearest' }
   130        expectResult: { ok: 1 }
   131    expectEvents:
   132      - client: *client
   133        events:
   134          - commandStartedEvent:
   135              command:
   136                ping: 1
   137                $readPreference: *readPreference
   138                $db: *db
   139              commandName: ping
   140
   141  - description: does not attach $readPreference to given command on standalone
   142    runOnRequirements:
   143      # This test assumes that the single topology contains a standalone server;
   144      # however, it is possible for a single topology to contain a direct
   145      # connection to another server type.
   146      # See: https://github.com/mongodb/specifications/blob/master/source/server-selection/server-selection.rst#topology-type-single
   147      - topologies: [ single ]
   148    operations:
   149      - name: runCommand
   150        object: *db
   151        arguments:
   152          commandName: ping
   153          command: { ping: 1 }
   154          readPreference: { mode: 'nearest' }
   155        expectResult: { ok: 1 }
   156    expectEvents:
   157      - client: *client
   158        events:
   159          - commandStartedEvent:
   160              command:
   161                ping: 1
   162                $readPreference: { $$exists: false }
   163                $db: *db
   164              commandName: ping
   165
   166  - description: does not attach primary $readPreference to given command
   167    operations:
   168      - name: runCommand
   169        object: *db
   170        arguments:
   171          commandName: ping
   172          command: { ping: 1 }
   173          readPreference: { mode: 'primary' }
   174        expectResult: { ok: 1 }
   175    expectEvents:
   176      - client: *client
   177        events:
   178          - commandStartedEvent:
   179              command:
   180                ping: 1
   181                $readPreference: { $$exists: false }
   182                $db: *db
   183              commandName: ping
   184
   185  - description: does not inherit readConcern specified at the db level
   186    operations:
   187      - name: runCommand
   188        object: *dbWithRC
   189        # Test with a command that supports a readConcern option.
   190        # expectResult is intentionally omitted because some drivers
   191        # may automatically convert command responses into cursors.
   192        arguments:
   193          commandName: aggregate
   194          command: { aggregate: *collection, pipeline: [], cursor: {} }
   195    expectEvents:
   196      - client: *client
   197        events:
   198          - commandStartedEvent:
   199              command:
   200                aggregate: *collection
   201                readConcern: { $$exists: false }
   202                $db: *dbWithRC
   203              commandName: aggregate
   204
   205  - description: does not inherit writeConcern specified at the db level
   206    operations:
   207      - name: runCommand
   208        object: *dbWithWC
   209        arguments:
   210          commandName: insert
   211          command:
   212            insert: *collection
   213            documents: [ { foo: 'bar' } ]
   214            ordered: true
   215        expectResult: { ok: 1 }
   216    expectEvents:
   217      - client: *client
   218        events:
   219          - commandStartedEvent:
   220              command:
   221                insert: *collection
   222                writeConcern: { $$exists: false }
   223                $db: *dbWithWC
   224              commandName: insert
   225
   226  - description: does not retry retryable errors on given command
   227    runOnRequirements:
   228      - minServerVersion: "4.2"
   229    operations:
   230      - name: failPoint
   231        object: testRunner
   232        arguments:
   233          client: *client
   234          failPoint:
   235            configureFailPoint: failCommand
   236            mode: { times: 1 }
   237            data:
   238              failCommands: [ping]
   239              closeConnection: true
   240      - name: runCommand
   241        object: *db
   242        arguments:
   243          commandName: ping
   244          command: { ping: 1 }
   245        expectError:
   246          isClientError: true
   247
   248  - description: attaches transaction fields to given command
   249    runOnRequirements:
   250      - minServerVersion: "4.0"
   251        topologies: [ replicaset ]
   252      - minServerVersion: "4.2"
   253        topologies: [ sharded-replicaset, load-balanced ]
   254    operations:
   255      - name: withTransaction
   256        object: *session
   257        arguments:
   258          callback:
   259            - name: runCommand
   260              object: *db
   261              arguments:
   262                session: *session
   263                commandName: insert
   264                command:
   265                  insert: *collection
   266                  documents: [ { foo: 'transaction' } ]
   267                  ordered: true
   268              expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
   269    expectEvents:
   270      - client: *client
   271        events:
   272          - commandStartedEvent:
   273              command:
   274                insert: *collection
   275                documents: [ { foo: 'transaction' } ]
   276                ordered: true
   277                lsid: { $$sessionLsid: *session }
   278                txnNumber: 1
   279                startTransaction: true
   280                autocommit: false
   281                # omitted fields
   282                readConcern: { $$exists: false }
   283                writeConcern: { $$exists: false }
   284              commandName: insert
   285              databaseName: *db
   286          - commandStartedEvent:
   287              command:
   288                commitTransaction: 1
   289                lsid: { $$sessionLsid: *session }
   290                txnNumber: 1
   291                autocommit: false
   292                # omitted fields
   293                writeConcern: { $$exists: false }
   294                readConcern: { $$exists: false }
   295              commandName: commitTransaction
   296              databaseName: admin
   297
   298  - description: attaches apiVersion fields to given command when stableApi is configured on the client
   299    runOnRequirements:
   300      - minServerVersion: "5.0"
   301    operations:
   302      - name: runCommand
   303        object: *dbWithStableApi
   304        arguments:
   305          commandName: ping
   306          command:
   307            ping: 1
   308        expectResult: { ok: 1 }
   309    expectEvents:
   310      - client: *clientWithStableApi
   311        events:
   312          - commandStartedEvent:
   313              command:
   314                ping: 1
   315                $db: *dbWithStableApi
   316                apiVersion: "1"
   317                apiStrict: true
   318                apiDeprecationErrors: { $$unsetOrMatches: false }
   319              commandName: ping

View as plain text