2025-03-17 20:58:26 +01:00

228 lines
6.9 KiB
YAML

---
description: hello-network-error
schemaVersion: "1.4"
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.
- name: failPoint
object: testRunner
arguments:
failPoint:
configureFailPoint: failCommand
mode:
times: 4
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