diff --git a/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb.test.ts b/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb.test.ts index fe1bd7dc9b..de628a1f33 100644 --- a/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb.test.ts +++ b/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb.test.ts @@ -250,37 +250,64 @@ describe('MongoDBInstrumentation', () => { }); }); - describe('when collecting insert data', () => { - beforeEach(() => { - memoryExporter.reset(); - create({ - enhancedDatabaseReporting: true, - dbStatementSerializer: (commandObj: Record) => { - return JSON.stringify(commandObj); - }, - }); - }); + describe('when specifying a dbStatementSerializer configuration', () => { + const key = 'key'; + const value = 'value'; + const object = { [key]: value }; - it('should collect insert data when configured to do so', done => { - const key = 'key'; - const value = 'value'; - const object = { [key]: value }; - const span = provider.getTracer('default').startSpan('insertRootSpan'); - context.with(trace.setSpan(context.active(), span), () => { - collection.insertOne(object).then(() => { - span.end(); - const spans = memoryExporter.getFinishedSpans(); - const operationName = 'mongodb.insert'; - assertSpans(spans, operationName, SpanKind.CLIENT, false, true); - const mongoSpan = spans.find(s => s.name === operationName); - const dbStatement = JSON.parse( - mongoSpan!.attributes[SemanticAttributes.DB_STATEMENT] as string - ); - assert.strictEqual(dbStatement[key], value); - done(); + describe('with a valid function', () => { + beforeEach(() => { + memoryExporter.reset(); + create({ + enhancedDatabaseReporting: true, + dbStatementSerializer: (commandObj: Record) => { + return JSON.stringify(commandObj); + }, }); }); - }); + + it('should properly collect db statement', done => { + const span = provider.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection.insertOne(object).then(() => { + span.end(); + const spans = memoryExporter.getFinishedSpans(); + const operationName = 'mongodb.insert'; + assertSpans(spans, operationName, SpanKind.CLIENT, false, true); + const mongoSpan = spans.find(s => s.name === operationName); + const dbStatement = JSON.parse( + mongoSpan!.attributes[SemanticAttributes.DB_STATEMENT] as string + ); + assert.strictEqual(dbStatement[key], value); + done(); + }); + }); + }); + }) + + describe('with an invalid function', () => { + beforeEach(() => { + memoryExporter.reset(); + create({ + enhancedDatabaseReporting: true, + dbStatementSerializer: (_commandObj: Record) => { + throw new Error('something went wrong!'); + }, + }); + }); + + it('should not do any harm when throwing an exception', (done) => { + const span = provider.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection.insertOne(object).then(() => { + span.end(); + const spans = memoryExporter.getFinishedSpans(); + assertSpans(spans, 'mongodb.insert', SpanKind.CLIENT); + done(); + }); + }); + }) + }) }); describe('when specifying a responseHook configuration', () => {