Skip to content

Commit d05f23e

Browse files
added support for topologyDescriptionChangedEvents in spec runner
1 parent be242a5 commit d05f23e

File tree

8 files changed

+93
-13
lines changed

8 files changed

+93
-13
lines changed

src/mongo_logger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ export interface LogConvertible extends Record<string, any> {
308308

309309
/** @internal */
310310
export function stringifyWithMaxLen(value: any, maxDocumentLength: number): string {
311-
const ejson = EJSON.stringify(value);
311+
const ejson = EJSON.stringify(value) ?? 'custom function';
312312

313313
return maxDocumentLength !== 0 && ejson.length > maxDocumentLength
314314
? `${ejson.slice(0, maxDocumentLength)}...`

src/sdam/topology.ts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {
3131
MongoTopologyClosedError
3232
} from '../error';
3333
import type { MongoClient, ServerApi } from '../mongo_client';
34-
import type { MongoLogger } from '../mongo_logger';
34+
import { MongoLoggableComponent, type MongoLogger } from '../mongo_logger';
3535
import { TypedEventEmitter } from '../mongo_types';
3636
import { ReadPreference, type ReadPreferenceLike } from '../read_preference';
3737
import type { ClientSession } from '../sessions';
@@ -556,7 +556,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
556556
}
557557

558558
this.client.mongoLogger.debug(
559-
'topology',
559+
MongoLoggableComponent.SERVER_SELECTION,
560560
new ServerSelectionStartedEvent(selector, this.description, options?.operationName)
561561
);
562562

@@ -571,6 +571,15 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
571571
const transaction = session && session.transaction;
572572

573573
if (isSharded && transaction && transaction.server) {
574+
this.client.mongoLogger.debug(
575+
MongoLoggableComponent.SERVER_SELECTION,
576+
new ServerSelectionSucceededEvent(
577+
selector,
578+
this.description,
579+
transaction.server.pool.address,
580+
options?.operationName
581+
)
582+
);
574583
callback(undefined, transaction.server);
575584
return;
576585
}
@@ -593,7 +602,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
593602
this.description
594603
);
595604
this.client.mongoLogger.debug(
596-
'topology',
605+
MongoLoggableComponent.SERVER_SELECTION,
597606
new ServerSelectionFailedEvent(
598607
selector,
599608
this.description,
@@ -606,7 +615,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
606615

607616
this[kWaitQueue].push(waitQueueMember);
608617
this.client.mongoLogger.info(
609-
'topology',
618+
MongoLoggableComponent.SERVER_SELECTION,
610619
new WaitingForSuitableServerEvent(
611620
selector,
612621
this.description,
@@ -886,7 +895,7 @@ function drainWaitQueue(queue: List<ServerSelectionRequest>, err?: MongoDriverEr
886895
if (!waitQueueMember[kCancelled]) {
887896
if (err) {
888897
waitQueueMember.mongoLogger.debug(
889-
'topology',
898+
MongoLoggableComponent.SERVER_SELECTION,
890899
new ServerSelectionFailedEvent(
891900
waitQueueMember.serverSelector,
892901
waitQueueMember.topologyDescription,
@@ -927,7 +936,15 @@ function processWaitQueue(topology: Topology) {
927936
: serverDescriptions;
928937
} catch (e) {
929938
waitQueueMember.timeoutController.clear();
930-
939+
topology.client.mongoLogger.debug(
940+
MongoLoggableComponent.SERVER_SELECTION,
941+
new ServerSelectionFailedEvent(
942+
waitQueueMember.serverSelector,
943+
topology.description,
944+
e,
945+
waitQueueMember?.operationName
946+
)
947+
);
931948
waitQueueMember.callback(e);
932949
continue;
933950
}
@@ -955,7 +972,7 @@ function processWaitQueue(topology: Topology) {
955972
topology.description
956973
);
957974
topology.client.mongoLogger.debug(
958-
'topology',
975+
MongoLoggableComponent.SERVER_SELECTION,
959976
new ServerSelectionFailedEvent(
960977
waitQueueMember.serverSelector,
961978
topology.description,
@@ -974,7 +991,7 @@ function processWaitQueue(topology: Topology) {
974991
waitQueueMember.timeoutController.clear();
975992

976993
topology.client.mongoLogger.debug(
977-
'topology',
994+
MongoLoggableComponent.SERVER_SELECTION,
978995
new ServerSelectionSucceededEvent(
979996
waitQueueMember.serverSelector,
980997
waitQueueMember.topologyDescription,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"description": "expectedSdamEvent-topologyDescriptionChangedEvent-additionalProperties",
3+
"schemaVersion": "1.14",
4+
"tests": [
5+
{
6+
"description": "foo",
7+
"operations": [],
8+
"expectEvents": [
9+
{
10+
"client": "client0",
11+
"eventType": "sdam",
12+
"events": [
13+
{
14+
"topologyDescriptionChangedEvent": {
15+
"foo": "bar"
16+
}
17+
}
18+
]
19+
}
20+
]
21+
}
22+
]
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
description: expectedSdamEvent-topologyDescriptionChangedEvent-additionalProperties
2+
3+
schemaVersion: '1.14'
4+
5+
tests:
6+
- description: foo
7+
operations: []
8+
expectEvents:
9+
- client: client0
10+
eventType: sdam
11+
events:
12+
- topologyDescriptionChangedEvent:
13+
foo: bar

test/tools/unified-spec-runner/entities.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
type ServerHeartbeatStartedEvent,
3838
type ServerHeartbeatSucceededEvent,
3939
type TopologyDescription,
40+
type TopologyDescriptionChangedEvent,
4041
WriteConcern
4142
} from '../../mongodb';
4243
import { ejson, getEnvironmentalOptions } from '../../tools/utils';
@@ -104,7 +105,8 @@ export type SdamEvent =
104105
| ServerDescriptionChangedEvent
105106
| ServerHeartbeatStartedEvent
106107
| ServerHeartbeatFailedEvent
107-
| ServerHeartbeatSucceededEvent;
108+
| ServerHeartbeatSucceededEvent
109+
| TopologyDescriptionChangedEvent;
108110
export type LogMessage = Omit<ExpectedLogMessage, 'failureIsRedacted'>;
109111

110112
function getClient(address) {
@@ -138,6 +140,7 @@ export class UnifiedMongoClient extends MongoClient {
138140
| 'serverHeartbeatStartedEvent'
139141
| 'serverHeartbeatFailedEvent'
140142
| 'serverHeartbeatSucceededEvent'
143+
| 'topologyDescriptionChangedEvent'
141144
)[];
142145
observedEventEmitter = new EventEmitter();
143146
_credentials: MongoCredentials | null;
@@ -166,7 +169,8 @@ export class UnifiedMongoClient extends MongoClient {
166169
serverDescriptionChangedEvent: 'serverDescriptionChanged',
167170
serverHeartbeatStartedEvent: 'serverHeartbeatStarted',
168171
serverHeartbeatFailedEvent: 'serverHeartbeatFailed',
169-
serverHeartbeatSucceededEvent: 'serverHeartbeatSucceeded'
172+
serverHeartbeatSucceededEvent: 'serverHeartbeatSucceeded',
173+
topologyDescriptionChangedEvent: 'topologyDescriptionChanged'
170174
} as const;
171175

172176
static LOGGING_COMPONENT_TO_ENV_VAR_NAME = {

test/tools/unified-spec-runner/match.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import {
2929
ServerDescriptionChangedEvent,
3030
ServerHeartbeatFailedEvent,
3131
ServerHeartbeatStartedEvent,
32-
ServerHeartbeatSucceededEvent
32+
ServerHeartbeatSucceededEvent,
33+
TopologyDescriptionChangedEvent
3334
} from '../../mongodb';
3435
import { ejson } from '../utils';
3536
import { type CmapEvent, type CommandEvent, type EntitiesMap, type SdamEvent } from './entities';
@@ -561,6 +562,13 @@ function compareEvents(
561562
expect(actualEvent[property]).to.equal(expectedSdamEvent[property]);
562563
}
563564
return;
565+
} else if (expectedEvent.topologyDescriptionChangedEvent) {
566+
expect(actualEvent).to.be.instanceOf(TopologyDescriptionChangedEvent);
567+
const expectedSdamEvent = expectedEvent.topologyDescriptionChangedEvent;
568+
for (const property of Object.keys(expectedSdamEvent)) {
569+
expect(actualEvent[property]).to.equal(expectedSdamEvent[property]);
570+
}
571+
return;
564572
} else {
565573
expect.fail(`Encountered unexpected event - ${inspect(actualEvent)}`);
566574
}
@@ -596,6 +604,8 @@ export function compareLogs(
596604
actual: ExpectedLogMessage[],
597605
entities: EntitiesMap
598606
): void {
607+
console.log('ACTUAL:', actual);
608+
console.log('EXPECTED:', expected);
599609
expect(actual).to.have.lengthOf(expected.length);
600610

601611
for (const [index, actualLog] of actual.entries()) {

test/tools/unified-spec-runner/schema.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,14 @@ export interface ExpectedSdamEvent {
317317
serverHeartbeatSucceededEvent?: {
318318
awaited?: boolean;
319319
};
320+
topologyDescriptionChangedEvent?: {
321+
previousDescription?: {
322+
type?: string;
323+
};
324+
newDescription?: {
325+
type?: string;
326+
};
327+
};
320328
}
321329
export interface StoreEventsAsEntity {
322330
id: string;

test/unit/index.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ const EXPECTED_EXPORTS = [
120120
'ServerHeartbeatStartedEvent',
121121
'ServerHeartbeatSucceededEvent',
122122
'ServerOpeningEvent',
123+
'ServerSelectionEvent',
124+
'ServerSelectionStartedEvent',
125+
'ServerSelectionFailedEvent',
126+
'ServerSelectionSucceededEvent',
123127
'ServerType',
124128
'SrvPollingEvent',
125129
'Timestamp',
@@ -129,7 +133,8 @@ const EXPECTED_EXPORTS = [
129133
'TopologyType',
130134
'UnorderedBulkOperation',
131135
'UUID',
132-
'WriteConcern'
136+
'WriteConcern',
137+
'WaitingForSuitableServerEvent'
133138
];
134139

135140
describe('mongodb entrypoint', () => {

0 commit comments

Comments
 (0)