UNPKG

faastjs

Version:

Serverless batch computing made simple.

85 lines 12.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const ava_1 = tslib_1.__importDefault(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC1jYWNoZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC91bml0LWNhY2hlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQXNDO0FBQ3RDLG1DQUFvQztBQUNwQywrQkFBb0M7QUFDcEMsd0NBQStDO0FBQy9DLG9EQUE2QztBQUU3QyxNQUFNLElBQUksR0FBRyxhQUE2QyxDQUFDO0FBRTNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBQSxTQUFNLEdBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLHVCQUFlLENBQUMsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO0lBQzVCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsbURBQW1ELEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDMUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO0lBQzdELENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnREFBZ0Qs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QUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbnl0ZXN0LCB7IFRlc3RGbiB9IGZyb20gXCJhdmFcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgUGVyc2lzdGVudENhY2hlIH0gZnJvbSBcIi4uL3NyYy9jYWNoZVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi9maXh0dXJlcy9mdW5jdGlvbnNcIjtcblxuY29uc3QgdGVzdCA9IGFueXRlc3QgYXMgVGVzdEZuPHsgY2FjaGU6IFBlcnNpc3RlbnRDYWNoZSB9PjtcblxudGVzdC5iZWZvcmVFYWNoKHQgPT4ge1xuICAgIGNvbnN0IG5vbmNlID0gdXVpZHY0KCk7XG4gICAgdC5jb250ZXh0LmNhY2hlID0gbmV3IFBlcnNpc3RlbnRDYWNoZShgLmZhYXN0L3Rlc3QvJHtub25jZX1gKTtcbn0pO1xuXG50ZXN0LmFmdGVyRWFjaC5hbHdheXMoYXN5bmMgdCA9PiB7XG4gICAgYXdhaXQgdC5jb250ZXh0LmNhY2hlLmNsZWFyKHsgbGVhdmVFbXB0eURpcjogZmFsc2UgfSk7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgZGlyZWN0b3J5IHJlc3BlY3RzIHJlbGF0aXZlIHBhdGhcIiwgdCA9PiB7XG4gICAgdC5yZWdleCh0LmNvbnRleHQuY2FjaGUuZGlyLCAvdGVzdC8pO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGhhbmRsZXMgbWlzc2luZyBjYWNoZSBlbnRyaWVzXCIsIGFzeW5jIHQgPT4ge1xuICAgIHQuZmFsc3koYXdhaXQgdC5jb250ZXh0LmNhY2hlLmdldChcImZvb1wiKSk7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgY2FuIHNldCBhbmQgZ2V0IGNhY2hlIGVudHJpZXNcIiwgYXN5bmMgdCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjYWNoZSB9ID0gdC5jb250ZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY2FjaGUuc2V0KFwiZm9vXCIsIFwiYmFyXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHBlcnNpc3RlbnQgY2FjaGUgc2V0IGVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGUuZ2V0KFwiZm9vXCIpO1xuICAgICAgICAgICAgdC5pcyhyZXN1bHQ/LnRvU3RyaW5nKCksIFwiYmFyXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHBlcnNpc3RlbnQgY2FjaGUgZ2V0IGVycm9yICR7ZXJyfWApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHBlcnNpc3RlbnQgY2FjaGUgdGVzdCBlcnJvcjogJHtlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGlnbm9yZXMgZW50cmllcyBhZnRlciB0aGV5IGV4cGlyZVwiLCBhc3luYyB0ID0+IHtcbiAgICBjb25zdCBjYWNoZTIgPSBuZXcgUGVyc2lzdGVudENhY2hlKHQuY29udGV4dC5jYWNoZS5kaXJSZWxhdGl2ZVRvSG9tZURpciwgMTAwKTtcbiAgICBhd2FpdCBjYWNoZTIuc2V0KFwiZm9vXCIsIFwiYmFyXCIpO1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWNoZTIuZ2V0KFwiZm9vXCIpO1xuICAgIHQuaXMocmVzdWx0Py50b1N0cmluZygpLCBcImJhclwiKTtcbiAgICBhd2FpdCBzbGVlcCgxMDEpO1xuICAgIHJlc3VsdCA9IGF3YWl0IGNhY2hlMi5nZXQoXCJmb29cIik7XG4gICAgdC5mYWxzeShyZXN1bHQ/LnRvU3RyaW5nKCkpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGtleXMgY2FuIGJlIHNoYTI1NiBoYXNoZXNcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgaGFzaGVyID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKTtcbiAgICBoYXNoZXIudXBkYXRlKFwiaW5wdXRcIik7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hlci5kaWdlc3QoXCJoZXhcIik7XG4gICAgY29uc3QgeyBjYWNoZSB9ID0gdC5jb250ZXh0O1xuICAgIGF3YWl0IGNhY2hlLnNldChoYXNoLCBcInZhbHVlXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlLmdldChoYXNoKTtcbiAgICB0LmlzKHJlc3VsdD8udG9TdHJpbmcoKSwgXCJ2YWx1ZVwiKTtcbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSB2YWx1ZSBjYW4gYmUgYSBCdWZmZXJcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgeyBjYWNoZSB9ID0gdC5jb250ZXh0O1xuICAgIGF3YWl0IGNhY2hlLnNldChcImtleVwiLCBCdWZmZXIuZnJvbShcInZhbHVlXCIpKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZS5nZXQoXCJrZXlcIik7XG4gICAgdC5pcyhyZXN1bHQ/LnRvU3RyaW5nKCksIFwidmFsdWVcIik7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgdmFsdWVzIGFyZSBwZXJzaXN0ZW50XCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoXCJwZXJzaXN0ZW50S2V5XCIsIFwicGVyc2lzdGVudFwiKTtcbiAgICBjb25zdCBjYWNoZTIgPSBuZXcgUGVyc2lzdGVudENhY2hlKGNhY2hlLmRpclJlbGF0aXZlVG9Ib21lRGlyKTtcbiAgICBjb25zdCByZXN1bHQyID0gYXdhaXQgY2FjaGUyLmdldChcInBlcnNpc3RlbnRLZXlcIik7XG4gICAgdC5pcyhyZXN1bHQyPy50b1N0cmluZygpLCBcInBlcnNpc3RlbnRcIik7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgY2xlYXJpbmdcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgeyBjYWNoZSB9ID0gdC5jb250ZXh0O1xuICAgIGF3YWl0IGNhY2hlLnNldChcImtleVwiLCBcInZhbHVlXCIpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgY2FjaGUuZ2V0KFwia2V5XCIpO1xuICAgIHQuaXModmFsdWU/LnRvU3RyaW5nKCksIFwidmFsdWVcIik7XG4gICAgYXdhaXQgY2FjaGUuY2xlYXIoKTtcbiAgICB0LmZhbHN5KGF3YWl0IGNhY2hlLmdldChcImtleVwiKSk7XG59KTtcbiJdfQ==