UNPKG

9.05 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const ava_1 = require("ava");
4const aws_sdk_1 = require("aws-sdk");
5const index_1 = require("../index");
6const funcs = require("./fixtures/functions");
7(0, ava_1.default)("remote aws throttling to no concurrency", async (t) => {
8 const faastModule = await (0, index_1.faast)("aws", funcs, {
9 mode: "https",
10 memorySize: 1024,
11 concurrency: 1,
12 gc: "off",
13 description: t.title
14 });
15 try {
16 const N = 10;
17 const promises = [faastModule.functions.timer(1000)];
18 for (let i = 1; i < N; i++) {
19 promises.push(faastModule.functions.timer(1000));
20 }
21 const results = await Promise.all(promises);
22 results.sort(({ start: a }, { start: b }) => a - b);
23 index_1.log.info(results);
24 let lastEnd = 0;
25 // Executions should not overlap in their timestamps.
26 for (const timing of results) {
27 t.true(timing.start > lastEnd);
28 lastEnd = timing.end;
29 }
30 }
31 finally {
32 await faastModule.cleanup();
33 }
34});
35// Test the situation where the function concurrency isn't sufficient to handle
36// all of the requests, and the events age out while in the queue.
37(0, ava_1.default)("remote aws async invocation queue throttling EventAgeExceeded", async (t) => {
38 const lambda = await (0, index_1.faastAws)(funcs, {
39 timeout: 70,
40 maxRetries: 2,
41 gc: "off",
42 description: t.title,
43 mode: "queue"
44 });
45 const { FunctionName } = lambda.state.resources;
46 const awsLambda = new aws_sdk_1.Lambda({ region: "us-west-2" });
47 await awsLambda
48 .putFunctionConcurrency({ FunctionName, ReservedConcurrentExecutions: 1 })
49 .promise();
50 await awsLambda
51 .updateFunctionEventInvokeConfig({
52 FunctionName,
53 MaximumEventAgeInSeconds: 60
54 })
55 .promise();
56 try {
57 const invoke = () => lambda.functions
58 .sleep(65 * 1000)
59 .then(_ => ({ value: "success" }))
60 .catch(error => ({ error: error.message }));
61 const firstPromise = invoke();
62 const secondPromise = invoke();
63 const first = await firstPromise;
64 const second = await secondPromise;
65 t.assert("value" in first || "value" in second);
66 t.assert("error" in first || "error" in second);
67 }
68 finally {
69 await lambda.cleanup();
70 }
71});
72//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXRocm90dGxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2F3cy10aHJvdHRsZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQXVCO0FBQ3ZCLHFDQUFpQztBQUNqQyxvQ0FBZ0Q7QUFDaEQsOENBQThDO0FBRTlDLElBQUEsYUFBSSxFQUFDLHlDQUF5QyxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsYUFBSyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDMUMsSUFBSSxFQUFFLE9BQU87UUFDYixVQUFVLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsQ0FBQztRQUNkLEVBQUUsRUFBRSxLQUFLO1FBQ1QsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQ3ZCLENBQUMsQ0FBQztJQUNILElBQUk7UUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLFFBQVEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsV0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIscURBQXFEO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUN4QjtLQUNKO1lBQVM7UUFDTixNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMvQjtBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLGtFQUFrRTtBQUNsRSxJQUFBLGFBQUksRUFBQywrREFBK0QsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEVBQUMsS0FBSyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxFQUFFO1FBQ1gsVUFBVSxFQUFFLENBQUM7UUFDYixFQUFFLEVBQUUsS0FBSztRQUNULFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSztRQUNwQixJQUFJLEVBQUUsT0FBTztLQUNoQixDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFdEQsTUFBTSxTQUFTO1NBQ1Ysc0JBQXNCLENBQUMsRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDekUsT0FBTyxFQUFFLENBQUM7SUFFZixNQUFNLFNBQVM7U0FDViwrQkFBK0IsQ0FBQztRQUM3QixZQUFZO1FBQ1osd0JBQXdCLEVBQUUsRUFBRTtLQUMvQixDQUFDO1NBQ0QsT0FBTyxFQUFFLENBQUM7SUFFZixJQUFJO1FBQ0EsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQ2hCLE1BQU0sQ0FBQyxTQUFTO2FBQ1gsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7YUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQztRQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7S0FDbkQ7WUFBUztRQUNOLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzFCO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tIFwiYXZhXCI7XG5pbXBvcnQgeyBMYW1iZGEgfSBmcm9tIFwiYXdzLXNka1wiO1xuaW1wb3J0IHsgZmFhc3QsIGZhYXN0QXdzLCBsb2cgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCAqIGFzIGZ1bmNzIGZyb20gXCIuL2ZpeHR1cmVzL2Z1bmN0aW9uc1wiO1xuXG50ZXN0KFwicmVtb3RlIGF3cyB0aHJvdHRsaW5nIHRvIG5vIGNvbmN1cnJlbmN5XCIsIGFzeW5jIHQgPT4ge1xuICAgIGNvbnN0IGZhYXN0TW9kdWxlID0gYXdhaXQgZmFhc3QoXCJhd3NcIiwgZnVuY3MsIHtcbiAgICAgICAgbW9kZTogXCJodHRwc1wiLFxuICAgICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgICBjb25jdXJyZW5jeTogMSxcbiAgICAgICAgZ2M6IFwib2ZmXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRpdGxlXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgTiA9IDEwO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmYWFzdE1vZHVsZS5mdW5jdGlvbnMudGltZXIoMTAwMCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChmYWFzdE1vZHVsZS5mdW5jdGlvbnMudGltZXIoMTAwMCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJlc3VsdHMuc29ydCgoeyBzdGFydDogYSB9LCB7IHN0YXJ0OiBiIH0pID0+IGEgLSBiKTtcbiAgICAgICAgbG9nLmluZm8ocmVzdWx0cyk7XG4gICAgICAgIGxldCBsYXN0RW5kID0gMDtcbiAgICAgICAgLy8gRXhlY3V0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAgaW4gdGhlaXIgdGltZXN0YW1wcy5cbiAgICAgICAgZm9yIChjb25zdCB0aW1pbmcgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgdC50cnVlKHRpbWluZy5zdGFydCA+IGxhc3RFbmQpO1xuICAgICAgICAgICAgbGFzdEVuZCA9IHRpbWluZy5lbmQ7XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBmYWFzdE1vZHVsZS5jbGVhbnVwKCk7XG4gICAgfVxufSk7XG5cbi8vIFRlc3QgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgZnVuY3Rpb24gY29uY3VycmVuY3kgaXNuJ3Qgc3VmZmljaWVudCB0byBoYW5kbGVcbi8vIGFsbCBvZiB0aGUgcmVxdWVzdHMsIGFuZCB0aGUgZXZlbnRzIGFnZSBvdXQgd2hpbGUgaW4gdGhlIHF1ZXVlLlxudGVzdChcInJlbW90ZSBhd3MgYXN5bmMgaW52b2NhdGlvbiBxdWV1ZSB0aHJvdHRsaW5nIEV2ZW50QWdlRXhjZWVkZWRcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgbGFtYmRhID0gYXdhaXQgZmFhc3RBd3MoZnVuY3MsIHtcbiAgICAgICAgdGltZW91dDogNzAsXG4gICAgICAgIG1heFJldHJpZXM6IDIsXG4gICAgICAgIGdjOiBcIm9mZlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogdC50aXRsZSxcbiAgICAgICAgbW9kZTogXCJxdWV1ZVwiXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IEZ1bmN0aW9uTmFtZSB9ID0gbGFtYmRhLnN0YXRlLnJlc291cmNlcztcbiAgICBjb25zdCBhd3NMYW1iZGEgPSBuZXcgTGFtYmRhKHsgcmVnaW9uOiBcInVzLXdlc3QtMlwiIH0pO1xuXG4gICAgYXdhaXQgYXdzTGFtYmRhXG4gICAgICAgIC5wdXRGdW5jdGlvbkNvbmN1cnJlbmN5KHsgRnVuY3Rpb25OYW1lLCBSZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxIH0pXG4gICAgICAgIC5wcm9taXNlKCk7XG5cbiAgICBhd2FpdCBhd3NMYW1iZGFcbiAgICAgICAgLnVwZGF0ZUZ1bmN0aW9uRXZlbnRJbnZva2VDb25maWcoe1xuICAgICAgICAgICAgRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgTWF4aW11bUV2ZW50QWdlSW5TZWNvbmRzOiA2MFxuICAgICAgICB9KVxuICAgICAgICAucHJvbWlzZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW52b2tlID0gKCkgPT5cbiAgICAgICAgICAgIGxhbWJkYS5mdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAuc2xlZXAoNjUgKiAxMDAwKVxuICAgICAgICAgICAgICAgIC50aGVuKF8gPT4gKHsgdmFsdWU6IFwic3VjY2Vzc1wiIH0pKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiAoeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KSk7XG4gICAgICAgIGNvbnN0IGZpcnN0UHJvbWlzZSA9IGludm9rZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRQcm9taXNlID0gaW52b2tlKCk7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgZmlyc3RQcm9taXNlO1xuICAgICAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBzZWNvbmRQcm9taXNlO1xuICAgICAgICB0LmFzc2VydChcInZhbHVlXCIgaW4gZmlyc3QgfHwgXCJ2YWx1ZVwiIGluIHNlY29uZCk7XG4gICAgICAgIHQuYXNzZXJ0KFwiZXJyb3JcIiBpbiBmaXJzdCB8fCBcImVycm9yXCIgaW4gc2Vjb25kKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBsYW1iZGEuY2xlYW51cCgpO1xuICAgIH1cbn0pO1xuIl19
\No newline at end of file