From 8d73c44fa682d41510b950a0a3344255ee2609b8 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 2 Jun 2021 17:28:40 +0100 Subject: [PATCH] fix: only delete the sqs queue if it already exists in the state --- .../aws-sqs/__tests__/deploy.test.js | 28 +++++++++- .../aws-sqs/serverless.js | 9 +-- yarn.lock | 55 +++++++++---------- 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/packages/serverless-components/aws-sqs/__tests__/deploy.test.js b/packages/serverless-components/aws-sqs/__tests__/deploy.test.js index e7800154ff..3a2648bac2 100644 --- a/packages/serverless-components/aws-sqs/__tests__/deploy.test.js +++ b/packages/serverless-components/aws-sqs/__tests__/deploy.test.js @@ -11,7 +11,13 @@ const { } = require("aws-sdk"); describe("sqs component", () => { - const tmpStateFolder = () => fse.mkdtempSync(path.join(os.tmpdir(), "test-")); + const tmpStateFolder = (initialState) => { + const dir = fse.mkdtempSync(path.join(os.tmpdir(), "test-")); + if (initialState) { + fse.writeJSONSync(path.join(dir, "TestLambda.json"), initialState); + } + return dir; + }; mockGetCallerIdentityPromise.mockResolvedValue({ Account: "123" }); mockGetQueueAttributesPromise.mockResolvedValue({ Attributes: {} }); mockCreateQueuePromise.mockResolvedValue({ QueueArn: "arn" }); @@ -23,8 +29,9 @@ describe("sqs component", () => { }); it("creates a new queue", async () => { + const dir = tmpStateFolder(); const component = new AwsSqsQueue("TestLambda", { - stateRoot: tmpStateFolder() + stateRoot: dir }); await component.init(); await component.default(); @@ -37,7 +44,9 @@ describe("sqs component", () => { Attributes: { not: "empty" } }); const component = new AwsSqsQueue("TestLambda", { - stateRoot: tmpStateFolder() + stateRoot: tmpStateFolder({ + url: "myQueueUrl" + }) }); await component.init(); await component.default(); @@ -45,6 +54,19 @@ describe("sqs component", () => { expect(mockDeleteQueuePromise).toBeCalledTimes(1); }); + it("creates a queue but does not try to delete an existing queue if none exist already", async () => { + mockGetQueueAttributesPromise.mockResolvedValueOnce({ + Attributes: { not: "empty" } + }); + const component = new AwsSqsQueue("TestLambda", { + stateRoot: tmpStateFolder() + }); + await component.init(); + await component.default(); + expect(mockCreateQueuePromise).toBeCalledTimes(1); + expect(mockDeleteQueuePromise).toBeCalledTimes(0); + }); + it("does not create a lambda mapping when a mapping is found", async () => { mockListEventSourceMappingsPromise.mockResolvedValueOnce({ EventSourceMappings: [1] diff --git a/packages/serverless-components/aws-sqs/serverless.js b/packages/serverless-components/aws-sqs/serverless.js index a50a9bac76..e6a46d46a0 100644 --- a/packages/serverless-components/aws-sqs/serverless.js +++ b/packages/serverless-components/aws-sqs/serverless.js @@ -64,10 +64,11 @@ class AwsSqsQueue extends Component { this.context.status(`Updating`); await setAttributes(sqs, queueUrl, config); } else { - this.context.debug(`The QueueUrl has changed`); - this.context.debug(`Deleting previous queue`); - - await deleteQueue({ sqs, queueUrl: this.state.url }); + if (this.state.url) { + this.context.debug(`The QueueUrl has changed`); + this.context.debug(`Deleting previous queue`); + await deleteQueue({ sqs, queueUrl: this.state.url }); + } this.context.debug(`Creating new queue`); diff --git a/yarn.lock b/yarn.lock index 9f9c50bec7..35c1714f42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3677,34 +3677,16 @@ "@sinonjs/commons" "^1.7.0" "@sls-next/core@link:packages/libs/core": - version "1.0.0-alpha.12" - dependencies: - "@hapi/accept" "^5.0.1" - cookie "^0.4.1" - jsonwebtoken "^8.5.1" - path-to-regexp "^6.1.0" - regex-parser "^2.2.10" + version "0.0.0" + uid "" "@sls-next/lambda-at-edge@link:./packages/libs/lambda-at-edge": - version "1.9.0-alpha.7" - dependencies: - "@aws-sdk/client-s3" "3.14.0" - "@aws-sdk/client-sqs" "3.14.0" - "@hapi/accept" "5.0.1" - "@sls-next/core" "link:packages/libs/core" - "@vercel/nft" "^0.12.0" - execa "^4.0.2" - fresh "^0.5.2" - fs-extra "^9.0.1" - get-stream "^6.0.0" - is-animated "^2.0.1" - klaw "^3.0.0" - node-fetch "^2.6.1" - path-to-regexp "^6.1.0" - send "^0.17.1" + version "0.0.0" + uid "" "@sls-next/next-aws-cloudfront@link:./packages/compat-layers/lambda-at-edge-compat": - version "1.6.2-alpha.0" + version "0.0.0" + uid "" "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -4124,10 +4106,10 @@ "@typescript-eslint/types" "4.24.0" eslint-visitor-keys "^2.0.0" -"@vercel/nft@^0.12.0": - version "0.12.0" - resolved "https://registry.npmjs.org/@vercel/nft/-/nft-0.12.0.tgz#d88e6ab66848eb4d8862f70ccd148f29305fc4bd" - integrity sha512-4k87lSFscEOrILuiG5w1UUswDTLmn7snWGhBO1LUaZZShLeul/gMl4QzryIN7ljAExsYrkaaE07LPPf2bmMTvg== +"@vercel/nft@^0.12.2": + version "0.12.2" + resolved "https://registry.npmjs.org/@vercel/nft/-/nft-0.12.2.tgz#67ea9f231d24639b3783e3e69bef173659972d3b" + integrity sha512-H8n44GboVnJaVVX4+WfuOTAaNLDnUIYH4KpMZcXll7KMNIcg0JTd0IFRsIBe/uvuXisqm6nEANp8Tr3/1dlRQw== dependencies: "@mapbox/node-pre-gyp" "^1.0.5" acorn "^8.1.0" @@ -7387,7 +7369,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: +execa@^4.0.0, execa@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -7417,6 +7399,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz#aee63b871c9b2cb56bc9addcd3c70a785c6bf0d1" + integrity sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"