chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
const { memoryCache } = await import("../../src/lib/memory/cache.ts");
|
||||
|
||||
const originalDateNow = Date.now;
|
||||
const originalMaxSize = memoryCache.maxSize;
|
||||
|
||||
test.beforeEach(async () => {
|
||||
await memoryCache.clear();
|
||||
memoryCache.maxSize = originalMaxSize;
|
||||
Date.now = originalDateNow;
|
||||
});
|
||||
|
||||
test.after(async () => {
|
||||
Date.now = originalDateNow;
|
||||
memoryCache.maxSize = originalMaxSize;
|
||||
await memoryCache.clear();
|
||||
});
|
||||
|
||||
test("memoryCache tracks cache hits and misses and clear resets stats", async () => {
|
||||
await memoryCache.set("user:1", { value: 1 });
|
||||
|
||||
assert.deepEqual(await memoryCache.get("user:1"), { value: 1 });
|
||||
assert.equal(await memoryCache.get("missing"), null);
|
||||
assert.deepEqual(memoryCache.stats(), {
|
||||
size: 1,
|
||||
maxSize: originalMaxSize,
|
||||
hits: 1,
|
||||
misses: 1,
|
||||
});
|
||||
|
||||
await memoryCache.clear();
|
||||
assert.deepEqual(memoryCache.stats(), {
|
||||
size: 0,
|
||||
maxSize: originalMaxSize,
|
||||
hits: 0,
|
||||
misses: 0,
|
||||
});
|
||||
});
|
||||
|
||||
test("memoryCache expires entries after their TTL elapses", async () => {
|
||||
let now = 1_000;
|
||||
Date.now = () => now;
|
||||
|
||||
await memoryCache.set("ttl:key", "value", 50);
|
||||
assert.equal(await memoryCache.get("ttl:key"), "value");
|
||||
|
||||
now = 1_060;
|
||||
assert.equal(await memoryCache.get("ttl:key"), null);
|
||||
assert.deepEqual(memoryCache.stats(), {
|
||||
size: 0,
|
||||
maxSize: originalMaxSize,
|
||||
hits: 1,
|
||||
misses: 1,
|
||||
});
|
||||
});
|
||||
|
||||
test("memoryCache evicts the least recently used entry when full", async () => {
|
||||
memoryCache.maxSize = 2;
|
||||
|
||||
await memoryCache.set("a", "value-a");
|
||||
await memoryCache.set("b", "value-b");
|
||||
assert.equal(await memoryCache.get("a"), "value-a");
|
||||
|
||||
await memoryCache.set("c", "value-c");
|
||||
|
||||
assert.equal(await memoryCache.get("a"), "value-a");
|
||||
assert.equal(await memoryCache.get("b"), null);
|
||||
assert.equal(await memoryCache.get("c"), "value-c");
|
||||
assert.deepEqual(memoryCache.stats(), {
|
||||
size: 2,
|
||||
maxSize: 2,
|
||||
hits: 3,
|
||||
misses: 1,
|
||||
});
|
||||
});
|
||||
|
||||
test("memoryCache invalidates entries by regex pattern", async () => {
|
||||
await memoryCache.set("session:1", "a");
|
||||
await memoryCache.set("session:2", "b");
|
||||
await memoryCache.set("profile:1", "c");
|
||||
|
||||
await memoryCache.invalidate("^session:");
|
||||
|
||||
assert.equal(await memoryCache.get("session:1"), null);
|
||||
assert.equal(await memoryCache.get("session:2"), null);
|
||||
assert.equal(await memoryCache.get("profile:1"), "c");
|
||||
assert.deepEqual(memoryCache.stats(), {
|
||||
size: 1,
|
||||
maxSize: originalMaxSize,
|
||||
hits: 1,
|
||||
misses: 2,
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user