From 4d443b328d5810d9cc92c94f80f3e8c290f8c5b0 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 18 Apr 2024 13:53:37 -0400 Subject: [PATCH 01/26] Impleent spec test --- test/tools/unified-spec-runner/match.ts | 24 +++++++++++++----------- test/tools/unified-spec-runner/schema.ts | 6 ++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index e12062bf85c..05c26495860 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -561,63 +561,65 @@ function compareEvents( ); } } - return; } else if (expectedEvent.serverHeartbeatStartedEvent) { expect(actualEvent).to.be.instanceOf(ServerHeartbeatStartedEvent); const expectedSdamEvent = expectedEvent.serverHeartbeatStartedEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.serverHeartbeatFailedEvent) { expect(actualEvent).to.be.instanceOf(ServerHeartbeatFailedEvent); const expectedSdamEvent = expectedEvent.serverHeartbeatFailedEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.serverHeartbeatSucceededEvent) { expect(actualEvent).to.be.instanceOf(ServerHeartbeatSucceededEvent); const expectedSdamEvent = expectedEvent.serverHeartbeatSucceededEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.serverOpeningEvent) { expect(actualEvent).to.be.instanceOf(ServerOpeningEvent); const expectedSdamEvent = expectedEvent.serverOpeningEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.serverClosedEvent) { expect(actualEvent).to.be.instanceOf(ServerClosedEvent); const expectedSdamEvent = expectedEvent.serverClosedEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.topologyOpeningEvent) { expect(actualEvent).to.be.instanceOf(TopologyOpeningEvent); const expectedSdamEvent = expectedEvent.topologyOpeningEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.topologyClosingEvent) { expect(actualEvent).to.be.instanceOf(TopologyClosedEvent); const expectedSdamEvent = expectedEvent.topologyClosingEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - return; } else if (expectedEvent.topologyDescriptionChangedEvent) { expect(actualEvent).to.be.instanceOf(TopologyDescriptionChangedEvent); + + const actualTopChangedEvent = actualEvent as TopologyDescriptionChangedEvent; const expectedSdamEvent = expectedEvent.topologyDescriptionChangedEvent; - for (const property of Object.keys(expectedSdamEvent)) { - expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); + + if (expectedSdamEvent.previousDescription?.type) { + expect(actualTopChangedEvent.previousDescription.type).to.equal( + expectedSdamEvent.previousDescription.type + ); + } + + if (expectedSdamEvent.newDescription?.type) { + expect(actualTopChangedEvent.newDescription.type).to.equal( + expectedSdamEvent.newDescription.type + ); } - return; } else { expect.fail(`Encountered unexpected event - ${inspect(actualEvent)}`); } diff --git a/test/tools/unified-spec-runner/schema.ts b/test/tools/unified-spec-runner/schema.ts index 353231cb998..5cd670c34a5 100644 --- a/test/tools/unified-spec-runner/schema.ts +++ b/test/tools/unified-spec-runner/schema.ts @@ -7,6 +7,7 @@ import type { ServerApiVersion, SeverityLevel, TagSet, + TopologyType as EventTopologyType, W } from '../../mongodb'; import { type TestConfiguration } from '../runner/config'; @@ -314,6 +315,7 @@ export interface ExpectedCmapEvent { connectionCheckedOutEvent?: Record; connectionCheckedInEvent?: Record; } + export interface ExpectedSdamEvent { serverDescriptionChangedEvent?: { previousDescription?: { @@ -336,10 +338,10 @@ export interface ExpectedSdamEvent { topologyDescriptionChangedEvent?: { topologyId?: any; previousDescription?: { - type?: string; + type?: EventTopologyType; }; newDescription?: { - type?: string; + type?: EventTopologyType; }; }; topologyOpeningEvent?: { From f29370546da419172038ba3482e4e8f08baeb2cd Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 18 Apr 2024 17:53:20 -0400 Subject: [PATCH 02/26] pull in tests --- ...lient-topologyDescriptionChangedEvent.json | 68 +++++++++++++++++++ ...Client-topologyDescriptionChangedEvent.yml | 40 +++++++++++ 2 files changed, 108 insertions(+) create mode 100644 test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.json create mode 100644 test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.yml diff --git a/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.json b/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.json new file mode 100644 index 00000000000..cf7bd60826b --- /dev/null +++ b/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.json @@ -0,0 +1,68 @@ +{ + "description": "expectedEventsForClient-topologyDescriptionChangedEvent", + "schemaVersion": "1.20", + "runOnRequirements": [ + { + "topologies": [ + "replicaset" + ], + "minServerVersion": "4.4" + } + ], + "tests": [ + { + "description": "can assert on values of newDescription and previousDescription fields", + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "uriOptions": { + "directConnection": true + }, + "observeEvents": [ + "topologyDescriptionChangedEvent" + ] + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "sdam", + "ignoreExtraEvents": true, + "events": [ + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Single" + } + } + } + ] + } + ] + } + ] +} diff --git a/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.yml b/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.yml new file mode 100644 index 00000000000..c8dacc391e1 --- /dev/null +++ b/test/spec/unified-test-format/valid-pass/expectedEventsForClient-topologyDescriptionChangedEvent.yml @@ -0,0 +1,40 @@ +description: "expectedEventsForClient-topologyDescriptionChangedEvent" + +schemaVersion: "1.20" + +runOnRequirements: + - topologies: + - replicaset + minServerVersion: "4.4" # awaitable hello + +tests: + - description: "can assert on values of newDescription and previousDescription fields" + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + uriOptions: + directConnection: true + observeEvents: + - topologyDescriptionChangedEvent + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: sdam + ignoreExtraEvents: true + events: + - topologyDescriptionChangedEvent: + previousDescription: + type: "Unknown" + newDescription: + type: "Single" + From e59b76b064efa98edb51f93c1d3643c73f4f3628 Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Apr 2024 13:09:07 -0400 Subject: [PATCH 03/26] fix runner bug --- test/tools/unified-spec-runner/match.ts | 4 ++-- test/tools/unified-spec-runner/schema.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index 05c26495860..4808244e295 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -597,9 +597,9 @@ function compareEvents( for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } - } else if (expectedEvent.topologyClosingEvent) { + } else if (expectedEvent.topologyClosedEvent) { expect(actualEvent).to.be.instanceOf(TopologyClosedEvent); - const expectedSdamEvent = expectedEvent.topologyClosingEvent; + const expectedSdamEvent = expectedEvent.topologyClosedEvent; for (const property of Object.keys(expectedSdamEvent)) { expect(actualEvent[property]).to.equal(expectedSdamEvent[property]); } diff --git a/test/tools/unified-spec-runner/schema.ts b/test/tools/unified-spec-runner/schema.ts index 5cd670c34a5..5e85c4b32b0 100644 --- a/test/tools/unified-spec-runner/schema.ts +++ b/test/tools/unified-spec-runner/schema.ts @@ -347,7 +347,7 @@ export interface ExpectedSdamEvent { topologyOpeningEvent?: { topologyId?: any; }; - topologyClosingEvent?: { + topologyClosedEvent?: { topologyId?: any; }; serverOpeningEvent?: { From c6b46f9379106acfdc8ad54bc7c19678df4a7be5 Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Apr 2024 13:55:09 -0400 Subject: [PATCH 04/26] skip tests --- .../server_discovery_and_monitoring.spec.test.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts b/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts index 085899a6b86..8408249862a 100644 --- a/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts +++ b/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts @@ -3,11 +3,17 @@ import * as path from 'path'; import { loadSpecTests } from '../../spec'; import { runUnifiedSuite } from '../../tools/unified-spec-runner/runner'; +const skipTable: { pattern: string; reason: string }[] = [ + { pattern: 'Topology lifecycle', reason: 'see NODE-5723' }, + { pattern: 'connect with serverMonitoringMode=stream >=4.4', reason: 'NODE-XXXX' }, + { pattern: 'connect with serverMonitoringMode=auto >=4.4', reason: 'NODE-XXXX' } +]; + describe('SDAM Unified Tests (Spec)', function () { const specTests = loadSpecTests(path.join('server-discovery-and-monitoring', 'unified')); runUnifiedSuite(specTests, test => { - if (['Topology lifecycle'].includes(test.description)) { - return 'see NODE-5723'; + for (const { pattern, reason } of skipTable) { + if (test.description.includes(pattern)) return reason; } return false; }); From 574dd9f65b9f4b3b15e1e108b93422776d73f7b8 Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Apr 2024 16:09:10 -0400 Subject: [PATCH 05/26] reference correct follow-up ticket --- .../server_discovery_and_monitoring.spec.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts b/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts index 8408249862a..da99455b72c 100644 --- a/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts +++ b/test/integration/server-discovery-and-monitoring/server_discovery_and_monitoring.spec.test.ts @@ -5,8 +5,8 @@ import { runUnifiedSuite } from '../../tools/unified-spec-runner/runner'; const skipTable: { pattern: string; reason: string }[] = [ { pattern: 'Topology lifecycle', reason: 'see NODE-5723' }, - { pattern: 'connect with serverMonitoringMode=stream >=4.4', reason: 'NODE-XXXX' }, - { pattern: 'connect with serverMonitoringMode=auto >=4.4', reason: 'NODE-XXXX' } + { pattern: 'connect with serverMonitoringMode=stream >=4.4', reason: 'NODE-6045' }, + { pattern: 'connect with serverMonitoringMode=auto >=4.4', reason: 'NODE-6045' } ]; describe('SDAM Unified Tests (Spec)', function () { From 01e3ccbcb711e5c4b635bd685dc4ba3c7c6fca46 Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Apr 2024 16:17:45 -0400 Subject: [PATCH 06/26] Update type names --- test/tools/unified-spec-runner/schema.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/tools/unified-spec-runner/schema.ts b/test/tools/unified-spec-runner/schema.ts index 5e85c4b32b0..b602f4453cb 100644 --- a/test/tools/unified-spec-runner/schema.ts +++ b/test/tools/unified-spec-runner/schema.ts @@ -7,7 +7,7 @@ import type { ServerApiVersion, SeverityLevel, TagSet, - TopologyType as EventTopologyType, + TopologyType, W } from '../../mongodb'; import { type TestConfiguration } from '../runner/config'; @@ -96,7 +96,7 @@ export interface UnifiedSuite { tests: Test[]; _yamlAnchors?: Document; } -export const TopologyType = Object.freeze({ +export const TopologyId = Object.freeze({ single: 'single', replicaset: 'replicaset', sharded: 'sharded', @@ -104,7 +104,7 @@ export const TopologyType = Object.freeze({ loadBalanced: 'load-balanced' } as const); -export type TopologyId = (typeof TopologyType)[keyof typeof TopologyType]; +export type TopologyId = (typeof TopologyId)[keyof typeof TopologyId]; export interface RunOnRequirement { serverless?: 'forbid' | 'allow' | 'require'; auth?: boolean; @@ -338,10 +338,10 @@ export interface ExpectedSdamEvent { topologyDescriptionChangedEvent?: { topologyId?: any; previousDescription?: { - type?: EventTopologyType; + type?: TopologyType; }; newDescription?: { - type?: EventTopologyType; + type?: TopologyType; }; }; topologyOpeningEvent?: { From abf1368be09379cb0ca2fb875d6aca7947f347d2 Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 17 Jan 2024 15:28:13 -0500 Subject: [PATCH 07/26] emit TopologyDescriptionChangedEvent just before close --- src/sdam/topology.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sdam/topology.ts b/src/sdam/topology.ts index 73b0e92a09a..8c2407801b6 100644 --- a/src/sdam/topology.ts +++ b/src/sdam/topology.ts @@ -511,6 +511,13 @@ export class Topology extends TypedEventEmitter { this.removeListener(Topology.TOPOLOGY_DESCRIPTION_CHANGED, this.s.detectShardedTopology); stateTransition(this, STATE_CLOSED); + this.s.description = new TopologyDescription(TopologyType.Unknown, new Map()); + + // broadcast that topology is in closed state + this.emitAndLog( + Topology.TOPOLOGY_DESCRIPTION_CHANGED, + new TopologyDescriptionChangedEvent(this.s.id, previousDescription, this.s.description) + ); // emit an event for close this.emitAndLog(Topology.TOPOLOGY_CLOSED, new TopologyClosedEvent(this.s.id)); From d4706252c49b9515d8463fd9852107c68f60e34a Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 17 Jan 2024 15:50:08 -0500 Subject: [PATCH 08/26] Unskip tests and pull in updated test --- .../unified/logging-loadbalanced.json | 16 ++++++++++++++++ .../unified/logging-loadbalanced.yml | 9 ++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.json b/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.json index 45440d2557e..0ad3b0ceaa5 100644 --- a/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.json +++ b/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.json @@ -132,6 +132,22 @@ } } }, + { + "level": "debug", + "component": "topology", + "data": { + "message": "Topology description changed", + "topologyId": { + "$$exists": true + }, + "previousDescription": { + "$$exists": true + }, + "newDescription": { + "$$exists": true + } + } + }, { "level": "debug", "component": "topology", diff --git a/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.yml b/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.yml index 3f6058270fb..432ec354ed1 100644 --- a/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.yml +++ b/test/spec/server-discovery-and-monitoring/unified/logging-loadbalanced.yml @@ -67,8 +67,15 @@ tests: topologyId: { $$exists: true } serverHost: { $$type: string } serverPort: { $$type: [int, long] } + - level: debug + component: topology + data: + message: "Topology description changed" + topologyId: { $$exists: true } + previousDescription: { $$exists: true } # loadBalanced topology + newDescription: { $$exists: true } # unknown topology - level: debug component: topology data: message: "Stopped topology monitoring" - topologyId: { $$exists: true } \ No newline at end of file + topologyId: { $$exists: true } From 63fd5491df3a400df9f225a7b66f80f0644ad761 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 18 Jan 2024 14:31:15 -0500 Subject: [PATCH 09/26] remove unneeded modified spec tests --- .../server_discover_and_monitoring.test.ts | 10 - .../logging-loadbalanced.json | 150 ----------- .../logging-replicaset.json | 238 ------------------ .../logging-sharded.json | 206 --------------- .../logging-standalone.json | 180 ------------- 5 files changed, 784 deletions(-) delete mode 100644 test/integration/server-discovery-and-monitoring/server_discover_and_monitoring.test.ts delete mode 100644 test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-loadbalanced.json delete mode 100644 test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-replicaset.json delete mode 100644 test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-sharded.json delete mode 100644 test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-standalone.json diff --git a/test/integration/server-discovery-and-monitoring/server_discover_and_monitoring.test.ts b/test/integration/server-discovery-and-monitoring/server_discover_and_monitoring.test.ts deleted file mode 100644 index d0b3fc99445..00000000000 --- a/test/integration/server-discovery-and-monitoring/server_discover_and_monitoring.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { loadSpecTests } from '../../spec'; -import { runUnifiedSuite } from '../../tools/unified-spec-runner/runner'; - -describe('SDAM Unified Tests (Node Driver)', function () { - // TODO(NODE-5723): Remove this once the actual unified tests (test/spec/server-disovery-and-monitoring/logging) are passing - const clonedAndAlteredSpecTests = loadSpecTests( - '../integration/server-discovery-and-monitoring/unified-sdam-node-specs' - ); - runUnifiedSuite(clonedAndAlteredSpecTests); -}); diff --git a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-loadbalanced.json b/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-loadbalanced.json deleted file mode 100644 index 7f4431072de..00000000000 --- a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-loadbalanced.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "description": "loadbalanced-logging-node-driver", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-replicaset.json b/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-replicaset.json deleted file mode 100644 index 189d3d68660..00000000000 --- a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-replicaset.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "description": "replicaset-logging-node-driver", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient" - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 4 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-sharded.json b/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-sharded.json deleted file mode 100644 index 4edbd5425fa..00000000000 --- a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-sharded.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "description": "sharded-logging-node-driver", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "sharded" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ], - "useMultipleMongoses": true - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 3 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} - diff --git a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-standalone.json b/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-standalone.json deleted file mode 100644 index b1139d2e740..00000000000 --- a/test/integration/server-discovery-and-monitoring/unified-sdam-node-specs/logging-standalone.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "description": "standalone-logging-node-driver", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "single" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient" - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} From 10b9d322ebd435febf15db4b531bd6d36fa25a14 Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Jan 2024 10:25:06 -0500 Subject: [PATCH 10/26] fix socks5 tests --- test/manual/socks5.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/manual/socks5.test.ts b/test/manual/socks5.test.ts index a37907aff69..f8c07a24675 100644 --- a/test/manual/socks5.test.ts +++ b/test/manual/socks5.test.ts @@ -302,7 +302,7 @@ describe('Socks5 Connectivity', function () { async function testConnection(connectionString, clientOptions) { const client = new MongoClient(connectionString, clientOptions); let topologyType; - client.on('topologyDescriptionChanged', ev => (topologyType = ev.newDescription.type)); + client.on('topologyDescriptionChanged', ev => (topologyType = ev.previousDescription.type)); try { await client.connect(); From c07a367f5b36e21d8f7c8d94ddbc70c2825d240e Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 13 Mar 2024 16:38:52 -0400 Subject: [PATCH 11/26] small fix --- src/sdam/topology.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sdam/topology.ts b/src/sdam/topology.ts index 8c2407801b6..7747f8f9ace 100644 --- a/src/sdam/topology.ts +++ b/src/sdam/topology.ts @@ -488,6 +488,8 @@ export class Topology extends TypedEventEmitter { /** Close this topology */ close(): void { + const previousDescription = this.s.description; + if (this.s.state === STATE_CLOSED || this.s.state === STATE_CLOSING) { return; } From 59574a0e462522bb70fa6d8de7b42c7c577d5546 Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 19 Mar 2024 13:38:58 -0400 Subject: [PATCH 12/26] add replset test --- ...et-emit-topology-changed-before-close.json | 127 ++++++++++++++++++ ...set-emit-topology-changed-before-close.yml | 70 ++++++++++ 2 files changed, 197 insertions(+) create mode 100644 test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json create mode 100644 test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json new file mode 100644 index 00000000000..1dcd1c76955 --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -0,0 +1,127 @@ +{ + "description": "replicaset-emit-topology-description-changed-before-close", + "schemaVersion": "1.16", + "runOnRequirements": [ + { + "topologies": [ + "replicaset" + ], + "minServerVersion": "4.4" + } + ], + "tests": [ + { + "description": "Topology lifecycle", + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "topologyDescriptionChangedEvent", + "topologyOpeningEvent", + "topologyClosedEvent" + ] + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": {} + }, + "count": 2 + } + }, + { + "name": "close", + "object": "client" + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "sdam", + "ignoreExtraEvents": true, + "events": [ + { + "topologyOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "ReplicaSetNoPrimary" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "ReplicaSetNoPrimary" + }, + "newDescription": { + "type": "ReplicaSetWithPrimary" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "ReplicaSetWithPrimary" + }, + "newDescription": { + "type": "ReplicaSetWithPrimary" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "ReplicaSetWithPrimary" + }, + "newDescription": { + "type": "ReplicaSetWithPrimary" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "ReplicaSetWithPrimary" + }, + "newDescription": { + "type": "ReplicaSetWithPrimary" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "ReplicaSetWithPrimary" + }, + "newDescription": { + "type": "Unknown" + } + } + }, + { + "topologyClosedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml new file mode 100644 index 00000000000..1456a9f870e --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -0,0 +1,70 @@ +description: "replicaset-emit-topology-description-changed-before-close" + +schemaVersion: "1.16" + +runOnRequirements: + - topologies: + - replicaset + minServerVersion: "4.4" # awaitable hello + +tests: + - description: "Topology lifecycle" + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - topologyDescriptionChangedEvent + - topologyOpeningEvent + - topologyClosedEvent + # ensure the topology has been fully discovered before closing the client. + # expected events are initial server discovery and server connect event. + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: {} + count: 2 + - name: close + object: *client + expectEvents: + - client: *client + eventType: sdam + ignoreExtraEvents: true + events: + - topologyOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server + previousDescription: + type: "Unknown" + newDescription: + type: "ReplicaSetNoPrimary" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "ReplicaSetNoPrimary" + newDescription: + type: "ReplicaSetWithPrimary" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "ReplicaSetWithPrimary" + newDescription: + type: "ReplicaSetWithPrimary" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "ReplicaSetWithPrimary" + newDescription: + type: "ReplicaSetWithPrimary" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "ReplicaSetWithPrimary" + newDescription: + type: "ReplicaSetWithPrimary" + - topologyDescriptionChangedEvent: # replicaset -> unknown + previousDescription: + type: "ReplicaSetWithPrimary" + newDescription: + type: "Unknown" + - topologyClosedEvent: {} From 9cb93f28d5dca9ba11ba60f8a254fc8a51b756fc Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 19 Mar 2024 13:40:29 -0400 Subject: [PATCH 13/26] Add standalone spec test --- ...ne-emit-topology-changed-before-close.json | 103 ++++++++++++++++++ ...one-emit-topology-changed-before-close.yml | 58 ++++++++++ 2 files changed, 161 insertions(+) create mode 100644 test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json create mode 100644 test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json new file mode 100644 index 00000000000..cad1de3058b --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -0,0 +1,103 @@ +{ + "description": "standalone-emit-topology-description-changed-before-close", + "schemaVersion": "1.16", + "runOnRequirements": [ + { + "topologies": [ + "single" + ], + "minServerVersion": "4.4" + } + ], + "tests": [ + { + "description": "Topology lifecycle", + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "topologyDescriptionChangedEvent", + "topologyOpeningEvent", + "topologyClosedEvent", + "serverOpeningEvent", + "serverClosedEvent" + ] + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": {} + }, + "count": 2 + } + }, + { + "name": "close", + "object": "client" + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "sdam", + "ignoreExtraEvents": true, + "events": [ + { + "topologyOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "currentDescription": {} + } + }, + { + "serverOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Single" + } + } + }, + { + "serverClosedEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Single" + }, + "newDescription": { + "type": "Unknown" + } + } + }, + { + "topologyClosedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml new file mode 100644 index 00000000000..dafc28b71d3 --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -0,0 +1,58 @@ +description: "standalone-emit-topology-description-changed-before-close" + +schemaVersion: "1.16" + +runOnRequirements: + - topologies: + - single + minServerVersion: "4.4" # awaitable hello + +tests: + - description: "Topology lifecycle" + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - topologyDescriptionChangedEvent + - topologyOpeningEvent + - topologyClosedEvent + - serverOpeningEvent + - serverClosedEvent + # ensure the topology has been fully discovered before closing the client. + # expected events are initial server discovery and server connect event. + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: {} + count: 2 + - name: close + object: *client + expectEvents: + - client: *client + eventType: sdam + ignoreExtraEvents: true + events: + - topologyOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server + previousDescription: + type: "Unknown" + currentDescription: {} + - serverOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown w disconnected server -> standalone + previousDescription: + type: "Unknown" + newDescription: + type: "Single" + - serverClosedEvent: {} + - topologyDescriptionChangedEvent: # standalone -> unknown + previousDescription: + type: "Single" + newDescription: + type: "Unknown" + - topologyClosedEvent: {} From 9b87b209914735061324e96d577be1d7ecc357c5 Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 19 Mar 2024 13:48:59 -0400 Subject: [PATCH 14/26] add sharded spec test --- ...ed-emit-topology-changed-before-close.json | 97 +++++++++++++++++++ ...ded-emit-topology-changed-before-close.yml | 55 +++++++++++ 2 files changed, 152 insertions(+) create mode 100644 test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json create mode 100644 test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json new file mode 100644 index 00000000000..e01918ad568 --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json @@ -0,0 +1,97 @@ +{ + "description": "sharded-emit-topology-description-changed-before-close", + "schemaVersion": "1.16", + "runOnRequirements": [ + { + "topologies": [ + "sharded" + ], + "minServerVersion": "4.4" + } + ], + "tests": [ + { + "description": "Topology lifecycle", + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "topologyDescriptionChangedEvent", + "topologyOpeningEvent", + "topologyClosedEvent" + ] + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": {} + }, + "count": 2 + } + }, + { + "name": "close", + "object": "client" + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "sdam", + "ignoreExtraEvents": true, + "events": [ + { + "topologyOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Unknown" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Sharded" + } + } + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Sharded" + }, + "newDescription": { + "type": "Unknown" + } + } + }, + { + "topologyClosedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml new file mode 100644 index 00000000000..55318acc131 --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml @@ -0,0 +1,55 @@ +description: "sharded-emit-topology-description-changed-before-close" + +schemaVersion: "1.16" + +runOnRequirements: + - topologies: + - sharded + minServerVersion: "4.4" # awaitable hello + +tests: + - description: "Topology lifecycle" + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - topologyDescriptionChangedEvent + - topologyOpeningEvent + - topologyClosedEvent + # ensure the topology has been fully discovered before closing the client. + # expected events are initial server discovery and server connect event. + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: {} + count: 2 + - name: close + object: *client + expectEvents: + - client: *client + eventType: sdam + ignoreExtraEvents: true + events: + - topologyOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server + previousDescription: + type: "Unknown" + newDescription: + type: "Unknown" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "Unknown" + newDescription: + type: "Sharded" + - topologyDescriptionChangedEvent: # sharded -> unknown + previousDescription: + type: "Sharded" + newDescription: + type: "Unknown" + - topologyClosedEvent: {} From fed7aa62ab8c7d2af545cb5154fea700f2792202 Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 20 Mar 2024 10:48:27 -0400 Subject: [PATCH 15/26] add load balanced tests --- ...ed-emit-topology-changed-before-close.json | 95 +++++++++++++++++++ ...ced-emit-topology-changed-before-close.yml | 52 ++++++++++ 2 files changed, 147 insertions(+) create mode 100644 test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json create mode 100644 test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json new file mode 100644 index 00000000000..30114f6b880 --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json @@ -0,0 +1,95 @@ +{ + "description": "loadbalanced-emit-topology-description-changed-before-close", + "schemaVersion": "1.16", + "runOnRequirements": [ + { + "topologies": [ + "load-balanced" + ], + "minServerVersion": "4.4" + } + ], + "tests": [ + { + "description": "Topology lifecycle", + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "topologyDescriptionChangedEvent", + "topologyOpeningEvent", + "topologyClosedEvent", + "serverOpeningEvent" + ] + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": {} + }, + "count": 2 + } + }, + { + "name": "close", + "object": "client" + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "sdam", + "events": [ + { + "topologyOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "currentDescription": {} + } + }, + { + "serverOpeningEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "newDescription": { + "type": "loadBalanced" + } + } + }, + { + "serverClosedEvent": {} + }, + { + "topologyDescriptionChangedEvent": { + "newDescription": { + "type": "Unknown" + } + } + }, + { + "topologyClosedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml new file mode 100644 index 00000000000..eca97c0749d --- /dev/null +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml @@ -0,0 +1,52 @@ +description: "loadbalanced-emit-topology-description-changed-before-close" + +schemaVersion: "1.16" + +runOnRequirements: + - topologies: + - load-balanced + minServerVersion: "4.4" # awaitable hello + +tests: + - description: "Topology lifecycle" + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - topologyDescriptionChangedEvent + - topologyOpeningEvent + - topologyClosedEvent + - serverOpeningEvent + # ensure the topology has been fully discovered before closing the client. + # expected events are initial server discovery and server connect event. + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: {} + count: 2 + - name: close + object: *client + expectEvents: + - client: *client + eventType: sdam + events: + - topologyOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server + previousDescription: + type: "Unknown" + currentDescription: {} + - serverOpeningEvent: {} + - topologyDescriptionChangedEvent: # unknown w disconnected server -> loadBalanced + newDescription: + type: "loadBalanced" + - serverClosedEvent: {} + - topologyDescriptionChangedEvent: # loadbalanced -> unknown + newDescription: + type: "Unknown" + - topologyClosedEvent: {} From 611f37bbb11576f23c846da0e79e77200d891b70 Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 20 Mar 2024 13:27:26 -0400 Subject: [PATCH 16/26] fix event tests --- ...dbalanced-emit-topology-changed-before-close.json | 11 ++--------- ...adbalanced-emit-topology-changed-before-close.yml | 5 +---- ...eplicaset-emit-topology-changed-before-close.json | 12 +----------- ...replicaset-emit-topology-changed-before-close.yml | 11 +++-------- .../sharded-emit-topology-changed-before-close.json | 12 +++++++++++- .../sharded-emit-topology-changed-before-close.yml | 10 ++++++++-- 6 files changed, 26 insertions(+), 35 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json index 30114f6b880..92837c0e466 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json @@ -24,8 +24,7 @@ "observeEvents": [ "topologyDescriptionChangedEvent", "topologyOpeningEvent", - "topologyClosedEvent", - "serverOpeningEvent" + "topologyClosedEvent" ] } } @@ -64,19 +63,13 @@ "currentDescription": {} } }, - { - "serverOpeningEvent": {} - }, { "topologyDescriptionChangedEvent": { "newDescription": { - "type": "loadBalanced" + "type": "LoadBalanced" } } }, - { - "serverClosedEvent": {} - }, { "topologyDescriptionChangedEvent": { "newDescription": { diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml index eca97c0749d..705db762a07 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml @@ -20,7 +20,6 @@ tests: - topologyDescriptionChangedEvent - topologyOpeningEvent - topologyClosedEvent - - serverOpeningEvent # ensure the topology has been fully discovered before closing the client. # expected events are initial server discovery and server connect event. - name: waitForEvent @@ -41,11 +40,9 @@ tests: previousDescription: type: "Unknown" currentDescription: {} - - serverOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown w disconnected server -> loadBalanced newDescription: - type: "loadBalanced" - - serverClosedEvent: {} + type: "LoadBalanced" - topologyDescriptionChangedEvent: # loadbalanced -> unknown newDescription: type: "Unknown" diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json index 1dcd1c76955..895b87b078a 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -39,7 +39,7 @@ "event": { "topologyDescriptionChangedEvent": {} }, - "count": 2 + "count": 4 } }, { @@ -96,16 +96,6 @@ } } }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "ReplicaSetWithPrimary" - }, - "newDescription": { - "type": "ReplicaSetWithPrimary" - } - } - }, { "topologyDescriptionChangedEvent": { "previousDescription": { diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml index 1456a9f870e..ca31a5e1d62 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -21,14 +21,14 @@ tests: - topologyOpeningEvent - topologyClosedEvent # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. + # expected events are initial server discovery and 3 server connect events. - name: waitForEvent object: testRunner arguments: client: *client event: topologyDescriptionChangedEvent: {} - count: 2 + count: 4 - name: close object: *client expectEvents: @@ -37,7 +37,7 @@ tests: ignoreExtraEvents: true events: - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server + - topologyDescriptionChangedEvent: # unknown -> replset no primary previousDescription: type: "Unknown" newDescription: @@ -57,11 +57,6 @@ tests: type: "ReplicaSetWithPrimary" newDescription: type: "ReplicaSetWithPrimary" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "ReplicaSetWithPrimary" - newDescription: - type: "ReplicaSetWithPrimary" - topologyDescriptionChangedEvent: # replicaset -> unknown previousDescription: type: "ReplicaSetWithPrimary" diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json index e01918ad568..eb4a919f029 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json @@ -39,7 +39,7 @@ "event": { "topologyDescriptionChangedEvent": {} }, - "count": 2 + "count": 3 } }, { @@ -76,6 +76,16 @@ } } }, + { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Sharded" + }, + "newDescription": { + "type": "Sharded" + } + } + }, { "topologyDescriptionChangedEvent": { "previousDescription": { diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml index 55318acc131..e25b6caa8f0 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml @@ -21,14 +21,15 @@ tests: - topologyOpeningEvent - topologyClosedEvent # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. + # expected events are initial cluster type change from unknown to sharded and connect events + # for each of 2 servers - name: waitForEvent object: testRunner arguments: client: *client event: topologyDescriptionChangedEvent: {} - count: 2 + count: 3 - name: close object: *client expectEvents: @@ -47,6 +48,11 @@ tests: type: "Unknown" newDescription: type: "Sharded" + - topologyDescriptionChangedEvent: # server connected + previousDescription: + type: "Sharded" + newDescription: + type: "Sharded" - topologyDescriptionChangedEvent: # sharded -> unknown previousDescription: type: "Sharded" From 1428c4ef7a69ba95a4e022c2965ee157d6c19177 Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 20 Mar 2024 13:30:43 -0400 Subject: [PATCH 17/26] fix matcher --- test/tools/unified-spec-runner/match.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index 4808244e295..565cfcd7ab3 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -38,6 +38,7 @@ import { } from '../../mongodb'; import { ejson } from '../utils'; import { type CmapEvent, type CommandEvent, type EntitiesMap, type SdamEvent } from './entities'; +import { trace } from './runner'; import { type ExpectedCmapEvent, type ExpectedCommandEvent, From e8c3a523b50a0140e58ef7aa4db9c1a6e2eaa13e Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 20 Mar 2024 13:35:33 -0400 Subject: [PATCH 18/26] remove unneeded import --- test/tools/unified-spec-runner/match.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index 565cfcd7ab3..4808244e295 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -38,7 +38,6 @@ import { } from '../../mongodb'; import { ejson } from '../utils'; import { type CmapEvent, type CommandEvent, type EntitiesMap, type SdamEvent } from './entities'; -import { trace } from './runner'; import { type ExpectedCmapEvent, type ExpectedCommandEvent, From 95976c4146fc7a76dde9a2642f9ff96010302847 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 21 Mar 2024 15:08:50 -0400 Subject: [PATCH 19/26] fix tests --- .../replicaset-emit-topology-changed-before-close.json | 2 +- .../replicaset-emit-topology-changed-before-close.yml | 2 +- .../unified/sharded-emit-topology-changed-before-close.json | 5 +++-- .../unified/sharded-emit-topology-changed-before-close.yml | 3 ++- .../standalone-emit-topology-changed-before-close.json | 6 ++++-- .../standalone-emit-topology-changed-before-close.yml | 5 +++-- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json index 895b87b078a..d0deb7d6176 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -51,7 +51,7 @@ { "client": "client", "eventType": "sdam", - "ignoreExtraEvents": true, + "ignoreExtraEvents": false, "events": [ { "topologyOpeningEvent": {} diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml index ca31a5e1d62..27dd72bef09 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -34,7 +34,7 @@ tests: expectEvents: - client: *client eventType: sdam - ignoreExtraEvents: true + ignoreExtraEvents: false events: - topologyOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown -> replset no primary diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json index eb4a919f029..bd0a99f1837 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json @@ -25,7 +25,8 @@ "topologyDescriptionChangedEvent", "topologyOpeningEvent", "topologyClosedEvent" - ] + ], + "useMultipleMongoses": true } } ] @@ -51,7 +52,7 @@ { "client": "client", "eventType": "sdam", - "ignoreExtraEvents": true, + "ignoreExtraEvents": false, "events": [ { "topologyOpeningEvent": {} diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml index e25b6caa8f0..33ec7bb76a9 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml @@ -20,6 +20,7 @@ tests: - topologyDescriptionChangedEvent - topologyOpeningEvent - topologyClosedEvent + useMultipleMongoses: true # ensure the topology has been fully discovered before closing the client. # expected events are initial cluster type change from unknown to sharded and connect events # for each of 2 servers @@ -35,7 +36,7 @@ tests: expectEvents: - client: *client eventType: sdam - ignoreExtraEvents: true + ignoreExtraEvents: false events: - topologyOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json index cad1de3058b..990e92f6074 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -53,7 +53,7 @@ { "client": "client", "eventType": "sdam", - "ignoreExtraEvents": true, + "ignoreExtraEvents": false, "events": [ { "topologyOpeningEvent": {} @@ -63,7 +63,9 @@ "previousDescription": { "type": "Unknown" }, - "currentDescription": {} + "currentDescription": { + "type": "Unknown" + } } }, { diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml index dafc28b71d3..67186e41ba3 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -36,13 +36,14 @@ tests: expectEvents: - client: *client eventType: sdam - ignoreExtraEvents: true + ignoreExtraEvents: false events: - topologyOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server previousDescription: type: "Unknown" - currentDescription: {} + currentDescription: + type: "Unknown" - serverOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown w disconnected server -> standalone previousDescription: From f0fe66dae103a9c7bc644111dd0db6992b526528 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 21 Mar 2024 15:42:22 -0400 Subject: [PATCH 20/26] fix test --- .../unified/standalone-emit-topology-changed-before-close.json | 2 +- .../unified/standalone-emit-topology-changed-before-close.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json index 990e92f6074..cbc3232804c 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -63,7 +63,7 @@ "previousDescription": { "type": "Unknown" }, - "currentDescription": { + "newDescription": { "type": "Unknown" } } diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml index 67186e41ba3..a655608d676 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -42,7 +42,7 @@ tests: - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server previousDescription: type: "Unknown" - currentDescription: + newDescription: type: "Unknown" - serverOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown w disconnected server -> standalone From 58349b65e703cff13928553d3b198f12c73f65a5 Mon Sep 17 00:00:00 2001 From: Warren James Date: Sun, 24 Mar 2024 23:35:04 -0400 Subject: [PATCH 21/26] update spec tests --- .../loadbalanced-emit-topology-changed-before-close.json | 4 ++-- .../loadbalanced-emit-topology-changed-before-close.yml | 4 ++-- .../replicaset-emit-topology-changed-before-close.json | 2 +- .../unified/replicaset-emit-topology-changed-before-close.yml | 2 +- .../unified/sharded-emit-topology-changed-before-close.json | 2 +- .../unified/sharded-emit-topology-changed-before-close.yml | 2 +- .../standalone-emit-topology-changed-before-close.json | 2 +- .../unified/standalone-emit-topology-changed-before-close.yml | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json index 92837c0e466..869857f1ae3 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "loadbalanced-emit-topology-description-changed-before-close", - "schemaVersion": "1.16", + "schemaVersion": "1.19", "runOnRequirements": [ { "topologies": [ @@ -60,7 +60,7 @@ "previousDescription": { "type": "Unknown" }, - "currentDescription": {} + "newDescription": {} } }, { diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml index 705db762a07..72217c85eb8 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "loadbalanced-emit-topology-description-changed-before-close" -schemaVersion: "1.16" +schemaVersion: "1.19" runOnRequirements: - topologies: @@ -39,7 +39,7 @@ tests: - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server previousDescription: type: "Unknown" - currentDescription: {} + newDescription: {} - topologyDescriptionChangedEvent: # unknown w disconnected server -> loadBalanced newDescription: type: "LoadBalanced" diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json index d0deb7d6176..888ece3e521 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "replicaset-emit-topology-description-changed-before-close", - "schemaVersion": "1.16", + "schemaVersion": "1.19", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml index 27dd72bef09..3ed0e7133a1 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "replicaset-emit-topology-description-changed-before-close" -schemaVersion: "1.16" +schemaVersion: "1.19" runOnRequirements: - topologies: diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json index bd0a99f1837..3ee615ec663 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "sharded-emit-topology-description-changed-before-close", - "schemaVersion": "1.16", + "schemaVersion": "1.19", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml index 33ec7bb76a9..e890794c1d8 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "sharded-emit-topology-description-changed-before-close" -schemaVersion: "1.16" +schemaVersion: "1.19" runOnRequirements: - topologies: diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json index cbc3232804c..d6d4d1ce681 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "standalone-emit-topology-description-changed-before-close", - "schemaVersion": "1.16", + "schemaVersion": "1.19", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml index a655608d676..6b074adf6dd 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "standalone-emit-topology-description-changed-before-close" -schemaVersion: "1.16" +schemaVersion: "1.19" runOnRequirements: - topologies: From 890e8052ac86158dbaa89242f83893922ce2f351 Mon Sep 17 00:00:00 2001 From: Warren James Date: Mon, 25 Mar 2024 16:13:55 -0400 Subject: [PATCH 22/26] skip correct tests and update runner --- ...et-emit-topology-changed-before-close.json | 36 +++---------------- ...set-emit-topology-changed-before-close.yml | 24 +++---------- ...ne-emit-topology-changed-before-close.json | 10 +----- ...one-emit-topology-changed-before-close.yml | 4 --- test/tools/unified-spec-runner/match.ts | 9 ++--- 5 files changed, 14 insertions(+), 69 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json index 888ece3e521..f3378bf8a62 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -57,44 +57,16 @@ "topologyOpeningEvent": {} }, { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": { - "type": "ReplicaSetNoPrimary" - } - } + "topologyDescriptionChangedEvent": {} }, { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "ReplicaSetNoPrimary" - }, - "newDescription": { - "type": "ReplicaSetWithPrimary" - } - } + "topologyDescriptionChangedEvent": {} }, { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "ReplicaSetWithPrimary" - }, - "newDescription": { - "type": "ReplicaSetWithPrimary" - } - } + "topologyDescriptionChangedEvent": {} }, { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "ReplicaSetWithPrimary" - }, - "newDescription": { - "type": "ReplicaSetWithPrimary" - } - } + "topologyDescriptionChangedEvent": {} }, { "topologyDescriptionChangedEvent": { diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml index 3ed0e7133a1..ee49303cadd 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -37,26 +37,10 @@ tests: ignoreExtraEvents: false events: - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: # unknown -> replset no primary - previousDescription: - type: "Unknown" - newDescription: - type: "ReplicaSetNoPrimary" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "ReplicaSetNoPrimary" - newDescription: - type: "ReplicaSetWithPrimary" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "ReplicaSetWithPrimary" - newDescription: - type: "ReplicaSetWithPrimary" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "ReplicaSetWithPrimary" - newDescription: - type: "ReplicaSetWithPrimary" + - topologyDescriptionChangedEvent: {} # unknown -> replset no primary + - topologyDescriptionChangedEvent: {} # server connected + - topologyDescriptionChangedEvent: {} # server connected + - topologyDescriptionChangedEvent: {} # server connected - topologyDescriptionChangedEvent: # replicaset -> unknown previousDescription: type: "ReplicaSetWithPrimary" diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json index d6d4d1ce681..d86d321b12f 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -24,9 +24,7 @@ "observeEvents": [ "topologyDescriptionChangedEvent", "topologyOpeningEvent", - "topologyClosedEvent", - "serverOpeningEvent", - "serverClosedEvent" + "topologyClosedEvent" ] } } @@ -68,9 +66,6 @@ } } }, - { - "serverOpeningEvent": {} - }, { "topologyDescriptionChangedEvent": { "previousDescription": { @@ -81,9 +76,6 @@ } } }, - { - "serverClosedEvent": {} - }, { "topologyDescriptionChangedEvent": { "previousDescription": { diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml index 6b074adf6dd..95634821348 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -20,8 +20,6 @@ tests: - topologyDescriptionChangedEvent - topologyOpeningEvent - topologyClosedEvent - - serverOpeningEvent - - serverClosedEvent # ensure the topology has been fully discovered before closing the client. # expected events are initial server discovery and server connect event. - name: waitForEvent @@ -44,13 +42,11 @@ tests: type: "Unknown" newDescription: type: "Unknown" - - serverOpeningEvent: {} - topologyDescriptionChangedEvent: # unknown w disconnected server -> standalone previousDescription: type: "Unknown" newDescription: type: "Single" - - serverClosedEvent: {} - topologyDescriptionChangedEvent: # standalone -> unknown previousDescription: type: "Single" diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index 4808244e295..f9f2b108576 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -38,6 +38,7 @@ import { } from '../../mongodb'; import { ejson } from '../utils'; import { type CmapEvent, type CommandEvent, type EntitiesMap, type SdamEvent } from './entities'; +import { trace } from './runner'; import { type ExpectedCmapEvent, type ExpectedCommandEvent, @@ -621,7 +622,7 @@ function compareEvents( ); } } else { - expect.fail(`Encountered unexpected event - ${inspect(actualEvent)}`); + expect.fail(`Encountered unexpected event - ${inspect(actualEvent)} `); } } } @@ -724,7 +725,7 @@ export function expectErrorCheck( expected: ExpectedError, entities: EntitiesMap ): void { - const expectMessage = `\n\nOriginal Error Stack:\n${error.stack}\n\n`; + const expectMessage = `\n\nOriginal Error Stack: \n${error.stack} \n\n`; if (!isMongoCryptError(error)) { expect(error, expectMessage).to.be.instanceOf(MongoError); @@ -755,7 +756,7 @@ export function expectErrorCheck( for (const errorLabel of expected.errorLabelsContain) { expect( mongoError.hasErrorLabel(errorLabel), - `Error was supposed to have label ${errorLabel}, has [${mongoError.errorLabels}] -- ${expectMessage}` + `Error was supposed to have label ${errorLabel}, has[${mongoError.errorLabels}]--${expectMessage} ` ).to.be.true; } } @@ -765,7 +766,7 @@ export function expectErrorCheck( for (const errorLabel of expected.errorLabelsOmit) { expect( mongoError.hasErrorLabel(errorLabel), - `Error was not supposed to have label ${errorLabel}, has [${mongoError.errorLabels}] -- ${expectMessage}` + `Error was not supposed to have label ${errorLabel}, has[${mongoError.errorLabels}]--${expectMessage} ` ).to.be.false; } } From be2e640d1ffa7ef5d8492bc0c8df225b5fc1fe2e Mon Sep 17 00:00:00 2001 From: Warren James Date: Mon, 25 Mar 2024 21:14:35 -0400 Subject: [PATCH 23/26] lint fix --- test/tools/unified-spec-runner/match.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/tools/unified-spec-runner/match.ts b/test/tools/unified-spec-runner/match.ts index f9f2b108576..4bc05479ef9 100644 --- a/test/tools/unified-spec-runner/match.ts +++ b/test/tools/unified-spec-runner/match.ts @@ -38,7 +38,6 @@ import { } from '../../mongodb'; import { ejson } from '../utils'; import { type CmapEvent, type CommandEvent, type EntitiesMap, type SdamEvent } from './entities'; -import { trace } from './runner'; import { type ExpectedCmapEvent, type ExpectedCommandEvent, From 49a648e3bfcc7b11855541b8b9ec01082dab18af Mon Sep 17 00:00:00 2001 From: Warren James Date: Fri, 19 Apr 2024 17:14:34 -0400 Subject: [PATCH 24/26] bump schema version --- .../loadbalanced-emit-topology-changed-before-close.json | 2 +- .../unified/loadbalanced-emit-topology-changed-before-close.yml | 2 +- .../unified/replicaset-emit-topology-changed-before-close.json | 2 +- .../unified/replicaset-emit-topology-changed-before-close.yml | 2 +- .../unified/sharded-emit-topology-changed-before-close.json | 2 +- .../unified/sharded-emit-topology-changed-before-close.yml | 2 +- .../unified/standalone-emit-topology-changed-before-close.json | 2 +- .../unified/standalone-emit-topology-changed-before-close.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json index 869857f1ae3..30c0657630b 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "loadbalanced-emit-topology-description-changed-before-close", - "schemaVersion": "1.19", + "schemaVersion": "1.20", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml index 72217c85eb8..c919a8cf8bc 100644 --- a/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "loadbalanced-emit-topology-description-changed-before-close" -schemaVersion: "1.19" +schemaVersion: "1.20" runOnRequirements: - topologies: diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json index f3378bf8a62..066a4ffee5f 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "replicaset-emit-topology-description-changed-before-close", - "schemaVersion": "1.19", + "schemaVersion": "1.20", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml index ee49303cadd..d0a1158ea9d 100644 --- a/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "replicaset-emit-topology-description-changed-before-close" -schemaVersion: "1.19" +schemaVersion: "1.20" runOnRequirements: - topologies: diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json index 3ee615ec663..98fb5855314 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "sharded-emit-topology-description-changed-before-close", - "schemaVersion": "1.19", + "schemaVersion": "1.20", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml index e890794c1d8..cb6cc5ad4d9 100644 --- a/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "sharded-emit-topology-description-changed-before-close" -schemaVersion: "1.19" +schemaVersion: "1.20" runOnRequirements: - topologies: diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json index d86d321b12f..27b5444d541 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json @@ -1,6 +1,6 @@ { "description": "standalone-emit-topology-description-changed-before-close", - "schemaVersion": "1.19", + "schemaVersion": "1.20", "runOnRequirements": [ { "topologies": [ diff --git a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml index 95634821348..20fa380bd5e 100644 --- a/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ b/test/spec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml @@ -1,6 +1,6 @@ description: "standalone-emit-topology-description-changed-before-close" -schemaVersion: "1.19" +schemaVersion: "1.20" runOnRequirements: - topologies: From c6434c0dd270c4dd92c54025e85be56c807b135b Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 7 May 2024 16:21:26 -0400 Subject: [PATCH 25/26] run ci From 90e6062d3f4d040e167de87d4c4645cebad4c0e0 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 9 May 2024 16:20:11 -0400 Subject: [PATCH 26/26] ensure topology description is constructed with original options --- src/sdam/topology.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sdam/topology.ts b/src/sdam/topology.ts index 7747f8f9ace..429a8fc5b30 100644 --- a/src/sdam/topology.ts +++ b/src/sdam/topology.ts @@ -513,7 +513,15 @@ export class Topology extends TypedEventEmitter { this.removeListener(Topology.TOPOLOGY_DESCRIPTION_CHANGED, this.s.detectShardedTopology); stateTransition(this, STATE_CLOSED); - this.s.description = new TopologyDescription(TopologyType.Unknown, new Map()); + this.s.description = new TopologyDescription( + TopologyType.Unknown, + new Map(), + this.s.options.replicaSet, + undefined, + undefined, + undefined, + this.s.options + ); // broadcast that topology is in closed state this.emitAndLog(