1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const ava_1 = require("ava");
|
4 | const aws_sdk_1 = require("aws-sdk");
|
5 | const index_1 = require("../index");
|
6 | const 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 |