UNPKG

12 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const ava_1 = require("ava");
4const crypto_1 = require("crypto");
5const uuid_1 = require("uuid");
6const cache_1 = require("../src/cache");
7const functions_1 = require("./fixtures/functions");
8const test = ava_1.default;
9test.beforeEach(t => {
10 const nonce = (0, uuid_1.v4)();
11 t.context.cache = new cache_1.PersistentCache(`.faast/test/${nonce}`);
12});
13test.afterEach.always(async (t) => {
14 await t.context.cache.clear({ leaveEmptyDir: false });
15});
16test("persistent cache directory respects relative path", t => {
17 t.regex(t.context.cache.dir, /test/);
18});
19test("persistent cache handles missing cache entries", async (t) => {
20 t.falsy(await t.context.cache.get("foo"));
21});
22test("persistent cache can set and get cache entries", async (t) => {
23 try {
24 const { cache } = t.context;
25 try {
26 await cache.set("foo", "bar");
27 }
28 catch (err) {
29 console.log(`persistent cache set error: ${err}`);
30 throw err;
31 }
32 try {
33 const result = await cache.get("foo");
34 t.is(result?.toString(), "bar");
35 }
36 catch (err) {
37 console.log(`persistent cache get error ${err}`);
38 throw err;
39 }
40 }
41 catch (err) {
42 console.log(`persistent cache test error: ${err.stack || err.message}`);
43 }
44});
45test("persistent cache ignores entries after they expire", async (t) => {
46 const cache2 = new cache_1.PersistentCache(t.context.cache.dirRelativeToHomeDir, 100);
47 await cache2.set("foo", "bar");
48 let result = await cache2.get("foo");
49 t.is(result?.toString(), "bar");
50 await (0, functions_1.sleep)(101);
51 result = await cache2.get("foo");
52 t.falsy(result?.toString());
53});
54test("persistent cache keys can be sha256 hashes", async (t) => {
55 const hasher = (0, crypto_1.createHash)("sha256");
56 hasher.update("input");
57 const hash = hasher.digest("hex");
58 const { cache } = t.context;
59 await cache.set(hash, "value");
60 const result = await cache.get(hash);
61 t.is(result?.toString(), "value");
62});
63test("persistent cache value can be a Buffer", async (t) => {
64 const { cache } = t.context;
65 await cache.set("key", Buffer.from("value"));
66 const result = await cache.get("key");
67 t.is(result?.toString(), "value");
68});
69test("persistent cache values are persistent", async (t) => {
70 const { cache } = t.context;
71 await cache.set("persistentKey", "persistent");
72 const cache2 = new cache_1.PersistentCache(cache.dirRelativeToHomeDir);
73 const result2 = await cache2.get("persistentKey");
74 t.is(result2?.toString(), "persistent");
75});
76test("persistent cache clearing", async (t) => {
77 const { cache } = t.context;
78 await cache.set("key", "value");
79 const value = await cache.get("key");
80 t.is(value?.toString(), "value");
81 await cache.clear();
82 t.falsy(await cache.get("key"));
83});
84//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC1jYWNoZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC91bml0LWNhY2hlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBNkM7QUFDN0MsbUNBQW9DO0FBQ3BDLCtCQUFvQztBQUNwQyx3Q0FBK0M7QUFDL0Msb0RBQTZDO0FBRTdDLE1BQU0sSUFBSSxHQUFHLGFBQW9ELENBQUM7QUFFbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBRyxJQUFBLFNBQU0sR0FBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksdUJBQWUsQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDNUIsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxtREFBbUQsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUMxRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDN0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGdEQUFnRCxF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Q0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFueXRlc3QsIHsgVGVzdEludGVyZmFjZSB9IGZyb20gXCJhdmFcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgUGVyc2lzdGVudENhY2hlIH0gZnJvbSBcIi4uL3NyYy9jYWNoZVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi9maXh0dXJlcy9mdW5jdGlvbnNcIjtcblxuY29uc3QgdGVzdCA9IGFueXRlc3QgYXMgVGVzdEludGVyZmFjZTx7IGNhY2hlOiBQZXJzaXN0ZW50Q2FjaGUgfT47XG5cbnRlc3QuYmVmb3JlRWFjaCh0ID0+IHtcbiAgICBjb25zdCBub25jZSA9IHV1aWR2NCgpO1xuICAgIHQuY29udGV4dC5jYWNoZSA9IG5ldyBQZXJzaXN0ZW50Q2FjaGUoYC5mYWFzdC90ZXN0LyR7bm9uY2V9YCk7XG59KTtcblxudGVzdC5hZnRlckVhY2guYWx3YXlzKGFzeW5jIHQgPT4ge1xuICAgIGF3YWl0IHQuY29udGV4dC5jYWNoZS5jbGVhcih7IGxlYXZlRW1wdHlEaXI6IGZhbHNlIH0pO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGRpcmVjdG9yeSByZXNwZWN0cyByZWxhdGl2ZSBwYXRoXCIsIHQgPT4ge1xuICAgIHQucmVnZXgodC5jb250ZXh0LmNhY2hlLmRpciwgL3Rlc3QvKTtcbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBoYW5kbGVzIG1pc3NpbmcgY2FjaGUgZW50cmllc1wiLCBhc3luYyB0ID0+IHtcbiAgICB0LmZhbHN5KGF3YWl0IHQuY29udGV4dC5jYWNoZS5nZXQoXCJmb29cIikpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGNhbiBzZXQgYW5kIGdldCBjYWNoZSBlbnRyaWVzXCIsIGFzeW5jIHQgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNhY2hlLnNldChcImZvb1wiLCBcImJhclwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIHNldCBlcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlLmdldChcImZvb1wiKTtcbiAgICAgICAgICAgIHQuaXMocmVzdWx0Py50b1N0cmluZygpLCBcImJhclwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIGdldCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBwZXJzaXN0ZW50IGNhY2hlIHRlc3QgZXJyb3I6ICR7ZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIH1cbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBpZ25vcmVzIGVudHJpZXMgYWZ0ZXIgdGhleSBleHBpcmVcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgY2FjaGUyID0gbmV3IFBlcnNpc3RlbnRDYWNoZSh0LmNvbnRleHQuY2FjaGUuZGlyUmVsYXRpdmVUb0hvbWVEaXIsIDEwMCk7XG4gICAgYXdhaXQgY2FjaGUyLnNldChcImZvb1wiLCBcImJhclwiKTtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FjaGUyLmdldChcImZvb1wiKTtcbiAgICB0LmlzKHJlc3VsdD8udG9TdHJpbmcoKSwgXCJiYXJcIik7XG4gICAgYXdhaXQgc2xlZXAoMTAxKTtcbiAgICByZXN1bHQgPSBhd2FpdCBjYWNoZTIuZ2V0KFwiZm9vXCIpO1xuICAgIHQuZmFsc3kocmVzdWx0Py50b1N0cmluZygpKTtcbn0pO1xuXG50ZXN0KFwicGVyc2lzdGVudCBjYWNoZSBrZXlzIGNhbiBiZSBzaGEyNTYgaGFzaGVzXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IGhhc2hlciA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIik7XG4gICAgaGFzaGVyLnVwZGF0ZShcImlucHV0XCIpO1xuICAgIGNvbnN0IGhhc2ggPSBoYXNoZXIuZGlnZXN0KFwiaGV4XCIpO1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoaGFzaCwgXCJ2YWx1ZVwiKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZS5nZXQoaGFzaCk7XG4gICAgdC5pcyhyZXN1bHQ/LnRvU3RyaW5nKCksIFwidmFsdWVcIik7XG59KTtcblxudGVzdChcInBlcnNpc3RlbnQgY2FjaGUgdmFsdWUgY2FuIGJlIGEgQnVmZmVyXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoXCJrZXlcIiwgQnVmZmVyLmZyb20oXCJ2YWx1ZVwiKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGUuZ2V0KFwia2V5XCIpO1xuICAgIHQuaXMocmVzdWx0Py50b1N0cmluZygpLCBcInZhbHVlXCIpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIHZhbHVlcyBhcmUgcGVyc2lzdGVudFwiLCBhc3luYyB0ID0+IHtcbiAgICBjb25zdCB7IGNhY2hlIH0gPSB0LmNvbnRleHQ7XG4gICAgYXdhaXQgY2FjaGUuc2V0KFwicGVyc2lzdGVudEtleVwiLCBcInBlcnNpc3RlbnRcIik7XG4gICAgY29uc3QgY2FjaGUyID0gbmV3IFBlcnNpc3RlbnRDYWNoZShjYWNoZS5kaXJSZWxhdGl2ZVRvSG9tZURpcik7XG4gICAgY29uc3QgcmVzdWx0MiA9IGF3YWl0IGNhY2hlMi5nZXQoXCJwZXJzaXN0ZW50S2V5XCIpO1xuICAgIHQuaXMocmVzdWx0Mj8udG9TdHJpbmcoKSwgXCJwZXJzaXN0ZW50XCIpO1xufSk7XG5cbnRlc3QoXCJwZXJzaXN0ZW50IGNhY2hlIGNsZWFyaW5nXCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHQuY29udGV4dDtcbiAgICBhd2FpdCBjYWNoZS5zZXQoXCJrZXlcIiwgXCJ2YWx1ZVwiKTtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGNhY2hlLmdldChcImtleVwiKTtcbiAgICB0LmlzKHZhbHVlPy50b1N0cmluZygpLCBcInZhbHVlXCIpO1xuICAgIGF3YWl0IGNhY2hlLmNsZWFyKCk7XG4gICAgdC5mYWxzeShhd2FpdCBjYWNoZS5nZXQoXCJrZXlcIikpO1xufSk7XG4iXX0=
\No newline at end of file