version: 1
style: integration
description: custom maxConnecting is enforced
runOn:
  - minServerVersion: "4.4.0"
  - topology: [ "single", "replicaset", "sharded" ]
failPoint:
  configureFailPoint: failCommand
  mode: "alwaysOn"
  data:
    failCommands: ["isMaster","hello"]
    closeConnection: false
    blockConnection: true
    blockTimeMS: 500
poolOptions:
  maxConnecting: 1
  # gives opportunity for the checkout in thread2 to establish a new connection, which it must not do until thread1 establishes one
  maxPoolSize: 2
  waitQueueTimeoutMS: 5000
operations:
  - name: ready
  # thread1 exists to consume the single permit to open a connection,
  # so that thread2 would be blocked acquiring a permit, which results in ordering its ConnectionCreated event after
  # the ConnectionReady event from thread1.
  - name: start
    target: thread1
  - name: start
    target: thread2
  - name: checkOut
    thread: thread1
  - name: waitForEvent
    event: ConnectionCreated
    count: 1
  - name: checkOut
    thread: thread2
  - name: waitForEvent
    event: ConnectionReady
    count: 2
events:
  - type: ConnectionCreated
  - type: ConnectionReady
  - type: ConnectionCreated
  - type: ConnectionReady
ignore:
  - ConnectionCheckOutStarted
  - ConnectionCheckedIn
  - ConnectionCheckedOut
  - ConnectionClosed
  - ConnectionPoolCreated
  - ConnectionPoolReady
