description: snapshot-sessions-unsupported-ops

schemaVersion: "1.0"

runOnRequirements:
  - minServerVersion: "5.0"
    topologies: [replicaset, sharded]

createEntities:
  - client:
      id: &client0 client0
      observeEvents: [ commandStartedEvent, commandFailedEvent ]
  - database:
      id: &database0Name database0
      client: *client0
      databaseName: *database0Name
  - collection:
      id: &collection0Name collection0
      database: *database0Name
      collectionName: *collection0Name
  - session:
      id: session0
      client: client0
      sessionOptions:
        snapshot: true

initialData:
  - collectionName: *collection0Name
    databaseName: *database0Name
    documents:
      - { _id: 1, x: 11 }

tests:
- description: Server returns an error on insertOne with snapshot
  # Skip on sharded clusters due to SERVER-58176.
  runOnRequirements:
    - topologies: [replicaset]
  operations:
  - name: insertOne
    object: collection0
    arguments:
      session: session0
      document:
        _id: 22
        x: 22
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          insert: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: insert

- description: Server returns an error on insertMany with snapshot
  # Skip on sharded clusters due to SERVER-58176.
  runOnRequirements:
    - topologies: [replicaset]
  operations:
  - name: insertMany
    object: collection0
    arguments:
      session: session0
      documents:
        - _id: 22
          x: 22
        - _id: 33
          x: 33
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          insert: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: insert

- description: Server returns an error on deleteOne with snapshot
  # Skip on sharded clusters due to SERVER-58176.
  runOnRequirements:
    - topologies: [replicaset]
  operations:
  - name: deleteOne
    object: collection0
    arguments:
      session: session0
      filter: {}
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          delete: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: delete

- description: Server returns an error on updateOne with snapshot
  # Skip on sharded clusters due to SERVER-58176.
  runOnRequirements:
    - topologies: [replicaset]
  operations:
  - name: updateOne
    object: collection0
    arguments:
      session: session0
      filter: { _id: 1 }
      update: { $inc: { x: 1 } }
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          update: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: update

- description: Server returns an error on findOneAndUpdate with snapshot
  operations:
  - name: findOneAndUpdate
    object: collection0
    arguments:
      session: session0
      filter: { _id: 1 }
      update: { $inc: { x: 1 } }
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          findAndModify: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: findAndModify

- description: Server returns an error on listDatabases with snapshot
  operations:
  - name: listDatabases
    object: client0
    arguments:
      session: session0
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          listDatabases: 1
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: listDatabases

- description: Server returns an error on listCollections with snapshot
  operations:
  - name: listCollections
    object: database0
    arguments:
      session: session0
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          listCollections: 1
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: listCollections

- description: Server returns an error on listIndexes with snapshot
  operations:
  - name: listIndexes
    object: collection0
    arguments:
      session: session0
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          listIndexes: collection0
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: listIndexes

- description: Server returns an error on runCommand with snapshot
  operations:
  - name: runCommand
    object: database0
    arguments:
      session: session0
      commandName: listCollections
      command:
        listCollections: 1
    expectError:
      isError: true
      isClientError: false
  expectEvents:
  - client: client0
    events:
    - commandStartedEvent:
        command:
          listCollections: 1
          readConcern:
            level: snapshot
            atClusterTime:
              "$$exists": false
    - commandFailedEvent:
        commandName: listCollections
