UNPKG

faastjs

Version:

Serverless batch computing made simple.

84 lines 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ava_1 = require("ava"); const crypto_1 = require("crypto"); const uuid_1 = require("uuid"); const cache_1 = require("../src/cache"); const functions_1 = require("./fixtures/functions"); const test = ava_1.default; test.beforeEach(t => { const nonce = (0, uuid_1.v4)(); t.context.cache = new cache_1.PersistentCache(`.faast/test/${nonce}`); }); test.afterEach.always(async (t) => { await t.context.cache.clear({ leaveEmptyDir: false }); }); test("persistent cache directory respects relative path", t => { t.regex(t.context.cache.dir, /test/); }); test("persistent cache handles missing cache entries", async (t) => { t.falsy(await t.context.cache.get("foo")); }); test("persistent cache can set and get cache entries", async (t) => { try { const { cache } = t.context; try { await cache.set("foo", "bar"); } catch (err) { console.log(`persistent cache set error: ${err}`); throw err; } try { const result = await cache.get("foo"); t.is(result?.toString(), "bar"); } catch (err) { console.log(`persistent cache get error ${err}`); throw err; } } catch (err) { console.log(`persistent cache test error: ${err.stack || err.message}`); } }); test("persistent cache ignores entries after they expire", async (t) => { const cache2 = new cache_1.PersistentCache(t.context.cache.dirRelativeToHomeDir, 100); await cache2.set("foo", "bar"); let result = await cache2.get("foo"); t.is(result?.toString(), "bar"); await (0, functions_1.sleep)(101); result = await cache2.get("foo"); t.falsy(result?.toString()); }); test("persistent cache keys can be sha256 hashes", async (t) => { const hasher = (0, crypto_1.createHash)("sha256"); hasher.update("input"); const hash = hasher.digest("hex"); const { cache } = t.context; await cache.set(hash, "value"); const result = await cache.get(hash); t.is(result?.toString(), "value"); }); test("persistent cache value can be a Buffer", async (t) => { const { cache } = t.context; await cache.set("key", Buffer.from("value")); const result = await cache.get("key"); t.is(result?.toString(), "value"); }); test("persistent cache values are persistent", async (t) => { const { cache } = t.context; await cache.set("persistentKey", "persistent"); const cache2 = new cache_1.PersistentCache(cache.dirRelativeToHomeDir); const result2 = await cache2.get("persistentKey"); t.is(result2?.toString(), "persistent"); }); test("persistent cache clearing", async (t) => { const { cache } = t.context; await cache.set("key", "value"); const value = await cache.get("key"); t.is(value?.toString(), "value"); await cache.clear(); t.falsy(await cache.get("key")); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC1jYWNoZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC91bml0LWNhY2hlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBNkM7QUFDN0MsbUNBQW9DO0FBQ3BDLCtCQUFvQztBQUNwQyx3Q0FBK0M7QUFDL0Msb0RBQTZDO0FBRTdDLE1BQU0sSUFBSSxHQUFHLGFBQW9ELENBQUM7QUFFbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBRyxJQUFBLFNBQU0sR0FBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksdUJBQWUsQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDNUIsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxtREFBbUQsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUMxRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDN0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGdEQUFnRCxF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Q0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFueXRlc3QsIHsgVGVzdEludGVyZmFjZSB9IGZyb20gXCJhdmFcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgUGVyc2lzdGVudENhY2hlIH0gZnJvbSBcIi4uL3NyYy9jYWNoZVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi9maXh0dXJlcy9mdW5jdGlvbnNcIjtcblxuY29uc3QgdGVzdCA9IGFueXRlc3QgYXMgVGVzdEludGVyZmFjZTx7IGNhY2hlOiBQZXJzaXN0ZW50Q2FjaGUgfT47XG5cbnRlc3QuYmVmb3JlRWFjaCh0ID0+IHtcbiAgICBjb25zdCBub25jZSA9IHV1aWR2NCgpO1xuICAgIHQuY29udGV4dC5jYWNoZSA9IG5ldyBQZXJzaXN0ZW50Q2FjaGUoYC5mYWFzdC90ZXN0LyR7bm9uY2V9YCk7XG59KTtcblxudGVzdC5hZnRlckVhY2guYWx3YXlzKGFzeW5jIHQgPT4ge1xuICAgIGF3YWl0IHQuY29udGV4dC5jYWNoZS5jbGVhcih7IGxlYXZlRW1wdHlEaXI6IGZhbHNlIH0pO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGRpcmVjdG9yeSByZXNwZWN0cyByZWxhdGl2ZSBwYXRoXCIsIHQgPT4ge1xuICAgIHQucmVnZXgodC5jb250ZXh0LmNhY2hlLmRpciwgL3Rlc3QvKTtcbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBoYW5kbGVzIG1pc3NpbmcgY2FjaGUgZW50cmllc1wiLCBhc3luYyB0ID0+IHtcbiAgICB0LmZhbHN5KGF3YWl0IHQuY29udGV4dC5jYWNoZS5nZXQoXCJmb29cIikpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGNhbiBzZXQgYW5kIGdldCBjYWNoZSBlbnRyaWVzXCIsIGFzeW5jIHQgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNhY2hlLnNldChcImZvb1wiLCBcImJhclwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIHNldCBlcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlLmdldChcImZvb1wiKTtcbiAgICAgICAgICAgIHQuaXMocmVzdWx0Py50b1N0cmluZygpLCBcImJhclwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIGdldCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIHRlc3QgZXJyb3I6ICR7ZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIH1cbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBpZ25vcmVzIGVudHJpZXMgYWZ0ZXIgdGhleSBleHBpcmVcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgY2FjaGUyID0gbmV3IFBlcnNpc3RlbnRDYWNoZSh0LmNvbnRleHQuY2FjaGUuZGlyUmVsYXRpdmVUb0hvbWVEaXIsIDEwMCk7XG4gICAgYXdhaXQgY2FjaGUyLnNldChcImZvb1wiLCBcImJhclwiKTtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FjaGUyLmdldChcImZvb1wiKTtcbiAgICB0LmlzKHJlc3VsdD8udG9TdHJpbmcoKSwgXCJiYXJcIik7XG4gICAgYXdhaXQgc2xlZXAoMTAxKTtcbiAgICByZXN1bHQgPSBhd2FpdCBjYWNoZTIuZ2V0KFwiZm9vXCIpO1xuICAgIHQuZmFsc3kocmVzdWx0Py50b1N0cmluZygpKTtcbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBrZXlzIGNhbiBiZSBzaGEyNTYgaGFzaGVzXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IGhhc2hlciA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIik7XG4gICAgaGFzaGVyLnVwZGF0ZShcImlucHV0XCIpO1xuICAgIGNvbnN0IGhhc2ggPSBoYXNoZXIuZGlnZXN0KFwiaGV4XCIpO1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoaGFzaCwgXCJ2YWx1ZVwiKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZS5nZXQoaGFzaCk7XG4gICAgdC5pcyhyZXN1bHQ/LnRvU3RyaW5nKCksIFwidmFsdWVcIik7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgdmFsdWUgY2FuIGJlIGEgQnVmZmVyXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoXCJrZXlcIiwgQnVmZmVyLmZyb20oXCJ2YWx1ZVwiKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGUuZ2V0KFwia2V5XCIpO1xuICAgIHQuaXMocmVzdWx0Py50b1N0cmluZygpLCBcInZhbHVlXCIpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIHZhbHVlcyBhcmUgcGVyc2lzdGVudFwiLCBhc3luYyB0ID0+IHtcbiAgICBjb25zdCB7IGNhY2hlIH0gPSB0LmNvbnRleHQ7XG4gICAgYXdhaXQgY2FjaGUuc2V0KFwicGVyc2lzdGVudEtleVwiLCBcInBlcnNpc3RlbnRcIik7XG4gICAgY29uc3QgY2FjaGUyID0gbmV3IFBlcnNpc3RlbnRDYWNoZShjYWNoZS5kaXJSZWxhdGl2ZVRvSG9tZURpcik7XG4gICAgY29uc3QgcmVzdWx0MiA9IGF3YWl0IGNhY2hlMi5nZXQoXCJwZXJzaXN0ZW50S2V5XCIpO1xuICAgIHQuaXMocmVzdWx0Mj8udG9TdHJpbmcoKSwgXCJwZXJzaXN0ZW50XCIpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGNsZWFyaW5nXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoXCJrZXlcIiwgXCJ2YWx1ZVwiKTtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGNhY2hlLmdldChcImtleVwiKTtcbiAgICB0LmlzKHZhbHVlPy50b1N0cmluZygpLCBcInZhbHVlXCIpO1xuICAgIGF3YWl0IGNhY2hlLmNsZWFyKCk7XG4gICAgdC5mYWxzeShhd2FpdCBjYWNoZS5nZXQoXCJrZXlcIikpO1xufSk7XG4iXX0=