Skip to content

Commit f57f23d

Browse files
add test for 1.13.1 replay
1 parent 15b68ba commit f57f23d

File tree

3 files changed

+299
-18
lines changed

3 files changed

+299
-18
lines changed

packages/test/history_files/otel_1_11_3.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
2
9292
],
9393
"sdkName": "temporal-typescript",
94-
"sdkVersion": "1.13.1"
94+
"sdkVersion": "1.11.3"
9595
},
9696
"meteringMetadata": {}
9797
}
@@ -212,4 +212,4 @@
212212
}
213213
}
214214
]
215-
}
215+
}
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
{
2+
"events": [
3+
{
4+
"eventId": "1",
5+
"eventTime": "2025-10-17T15:54:19.338328Z",
6+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED",
7+
"taskId": "1049155",
8+
"workflowExecutionStartedEventAttributes": {
9+
"workflowType": {
10+
"name": "signalStartOtel"
11+
},
12+
"taskQueue": {
13+
"name": "test-otel-inbound-curr",
14+
"kind": "TASK_QUEUE_KIND_NORMAL"
15+
},
16+
"input": {},
17+
"workflowTaskTimeout": "10s",
18+
"originalExecutionRunId": "e4d113d2-d2ab-4220-8ccf-26d89f8f48b2",
19+
"identity": "1661@mac.lan",
20+
"firstExecutionRunId": "e4d113d2-d2ab-4220-8ccf-26d89f8f48b2",
21+
"attempt": 1,
22+
"firstWorkflowTaskBackoff": "0s",
23+
"header": {
24+
"fields": {}
25+
},
26+
"workflowId": "c62cec51-d338-4d7b-a973-7663de797b3f"
27+
}
28+
},
29+
{
30+
"eventId": "2",
31+
"eventTime": "2025-10-17T15:54:19.338361Z",
32+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED",
33+
"taskId": "1049156",
34+
"workflowExecutionSignaledEventAttributes": {
35+
"signalName": "startSignal",
36+
"input": {},
37+
"identity": "1661@mac.lan",
38+
"header": {
39+
"fields": {}
40+
}
41+
}
42+
},
43+
{
44+
"eventId": "3",
45+
"eventTime": "2025-10-17T15:54:19.338363Z",
46+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED",
47+
"taskId": "1049157",
48+
"workflowTaskScheduledEventAttributes": {
49+
"taskQueue": {
50+
"name": "test-otel-inbound-curr",
51+
"kind": "TASK_QUEUE_KIND_NORMAL"
52+
},
53+
"startToCloseTimeout": "10s",
54+
"attempt": 1
55+
}
56+
},
57+
{
58+
"eventId": "4",
59+
"eventTime": "2025-10-17T15:54:19.339448Z",
60+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED",
61+
"taskId": "1049161",
62+
"workflowTaskStartedEventAttributes": {
63+
"scheduledEventId": "3",
64+
"identity": "1661@mac.lan",
65+
"requestId": "eed21ba4-1b61-48a5-a3a2-37e633ef2e35",
66+
"historySizeBytes": "338",
67+
"workerVersion": {
68+
"buildId": "@temporalio/worker@1.13.1+5c835f0ea50dafc7b77a54f34f9a8ec6e81e5e2f7a7cff91c2c52e956e689243"
69+
}
70+
}
71+
},
72+
{
73+
"eventId": "5",
74+
"eventTime": "2025-10-17T15:54:19.375411Z",
75+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED",
76+
"taskId": "1049165",
77+
"workflowTaskCompletedEventAttributes": {
78+
"scheduledEventId": "3",
79+
"startedEventId": "4",
80+
"identity": "1661@mac.lan",
81+
"workerVersion": {
82+
"buildId": "@temporalio/worker@1.13.1+5c835f0ea50dafc7b77a54f34f9a8ec6e81e5e2f7a7cff91c2c52e956e689243"
83+
},
84+
"sdkMetadata": {
85+
"coreUsedFlags": [
86+
2,
87+
3,
88+
1
89+
],
90+
"langUsedFlags": [
91+
2
92+
],
93+
"sdkName": "temporal-typescript",
94+
"sdkVersion": "1.13.1"
95+
},
96+
"meteringMetadata": {}
97+
}
98+
},
99+
{
100+
"eventId": "6",
101+
"eventTime": "2025-10-17T15:54:19.375433Z",
102+
"eventType": "EVENT_TYPE_MARKER_RECORDED",
103+
"taskId": "1049166",
104+
"markerRecordedEventAttributes": {
105+
"details": {
106+
"result": {
107+
"payloads": [
108+
{
109+
"metadata": {
110+
"encoding": "anNvbi9wbGFpbg=="
111+
},
112+
"data": "ImEi"
113+
}
114+
]
115+
},
116+
"data": {
117+
"payloads": [
118+
{
119+
"metadata": {
120+
"encoding": "anNvbi9wbGFpbg=="
121+
},
122+
"data": "eyJzZXEiOjEsImF0dGVtcHQiOjEsImFjdGl2aXR5X2lkIjoiMSIsImFjdGl2aXR5X3R5cGUiOiJhIiwiY29tcGxldGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzQwMzQ0MTY2fSwiYmFja29mZiI6bnVsbCwib3JpZ2luYWxfc2NoZWR1bGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzY1OTMwMDAwfX0="
123+
}
124+
]
125+
}
126+
},
127+
"markerName": "core_local_activity",
128+
"workflowTaskCompletedEventId": "5"
129+
}
130+
},
131+
{
132+
"eventId": "7",
133+
"eventTime": "2025-10-17T15:54:19.375435Z",
134+
"eventType": "EVENT_TYPE_MARKER_RECORDED",
135+
"taskId": "1049167",
136+
"markerRecordedEventAttributes": {
137+
"details": {
138+
"data": {
139+
"payloads": [
140+
{
141+
"metadata": {
142+
"encoding": "anNvbi9wbGFpbg=="
143+
},
144+
"data": "eyJzZXEiOjIsImF0dGVtcHQiOjEsImFjdGl2aXR5X2lkIjoiMiIsImFjdGl2aXR5X3R5cGUiOiJjIiwiY29tcGxldGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzQwODY5MTY2fSwiYmFja29mZiI6bnVsbCwib3JpZ2luYWxfc2NoZWR1bGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzcxNTI1MDAwfX0="
145+
}
146+
]
147+
},
148+
"result": {
149+
"payloads": [
150+
{
151+
"metadata": {
152+
"encoding": "anNvbi9wbGFpbg=="
153+
},
154+
"data": "ImMi"
155+
}
156+
]
157+
}
158+
},
159+
"markerName": "core_local_activity",
160+
"workflowTaskCompletedEventId": "5"
161+
}
162+
},
163+
{
164+
"eventId": "8",
165+
"eventTime": "2025-10-17T15:54:19.375440Z",
166+
"eventType": "EVENT_TYPE_MARKER_RECORDED",
167+
"taskId": "1049168",
168+
"markerRecordedEventAttributes": {
169+
"details": {
170+
"data": {
171+
"payloads": [
172+
{
173+
"metadata": {
174+
"encoding": "anNvbi9wbGFpbg=="
175+
},
176+
"data": "eyJzZXEiOjMsImF0dGVtcHQiOjEsImFjdGl2aXR5X2lkIjoiMyIsImFjdGl2aXR5X3R5cGUiOiJiIiwiY29tcGxldGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzQxMjEzODc0fSwiYmFja29mZiI6bnVsbCwib3JpZ2luYWxfc2NoZWR1bGVfdGltZSI6eyJzZWNvbmRzIjoxNzYwNzE2NDU5LCJuYW5vcyI6MzcxNTM4MDAwfX0="
177+
}
178+
]
179+
},
180+
"result": {
181+
"payloads": [
182+
{
183+
"metadata": {
184+
"encoding": "anNvbi9wbGFpbg=="
185+
},
186+
"data": "ImIi"
187+
}
188+
]
189+
}
190+
},
191+
"markerName": "core_local_activity",
192+
"workflowTaskCompletedEventId": "5"
193+
}
194+
},
195+
{
196+
"eventId": "9",
197+
"eventTime": "2025-10-17T15:54:19.375444Z",
198+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED",
199+
"taskId": "1049169",
200+
"workflowExecutionCompletedEventAttributes": {
201+
"result": {
202+
"payloads": [
203+
{
204+
"metadata": {
205+
"encoding": "anNvbi9wbGFpbg=="
206+
},
207+
"data": "ImFjIg=="
208+
}
209+
]
210+
},
211+
"workflowTaskCompletedEventId": "5"
212+
}
213+
}
214+
]
215+
}

