llm-mock
Version:
Enterprise-grade LLM mock server for local and CI: scenarios, faults, latency, contracts, VCR. Supports standalone server and Express middleware.
63 lines (51 loc) • 1.65 kB
JavaScript
import test from "node:test";
import assert from "node:assert/strict";
import { applyEnvOverrides, mulberry32, hash32, sleep, newId } from "../src/util.js";
test("applyEnvOverrides sets env-related fields and server.port", () => {
const cfg = {};
const out = applyEnvOverrides(cfg, {
env: "test",
seed: 123,
testTag: "unit",
port: 7777,
useScenario: "demo",
});
assert.equal(out.env, "test");
assert.equal(out.seed, 123);
assert.equal(out.testTag, "unit");
assert.equal(out.useScenario, "demo");
assert.ok(out.server);
assert.equal(out.server.port, 7777);
});
test("mulberry32 produces deterministic sequence per seed", () => {
const r1a = mulberry32(42);
const r1b = mulberry32(42);
const seq1 = [r1a(), r1a(), r1a()];
const seq2 = [r1b(), r1b(), r1b()];
assert.deepEqual(seq1, seq2);
for (const v of seq1) {
assert.ok(v >= 0 && v <= 1);
}
});
test("hash32 is stable for same input and differs for different input", () => {
const a1 = hash32("hello");
const a2 = hash32("hello");
const b = hash32("world");
assert.equal(a1, a2);
assert.notEqual(a1, b);
assert.ok(Number.isInteger(a1));
});
test("sleep resolves after at least given time", async () => {
const start = Date.now();
await sleep(10);
const elapsed = Date.now() - start;
assert.ok(elapsed >= 8); // allow some timing fuzz
});
test("newId prefixes and produces non-empty suffix", () => {
const id1 = newId("test");
const id2 = newId("test");
assert.ok(id1.startsWith("test_"));
assert.ok(id2.startsWith("test_"));
assert.notEqual(id1, id2);
assert.ok(id1.length > "test_".length);
});