Skip to content

Commit b146d4c

Browse files
authored
test(node): Add mongoose auto instrumentation test for @sentry/node-experimental (#10322)
This tests v5.13.22 of mongoose because it's the most commonly use version currently supported by the OpenTelemetry plugin: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/fce7d3b5e478ff7525c9ffe99e59bf35f8c06207/plugins/node/instrumentation-mongoose/src/mongoose.ts#L80 https://www.npmjs.com/package/mongoose?activeTab=versions It's worth noting that at least versions 5 and 7 of `mongoose` also generate `mongodb` spans because they use the library internally and we auto instrument everything. For some unknown reason, `mongoose@v8` does not appear to generate `mongodb` spans and I haven't tested v6 because very few people are using it.
1 parent b67d9b4 commit b146d4c

File tree

4 files changed

+197
-1
lines changed

4 files changed

+197
-1
lines changed

dev-packages/node-integration-tests/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"graphql": "^16.3.0",
4242
"http-terminator": "^3.2.0",
4343
"mongodb": "^3.7.3",
44+
"mongoose": "^5.13.22",
4445
"mongodb-memory-server-global": "^7.6.3",
4546
"mysql": "^2.18.1",
4647
"nock": "^13.1.0",
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const { loggingTransport } = require('@sentry-internal/node-integration-tests');
2+
const Sentry = require('@sentry/node-experimental');
3+
4+
Sentry.init({
5+
dsn: 'https://[email protected]/1337',
6+
release: '1.0',
7+
debug: true,
8+
tracesSampleRate: 1.0,
9+
transport: loggingTransport,
10+
});
11+
12+
// Stop the process from exiting before the transaction is sent
13+
setInterval(() => {}, 1000);
14+
15+
// Must be required after Sentry is initialized
16+
const mongoose = require('mongoose');
17+
18+
async function run() {
19+
await mongoose.connect(process.env.MONGO_URL || '');
20+
21+
const Schema = mongoose.Schema;
22+
23+
const BlogPostSchema = new Schema({
24+
title: String,
25+
body: String,
26+
date: Date,
27+
});
28+
29+
const BlogPost = mongoose.model('BlogPost', BlogPostSchema);
30+
31+
await Sentry.startSpan(
32+
{
33+
name: 'Test Transaction',
34+
op: 'transaction',
35+
},
36+
async () => {
37+
const post = new BlogPost();
38+
post.title = 'Test';
39+
post.body = 'Test body';
40+
post.date = new Date();
41+
42+
await post.save();
43+
44+
await BlogPost.findOne({});
45+
},
46+
);
47+
}
48+
49+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
50+
run();
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { MongoMemoryServer } from 'mongodb-memory-server-global';
2+
3+
import { conditionalTest } from '../../../utils';
4+
import { cleanupChildProcesses, createRunner } from '../../../utils/runner';
5+
6+
jest.setTimeout(20000);
7+
8+
conditionalTest({ min: 14 })('Mongoose experimental Test', () => {
9+
let mongoServer: MongoMemoryServer;
10+
11+
beforeAll(async () => {
12+
mongoServer = await MongoMemoryServer.create();
13+
process.env.MONGO_URL = mongoServer.getUri();
14+
}, 10000);
15+
16+
afterAll(async () => {
17+
if (mongoServer) {
18+
await mongoServer.stop();
19+
}
20+
cleanupChildProcesses();
21+
});
22+
23+
const EXPECTED_TRANSACTION = {
24+
transaction: 'Test Transaction',
25+
spans: expect.arrayContaining([
26+
expect.objectContaining({
27+
data: expect.objectContaining({
28+
'db.mongodb.collection': 'blogposts',
29+
'db.name': 'test',
30+
'db.operation': 'save',
31+
'db.system': 'mongoose',
32+
}),
33+
description: 'mongoose.BlogPost.save',
34+
op: 'db',
35+
origin: 'auto.db.otel.mongoose',
36+
}),
37+
expect.objectContaining({
38+
data: expect.objectContaining({
39+
'db.mongodb.collection': 'blogposts',
40+
'db.name': 'test',
41+
'db.operation': 'findOne',
42+
'db.system': 'mongoose',
43+
}),
44+
description: 'mongoose.BlogPost.findOne',
45+
op: 'db',
46+
origin: 'auto.db.otel.mongoose',
47+
}),
48+
]),
49+
};
50+
51+
test('CJS - should auto-instrument `mongoose` package.', done => {
52+
createRunner(__dirname, 'scenario.js').expect({ transaction: EXPECTED_TRANSACTION }).start(done);
53+
});
54+
});

yarn.lock

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5739,6 +5739,13 @@
57395739
dependencies:
57405740
bson "*"
57415741

5742+
"@types/[email protected] || 4.0.x":
5743+
version "4.0.5"
5744+
resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.5.tgz#9e0e1d1a6f8866483f96868a9b33bc804926b1fc"
5745+
integrity sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==
5746+
dependencies:
5747+
"@types/node" "*"
5748+
57425749
"@types/chai-as-promised@^7.1.2":
57435750
version "7.1.3"
57445751
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz#779166b90fda611963a3adbfd00b339d03b747bd"
@@ -6314,7 +6321,7 @@
63146321
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
63156322
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
63166323

6317-
"@types/mongodb@^3.6.20":
6324+
"@types/mongodb@^3.5.27", "@types/mongodb@^3.6.20":
63186325
version "3.6.20"
63196326
resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.20.tgz#b7c5c580644f6364002b649af1c06c3c0454e1d2"
63206327
integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==
@@ -9540,6 +9547,11 @@ blank-object@^1.0.1:
95409547
resolved "https://registry.yarnpkg.com/blank-object/-/blank-object-1.0.2.tgz#f990793fbe9a8c8dd013fb3219420bec81d5f4b9"
95419548
integrity sha1-+ZB5P76ajI3QE/syGUIL7IHV9Lk=
95429549

9550+
9551+
version "3.5.1"
9552+
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
9553+
integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
9554+
95439555
bluebird@^3.4.6, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2:
95449556
version "3.7.2"
95459557
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@@ -19629,6 +19641,11 @@ jws@^4.0.0:
1962919641
jwa "^2.0.0"
1963019642
safe-buffer "^5.0.1"
1963119643

19644+
19645+
version "2.3.2"
19646+
resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93"
19647+
integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==
19648+
1963219649
karma-browserstack-launcher@^1.5.1:
1963319650
version "1.6.0"
1963419651
resolved "https://registry.yarnpkg.com/karma-browserstack-launcher/-/karma-browserstack-launcher-1.6.0.tgz#2f6000647073e77ae296653b8830b279669766ef"
@@ -22138,6 +22155,19 @@ mongodb-memory-server-global@^7.6.3:
2213822155
mongodb-memory-server-core "7.6.3"
2213922156
tslib "^2.3.0"
2214022157

22158+
22159+
version "3.7.4"
22160+
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.4.tgz#119530d826361c3e12ac409b769796d6977037a4"
22161+
integrity sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==
22162+
dependencies:
22163+
bl "^2.2.1"
22164+
bson "^1.1.4"
22165+
denque "^1.4.1"
22166+
optional-require "^1.1.8"
22167+
safe-buffer "^5.1.2"
22168+
optionalDependencies:
22169+
saslprep "^1.0.0"
22170+
2214122171
mongodb@^3.7.3:
2214222172
version "3.7.3"
2214322173
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.3.tgz#b7949cfd0adc4cc7d32d3f2034214d4475f175a5"
@@ -22151,6 +22181,31 @@ mongodb@^3.7.3:
2215122181
optionalDependencies:
2215222182
saslprep "^1.0.0"
2215322183

22184+
22185+
version "1.0.2"
22186+
resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4"
22187+
integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==
22188+
22189+
mongoose@^5.13.22:
22190+
version "5.13.22"
22191+
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.13.22.tgz#f9a6493ba5f45b7a3d5f9fce58ca9c71aedb8157"
22192+
integrity sha512-p51k/c4X/MfqeQ3I1ranlDiggLzNumZrTDD9CeezHwZxt2/btf+YZD7MCe07RAY2NgFYVMayq6jMamw02Jmf9w==
22193+
dependencies:
22194+
"@types/bson" "1.x || 4.0.x"
22195+
"@types/mongodb" "^3.5.27"
22196+
bson "^1.1.4"
22197+
kareem "2.3.2"
22198+
mongodb "3.7.4"
22199+
mongoose-legacy-pluralize "1.0.2"
22200+
mpath "0.8.4"
22201+
mquery "3.2.5"
22202+
ms "2.1.2"
22203+
optional-require "1.0.x"
22204+
regexp-clone "1.0.0"
22205+
safe-buffer "5.2.1"
22206+
sift "13.5.2"
22207+
sliced "1.0.1"
22208+
2215422209
morgan@^1.10.0:
2215522210
version "1.10.0"
2215622211
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
@@ -22179,6 +22234,22 @@ move-concurrently@^1.0.1:
2217922234
rimraf "^2.5.4"
2218022235
run-queue "^1.0.3"
2218122236

22237+
22238+
version "0.8.4"
22239+
resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313"
22240+
integrity sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==
22241+
22242+
22243+
version "3.2.5"
22244+
resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.5.tgz#8f2305632e4bb197f68f60c0cffa21aaf4060c51"
22245+
integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==
22246+
dependencies:
22247+
bluebird "3.5.1"
22248+
debug "3.1.0"
22249+
regexp-clone "^1.0.0"
22250+
safe-buffer "5.1.2"
22251+
sliced "1.0.1"
22252+
2218222253
2218322254
version "1.1.4"
2218422255
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a"
@@ -23506,6 +23577,11 @@ opn@^5.5.0:
2350623577
dependencies:
2350723578
is-wsl "^1.1.0"
2350823579

23580+
23581+
version "1.0.3"
23582+
resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.0.3.tgz#275b8e9df1dc6a17ad155369c2422a440f89cb07"
23583+
integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==
23584+
2350923585
optional-require@^1.1.8:
2351023586
version "1.1.8"
2351123587
resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7"
@@ -26668,6 +26744,11 @@ regex-parser@^2.2.11:
2666826744
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
2666926745
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
2667026746

26747+
[email protected], regexp-clone@^1.0.0:
26748+
version "1.0.0"
26749+
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63"
26750+
integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==
26751+
2667126752
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3:
2667226753
version "1.4.3"
2667326754
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
@@ -28060,6 +28141,11 @@ side-channel@^1.0.4:
2806028141
get-intrinsic "^1.0.2"
2806128142
object-inspect "^1.9.0"
2806228143

28144+
28145+
version "13.5.2"
28146+
resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6"
28147+
integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==
28148+
2806328149
siginfo@^2.0.0:
2806428150
version "2.0.0"
2806528151
resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
@@ -28230,6 +28316,11 @@ slice-ansi@^5.0.0:
2823028316
ansi-styles "^6.0.0"
2823128317
is-fullwidth-code-point "^4.0.0"
2823228318

28319+
28320+
version "1.0.1"
28321+
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
28322+
integrity sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==
28323+
2823328324
smart-buffer@^4.1.0, smart-buffer@^4.2.0:
2823428325
version "4.2.0"
2823528326
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"

0 commit comments

Comments
 (0)