Skip to content

Commit 85d456e

Browse files
committed
Add a couple tests
1 parent 4150bc5 commit 85d456e

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed

internal-packages/run-engine/src/engine/tests/trigger.test.ts

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,4 +328,203 @@ describe("RunEngine trigger()", () => {
328328
await engine.quit();
329329
}
330330
});
331+
332+
containerTest("Annotations are stored on the run", async ({ prisma, redisOptions }) => {
333+
const authenticatedEnvironment = await setupAuthenticatedEnvironment(prisma, "PRODUCTION");
334+
335+
const engine = new RunEngine({
336+
prisma,
337+
worker: {
338+
redis: redisOptions,
339+
workers: 1,
340+
tasksPerWorker: 10,
341+
pollIntervalMs: 100,
342+
},
343+
queue: {
344+
redis: redisOptions,
345+
masterQueueConsumersDisabled: true,
346+
processWorkerQueueDebounceMs: 50,
347+
},
348+
runLock: { redis: redisOptions },
349+
machines: {
350+
defaultMachine: "small-1x",
351+
machines: {
352+
"small-1x": { name: "small-1x" as const, cpu: 0.5, memory: 0.5, centsPerMs: 0.0001 },
353+
},
354+
baseCostInCents: 0.0001,
355+
},
356+
tracer: trace.getTracer("test", "0.0.0"),
357+
});
358+
359+
try {
360+
const taskIdentifier = "test-task";
361+
await setupBackgroundWorker(engine, authenticatedEnvironment, taskIdentifier);
362+
363+
const run = await engine.trigger(
364+
{
365+
number: 1,
366+
friendlyId: "run_ann1234",
367+
environment: authenticatedEnvironment,
368+
taskIdentifier,
369+
payload: "{}",
370+
payloadType: "application/json",
371+
context: {},
372+
traceContext: {},
373+
traceId: "t12345",
374+
spanId: "s12345",
375+
workerQueue: "main",
376+
queue: `task/${taskIdentifier}`,
377+
isTest: false,
378+
tags: [],
379+
annotations: {
380+
triggerSource: "schedule",
381+
triggerAction: "trigger",
382+
rootTriggerSource: "schedule",
383+
rootScheduleId: "sched_abc123",
384+
},
385+
},
386+
prisma
387+
);
388+
389+
const runFromDb = await prisma.taskRun.findUnique({
390+
where: { id: run.id },
391+
});
392+
393+
expect(runFromDb).toBeDefined();
394+
expect(runFromDb?.annotations).toEqual({
395+
triggerSource: "schedule",
396+
triggerAction: "trigger",
397+
rootTriggerSource: "schedule",
398+
rootScheduleId: "sched_abc123",
399+
});
400+
} finally {
401+
await engine.quit();
402+
}
403+
});
404+
405+
containerTest(
406+
"Annotations propagation pattern (parent → child)",
407+
async ({ prisma, redisOptions }) => {
408+
const authenticatedEnvironment = await setupAuthenticatedEnvironment(prisma, "PRODUCTION");
409+
410+
const engine = new RunEngine({
411+
prisma,
412+
worker: {
413+
redis: redisOptions,
414+
workers: 1,
415+
tasksPerWorker: 10,
416+
pollIntervalMs: 100,
417+
},
418+
queue: {
419+
redis: redisOptions,
420+
masterQueueConsumersDisabled: true,
421+
processWorkerQueueDebounceMs: 50,
422+
},
423+
runLock: { redis: redisOptions },
424+
machines: {
425+
defaultMachine: "small-1x",
426+
machines: {
427+
"small-1x": {
428+
name: "small-1x" as const,
429+
cpu: 0.5,
430+
memory: 0.5,
431+
centsPerMs: 0.0001,
432+
},
433+
},
434+
baseCostInCents: 0.0001,
435+
},
436+
tracer: trace.getTracer("test", "0.0.0"),
437+
});
438+
439+
try {
440+
const parentTask = "parent-task";
441+
const childTask = "child-task";
442+
await setupBackgroundWorker(engine, authenticatedEnvironment, [parentTask, childTask]);
443+
444+
// Trigger parent with schedule annotations
445+
const parentRun = await engine.trigger(
446+
{
447+
number: 1,
448+
friendlyId: "run_p1234ann",
449+
environment: authenticatedEnvironment,
450+
taskIdentifier: parentTask,
451+
payload: "{}",
452+
payloadType: "application/json",
453+
context: {},
454+
traceContext: {},
455+
traceId: "t12345",
456+
spanId: "s12345",
457+
workerQueue: "main",
458+
queue: `task/${parentTask}`,
459+
isTest: false,
460+
tags: [],
461+
annotations: {
462+
triggerSource: "schedule",
463+
triggerAction: "trigger",
464+
rootTriggerSource: "schedule",
465+
rootScheduleId: "sched_abc123",
466+
},
467+
},
468+
prisma
469+
);
470+
471+
// Trigger child — simulating what RunEngineTriggerTaskService builds:
472+
// triggerSource is "sdk" (child triggered from within parent),
473+
// but rootTriggerSource and rootScheduleId are propagated from parent
474+
const childRun = await engine.trigger(
475+
{
476+
number: 2,
477+
friendlyId: "run_c1234ann",
478+
environment: authenticatedEnvironment,
479+
taskIdentifier: childTask,
480+
payload: "{}",
481+
payloadType: "application/json",
482+
context: {},
483+
traceContext: {},
484+
traceId: "t12345",
485+
spanId: "s12346",
486+
workerQueue: "main",
487+
queue: `task/${childTask}`,
488+
isTest: false,
489+
tags: [],
490+
parentTaskRunId: parentRun.id,
491+
resumeParentOnCompletion: true,
492+
annotations: {
493+
triggerSource: "sdk",
494+
triggerAction: "trigger",
495+
rootTriggerSource: "schedule",
496+
rootScheduleId: "sched_abc123",
497+
},
498+
},
499+
prisma
500+
);
501+
502+
const parentFromDb = await prisma.taskRun.findUnique({
503+
where: { id: parentRun.id },
504+
});
505+
const childFromDb = await prisma.taskRun.findUnique({
506+
where: { id: childRun.id },
507+
});
508+
509+
// Parent: schedule-triggered
510+
expect(parentFromDb?.annotations).toEqual({
511+
triggerSource: "schedule",
512+
triggerAction: "trigger",
513+
rootTriggerSource: "schedule",
514+
rootScheduleId: "sched_abc123",
515+
});
516+
517+
// Child: sdk-triggered but root is still schedule
518+
expect(childFromDb?.annotations).toEqual({
519+
triggerSource: "sdk",
520+
triggerAction: "trigger",
521+
rootTriggerSource: "schedule",
522+
rootScheduleId: "sched_abc123",
523+
});
524+
} finally {
525+
await engine.quit();
526+
}
527+
}
528+
);
529+
331530
});

0 commit comments

Comments
 (0)