@fedify/fedify
Version:
An ActivityPub server framework
44 lines (40 loc) • 1.68 kB
JavaScript
import { Temporal } from "@js-temporal/polyfill";
import { URLPattern } from "urlpattern-polyfill";
globalThis.addEventListener = () => {};
import { AssertionError, assertEquals } from "../assert_equals-CTYbeopb.js";
import { createExponentialBackoffPolicy } from "../retry-BiIhZWgD.js";
import { test } from "../testing-BZ0dJ4qn.js";
import { assertNotEquals } from "../assert_not_equals-Dc7y-V5Q.js";
//#region federation/retry.test.ts
test("createExponentialBackoffPolicy()", () => {
const policy = createExponentialBackoffPolicy({ maxAttempts: 4 });
const noMatter = Temporal.Duration.from({ seconds: 0 });
for (let i = 0; i < 10; i++) assertDurationRange(policy({
elapsedTime: noMatter,
attempts: 0
}), { seconds: 1 }, { seconds: 2 });
for (let i = 0; i < 10; i++) assertDurationRange(policy({
elapsedTime: noMatter,
attempts: 1
}), { seconds: 2 }, { seconds: 4 });
for (let i = 0; i < 10; i++) assertDurationRange(policy({
elapsedTime: noMatter,
attempts: 2
}), { seconds: 4 }, { seconds: 8 });
for (let i = 0; i < 10; i++) assertDurationRange(policy({
elapsedTime: noMatter,
attempts: 3
}), { seconds: 8 }, { seconds: 16 });
assertEquals(policy({
elapsedTime: noMatter,
attempts: 4
}), null);
});
function assertDurationRange(actual, min, max) {
assertNotEquals(actual, null);
if (actual == null) return;
const minDuration = Temporal.Duration.from(min);
const maxDuration = Temporal.Duration.from(max);
if (Temporal.Duration.compare(actual, minDuration) < 0 || Temporal.Duration.compare(actual, maxDuration) > 0) throw new AssertionError(`Expected ${actual} to be between ${min} and ${max}`);
}
//#endregion