11/* eslint-disable @typescript-eslint/no-non-null-assertion */
22import { expect } from 'chai' ;
33import { EventEmitter } from 'events' ;
4- import { Writable } from 'stream' ;
54
65import {
76 AbstractCursor ,
@@ -26,6 +25,7 @@ import {
2625 Document ,
2726 GridFSBucket ,
2827 HostAddress ,
28+ Log ,
2929 MongoClient ,
3030 MongoCredentials ,
3131 ReadConcern ,
@@ -107,33 +107,12 @@ function getClient(address) {
107107 return new MongoClient ( `mongodb://${ address } ` , getEnvironmentalOptions ( ) ) ;
108108}
109109
110- // TODO(NODE-4813): Remove this class in favour of a simple object with a write method
111- /* TODO(NODE-4813): Ensure that the object that we replace this with has logic to convert the
112- * collected log into the format require by the unified spec runner
113- * (see ExpectedLogMessage type in schema.ts) */
114- export class UnifiedLogCollector extends Writable {
115- collectedLogs : LogMessage [ ] = [ ] ;
116-
117- constructor ( ) {
118- super ( { objectMode : true } ) ;
119- }
120-
121- _write (
122- log : LogMessage ,
123- _ : string ,
124- callback : ( e : Error | null , l : LogMessage | undefined ) => void
125- ) {
126- this . collectedLogs . push ( log ) ;
127- callback ( null , log ) ;
128- }
129- }
130-
131110export class UnifiedMongoClient extends MongoClient {
132111 commandEvents : CommandEvent [ ] = [ ] ;
133112 cmapEvents : CmapEvent [ ] = [ ] ;
134113 sdamEvents : SdamEvent [ ] = [ ] ;
135114 failPoints : Document [ ] = [ ] ;
136- logCollector : UnifiedLogCollector ;
115+ logCollector : { buffer : LogMessage [ ] ; write : ( log : Log ) => void } ;
137116
138117 ignoredEvents : string [ ] ;
139118 observedCommandEvents : ( 'commandStarted' | 'commandSucceeded' | 'commandFailed' ) [ ] ;
@@ -186,7 +165,18 @@ export class UnifiedMongoClient extends MongoClient {
186165 } as const ;
187166
188167 constructor ( uri : string , description : ClientEntity ) {
189- const logCollector = new UnifiedLogCollector ( ) ;
168+ const logCollector : { buffer : LogMessage [ ] ; write : ( log : Log ) => void } = {
169+ buffer : [ ] ,
170+ write ( log : Log ) : void {
171+ const transformedLog = {
172+ level : log . s ,
173+ component : log . c ,
174+ data : { ...log , s : undefined , c : undefined }
175+ } ;
176+
177+ this . buffer . push ( transformedLog ) ;
178+ }
179+ } ;
190180 const componentSeverities = {
191181 MONGODB_LOG_ALL : 'off'
192182 } ;
@@ -202,6 +192,7 @@ export class UnifiedMongoClient extends MongoClient {
202192 [ Symbol . for ( '@@mdb.skipPingOnConnect' ) ] : true ,
203193 [ Symbol . for ( '@@mdb.enableMongoLogger' ) ] : true ,
204194 [ Symbol . for ( '@@mdb.internalMongoLoggerConfig' ) ] : componentSeverities ,
195+ // @ts -expect-error TODO(NODE-4849): Remove this once we have support for mongodbLogPath
205196 mongodbLogPath : logCollector ,
206197 ...getEnvironmentalOptions ( ) ,
207198 ...( description . serverApi ? { serverApi : description . serverApi } : { } )
@@ -296,7 +287,7 @@ export class UnifiedMongoClient extends MongoClient {
296287 }
297288
298289 get collectedLogs ( ) : LogMessage [ ] {
299- return this . logCollector . collectedLogs ;
290+ return this . logCollector . buffer ;
300291 }
301292}
302293
0 commit comments