1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const ava_1 = require("ava");
|
4 | const crypto_1 = require("crypto");
|
5 | const uuid_1 = require("uuid");
|
6 | const cache_1 = require("../src/cache");
|
7 | const functions_1 = require("./fixtures/functions");
|
8 | const test = ava_1.default;
|
9 | test.beforeEach(t => {
|
10 | const nonce = (0, uuid_1.v4)();
|
11 | t.context.cache = new cache_1.PersistentCache(`.faast/test/${nonce}`);
|
12 | });
|
13 | test.afterEach.always(async (t) => {
|
14 | await t.context.cache.clear({ leaveEmptyDir: false });
|
15 | });
|
16 | test("persistent cache directory respects relative path", t => {
|
17 | t.regex(t.context.cache.dir, /test/);
|
18 | });
|
19 | test("persistent cache handles missing cache entries", async (t) => {
|
20 | t.falsy(await t.context.cache.get("foo"));
|
21 | });
|
22 | test("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 | });
|
45 | test("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 | });
|
54 | test("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 | });
|
63 | test("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 | });
|
69 | test("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 | });
|
76 | test("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 |