# Test SDAM error handling.
runOn:
    # failCommand appName requirements
    - minServerVersion: "4.4"

database_name: &database_name "sdam-tests"
collection_name: &collection_name "connectTimeoutMS"

data: []

tests:
  - description: connectTimeoutMS=0
    clientOptions:
      retryWrites: false
      connectTimeoutMS: 0
      heartbeatFrequencyMS: 500
      appname: connectTimeoutMS=0
    operations:
      # Perform an operation to ensure the node is discovered.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 1
            - _id: 2
      # Block the next streaming hello check for longer than
      # heartbeatFrequencyMS to ensure that the connection timeout remains
      # unlimited.
      - name: configureFailPoint
        object: testRunner
        arguments:
          failPoint:
            configureFailPoint: failCommand
            mode: { times: 2 }
            data:
                failCommands: ["hello", "isMaster"]
                appName: connectTimeoutMS=0
                blockConnection: true
                blockTimeMS: 550
      - name: wait
        object: testRunner
        arguments:
          ms: 750
      # Perform an operation to ensure the node is still selectable.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 3
            - _id: 4
      # Assert that the server was never marked Unknown and the pool was never
      # cleared.
      - name: assertEventCount
        object: testRunner
        arguments:
          event: ServerMarkedUnknownEvent
          count: 0
      - name: assertEventCount
        object: testRunner
        arguments:
          event: PoolClearedEvent
          count: 0

    expectations:
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 1
              - _id: 2
          command_name: insert
          database_name: *database_name
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 3
              - _id: 4
          command_name: insert
          database_name: *database_name

    outcome:
      collection:
        data:
          - {_id: 1}
          - {_id: 2}
          - {_id: 3}
          - {_id: 4}
