Skip to content

Commit

Permalink
fix(http-server/data): initialize cache with available payloads
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreDemailly committed Feb 6, 2025
1 parent 90885c9 commit dfb106d
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 15 deletions.
12 changes: 8 additions & 4 deletions src/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class _AppCache {
fs.writeFileSync(path.join(kPayloadsPath, pkg.replaceAll("/", "-")), JSON.stringify(payload));
}

async getPayload(pkg) {
getPayload(pkg) {
try {
return JSON.parse(fs.readFileSync(path.join(kPayloadsPath, pkg.replaceAll("/", "-")), "utf-8"));
}
Expand All @@ -51,9 +51,13 @@ class _AppCache {
}
}

async getPayloadOrNull(pkg) {
availablePayloads() {
return fs.readdirSync(kPayloadsPath);
}

getPayloadOrNull(pkg) {
try {
return await this.getPayload(pkg);
return this.getPayload(pkg);
}
catch {
return null;
Expand Down Expand Up @@ -125,7 +129,7 @@ class _AppCache {
catch {
// Do nothing.
}
const packagesInFolder = fs.readdirSync(kPayloadsPath);
const packagesInFolder = this.availablePayloads();
if (packagesInFolder.length === 0) {
await this.#initDefaultPayloadsList();

Expand Down
4 changes: 2 additions & 2 deletions src/http-server/endpoints/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export async function get(_req, res) {
logger.info(`[data|get](current: ${current})`);
logger.debug(`[data|get](lru: ${mru})`);

send(res, 200, await appCache.getPayload(current));
send(res, 200, appCache.getPayload(current));
}
catch {
logger.error(`[data|get](No cache yet. Creating one...)`);
Expand All @@ -37,7 +37,7 @@ export async function get(_req, res) {
mru: [formatted],
current: formatted,
lru: [],
availables: [],
availables: appCache.availablePayloads(),
lastUsed: {
[formatted]: Date.now()
},
Expand Down
2 changes: 1 addition & 1 deletion src/http-server/websocket/commands/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export async function* search(
const { logger, cache } = context;
logger.info(`[ws|search](pkg: ${pkg})`);

const cachedPayload = await cache.getPayloadOrNull(pkg);
const cachedPayload = cache.getPayloadOrNull(pkg);
if (cachedPayload) {
logger.info(`[ws|search](payload: ${pkg} found in cache)`);
const cacheList = await cache.payloadsList();
Expand Down
24 changes: 16 additions & 8 deletions test/cache.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,42 +48,50 @@ describe("appCache", () => {
assert.equal(writeValue, JSON.stringify({ foo: "bar" }));
});

it("getPayload should return the payload", async(t) => {
it("getPayload should return the payload", (t) => {
t.mock.method(fs, "readFileSync", () => JSON.stringify({ foo: "bar" }));

const payload = await appCache.getPayload("foo/bar");
const payload = appCache.getPayload("foo/bar");

assert.deepEqual(payload, { foo: "bar" });
});

it("getPayload should throw", async(t) => {
it("getPayload should throw", (t) => {
t.mock.method(fs, "readFileSync", () => {
throw new Error("boo");
});

await assert.rejects(async() => appCache.getPayload("foo/bar"), {
assert.throws(() => appCache.getPayload("foo/bar"), {
message: "boo"
});
});

it("getPayloadOrNull should return payload", async(t) => {
it("getPayloadOrNull should return payload", (t) => {
t.mock.method(fs, "readFileSync", () => JSON.stringify({ foo: "bar" }));

const payload = await appCache.getPayloadOrNull("foo/bar");
const payload = appCache.getPayloadOrNull("foo/bar");

assert.deepEqual(payload, { foo: "bar" });
});

it("getPayloadOrNull should return null", async(t) => {
it("getPayloadOrNull should return null", (t) => {
t.mock.method(fs, "readFileSync", () => {
throw new Error("boo");
});

const payload = await appCache.getPayloadOrNull("foo/bar");
const payload = appCache.getPayloadOrNull("foo/bar");

assert.equal(payload, null);
});

it("availablePayloads should return the list of payloads", (t) => {
t.mock.method(fs, "readdirSync", () => ["foo-bar", "bar-foo"]);

const payloads = appCache.availablePayloads();

assert.deepEqual(payloads, ["foo-bar", "bar-foo"]);
});

it("should update and get payloadsList", async() => {
await appCache.updatePayloadsList({ foo: "bar" });

Expand Down

0 comments on commit dfb106d

Please sign in to comment.