--- description: hello-network-error schemaVersion: "1.10" runOnRequirements: # failCommand appName requirements - minServerVersion: "4.9" serverless: forbid topologies: [ single, replicaset, sharded ] createEntities: - client: id: &setupClient setupClient useMultipleMongoses: false initialData: &initialData - collectionName: &collectionName hello-network-error databaseName: &databaseName sdam-tests documents: [] 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. operations: - name: failPoint object: testRunner arguments: client: *setupClient failPoint: configureFailPoint: failCommand mode: times: 2 data: failCommands: - hello - isMaster appName: networkErrorHandshakeTest closeConnection: true - name: createEntities object: testRunner arguments: entities: - client: id: &client client useMultipleMongoses: false observeEvents: - commandStartedEvent - serverDescriptionChangedEvent - poolClearedEvent uriOptions: retryWrites: false connectTimeoutMS: 250 heartbeatFrequencyMS: 500 appname: networkErrorHandshakeTest - database: id: &database database client: *client databaseName: *databaseName - collection: id: &collection collection database: *database collectionName: *collectionName # The network error on the initial handshake should mark the server # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool. - name: waitForEvent object: testRunner arguments: client: *client event: serverDescriptionChangedEvent: newDescription: type: Unknown 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. expectEvents: - client: *client eventType: command events: - commandStartedEvent: command: insert: hello-network-error documents: - _id: 1 - _id: 2 commandName: insert databaseName: *databaseName outcome: - collectionName: *collectionName databaseName: *databaseName documents: - _id: 1 - _id: 2 - description: Network error on Monitor check operations: - name: createEntities object: testRunner arguments: entities: - client: id: &client client useMultipleMongoses: false observeEvents: - commandStartedEvent - serverDescriptionChangedEvent - poolClearedEvent uriOptions: retryWrites: false connectTimeoutMS: 250 heartbeatFrequencyMS: 500 appname: networkErrorCheckTest - database: id: &database database client: *client databaseName: *databaseName - collection: id: &collection collection database: *database collectionName: *collectionName # 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. # The ruby driver only needs to fail twice because the RTT updates topology. - name: failPoint object: testRunner arguments: failPoint: configureFailPoint: failCommand mode: times: 2 data: failCommands: - hello - isMaster appName: networkErrorCheckTest closeConnection: true client: *setupClient # The network error on the next check should mark the server Unknown and # clear the pool. - name: waitForEvent object: testRunner arguments: client: *client event: serverDescriptionChangedEvent: newDescription: type: Unknown count: 1 - name: waitForEvent object: testRunner arguments: client: *client 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 or may not have # triggered this failpoint as well. # - name: assertEventCount # object: testRunner # arguments: # client: *client # event: # serverDescriptionChangedEvent: # newDescription: # type: Unknown # count: 1 # - name: assertEventCount # object: testRunner # arguments: # event: # poolClearedEvent: {} # count: 1 expectEvents: - client: *client eventType: command events: - commandStartedEvent: command: insert: hello-network-error documents: - _id: 1 - _id: 2 commandName: insert databaseName: *databaseName - commandStartedEvent: command: insert: hello-network-error documents: - _id: 3 - _id: 4 commandName: insert databaseName: *databaseName outcome: - collectionName: *collectionName databaseName: *databaseName documents: - _id: 1 - _id: 2 - _id: 3 - _id: 4