diff --git a/plugins/node/instrumentation-mongoose/src/mongoose.ts b/plugins/node/instrumentation-mongoose/src/mongoose.ts index 30fbddd661..40ed3617da 100644 --- a/plugins/node/instrumentation-mongoose/src/mongoose.ts +++ b/plugins/node/instrumentation-mongoose/src/mongoose.ts @@ -106,10 +106,12 @@ export class MongooseInstrumentation extends InstrumentationBase>> 0).toString(16); + +await mongoose.connect(MONGO_URL, { + dbName: DB_NAME, +}); + +const TestModel = mongoose.model( + 'Test', + new mongoose.Schema({ + name: String, + }) +); + +const tracer = trace.getTracer('mongoose-instrumentation'); +await tracer.startActiveSpan('manual', async span => { + const name = `test-${randomId}`; + const [createdDoc] = await TestModel.create([{ name }]); + + const doc = await TestModel.findOne({ name }).exec(); + + assert(doc && createdDoc?._id.toString() === doc?._id.toString()); + + span.end(); +}); + +await mongoose.disconnect(); +await sdk.shutdown(); diff --git a/plugins/node/instrumentation-mongoose/test/mongoose-common.test.ts b/plugins/node/instrumentation-mongoose/test/mongoose-common.test.ts index 3a8a16086d..0cf2d72909 100644 --- a/plugins/node/instrumentation-mongoose/test/mongoose-common.test.ts +++ b/plugins/node/instrumentation-mongoose/test/mongoose-common.test.ts @@ -14,8 +14,10 @@ * limitations under the License. */ import 'mocha'; +import * as assert from 'assert'; import { expect } from 'expect'; import { context, ROOT_CONTEXT } from '@opentelemetry/api'; +import * as testUtils from '@opentelemetry/contrib-test-utils'; import { SEMATTRS_DB_OPERATION, SEMATTRS_DB_STATEMENT, @@ -548,4 +550,27 @@ describe('mongoose instrumentation [common]', () => { expect(spans.length).toBe(0); }); }); + + it('should work with ESM usage', async () => { + await testUtils.runTestFixture({ + cwd: __dirname, + argv: ['fixtures/use-mongoose.mjs', MONGO_URI, DB_NAME], + env: { + NODE_OPTIONS: + '--experimental-loader=@opentelemetry/instrumentation/hook.mjs', + NODE_NO_WARNINGS: '1', + }, + checkResult: (err, stdout, stderr) => { + assert.ifError(err); + }, + checkCollector: (collector: testUtils.TestCollector) => { + const spans = collector.sortedSpans; + assert.strictEqual(spans[0].name, 'manual'); + assert.strictEqual(spans[1].name, 'mongoose.Test.save'); + assert.strictEqual(spans[1].parentSpanId, spans[0].spanId); + assert.strictEqual(spans[2].name, 'mongoose.Test.findOne'); + assert.strictEqual(spans[2].parentSpanId, spans[0].spanId); + }, + }); + }); });