From a92bd5f6335ccf05de6f806693b84eab87fbb479 Mon Sep 17 00:00:00 2001 From: Daniel Ruf <827205+DanielRuf@users.noreply.github.com> Date: Wed, 19 Jun 2019 09:00:48 +0200 Subject: [PATCH] fix: correctly check the keepAliveTimeout value, fixes #1352 (#1353) * fix: correctly check the keepAliveTimeout value, fixes #1352 * test: check keepAliveTimeout configurations using the CLI --- src/lib/bootstrap.js | 2 +- test/unit/api/cli.spec.js | 74 +++++++++++++++++++ .../yaml/server/keepalivetimeout-0.yaml | 2 + .../yaml/server/keepalivetimeout-60.yaml | 2 + .../server/keepalivetimeout-undefined.yaml | 2 + 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 test/unit/partials/config/yaml/server/keepalivetimeout-0.yaml create mode 100644 test/unit/partials/config/yaml/server/keepalivetimeout-60.yaml create mode 100644 test/unit/partials/config/yaml/server/keepalivetimeout-undefined.yaml diff --git a/src/lib/bootstrap.js b/src/lib/bootstrap.js index bd0b5ed7c..988f5e17a 100644 --- a/src/lib/bootstrap.js +++ b/src/lib/bootstrap.js @@ -48,7 +48,7 @@ function startVerdaccio(config: any, cliListen: string, configPath: string, pkgV // http webServer = http.createServer(app); } - if (config.server && config.server.keepAliveTimeout) { + if (config.server && typeof config.server.keepAliveTimeout !== 'undefined' && config.server.keepAliveTimeout !== 'null') { // $FlowFixMe library definition for node is not up to date (doesn't contain recent 8.0 changes) webServer.keepAliveTimeout = config.server.keepAliveTimeout * 1000; } diff --git a/test/unit/api/cli.spec.js b/test/unit/api/cli.spec.js index 1c7579f7c..97738d8f9 100644 --- a/test/unit/api/cli.spec.js +++ b/test/unit/api/cli.spec.js @@ -5,6 +5,7 @@ import startServer from '../../../src/index'; import config from '../partials/config/index'; import {DEFAULT_DOMAIN, DEFAULT_PORT, DEFAULT_PROTOCOL} from '../../../src/lib/constants'; import {getListListenAddresses} from '../../../src/lib/cli/utils'; +import {parseConfigFile} from '../../../src/lib/utils'; const logger = require('../../../src/lib/logger'); @@ -20,6 +21,10 @@ jest.mock('../../../src/lib/logger', () => ({ describe('startServer via API', () => { + const parseConfigurationFile = (name) => { + return parseConfigFile(path.join(__dirname, `../partials/config/yaml/${name}.yaml`)); + }; + describe('startServer launcher', () => { test('should provide all HTTP server data', async (done) => { const store = path.join(__dirname, 'partials/store'); @@ -42,6 +47,75 @@ describe('startServer via API', () => { }); }); + test('should set keepAliveTimeout to 0 seconds', async (done) => { + const store = path.join(__dirname, 'partials/store'); + const serverName = 'verdaccio-test'; + const version = '1.0.0'; + const port = '6100'; + + await startServer(config(parseConfigurationFile('server/keepalivetimeout-0')), port, store, version, serverName, + (webServer, addrs, pkgName, pkgVersion) => { + expect(webServer).toBeDefined(); + expect(webServer.keepAliveTimeout).toBeDefined(); + expect(webServer.keepAliveTimeout).toBe(0); + expect(addrs).toBeDefined(); + expect(addrs.proto).toBe(DEFAULT_PROTOCOL); + expect(addrs.host).toBe(DEFAULT_DOMAIN); + expect(addrs.port).toBe(port); + expect(pkgName).toBeDefined(); + expect(pkgVersion).toBeDefined(); + expect(pkgVersion).toBe(version); + expect(pkgName).toBe(serverName); + done(); + }); + }); + + test('should set keepAliveTimeout to 60 seconds', async (done) => { + const store = path.join(__dirname, 'partials/store'); + const serverName = 'verdaccio-test'; + const version = '1.0.0'; + const port = '6200'; + + await startServer(config(parseConfigurationFile('server/keepalivetimeout-60')), port, store, version, serverName, + (webServer, addrs, pkgName, pkgVersion) => { + expect(webServer).toBeDefined(); + expect(webServer.keepAliveTimeout).toBeDefined(); + expect(webServer.keepAliveTimeout).toBe(60000); + expect(addrs).toBeDefined(); + expect(addrs.proto).toBe(DEFAULT_PROTOCOL); + expect(addrs.host).toBe(DEFAULT_DOMAIN); + expect(addrs.port).toBe(port); + expect(pkgName).toBeDefined(); + expect(pkgVersion).toBeDefined(); + expect(pkgVersion).toBe(version); + expect(pkgName).toBe(serverName); + done(); + }); + }); + + test('should set keepAliveTimeout to 5 seconds per default', async (done) => { + const store = path.join(__dirname, 'partials/store'); + const serverName = 'verdaccio-test'; + const version = '1.0.0'; + const port = '6300'; + + await startServer(config(parseConfigurationFile('server/keepalivetimeout-undefined')), port, store, version, serverName, + (webServer, addrs, pkgName, pkgVersion) => { + expect(webServer).toBeDefined(); + expect(webServer.keepAliveTimeout).toBeDefined(); + expect(webServer.keepAliveTimeout).toBe(5000); + expect(addrs).toBeDefined(); + expect(addrs.proto).toBe(DEFAULT_PROTOCOL); + expect(addrs.host).toBe(DEFAULT_DOMAIN); + expect(addrs.port).toBe(port); + expect(pkgName).toBeDefined(); + expect(pkgVersion).toBeDefined(); + expect(pkgVersion).toBe(version); + expect(pkgName).toBe(serverName); + done(); + }); + }); + test('should provide all HTTPS server fails', async (done) => { const store = path.join(__dirname, 'partials/store'); const serverName = 'verdaccio-test'; diff --git a/test/unit/partials/config/yaml/server/keepalivetimeout-0.yaml b/test/unit/partials/config/yaml/server/keepalivetimeout-0.yaml new file mode 100644 index 000000000..0b4a85047 --- /dev/null +++ b/test/unit/partials/config/yaml/server/keepalivetimeout-0.yaml @@ -0,0 +1,2 @@ +server: + keepAliveTimeout: 0 diff --git a/test/unit/partials/config/yaml/server/keepalivetimeout-60.yaml b/test/unit/partials/config/yaml/server/keepalivetimeout-60.yaml new file mode 100644 index 000000000..3c1ea7391 --- /dev/null +++ b/test/unit/partials/config/yaml/server/keepalivetimeout-60.yaml @@ -0,0 +1,2 @@ +server: + keepAliveTimeout: 60 diff --git a/test/unit/partials/config/yaml/server/keepalivetimeout-undefined.yaml b/test/unit/partials/config/yaml/server/keepalivetimeout-undefined.yaml new file mode 100644 index 000000000..24922adfb --- /dev/null +++ b/test/unit/partials/config/yaml/server/keepalivetimeout-undefined.yaml @@ -0,0 +1,2 @@ +server: + foo: "bar"