faastjs
Version:
Serverless batch computing made simple.
72 lines • 9.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ava_1 = require("ava");
const aws_sdk_1 = require("aws-sdk");
const index_1 = require("../index");
const funcs = require("./fixtures/functions");
(0, ava_1.default)("remote aws throttling to no concurrency", async (t) => {
const faastModule = await (0, index_1.faast)("aws", funcs, {
mode: "https",
memorySize: 1024,
concurrency: 1,
gc: "off",
description: t.title
});
try {
const N = 10;
const promises = [faastModule.functions.timer(1000)];
for (let i = 1; i < N; i++) {
promises.push(faastModule.functions.timer(1000));
}
const results = await Promise.all(promises);
results.sort(({ start: a }, { start: b }) => a - b);
index_1.log.info(results);
let lastEnd = 0;
// Executions should not overlap in their timestamps.
for (const timing of results) {
t.true(timing.start > lastEnd);
lastEnd = timing.end;
}
}
finally {
await faastModule.cleanup();
}
});
// Test the situation where the function concurrency isn't sufficient to handle
// all of the requests, and the events age out while in the queue.
(0, ava_1.default)("remote aws async invocation queue throttling EventAgeExceeded", async (t) => {
const lambda = await (0, index_1.faastAws)(funcs, {
timeout: 70,
maxRetries: 2,
gc: "off",
description: t.title,
mode: "queue"
});
const { FunctionName } = lambda.state.resources;
const awsLambda = new aws_sdk_1.Lambda({ region: "us-west-2" });
await awsLambda
.putFunctionConcurrency({ FunctionName, ReservedConcurrentExecutions: 1 })
.promise();
await awsLambda
.updateFunctionEventInvokeConfig({
FunctionName,
MaximumEventAgeInSeconds: 60
})
.promise();
try {
const invoke = () => lambda.functions
.sleep(65 * 1000)
.then(_ => ({ value: "success" }))
.catch(error => ({ error: error.message }));
const firstPromise = invoke();
const secondPromise = invoke();
const first = await firstPromise;
const second = await secondPromise;
t.assert("value" in first || "value" in second);
t.assert("error" in first || "error" in second);
}
finally {
await lambda.cleanup();
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXRocm90dGxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2F3cy10aHJvdHRsZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQXVCO0FBQ3ZCLHFDQUFpQztBQUNqQyxvQ0FBZ0Q7QUFDaEQsOENBQThDO0FBRTlDLElBQUEsYUFBSSxFQUFDLHlDQUF5QyxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsYUFBSyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDMUMsSUFBSSxFQUFFLE9BQU87UUFDYixVQUFVLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsQ0FBQztRQUNkLEVBQUUsRUFBRSxLQUFLO1FBQ1QsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQ3ZCLENBQUMsQ0FBQztJQUNILElBQUk7UUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLFFBQVEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsV0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIscURBQXFEO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUN4QjtLQUNKO1lBQVM7UUFDTixNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMvQjtBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLGtFQUFrRTtBQUNsRSxJQUFBLGFBQUksRUFBQywrREFBK0QsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEVBQUMsS0FBSyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxFQUFFO1FBQ1gsVUFBVSxFQUFFLENBQUM7UUFDYixFQUFFLEVBQUUsS0FBSztRQUNULFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSztRQUNwQixJQUFJLEVBQUUsT0FBTztLQUNoQixDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFdEQsTUFBTSxTQUFTO1NBQ1Ysc0JBQXNCLENBQUMsRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDekUsT0FBTyxFQUFFLENBQUM7SUFFZixNQUFNLFNBQVM7U0FDViwrQkFBK0IsQ0FBQztRQUM3QixZQUFZO1FBQ1osd0JBQXdCLEVBQUUsRUFBRTtLQUMvQixDQUFDO1NBQ0QsT0FBTyxFQUFFLENBQUM7SUFFZixJQUFJO1FBQ0EsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQ2hCLE1BQU0sQ0FBQyxTQUFTO2FBQ1gsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7YUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQztRQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7S0FDbkQ7WUFBUztRQUNOLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzFCO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tIFwiYXZhXCI7XG5pbXBvcnQgeyBMYW1iZGEgfSBmcm9tIFwiYXdzLXNka1wiO1xuaW1wb3J0IHsgZmFhc3QsIGZhYXN0QXdzLCBsb2cgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCAqIGFzIGZ1bmNzIGZyb20gXCIuL2ZpeHR1cmVzL2Z1bmN0aW9uc1wiO1xuXG50ZXN0KFwicmVtb3RlIGF3cyB0aHJvdHRsaW5nIHRvIG5vIGNvbmN1cnJlbmN5XCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IGZhYXN0TW9kdWxlID0gYXdhaXQgZmFhc3QoXCJhd3NcIiwgZnVuY3MsIHtcbiAgICAgICAgbW9kZTogXCJodHRwc1wiLFxuICAgICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgICBjb25jdXJyZW5jeTogMSxcbiAgICAgICAgZ2M6IFwib2ZmXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRpdGxlXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgTiA9IDEwO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmYWFzdE1vZHVsZS5mdW5jdGlvbnMudGltZXIoMTAwMCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChmYWFzdE1vZHVsZS5mdW5jdGlvbnMudGltZXIoMTAwMCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJlc3VsdHMuc29ydCgoeyBzdGFydDogYSB9LCB7IHN0YXJ0OiBiIH0pID0+IGEgLSBiKTtcbiAgICAgICAgbG9nLmluZm8ocmVzdWx0cyk7XG4gICAgICAgIGxldCBsYXN0RW5kID0gMDtcbiAgICAgICAgLy8gRXhlY3V0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAgaW4gdGhlaXIgdGltZXN0YW1wcy5cbiAgICAgICAgZm9yIChjb25zdCB0aW1pbmcgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgdC50cnVlKHRpbWluZy5zdGFydCA+IGxhc3RFbmQpO1xuICAgICAgICAgICAgbGFzdEVuZCA9IHRpbWluZy5lbmQ7XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBmYWFzdE1vZHVsZS5jbGVhbnVwKCk7XG4gICAgfVxufSk7XG5cbi8vIFRlc3QgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgZnVuY3Rpb24gY29uY3VycmVuY3kgaXNuJ3Qgc3VmZmljaWVudCB0byBoYW5kbGVcbi8vIGFsbCBvZiB0aGUgcmVxdWVzdHMsIGFuZCB0aGUgZXZlbnRzIGFnZSBvdXQgd2hpbGUgaW4gdGhlIHF1ZXVlLlxudGVzdChcInJlbW90ZSBhd3MgYXN5bmMgaW52b2NhdGlvbiBxdWV1ZSB0aHJvdHRsaW5nIEV2ZW50QWdlRXhjZWVkZWRcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgbGFtYmRhID0gYXdhaXQgZmFhc3RBd3MoZnVuY3MsIHtcbiAgICAgICAgdGltZW91dDogNzAsXG4gICAgICAgIG1heFJldHJpZXM6IDIsXG4gICAgICAgIGdjOiBcIm9mZlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogdC50aXRsZSxcbiAgICAgICAgbW9kZTogXCJxdWV1ZVwiXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IEZ1bmN0aW9uTmFtZSB9ID0gbGFtYmRhLnN0YXRlLnJlc291cmNlcztcbiAgICBjb25zdCBhd3NMYW1iZGEgPSBuZXcgTGFtYmRhKHsgcmVnaW9uOiBcInVzLXdlc3QtMlwiIH0pO1xuXG4gICAgYXdhaXQgYXdzTGFtYmRhXG4gICAgICAgIC5wdXRGdW5jdGlvbkNvbmN1cnJlbmN5KHsgRnVuY3Rpb25OYW1lLCBSZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxIH0pXG4gICAgICAgIC5wcm9taXNlKCk7XG5cbiAgICBhd2FpdCBhd3NMYW1iZGFcbiAgICAgICAgLnVwZGF0ZUZ1bmN0aW9uRXZlbnRJbnZva2VDb25maWcoe1xuICAgICAgICAgICAgRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgTWF4aW11bUV2ZW50QWdlSW5TZWNvbmRzOiA2MFxuICAgICAgICB9KVxuICAgICAgICAucHJvbWlzZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW52b2tlID0gKCkgPT5cbiAgICAgICAgICAgIGxhbWJkYS5mdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAuc2xlZXAoNjUgKiAxMDAwKVxuICAgICAgICAgICAgICAgIC50aGVuKF8gPT4gKHsgdmFsdWU6IFwic3VjY2Vzc1wiIH0pKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiAoeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KSk7XG4gICAgICAgIGNvbnN0IGZpcnN0UHJvbWlzZSA9IGludm9rZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRQcm9taXNlID0gaW52b2tlKCk7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgZmlyc3RQcm9taXNlO1xuICAgICAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBzZWNvbmRQcm9taXNlO1xuICAgICAgICB0LmFzc2VydChcInZhbHVlXCIgaW4gZmlyc3QgfHwgXCJ2YWx1ZVwiIGluIHNlY29uZCk7XG4gICAgICAgIHQuYXNzZXJ0KFwiZXJyb3JcIiBpbiBmaXJzdCB8fCBcImVycm9yXCIgaW4gc2Vjb25kKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBsYW1iZGEuY2xlYW51cCgpO1xuICAgIH1cbn0pO1xuIl19