faastjs
Version:
Serverless batch computing made simple.
84 lines • 12 kB
JavaScript
;
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=