Skip to content

Commit 0d8ab29

Browse files
cursoragentclaude
andcommitted
fix(cloudflare): Fix worker-service-binding test bugs
- Remove non-existent DurableObject migration from sub-worker config - Remove unused DurableObject code from main worker - Fix worker name in wrangler.jsonc - Add trace_id verification to test propagation assertion - Implement manual trace propagation for service bindings Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent d245122 commit 0d8ab29

File tree

5 files changed

+20
-31
lines changed

5 files changed

+20
-31
lines changed

dev-packages/cloudflare-integration-tests/runner.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,7 @@ export function createRunner(...paths: string[]) {
188188
reject(e);
189189
};
190190

191-
function onChildMessage(
192-
message: string,
193-
onReady?: (port: number) => void,
194-
): void {
191+
function onChildMessage(message: string, onReady?: (port: number) => void): void {
195192
const msg = JSON.parse(message) as { event: string; port?: number };
196193
if (msg.event === 'DEV_SERVER_READY' && typeof msg.port === 'number') {
197194
if (process.env.DEBUG) log('worker ready on port', msg.port);
@@ -220,9 +217,7 @@ export function createRunner(...paths: string[]) {
220217

221218
// Wait for the sub-worker to be ready before starting the main worker
222219
await new Promise<void>((resolveSubWorker, rejectSubWorker) => {
223-
childSubWorker!.on('message', (msg: string) =>
224-
onChildMessage(msg, () => resolveSubWorker()),
225-
);
220+
childSubWorker!.on('message', (msg: string) => onChildMessage(msg, () => resolveSubWorker()));
226221
childSubWorker!.on('error', rejectSubWorker);
227222
childSubWorker!.on('exit', code => {
228223
rejectSubWorker(new Error(`Sub-worker exited with code ${code}`));

dev-packages/cloudflare-integration-tests/suites/tracing/worker-service-binding/index.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
11
import * as Sentry from '@sentry/cloudflare';
2-
import { DurableObject } from 'cloudflare:workers';
32

43
interface Env {
54
SENTRY_DSN: string;
6-
MY_DURABLE_OBJECT: DurableObjectNamespace;
75
ANOTHER_WORKER: Fetcher;
86
}
97

10-
class MyDurableObjectBase extends DurableObject<Env> {
11-
async fetch(request: Request) {
12-
return new Response('DO is fine');
13-
}
14-
}
15-
16-
export const MyDurableObject = Sentry.instrumentDurableObjectWithSentry(
17-
(env: Env) => ({
18-
dsn: env.SENTRY_DSN,
19-
tracesSampleRate: 1.0,
20-
}),
21-
MyDurableObjectBase,
22-
);
23-
248
export default Sentry.withSentry(
259
(env: Env) => ({
2610
dsn: env.SENTRY_DSN,
2711
tracesSampleRate: 1.0,
12+
tracePropagationTargets: [/.*/],
2813
}),
2914
{
3015
async fetch(request, env) {
31-
const response = await env.ANOTHER_WORKER.fetch(new Request('http://fake-host/hello'));
16+
const traceData = Sentry.getTraceData();
17+
const headers: Record<string, string> = {};
18+
if (traceData['sentry-trace']) {
19+
headers['sentry-trace'] = traceData['sentry-trace'];
20+
}
21+
if (traceData.baggage) {
22+
headers['baggage'] = traceData.baggage;
23+
}
24+
const response = await env.ANOTHER_WORKER.fetch(new Request('http://fake-host/hello', { headers }));
3225
const text = await response.text();
3326
return new Response(text);
3427
},

dev-packages/cloudflare-integration-tests/suites/tracing/worker-service-binding/test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import type { Event } from '@sentry/core';
33
import { createRunner } from '../../../runner';
44

55
it('propagates trace from worker to worker via service binding', async ({ signal }) => {
6+
const traceIds: string[] = [];
7+
68
const runner = createRunner(__dirname)
79
.expect(envelope => {
810
const transactionEvent = envelope[1]?.[0]?.[1] as Event;
@@ -20,6 +22,7 @@ it('propagates trace from worker to worker via service binding', async ({ signal
2022
transaction: 'GET /',
2123
}),
2224
);
25+
traceIds.push(transactionEvent.contexts?.trace?.trace_id || '');
2326
})
2427
.expect(envelope => {
2528
const transactionEvent = envelope[1]?.[0]?.[1] as Event;
@@ -37,9 +40,13 @@ it('propagates trace from worker to worker via service binding', async ({ signal
3740
transaction: 'GET /hello',
3841
}),
3942
);
43+
traceIds.push(transactionEvent.contexts?.trace?.trace_id || '');
4044
})
4145
.unordered()
4246
.start(signal);
4347
await runner.makeRequest('get', '/');
4448
await runner.completed();
49+
50+
expect(traceIds).toHaveLength(2);
51+
expect(traceIds[0]).toBe(traceIds[1]);
4552
});

dev-packages/cloudflare-integration-tests/suites/tracing/worker-service-binding/wrangler-sub-worker.jsonc

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33
"main": "index-sub-worker.ts",
44
"compatibility_date": "2025-06-17",
55
"compatibility_flags": ["nodejs_als"],
6-
"migrations": [
7-
{
8-
"new_sqlite_classes": ["MyServiceBinding"],
9-
"tag": "v1",
10-
},
11-
],
126
"vars": {
137
"SENTRY_DSN": "https://932e620ee3921c3b4a61c72558ad88ce@o447951.ingest.us.sentry.io/4509553159831552",
148
},

dev-packages/cloudflare-integration-tests/suites/tracing/worker-service-binding/wrangler.jsonc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "cloudflare-durable-objects",
2+
"name": "cloudflare-service-binding-worker",
33
"main": "index.ts",
44
"compatibility_date": "2025-06-17",
55
"compatibility_flags": ["nodejs_als"],

0 commit comments

Comments
 (0)