Skip to content

Commit b842717

Browse files
authored
test(bundlers): add node webpack tests, expand edge coverage, assert known protobuf failures (#6482)
1 parent b5a6b12 commit b842717

35 files changed

+662
-201
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
2727
* chore: enforce `import type` for type-only imports via ESLint [#6467](https://github.com/open-telemetry/opentelemetry-js/pull/6467) @overbalance
2828
* perf(sdk-trace-base): avoid Object.entries in Span.setAttributes [#6514](https://github.com/open-telemetry/opentelemetry-js/pull/6514) @daniellockyer
2929
* perf(sdk-trace-base): optimize `Span.{addEvent,addLink}` performance [#6516](https://github.com/open-telemetry/opentelemetry-js/pull/6516) @daniellockyer
30+
* test(bundlers): broaden bundler test coverage and assert known protobuf dynamic-require failures [#6482](https://github.com/open-telemetry/opentelemetry-js/pull/6482) @overbalance
3031

3132
## 2.6.0
3233

bundler-tests/browser/nextjs-15-edge/middleware.js

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,52 @@
1+
import { DiagConsoleLogger, diag } from '@opentelemetry/api';
2+
import { logs } from '@opentelemetry/api-logs';
3+
import { W3CTraceContextPropagator } from '@opentelemetry/core';
4+
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
5+
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
6+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7+
import { InstrumentationBase } from '@opentelemetry/instrumentation';
8+
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
9+
import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
10+
import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
11+
import { B3Propagator } from '@opentelemetry/propagator-b3';
112
import { defaultServiceName } from '@opentelemetry/resources';
13+
import {
14+
LoggerProvider,
15+
SimpleLogRecordProcessor,
16+
} from '@opentelemetry/sdk-logs';
17+
import { MeterProvider } from '@opentelemetry/sdk-metrics';
18+
import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
19+
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
20+
21+
diag.setLogger(new DiagConsoleLogger());
22+
23+
logs.setGlobalLoggerProvider(
24+
new LoggerProvider({
25+
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
26+
})
27+
);
28+
29+
class TestInstrumentation extends InstrumentationBase {
30+
init() {
31+
return [];
32+
}
33+
}
234

335
export function middleware(request) {
436
const serviceName = defaultServiceName();
5-
console.log('Service name:', serviceName);
37+
const logger = logs.getLogger('bundle-test-nextjs-edge');
38+
logger.emit({ body: serviceName, eventName: 'custom.event' });
39+
new TestInstrumentation('test', '0.0.0');
40+
new BasicTracerProvider();
41+
new MeterProvider();
42+
new OTLPTraceExporter();
43+
new OTLPMetricExporter();
44+
new W3CTraceContextPropagator();
45+
new B3Propagator();
46+
new WebTracerProvider();
47+
new FetchInstrumentation();
48+
new XMLHttpRequestInstrumentation();
49+
void browserDetector;
650
return Response.next();
751
}
852

bundler-tests/browser/nextjs-15-edge/package.json

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
{
2-
"name": "nextjs-15-edge-bundle-test",
2+
"name": "bundler-tests-browser-nextjs-15-edge",
33
"type": "module",
44
"private": true,
55
"scripts": {
66
"build": "rm -rf .next && next build",
7-
"test:bundle": "npm i && npm run build"
7+
"test:bundle": "npm i && node test-bundle.mjs"
88
},
99
"dependencies": {
10+
"@opentelemetry/api": "file:../../../api",
11+
"@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
12+
"@opentelemetry/core": "file:../../../packages/opentelemetry-core",
13+
"@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
14+
"@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
15+
"@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
16+
"@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
17+
"@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
18+
"@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
19+
"@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
20+
"@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
1021
"@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
22+
"@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
23+
"@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
24+
"@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
25+
"@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web",
1126
"next": "^15",
1227
"react": "^18",
1328
"react-dom": "^18"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"name": "nextjs-15-edge-bundle-test"
2+
"name": "bundler-tests-browser-nextjs-15-edge"
33
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Runs the Next.js 15 edge build and asserts the known protobuf Dynamic Code
3+
* Evaluation error. This exit(0) is intentional: the test passes while the bug
4+
* exists and will break when it is fixed, signalling that this file should be
5+
* removed and test:bundle should revert to just `npm run build`.
6+
*/
7+
import { spawnSync } from 'node:child_process';
8+
import { fileURLToPath } from 'node:url';
9+
import { dirname } from 'node:path';
10+
11+
const testDir = dirname(fileURLToPath(import.meta.url));
12+
13+
const result = spawnSync('npm', ['run', 'build'], {
14+
cwd: testDir,
15+
encoding: 'utf-8',
16+
shell: false,
17+
});
18+
19+
const output = (result.stdout ?? '') + (result.stderr ?? '');
20+
const buildFailed = result.status !== 0;
21+
const hasExpectedError =
22+
/Dynamic Code Evaluation/.test(output) && /protobuf/i.test(output);
23+
24+
if (!buildFailed) {
25+
console.error(
26+
'Build succeeded — expected protobuf Dynamic Code Evaluation error.\n' +
27+
'The underlying bug may be fixed. Update this test.'
28+
);
29+
process.exit(1);
30+
}
31+
32+
if (!hasExpectedError) {
33+
console.error('Build failed for an unexpected reason:\n', output);
34+
process.exit(1);
35+
}
36+
37+
console.log('Known protobuf Dynamic Code Evaluation build failure confirmed');

bundler-tests/browser/nextjs-16-edge/app/api/test/route.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,54 @@
1+
import { DiagConsoleLogger, diag } from '@opentelemetry/api';
2+
import { logs } from '@opentelemetry/api-logs';
3+
import { W3CTraceContextPropagator } from '@opentelemetry/core';
4+
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
5+
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
6+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7+
import { InstrumentationBase } from '@opentelemetry/instrumentation';
8+
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
9+
import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
10+
import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
11+
import { B3Propagator } from '@opentelemetry/propagator-b3';
112
import { defaultServiceName } from '@opentelemetry/resources';
13+
import {
14+
LoggerProvider,
15+
SimpleLogRecordProcessor,
16+
} from '@opentelemetry/sdk-logs';
17+
import { MeterProvider } from '@opentelemetry/sdk-metrics';
18+
import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
19+
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
220

321
export const runtime = 'edge';
422

23+
diag.setLogger(new DiagConsoleLogger());
24+
25+
logs.setGlobalLoggerProvider(
26+
new LoggerProvider({
27+
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
28+
})
29+
);
30+
31+
class TestInstrumentation extends InstrumentationBase {
32+
init() {
33+
return [];
34+
}
35+
}
36+
537
export function GET(request) {
638
const serviceName = defaultServiceName();
39+
const logger = logs.getLogger('bundle-test-nextjs-edge');
40+
logger.emit({ body: 'test-event-body', eventName: 'custom.event' });
41+
new TestInstrumentation('test', '0.0.0');
42+
new BasicTracerProvider();
43+
new MeterProvider();
44+
new OTLPTraceExporter();
45+
new OTLPMetricExporter();
46+
new W3CTraceContextPropagator();
47+
new B3Propagator();
48+
new WebTracerProvider();
49+
new FetchInstrumentation();
50+
new XMLHttpRequestInstrumentation();
51+
void browserDetector;
752
return new Response(JSON.stringify({ serviceName }), {
853
headers: { 'Content-Type': 'application/json' },
954
});

bundler-tests/browser/nextjs-16-edge/package.json

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
{
2-
"name": "nextjs-16-edge-bundle-test",
2+
"name": "bundler-tests-browser-nextjs-16-edge",
33
"type": "module",
44
"private": true,
55
"scripts": {
66
"build": "rm -rf .next && next build",
7-
"test:bundle": "npm i && npx tsx next.test.ts"
7+
"test:bundle": "npm i && node test-bundle.mjs"
88
},
99
"dependencies": {
10+
"@opentelemetry/api": "file:../../../api",
11+
"@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
12+
"@opentelemetry/core": "file:../../../packages/opentelemetry-core",
13+
"@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
14+
"@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
15+
"@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
16+
"@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
17+
"@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
18+
"@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
19+
"@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
20+
"@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
1021
"@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
22+
"@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
23+
"@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
24+
"@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
25+
"@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web",
1126
"next": "^16",
1227
"react": "^19",
1328
"react-dom": "^19"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"name": "nextjs-16-edge-bundle-test"
2+
"name": "bundler-tests-browser-nextjs-16-edge"
33
}
File renamed without changes.

bundler-tests/browser/webpack-4/index.html

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)