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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
# Test SDAM error handling.
runOn:
# failCommand appName requirements
- minServerVersion: "4.9"
database_name: &database_name "sdam-tests"
collection_name: &collection_name "hello-command-error"
data: []
tests:
- description: Command error on Monitor handshake
# Configure the initial handshake to fail with a command error.
# Use times: 2 so that the RTT hello fails as well.
failPoint:
configureFailPoint: failCommand
mode: { times: 2 }
data:
failCommands: ["hello", "isMaster"]
appName: commandErrorHandshakeTest
closeConnection: false
errorCode: 91 # ShutdownInProgress
clientOptions:
retryWrites: false
connectTimeoutMS: 250
heartbeatFrequencyMS: 500
appname: commandErrorHandshakeTest
operations:
# The command error on the initial handshake should mark the server
# Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool.
- name: waitForEvent
object: testRunner
arguments:
event: ServerMarkedUnknownEvent
count: 1
# Perform an operation to ensure the node is discovered.
- name: insertMany
object: collection
arguments:
documents:
- _id: 1
- _id: 2
# We cannot assert the server was marked Unknown and pool was cleared an
# exact number of times because the RTT hello may or may not have
# triggered this failpoint as well.
# - name: assertEventCount
# object: testRunner
# arguments:
# event: ServerMarkedUnknownEvent
# count: 1
# - name: assertEventCount
# object: testRunner
# arguments:
# event: PoolClearedEvent
# count: 1
expectations:
- command_started_event:
command:
insert: *collection_name
documents:
- _id: 1
- _id: 2
command_name: insert
database_name: *database_name
outcome:
collection:
data:
- {_id: 1}
- {_id: 2}
- description: Command error on Monitor check
clientOptions:
retryWrites: false
connectTimeoutMS: 1000
heartbeatFrequencyMS: 500
appname: commandErrorCheckTest
operations:
# Perform an operation to ensure the node is discovered.
- name: insertMany
object: collection
arguments:
documents:
- _id: 1
- _id: 2
# Configure the next streaming hello check to fail with a command
# error.
# Use times: 2 so that the RTT hello is blocked as well.
- name: configureFailPoint
object: testRunner
arguments:
failPoint:
configureFailPoint: failCommand
mode: { times: 2 }
data:
failCommands: ["hello", "isMaster"]
appName: commandErrorCheckTest
closeConnection: false
blockConnection: true
blockTimeMS: 750
errorCode: 91 # ShutdownInProgress
# The command error on the next check should mark the server Unknown and
# clear the pool.
- name: waitForEvent
object: testRunner
arguments:
event: ServerMarkedUnknownEvent
count: 1
- name: waitForEvent
object: testRunner
arguments:
event: PoolClearedEvent
count: 1
# Perform an operation to ensure the node is rediscovered.
- name: insertMany
object: collection
arguments:
documents:
- _id: 3
- _id: 4
# Assert the server was marked Unknown and pool was cleared exactly once.
- name: assertEventCount
object: testRunner
arguments:
event: ServerMarkedUnknownEvent
count: 1
- name: assertEventCount
object: testRunner
arguments:
event: PoolClearedEvent
count: 1
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}
|