Skip to content

Commit 84e3a4a

Browse files
committed
add failing test case
1 parent b64b448 commit 84e3a4a

File tree

1 file changed

+61
-0
lines changed
  • internal-packages/run-engine/src/run-queue/tests

1 file changed

+61
-0
lines changed

internal-packages/run-engine/src/run-queue/tests/nack.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,65 @@ describe("RunQueue.nackMessage", () => {
214214
}
215215
}
216216
);
217+
218+
redisTest(
219+
"nacking a message with retryAt sets the correct requeue time",
220+
async ({ redisContainer }) => {
221+
const queue = new RunQueue({
222+
...testOptions,
223+
queueSelectionStrategy: new FairQueueSelectionStrategy({
224+
redis: {
225+
keyPrefix: "runqueue:test:",
226+
host: redisContainer.getHost(),
227+
port: redisContainer.getPort(),
228+
},
229+
keys: testOptions.keys,
230+
}),
231+
redis: {
232+
keyPrefix: "runqueue:test:",
233+
host: redisContainer.getHost(),
234+
port: redisContainer.getPort(),
235+
},
236+
});
237+
238+
try {
239+
const envMasterQueue = `env:${authenticatedEnvDev.id}`;
240+
241+
// Enqueue message
242+
await queue.enqueueMessage({
243+
env: authenticatedEnvDev,
244+
message: messageDev,
245+
masterQueues: ["main", envMasterQueue],
246+
});
247+
248+
// Dequeue message
249+
const dequeued = await queue.dequeueMessageFromMasterQueue(
250+
"test_12345",
251+
envMasterQueue,
252+
10
253+
);
254+
expect(dequeued.length).toBe(1);
255+
256+
// Set retryAt to 5 seconds in the future
257+
const retryAt = Date.now() + 5000;
258+
await queue.nackMessage({
259+
orgId: messageDev.orgId,
260+
messageId: messageDev.runId,
261+
retryAt,
262+
});
263+
264+
// Check the score of the message in the queue
265+
const queueKey = queue.keys.queueKey(authenticatedEnvDev, messageDev.queue);
266+
const score = await queue.oldestMessageInQueue(authenticatedEnvDev, messageDev.queue);
267+
expect(typeof score).toBe("number");
268+
if (typeof score !== "number") {
269+
throw new Error("Expected score to be a number, but got undefined");
270+
}
271+
// Should be within 100ms of retryAt
272+
expect(Math.abs(score - retryAt)).toBeLessThanOrEqual(100);
273+
} finally {
274+
await queue.quit();
275+
}
276+
}
277+
);
217278
});

0 commit comments

Comments
 (0)