lct-hack/frontend/scripts/test-dds-ack.mjs

33 lines
2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import assert from "node:assert/strict";
import { ackDeadline } from "../src/pages/dds/ack.mjs";
const queueCard = (overrides) => ({ card_id: "c1", elapsed_ms: 12_000, limit_ms: 45_000,
timer_stopped: false, active: true, ...overrides });
const ackTimer = (overrides) => ({ code: "dds_ack", elapsed_ms: 12_000, limit_ms: 45_000,
state: "ok", stopped: false, ...overrides });
assert.equal(ackDeadline([], []), null, "до передачи карточки отсчёта нет");
assert.deepEqual(ackDeadline([], [queueCard({ active: false }), queueCard({ card_id: "c2", elapsed_ms: 3_000 })]),
{ elapsedMs: 3_000, limitMs: 45_000, violated: false },
"срок берётся у активной карточки очереди, а не у первой");
assert.deepEqual(ackDeadline([ackTimer({ elapsed_ms: 99_000, limit_ms: 30_000 })], [queueCard()]),
{ elapsedMs: 12_000, limitMs: 45_000, violated: false },
"снимок активной карточки важнее timer.tick, который мог остаться от прошлой карточки");
assert.deepEqual(ackDeadline([ackTimer()], []),
{ elapsedMs: 12_000, limitMs: 45_000, violated: false },
"без очереди (передача из 112) — таймер dds_ack из timer.tick");
assert.equal(ackDeadline([ackTimer({ elapsed_ms: 45_000 })], []).violated, false,
"ровно на лимите нарушения нет — как state_for на сервере");
assert.equal(ackDeadline([ackTimer({ elapsed_ms: 45_001 })], []).violated, true);
assert.equal(ackDeadline([], [queueCard({ elapsed_ms: 45_001 })]).violated, true);
assert.equal(ackDeadline([ackTimer({ stopped: true })], []), null, "сервер остановил таймер — отсчёт скрыт");
assert.equal(ackDeadline([ackTimer()], [queueCard({ timer_stopped: true })]), null);
assert.equal(ackDeadline([ackTimer({ code: "dds_work" })], []), null, "чужой таймер не подменяет dds_ack");
console.log("DDS ack deadline follows server snapshots: limit, violation and stop.");