From dda386e425ce96019f3d068e66603f80af966571 Mon Sep 17 00:00:00 2001 From: Haoliang Gao Date: Thu, 27 Jul 2017 18:06:17 +0800 Subject: [PATCH] test: add test and doc for listen options (#1246) --- docs/source/zh-cn/core/deployment.md | 17 ++++++++++ .../app-server-with-hostname/app/router.js | 7 ++++ .../config/config.default.js | 10 ++++++ .../app-server-with-hostname/package.json | 3 ++ test/lib/cluster/app_worker.test.js | 33 ++++++++++++++++++- 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/apps/app-server-with-hostname/app/router.js create mode 100644 test/fixtures/apps/app-server-with-hostname/config/config.default.js create mode 100644 test/fixtures/apps/app-server-with-hostname/package.json diff --git a/docs/source/zh-cn/core/deployment.md b/docs/source/zh-cn/core/deployment.md index e8110e4e5c..92556a1439 100644 --- a/docs/source/zh-cn/core/deployment.md +++ b/docs/source/zh-cn/core/deployment.md @@ -59,6 +59,23 @@ EGG_SERVER_ENV=prod nohup node dispatch.js > stdout.log 2> stderr.log & - 如果使用 Docker,可直接前台运行。 - 默认情况框架会创建和 CPU 核数相当的 app worker 数,可以充分的利用 CPU 资源。 +### 启动配置项 + +你也可以在 `config.{env}.js` 中配置指定启动配置。 + +```js +// config/config.default.js +exports.cluster = { + listen: { + port: '7001', + hostname: '127.0.0.1', + // path: '/var/run/egg.sock', + } +} +``` + +`path`,`port`,`hostname` 均为 [server.listen](https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback) 的参数,`egg.startCluster` 方法传入的 port 优先级高于此配置。 + ### 自定义框架启动 如果应用使用了[自定义框架](../advanced/framework.md),还需要指定额外的参数,比如框架为 `yadan`。 diff --git a/test/fixtures/apps/app-server-with-hostname/app/router.js b/test/fixtures/apps/app-server-with-hostname/app/router.js new file mode 100644 index 0000000000..fe7574110b --- /dev/null +++ b/test/fixtures/apps/app-server-with-hostname/app/router.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = app => { + app.get('/', function* () { + this.body = 'done'; + }); +}; diff --git a/test/fixtures/apps/app-server-with-hostname/config/config.default.js b/test/fixtures/apps/app-server-with-hostname/config/config.default.js new file mode 100644 index 0000000000..14832e42ca --- /dev/null +++ b/test/fixtures/apps/app-server-with-hostname/config/config.default.js @@ -0,0 +1,10 @@ +'use strict'; + +const address = require('address'); + +exports.keys = 'my keys'; +exports.cluster = { + listen: { + hostname: address.ip(), + }, +}; diff --git a/test/fixtures/apps/app-server-with-hostname/package.json b/test/fixtures/apps/app-server-with-hostname/package.json new file mode 100644 index 0000000000..e8db66e1b5 --- /dev/null +++ b/test/fixtures/apps/app-server-with-hostname/package.json @@ -0,0 +1,3 @@ +{ + "name": "app-server-with-hostname" +} diff --git a/test/lib/cluster/app_worker.test.js b/test/lib/cluster/app_worker.test.js index 56d2b65abd..2624833516 100644 --- a/test/lib/cluster/app_worker.test.js +++ b/test/lib/cluster/app_worker.test.js @@ -1,12 +1,14 @@ 'use strict'; +const request = require('supertest'); +const address = require('address'); +const assert = require('assert'); const utils = require('../../utils'); describe('test/lib/cluster/app_worker.test.js', () => { let app; before(() => { app = utils.cluster('apps/app-server'); - app.coverage(true); return app.ready(); }); after(() => app.close()); @@ -16,4 +18,33 @@ describe('test/lib/cluster/app_worker.test.js', () => { .get('/') .expect('true'); }); + + describe('listen hostname', () => { + let app; + before(() => { + app = utils.cluster('apps/app-server-with-hostname'); + return app.ready(); + }); + after(() => app.close()); + + it('should refuse other ip', function* () { + const url = address.ip() + ':' + app.port; + + yield request(url) + .get('/') + .expect('done') + .expect(200); + + try { + yield request('http://127.0.0.1:17010') + .get('/') + .expect('done') + .expect(200); + throw new Error('should not run'); + } catch (err) { + assert(err.message === 'ECONNREFUSED: Connection refused'); + } + }); + }); + });