1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
# Test SDAM error handling.
runOn:
# failCommand appName requirements
- minServerVersion: "4.9"
database_name: &database_name "sdam-tests"
collection_name: &collection_name "sdam-minPoolSize-error"
data: []
tests:
- description: Network error on minPoolSize background creation
# Configure the initial monitor handshake to succeed but the
# first or second background minPoolSize establishments to fail.
failPoint:
configureFailPoint: failCommand
mode: { skip: 3 }
data:
failCommands: ["hello", "isMaster"]
appName: SDAMminPoolSizeError
closeConnection: true
clientOptions:
heartbeatFrequencyMS: 10000
appname: SDAMminPoolSizeError
minPoolSize: 10
serverSelectionTimeoutMS: 1000
directConnection: true
operations:
# Wait for monitor to succeed handshake and mark the pool as ready.
- name: waitForEvent
object: testRunner
arguments:
event: PoolReadyEvent
count: 1
# Background connection establishment ensuring minPoolSize should fail,
# causing the pool to be cleared.
- name: waitForEvent
object: testRunner
arguments:
event: PoolClearedEvent
count: 1
# The server should be marked as Unknown as part of this.
- name: waitForEvent
object: testRunner
arguments:
event: ServerMarkedUnknownEvent
count: 1
# Executing a command should fail server selection due to not being able
# to find the primary.
- name: runCommand
object: database
command_name: ping
arguments:
command:
ping: {}
error: true
# Disable the failpoint, allowing the monitor to discover the primary again.
- name: configureFailPoint
object: testRunner
arguments:
failPoint:
configureFailPoint: failCommand
mode: off
# Perform an operation to ensure the node is discovered.
- name: runCommand
object: database
command_name: ping
arguments:
command:
ping: 1
error: false
# Assert that the monitor discovered the primary and mark the pool as ready again.
- name: assertEventCount
object: testRunner
arguments:
event: PoolReadyEvent
count: 2
|