# Autogenerated tests for SDAM error handling, see generate-error-tests.py
description: Stale generation NotPrimaryOrSecondary error beforeHandshakeCompletes
uri: mongodb://a/?replicaSet=rs
phases:
- description: Primary A is discovered
  responses:
  - - a:27017
    - ok: 1
      helloOk: true
      isWritablePrimary: true
      hosts:
      - a:27017
      setName: rs
      minWireVersion: 0
      maxWireVersion: 9
      topologyVersion: &topologyVersion_1_1
        processId:
          "$oid": '000000000000000000000001'
        counter:
          "$numberLong": '1'
  outcome:
    servers:
      a:27017:
        type: RSPrimary
        setName: rs
        topologyVersion: *topologyVersion_1_1
        pool:
          generation: 0
    topologyType: ReplicaSetWithPrimary
    logicalSessionTimeoutMinutes: null
    setName: rs

# Process a network error which increments the pool generation.
- description: Non-stale application network error
  applicationErrors:
  - address: a:27017
    when: afterHandshakeCompletes
    maxWireVersion: 9
    type: network
  outcome:
    servers:
      a:27017:
        type: Unknown
        topologyVersion: null
        pool:
          generation: 1
    topologyType: ReplicaSetNoPrimary
    logicalSessionTimeoutMinutes: null
    setName: rs

- description: Primary A is rediscovered
  responses:
  - - a:27017
    - ok: 1
      helloOk: true
      isWritablePrimary: true
      hosts:
      - a:27017
      setName: rs
      minWireVersion: 0
      maxWireVersion: 9
      topologyVersion: *topologyVersion_1_1
  outcome: &outcome
    servers:
      a:27017:
        type: RSPrimary
        setName: rs
        topologyVersion: *topologyVersion_1_1
        pool:
          generation: 1
    topologyType: ReplicaSetWithPrimary
    logicalSessionTimeoutMinutes: null
    setName: rs

- description: Ignore stale NotPrimaryOrSecondary error (stale generation)
  applicationErrors:
  - address: a:27017
    generation: 0
    when: beforeHandshakeCompletes
    maxWireVersion: 9
    type: command
    response:
      ok: 0
      errmsg: NotPrimaryOrSecondary
      code: 13436
      topologyVersion:
        processId:
          "$oid": '000000000000000000000001'
        counter:
          "$numberLong": "2"
  outcome: *outcome
