...

Text file src/go.mongodb.org/mongo-driver/testdata/unified-test-format/valid-pass/poc-change-streams.yml

Documentation: go.mongodb.org/mongo-driver/testdata/unified-test-format/valid-pass

     1description: "poc-change-streams"
     2
     3schemaVersion: "1.4"
     4
     5runOnRequirements:
     6  - serverless: forbid
     7
     8createEntities:
     9  # Entities for creating changeStreams
    10  - client:
    11      id: &client0 client0
    12      useMultipleMongoses: false
    13      observeEvents: [ commandStartedEvent ]
    14      # Original tests do not observe getMore commands but only because event
    15      # assertions ignore extra events. killCursors is explicitly ignored.
    16      ignoreCommandMonitoringEvents: [ getMore, killCursors ]
    17  - database:
    18      id: &database0 database0
    19      client: *client0
    20      databaseName: &database0Name change-stream-tests
    21  - collection:
    22      id: &collection0 collection0
    23      database: *database0
    24      collectionName: &collection0Name test
    25  # Entities for executing insert operations
    26  - client:
    27      id: &client1 client1
    28      useMultipleMongoses: false
    29  - database:
    30      id: &database1 database1
    31      client: *client1
    32      databaseName: &database1Name change-stream-tests
    33  - database:
    34      id: &database2 database2
    35      client: *client1
    36      databaseName: &database2Name change-stream-tests-2
    37  - collection:
    38      id: &collection1 collection1
    39      database: *database1
    40      collectionName: &collection1Name test
    41  - collection:
    42      id: &collection2 collection2
    43      database: *database1
    44      collectionName: &collection2Name test2
    45  - collection:
    46      id: &collection3 collection3
    47      database: *database2
    48      collectionName: &collection3Name test
    49
    50initialData:
    51  - collectionName: *collection1Name
    52    databaseName: *database1Name
    53    documents: []
    54  - collectionName: *collection2Name
    55    databaseName: *database1Name
    56    documents: []
    57  - collectionName: *collection3Name
    58    databaseName: *database2Name
    59    documents: []
    60
    61tests:
    62  - description: "saveResultAsEntity is optional for createChangeStream"
    63    runOnRequirements:
    64      - minServerVersion: "3.8.0"
    65        topologies: [ replicaset ]
    66    operations:
    67      - name: createChangeStream
    68        object: *client0
    69        arguments:
    70          pipeline: []
    71    expectEvents:
    72      - client: *client0
    73        events:
    74          - commandStartedEvent:
    75              command:
    76                aggregate: 1
    77              commandName: aggregate
    78              databaseName: admin
    79
    80  - description: "Executing a watch helper on a MongoClient results in notifications for changes to all collections in all databases in the cluster."
    81    runOnRequirements:
    82      - minServerVersion: "3.8.0"
    83        topologies: [ replicaset ]
    84    operations:
    85      - name: createChangeStream
    86        object: *client0
    87        arguments:
    88          pipeline: []
    89        saveResultAsEntity: &changeStream0 changeStream0
    90      - name: insertOne
    91        object: *collection2
    92        arguments:
    93          document: { x: 1 }
    94      - name: insertOne
    95        object: *collection3
    96        arguments:
    97          document: { y: 1 }
    98      - name: insertOne
    99        object: *collection1
   100        arguments:
   101          document: { z: 1 }
   102      - name: iterateUntilDocumentOrError
   103        object: *changeStream0
   104        expectResult:
   105          operationType: insert
   106          ns:
   107            db: *database1Name
   108            coll: *collection2Name
   109          fullDocument:
   110            _id: { $$type: objectId }
   111            x: 1
   112      - name: iterateUntilDocumentOrError
   113        object: *changeStream0
   114        expectResult:
   115          operationType: insert
   116          ns:
   117            db: *database2Name
   118            coll: *collection3Name
   119          fullDocument:
   120            # Original tests did not include _id, but matching now only permits
   121            # extra keys for root-level documents.
   122            _id: { $$type: objectId }
   123            y: 1
   124      - name: iterateUntilDocumentOrError
   125        object: *changeStream0
   126        expectResult:
   127          operationType: insert
   128          ns:
   129            db: *database1Name
   130            coll: *collection1Name
   131          fullDocument:
   132            _id: { $$type: objectId }
   133            z: 1
   134    expectEvents:
   135      - client: *client0
   136        events:
   137          - commandStartedEvent:
   138              command:
   139                aggregate: 1
   140                cursor: {}
   141                pipeline:
   142                  - $changeStream:
   143                      allChangesForCluster: true
   144                      # Some drivers may send a default value for fullDocument
   145                      # or omit it entirely (see: SPEC-1350).
   146                      fullDocument: { $$unsetOrMatches: default }
   147              commandName: aggregate
   148              databaseName: admin
   149
   150  - description: "Test consecutive resume"
   151    runOnRequirements:
   152      - minServerVersion: "4.1.7"
   153        topologies: [ replicaset ]
   154    operations:
   155      - name: failPoint
   156        object: testRunner
   157        arguments:
   158          client: *client0
   159          failPoint:
   160            configureFailPoint: failCommand
   161            mode: { times: 2 }
   162            data:
   163              failCommands: [ getMore ]
   164              closeConnection: true
   165      - name: createChangeStream
   166        object: *collection0
   167        arguments:
   168          batchSize: 1
   169          pipeline: []
   170        saveResultAsEntity: *changeStream0
   171      - name: insertOne
   172        object: *collection1
   173        arguments:
   174          document: { x: 1 }
   175      - name: insertOne
   176        object: *collection1
   177        arguments:
   178          document: { x: 2 }
   179      - name: insertOne
   180        object: *collection1
   181        arguments:
   182          document: { x: 3 }
   183      - name: iterateUntilDocumentOrError
   184        object: *changeStream0
   185        expectResult:
   186          operationType: insert
   187          ns:
   188            db: *database1Name
   189            coll: *collection1Name
   190          fullDocument:
   191            _id: { $$type: objectId }
   192            x: 1
   193      - name: iterateUntilDocumentOrError
   194        object: *changeStream0
   195        expectResult:
   196          operationType: insert
   197          ns:
   198            db: *database1Name
   199            coll: *collection1Name
   200          fullDocument:
   201            _id: { $$type: objectId }
   202            x: 2
   203      - name: iterateUntilDocumentOrError
   204        object: *changeStream0
   205        expectResult:
   206          operationType: insert
   207          ns:
   208            db: *database1Name
   209            coll: *collection1Name
   210          fullDocument:
   211            _id: { $$type: objectId }
   212            x: 3
   213    expectEvents:
   214      - client: *client0
   215        events:
   216          - commandStartedEvent:
   217              command:
   218                aggregate: *collection1Name
   219                cursor: { batchSize: 1 }
   220                pipeline:
   221                  - $changeStream:
   222                      fullDocument: { $$unsetOrMatches: default }
   223              commandName: aggregate
   224              databaseName: *database1Name
   225          # The original test only asserted the first command, since expected
   226          # events were only an ordered subset. This file does ignore getMore
   227          # commands but we must expect the subsequent aggregate commands, since
   228          # each failed getMore will resume. While doing so we can also assert
   229          # that those commands include a resume token.
   230          - &resumingAggregate
   231            commandStartedEvent:
   232              command:
   233                aggregate: *collection1Name
   234                cursor: { batchSize: 1 }
   235                pipeline:
   236                  - $changeStream:
   237                      fullDocument: { $$unsetOrMatches: default }
   238                      resumeAfter: { $$exists: true }
   239              commandName: aggregate
   240              databaseName: *database0Name
   241          - *resumingAggregate

View as plain text