Skip to content

Commit 3544bfe

Browse files
add test to verify update with start behavior
1 parent dad213a commit 3544bfe

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

packages/test/src/test-otel.ts

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '
1212
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
1313
import test from 'ava';
1414
import { v4 as uuid4 } from 'uuid';
15-
import { WorkflowClient } from '@temporalio/client';
15+
import { WorkflowClient, WithStartWorkflowOperation } from '@temporalio/client';
1616
import { OpenTelemetryWorkflowClientInterceptor } from '@temporalio/interceptors-opentelemetry/lib/client';
1717
import { OpenTelemetryWorkflowClientCallsInterceptor } from '@temporalio/interceptors-opentelemetry';
1818
import { instrument } from '@temporalio/interceptors-opentelemetry/lib/instrumentation';
@@ -510,6 +510,61 @@ if (RUN_INTEGRATION_TESTS) {
510510
t.is(spans[1].status.message, 'benign');
511511
t.is(spans[2].status.code, SpanStatusCode.OK);
512512
});
513+
514+
test('executeUpdateWithStart works correctly with OTEL interceptors', async (t) => {
515+
const staticResource = new opentelemetry.resources.Resource({
516+
[SemanticResourceAttributes.SERVICE_NAME]: 'ts-test-otel-worker',
517+
});
518+
const traceExporter: opentelemetry.tracing.SpanExporter = {
519+
export(_spans, resultCallback) {
520+
resultCallback({ code: ExportResultCode.SUCCESS });
521+
},
522+
async shutdown() {},
523+
};
524+
525+
const sinks: InjectedSinks<OpenTelemetrySinks> = {
526+
exporter: makeWorkflowExporter(traceExporter, staticResource),
527+
};
528+
529+
const worker = await Worker.create({
530+
workflowBundle: await createTestWorkflowBundle({
531+
workflowsPath: require.resolve('./workflows'),
532+
workflowInterceptorModules: [require.resolve('./workflows/otel-interceptors')],
533+
}),
534+
activities,
535+
taskQueue: 'test-otel-update-start',
536+
interceptors: {
537+
client: {
538+
workflow: [new OpenTelemetryWorkflowClientCallsInterceptor()],
539+
},
540+
workflowModules: [require.resolve('./workflows/otel-interceptors')],
541+
},
542+
sinks,
543+
});
544+
545+
const client = new WorkflowClient();
546+
547+
const startWorkflowOperation = new WithStartWorkflowOperation(workflows.updateStartOtel, {
548+
workflowId: uuid4(),
549+
taskQueue: 'test-otel-update-start',
550+
workflowIdConflictPolicy: 'FAIL',
551+
});
552+
553+
const { updateResult, workflowResult } = await worker.runUntil(async () => {
554+
const updateResult = await client.executeUpdateWithStart(workflows.otelUpdate, {
555+
args: [true],
556+
startWorkflowOperation,
557+
});
558+
559+
const handle = await startWorkflowOperation.workflowHandle();
560+
const workflowResult = await handle.result();
561+
562+
return { updateResult, workflowResult };
563+
});
564+
565+
t.is(updateResult, true);
566+
t.is(workflowResult, true);
567+
});
513568
}
514569

515570
test('Can replay otel history from 1.11.3', async (t) => {

packages/test/src/workflows/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@ export * from './upsert-and-read-search-attributes';
9393
export * from './wait-on-user';
9494
export * from './workflow-cancellation-scenarios';
9595
export * from './upsert-and-read-memo';
96+
export * from './update-start-otel';
9697
export * from './updates-ordering';
9798
export * from './wait-on-signal-then-activity';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import * as workflow from '@temporalio/workflow';
2+
3+
export const otelUpdate = workflow.defineUpdate<boolean, [boolean]>('otelUpdate');
4+
5+
export async function updateStartOtel(): Promise<boolean> {
6+
let updateResult = false;
7+
workflow.setHandler(otelUpdate, (value: boolean): boolean => {
8+
updateResult = value;
9+
return true;
10+
});
11+
return updateResult;
12+
}

0 commit comments

Comments
 (0)