packages/test/src/test-otel.ts

Lines changed: 82 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -558,23 +558,89 @@ test('Can replay otel history from 1.11.3', async (t) => {
558558
*/
559559

560560
const hist = await loadHistory('otel_1_11_3.json');
561-
Worker.runReplayHistory(
562-
{
563-
workflowBundle: await createTestWorkflowBundle({
564-
workflowsPath: require.resolve('./workflows/signal-start-otel'),
565-
workflowInterceptorModules: [require.resolve('./workflows/signal-start-otel')],
566-
}),
567-
interceptors: {
568-
workflowModules: [require.resolve('./workflows/otel-interceptors')],
569-
activity: [
570-
(ctx) => ({
571-
inbound: new OpenTelemetryActivityInboundInterceptor(ctx),
572-
}),
573-
],
561+
await t.notThrowsAsync(async () => {
562+
await Worker.runReplayHistory(
563+
{
564+
workflowBundle: await createTestWorkflowBundle({
565+
workflowsPath: require.resolve('./workflows/signal-start-otel'),
566+
workflowInterceptorModules: [require.resolve('./workflows/signal-start-otel')],
567+
}),
568+
interceptors: {
569+
workflowModules: [require.resolve('./workflows/otel-interceptors')],
570+
activity: [
571+
(ctx) => ({
572+
inbound: new OpenTelemetryActivityInboundInterceptor(ctx),
573+
}),
574+
],
575+
},
574576
},
575-
},
576-
hist
577-
);
577+
hist
578+
);
579+
});
578580
// t.is('abc', result);
579581
t.pass();
580582
});
583+
584+
test('Can replay otel history from 1.13.1', async (t) => {
585+
const staticResource = new opentelemetry.resources.Resource({
586+
[SemanticResourceAttributes.SERVICE_NAME]: 'ts-test-otel-worker',
587+
});
588+
const worker = await Worker.create({
589+
workflowsPath: require.resolve('./workflows/signal-start-otel'),
590+
activities: {
591+
a: async () => 'a',
592+
b: async () => 'b',
593+
c: async () => 'c',
594+
},
595+
taskQueue: 'test-otel-inbound-curr',
596+
sinks: {
597+
exporter: makeWorkflowExporter(new InMemorySpanExporter(), staticResource),
598+
},
599+
interceptors: {
600+
workflowModules: [require.resolve('./workflows/signal-start-otel')],
601+
activity: [
602+
(ctx) => ({
603+
inbound: new OpenTelemetryActivityInboundInterceptor(ctx),
604+
}),
605+
],
606+
},
607+
});
608+
const client = new WorkflowClient();
609+
610+
/*
611+
const result = await worker.runUntil(async () => {
612+
const handle = await client.signalWithStart(workflows.signalStartOtel, {
613+
signal: workflows.startSignal,
614+
taskQueue: 'test-otel-inbound-curr',
615+
workflowId: uuid4(),
616+
});
617+
const result = await handle.result();
618+
const history = await handle.fetchHistory();
619+
await saveHistory('otel_1_13_1.json', history);
620+
return result;
621+
});
622+
*/
623+
624+
const hist = await loadHistory('otel_1_13_1.json');
625+
await t.notThrowsAsync(async () => {
626+
await Worker.runReplayHistory(
627+
{
628+
workflowBundle: await createTestWorkflowBundle({
629+
workflowsPath: require.resolve('./workflows/signal-start-otel'),
630+
workflowInterceptorModules: [require.resolve('./workflows/signal-start-otel')],
631+
}),
632+
interceptors: {
633+
workflowModules: [require.resolve('./workflows/otel-interceptors')],
634+
activity: [
635+
(ctx) => ({
636+
inbound: new OpenTelemetryActivityInboundInterceptor(ctx),
637+
}),
638+
],
639+
},
640+
},
641+
hist
642+
);
643+
});
644+
// t.is('ac', result);
645+
t.pass();
646+
});

0 commit comments

Comments
 (0)