Skip to content

Commit 806f43d

Browse files
authored
Merge PR #2951: test(worker): guard in-memory buffer reclaim
2 parents ecd8047 + 77ece8d commit 806f43d

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

tests/services/worker/session-message-buffer.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,36 @@ describe('SessionMessageBuffer (in-RAM observation buffer)', () => {
7272
expect(second.map(m => m.tool_name)).toEqual(['Write']);
7373
});
7474

75+
test('resetClaimed re-yields an in-flight message without a durable processing row', async () => {
76+
const buffer = new SessionMessageBuffer();
77+
const controller = new AbortController();
78+
const iterator = buffer.drain({
79+
sessionDbId: 1,
80+
signal: controller.signal,
81+
idleTimeoutMs: 10_000,
82+
});
83+
84+
const messageId = buffer.enqueue(1, obs('Read', 'tool-1'));
85+
86+
const first = await iterator.next();
87+
expect(first.done).toBe(false);
88+
expect(first.value._persistentId).toBe(messageId);
89+
expect(first.value.toolUseId).toBe('tool-1');
90+
expect(buffer.getPendingCount(1)).toBe(1);
91+
92+
expect(buffer.resetClaimed(1)).toBe(1);
93+
94+
const second = await iterator.next();
95+
expect(second.done).toBe(false);
96+
expect(second.value._persistentId).toBe(messageId);
97+
expect(second.value.toolUseId).toBe('tool-1');
98+
99+
expect(buffer.confirm(messageId)).toBe(1);
100+
expect(buffer.getPendingCount(1)).toBe(0);
101+
102+
controller.abort();
103+
});
104+
75105
test('clear empties a session; dispose forgets it', () => {
76106
const buffer = new SessionMessageBuffer();
77107
buffer.enqueue(1, obs('Read', 'a'));

0 commit comments

Comments
 (0)