task-write-stress.test.mjs
146 lines 4.6 KB
Raw
sha256:b5f647cb9c409f563d4671fe3fc05ddea01fabfed9b41fc11cb923588e1c1baf mirror: GitHub Phase A durable MCP OAuth (#270) Human minor ⚠ breaking 10 days ago
1 /**
2 * Tier 4 — STRESS: concurrent materialize proposals; cancel cascade scale.
3 */
4 import { describe, it, beforeEach, afterEach } from 'node:test';
5 import assert from 'node:assert/strict';
6 import fs from 'node:fs';
7 import path from 'node:path';
8 import { fileURLToPath } from 'node:url';
9
10 import {
11 handleTaskLoopProposeRequest,
12 handleTaskInstanceMaterializeRequest,
13 loopStateId,
14 } from '../lib/task/task-write.mjs';
15 import { getTaskLoop, taskLoopForClient } from '../lib/task/task-loop-store.mjs';
16 import { createProposal } from '../hub/proposals-store.mjs';
17 import {
18 approveTaskProposal,
19 emptyTaskStarterDir,
20 sampleLoopCreatePayload,
21 visibleAll,
22 } from './fixtures/task/write-helpers.mjs';
23
24 const __dirname = path.dirname(fileURLToPath(import.meta.url));
25 const tmpRoot = path.join(__dirname, 'fixtures', 'tmp-task-write-stress');
26
27 describe('task write — stress', () => {
28 const dataDir = path.join(tmpRoot, 'data');
29 const vaultId = 'default';
30 let starterDir;
31
32 beforeEach(() => {
33 fs.rmSync(tmpRoot, { recursive: true, force: true });
34 fs.mkdirSync(dataDir, { recursive: true });
35 starterDir = emptyTaskStarterDir(dataDir);
36 process.env.TASK_WRITES_ENABLED = '1';
37 });
38 afterEach(() => {
39 delete process.env.TASK_WRITES_ENABLED;
40 });
41
42 it('100 concurrent materialize proposals — one wins per occurrence_key', async () => {
43 const payload = sampleLoopCreatePayload();
44 payload.loop.loop_id = 'loop_stress_mat';
45 approveTaskProposal(
46 dataDir,
47 (await handleTaskLoopProposeRequest({
48 dataDir,
49 vaultId,
50 visibleScopes: visibleAll,
51 proposalKind: 'task_loop_create',
52 body: payload,
53 intent: 'create',
54 starterDir,
55 createProposal,
56 })).payload.proposal_id,
57 );
58
59 const loop = getTaskLoop(dataDir, vaultId, 'loop_stress_mat', { visibleScopes: visibleAll, starterDir });
60 const baseStateId = loopStateId(taskLoopForClient(loop));
61
62 const results = await Promise.all(
63 Array.from({ length: 100 }, () =>
64 handleTaskInstanceMaterializeRequest({
65 dataDir,
66 vaultId,
67 visibleScopes: visibleAll,
68 loopId: 'loop_stress_mat',
69 body: {
70 loop_id: 'loop_stress_mat',
71 occurrence_key: '2026-W99',
72 base_state_id: baseStateId,
73 },
74 intent: 'race',
75 starterDir,
76 createProposal,
77 }),
78 ),
79 );
80
81 const okCount = results.filter((r) => r.ok).length;
82 assert.equal(okCount, 100, 'propose does not mutate store — all proposes succeed');
83 });
84
85 it('cancel cascade handles many pending instances in one pass', async () => {
86 const payload = sampleLoopCreatePayload();
87 payload.loop.loop_id = 'loop_stress_cancel';
88 approveTaskProposal(
89 dataDir,
90 (await handleTaskLoopProposeRequest({
91 dataDir,
92 vaultId,
93 visibleScopes: visibleAll,
94 proposalKind: 'task_loop_create',
95 body: payload,
96 intent: 'create',
97 starterDir,
98 createProposal,
99 })).payload.proposal_id,
100 );
101
102 let loop = getTaskLoop(dataDir, vaultId, 'loop_stress_cancel', { visibleScopes: visibleAll, starterDir });
103 let baseStateId = loopStateId(taskLoopForClient(loop));
104
105 for (let i = 0; i < 50; i += 1) {
106 const mat = await handleTaskInstanceMaterializeRequest({
107 dataDir,
108 vaultId,
109 visibleScopes: visibleAll,
110 loopId: 'loop_stress_cancel',
111 body: {
112 loop_id: 'loop_stress_cancel',
113 occurrence_key: `2026-W${String(i).padStart(2, '0')}`,
114 base_state_id: baseStateId,
115 },
116 intent: 'spawn',
117 starterDir,
118 createProposal,
119 });
120 approveTaskProposal(dataDir, mat.payload.proposal_id);
121 loop = getTaskLoop(dataDir, vaultId, 'loop_stress_cancel', { visibleScopes: visibleAll, starterDir });
122 baseStateId = loopStateId(taskLoopForClient(loop));
123 }
124
125 loop = getTaskLoop(dataDir, vaultId, 'loop_stress_cancel', { visibleScopes: visibleAll, starterDir });
126 baseStateId = loopStateId(taskLoopForClient(loop));
127
128 const cancelRes = await handleTaskLoopProposeRequest({
129 dataDir,
130 vaultId,
131 visibleScopes: visibleAll,
132 proposalKind: 'task_loop_cancel',
133 body: {
134 proposal_kind: 'task_loop_cancel',
135 loop_id: 'loop_stress_cancel',
136 base_state_id: baseStateId,
137 },
138 intent: 'cancel',
139 starterDir,
140 createProposal,
141 });
142 const approved = approveTaskProposal(dataDir, cancelRes.payload.proposal_id);
143 assert.equal(approved.ok, true);
144 assert.equal(approved.pre.proposalKind, 'task_loop_cancel');
145 });
146 });
File History 1 commit
sha256:b5f647cb9c409f563d4671fe3fc05ddea01fabfed9b41fc11cb923588e1c1baf mirror: GitHub Phase A durable MCP OAuth (#270) Human minor 10 days ago