#hello Test SDAM error handling. runOn: # failCommand appName requirements - minServerVersion: "4.9" database_name: &database_name "sdam-tests" collection_name: &collection_name "hello-network-error" data: [] tests: - description: Network error on Monitor handshake # Configure the initial handshake to fail with a network error. # Use times: 2 so that the RTT hello fails as well. failPoint: configureFailPoint: failCommand mode: { times: 2 } data: failCommands: ["hello", "isMaster"] appName: networkErrorHandshakeTest closeConnection: true clientOptions: retryWrites: false connectTimeoutMS: 250 heartbeatFrequencyMS: 500 appname: networkErrorHandshakeTest operations: # The network 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. 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: Network error on Monitor check clientOptions: retryWrites: false connectTimeoutMS: 250 heartbeatFrequencyMS: 500 appname: networkErrorCheckTest 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 non-timeout # network error. Use "times: 4" to increase the probability that the # Monitor check fails since the RTT hello may trigger this failpoint one # or many times as well. - name: configureFailPoint object: testRunner arguments: failPoint: configureFailPoint: failCommand mode: { times: 4 } data: failCommands: ["hello", "isMaster"] appName: networkErrorCheckTest closeConnection: true # The network 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 # We cannot assert the server was marked Unknown and pool was cleared an # exact number of times because the RTT hello may have triggered this # failpoint one or many times 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 - 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}