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

130 lines
4.1 KiB
YAML

description: "server-selection-logging"
schemaVersion: "1.14"
runOnRequirements:
- topologies:
- sharded
createEntities:
- client:
id: &client client
uriOptions:
retryWrites: false # so we don't retry after hitting a failpoint
heartbeatFrequencyMS: 500
appName: &appName loggingClient
serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout
observeLogMessages:
serverSelection: debug
observeEvents:
- serverDescriptionChangedEvent
- topologyDescriptionChangedEvent
useMultipleMongoses: false
- database:
id: &database database
client: *client
databaseName: &databaseName logging-tests
- collection:
id: &collection collection
database: *database
collectionName: &collectionName server-selection
- client:
id: &failPointClient failPointClient
useMultipleMongoses: false
tests:
- description: "A successful operation"
operations:
# ensure we've discovered the entire topology before starting.
# expected events are initial cluster type change from unknown to sharded, and connect events for one mongos.
- name: waitForEvent
object: testRunner
arguments:
client: *client
event:
topologyDescriptionChangedEvent: {}
count: 2
- name: insertOne
object: *collection
arguments:
document: { x : 1 }
expectLogMessages:
- client: *client
messages:
- level: debug
component: serverSelection
data:
message: "Server selection started"
selector: { $$exists: true }
operation: insert
topologyDescription: { $$exists: true }
- level: debug
component: serverSelection
data:
message: "Server selection succeeded"
selector: { $$exists: true }
operation: insert
topologyDescription: { $$exists: true }
serverHost: { $$type: string }
serverPort: { $$type: [int, long] }
- description: "Failure due to unreachable server"
runOnRequirements:
- minServerVersion: "4.4" # failCommand appname support
operations:
# fail all hello/legacy hello commands for the main client.
- name: failPoint
object: testRunner
arguments:
client: *failPointClient
failPoint:
configureFailPoint: failCommand
mode: alwaysOn
data:
failCommands: ["hello", "ismaster"]
appName: *appName
closeConnection: true
# wait until we've marked the server unknown due
# to a failed heartbeat.
- name: waitForEvent
object: testRunner
arguments:
client: *client
event:
serverDescriptionChangedEvent:
newDescription:
type: Unknown
count: 1
- name: insertOne
object: *collection
arguments:
document: { x : 1 }
expectError:
isClientError: true # server selection timeout
expectLogMessages:
- client: *client
messages:
- level: debug
component: serverSelection
data:
message: "Server selection started"
selector: { $$exists: true }
operation: insert
topologyDescription: { $$exists: true }
- level: info
component: serverSelection
data:
message: "Waiting for suitable server to become available"
selector: { $$exists: true }
operation: insert
topologyDescription: { $$exists: true }
remainingTimeMS: { $$type: [int, long] }
- level: debug
component: serverSelection
data:
message: "Server selection failed"
selector: { $$exists: true }
operation: insert
topologyDescription: { $$exists: true }
failure: { $$exists: true }