From d51d4389253b9aee370f8f53243c130bb9e556b8 Mon Sep 17 00:00:00 2001 From: Vishesh Duggar Date: Mon, 14 Mar 2022 06:17:51 +0530 Subject: [PATCH 1/3] WIP --- index.js | 4 ++-- package-lock.json | 2 +- test/indexTest.js | 38 ++++++++++++++++++++++++++++---------- test/serverlessMock.js | 2 +- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index d29a9e3e..25dc2225 100644 --- a/index.js +++ b/index.js @@ -168,8 +168,8 @@ class ServerlessDynamodbLocal { * @return {Boolean} if the handler can run for the provided stage */ shouldExecute() { - if (this.config.stages && this.config.stages.includes(this.stage)) { - return true; + if (this.config.stages) { + return this.config.stages.some((stage) => this.stage.match(new RegExp(stage)).length > 0); } return false; } diff --git a/package-lock.json b/package-lock.json index 82d80324..f054171b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "serverless-dynamodb-local", - "version": "0.2.37", + "version": "0.2.40", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/test/indexTest.js b/test/indexTest.js index 1ce35c57..30a4195e 100644 --- a/test/indexTest.js +++ b/test/indexTest.js @@ -32,6 +32,19 @@ function getWithRetry(url, retryCount, previousError) { }); } +function startHandler(service) { + return service.startHandler() + .then(function() { + return new Promise(function(resolve) { setTimeout(resolve, 2000); }); + }) + .then(function() { + return getWithRetry(`http://localhost:${service.port}/shell/`); + }) + .then(function(response){ + assert.equal(response.statusCode, 200); + }); +} + describe("Port function",function(){ let service; before(function(){ @@ -46,16 +59,7 @@ describe("Port function",function(){ it("Port value should be >= 0 and < 65536",function() { this.timeout(40000); - return service.startHandler() - .then(function() { - return new Promise(function(resolve) { setTimeout(resolve, 2000); }); - }) - .then(function() { - return getWithRetry(`http://localhost:${service.port}/shell/`); - }) - .then(function(response){ - assert.equal(response.statusCode, 200); - }); + return startHandler(service); }); after(function(){ @@ -63,6 +67,20 @@ describe("Port function",function(){ }); }); +describe("Check stage matches",function(){ + let service; + + it("Start for stage with regex",function() { + service = new Plugin(serverlessMock, { stage: "dev-55" }); + service.installHandler(); + this.timeout(40000); + return startHandler(service); + }); + + after(function(){ + return service.endHandler(); + }); +}); describe("Check the dynamodb function",function(){ it("Endpoint should listen to the port",function () { let server; diff --git a/test/serverlessMock.js b/test/serverlessMock.js index 7856b09f..6550b0c7 100644 --- a/test/serverlessMock.js +++ b/test/serverlessMock.js @@ -2,7 +2,7 @@ module.exports = { service: { custom: { dynamodb: { - stages: ["test"] + stages: ["test", "dev-\d+"] } } }, From 108993af4f28fdf7421d84c9439df70923a32991 Mon Sep 17 00:00:00 2001 From: Vishesh Duggar Date: Mon, 14 Mar 2022 06:20:06 +0530 Subject: [PATCH 2/3] WIP --- test/indexTest.js | 35 ++++++++++------------------------- test/serverlessMock.js | 2 +- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/test/indexTest.js b/test/indexTest.js index 30a4195e..168a567c 100644 --- a/test/indexTest.js +++ b/test/indexTest.js @@ -33,16 +33,6 @@ function getWithRetry(url, retryCount, previousError) { } function startHandler(service) { - return service.startHandler() - .then(function() { - return new Promise(function(resolve) { setTimeout(resolve, 2000); }); - }) - .then(function() { - return getWithRetry(`http://localhost:${service.port}/shell/`); - }) - .then(function(response){ - assert.equal(response.statusCode, 200); - }); } describe("Port function",function(){ @@ -59,7 +49,16 @@ describe("Port function",function(){ it("Port value should be >= 0 and < 65536",function() { this.timeout(40000); - return startHandler(service); + return service.startHandler() + .then(function() { + return new Promise(function(resolve) { setTimeout(resolve, 2000); }); + }) + .then(function() { + return getWithRetry(`http://localhost:${service.port}/shell/`); + }) + .then(function(response){ + assert.equal(response.statusCode, 200); + }); }); after(function(){ @@ -67,20 +66,6 @@ describe("Port function",function(){ }); }); -describe("Check stage matches",function(){ - let service; - - it("Start for stage with regex",function() { - service = new Plugin(serverlessMock, { stage: "dev-55" }); - service.installHandler(); - this.timeout(40000); - return startHandler(service); - }); - - after(function(){ - return service.endHandler(); - }); -}); describe("Check the dynamodb function",function(){ it("Endpoint should listen to the port",function () { let server; diff --git a/test/serverlessMock.js b/test/serverlessMock.js index 6550b0c7..7856b09f 100644 --- a/test/serverlessMock.js +++ b/test/serverlessMock.js @@ -2,7 +2,7 @@ module.exports = { service: { custom: { dynamodb: { - stages: ["test", "dev-\d+"] + stages: ["test"] } } }, From bf5c4fc241c95192d2dea012370cf126af34a2ba Mon Sep 17 00:00:00 2001 From: Vishesh Duggar Date: Fri, 18 Mar 2022 12:53:52 +0530 Subject: [PATCH 3/3] Stages as string or regex --- README.md | 3 ++- index.js | 4 +++- src/util.js | 6 ++++++ test/indexTest.js | 5 +---- test/testUtil.js | 10 ++++++++++ 5 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 src/util.js create mode 100644 test/testUtil.js diff --git a/README.md b/README.md index ba5f56cb..91af1d06 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,10 @@ Docker setup: ```yml custom: dynamodb: - # If you only want to use DynamoDB Local in some stages, declare them here + # If you only want to use DynamoDB Local in some stages, declare them here as string or stringified regex stages: - dev + - 'dev-\\d+' start: docker: true port: 8000 diff --git a/index.js b/index.js index 25dc2225..5132b53e 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,8 @@ const AWS = require("aws-sdk"); const dynamodbLocal = require("dynamodb-localhost"); const seeder = require("./src/seeder"); const path = require('path'); +const matchStage = require('./src/util'); +const { match } = require("assert"); class ServerlessDynamodbLocal { constructor(serverless, options) { @@ -169,7 +171,7 @@ class ServerlessDynamodbLocal { */ shouldExecute() { if (this.config.stages) { - return this.config.stages.some((stage) => this.stage.match(new RegExp(stage)).length > 0); + return this.config.stages.some((stage) => matchStage(this.stage, stage)); } return false; } diff --git a/src/util.js b/src/util.js new file mode 100644 index 00000000..76836af2 --- /dev/null +++ b/src/util.js @@ -0,0 +1,6 @@ +function matchStage(currentStage, stage) { + const matches = currentStage.match(new RegExp(stage)); + return !!(matches && matches.length > 0); +} + +module.exports = matchStage; \ No newline at end of file diff --git a/test/indexTest.js b/test/indexTest.js index 168a567c..1ce35c57 100644 --- a/test/indexTest.js +++ b/test/indexTest.js @@ -32,9 +32,6 @@ function getWithRetry(url, retryCount, previousError) { }); } -function startHandler(service) { -} - describe("Port function",function(){ let service; before(function(){ @@ -49,7 +46,7 @@ describe("Port function",function(){ it("Port value should be >= 0 and < 65536",function() { this.timeout(40000); - return service.startHandler() + return service.startHandler() .then(function() { return new Promise(function(resolve) { setTimeout(resolve, 2000); }); }) diff --git a/test/testUtil.js b/test/testUtil.js new file mode 100644 index 00000000..c222ddae --- /dev/null +++ b/test/testUtil.js @@ -0,0 +1,10 @@ +const { expect } = require('chai'); +const matchStage = require('../src/util'); + +describe('Test matching stages', () => { + it('should match regex', () => { + expect(matchStage('dev-777', 'dev-\\d+')).to.eq(true); + expect(matchStage('dev', 'dev-\\d+')).to.eq(false); + expect(matchStage('dev', 'dev')).to.eq(true); + }); +})