Skip to content

Commit c3a2cd9

Browse files
authored
A smarter test server setup (#127)
1 parent baf4934 commit c3a2cd9

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

test/help/webserver.js

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,64 @@
11
'use strict';
22

3-
let Promise = require('bluebird'),
4-
fs = require('fs'),
5-
connect = require('connect'),
6-
serveStatic = require('serve-static'),
7-
http = require('http'),
8-
http2 = require('http2'),
9-
path = require('path');
3+
const Promise = require('bluebird');
4+
const fs = require('fs');
5+
const connect = require('connect');
6+
const serveStatic = require('serve-static');
7+
const http = require('http');
8+
const http2 = require('http2');
9+
const path = require('path');
1010

1111
Promise.promisifyAll(fs);
1212

13+
let server;
14+
let isListening = false;
15+
1316
function createServer(useHttp2) {
14-
const testdataFolder = path.join(__dirname, '..'),
15-
app = connect();
17+
const testdataFolder = path.join(__dirname, '..');
18+
const app = connect();
1619

1720
app.use(serveStatic(path.resolve(testdataFolder, 'http-server'), {}));
21+
1822
if (useHttp2) {
19-
const certsFolder = path.join(testdataFolder, 'testdata', 'certs'),
20-
httpsOptions = {
21-
key: fs.readFileSync(path.join(certsFolder, 'server.key'), 'utf8'),
22-
cert: fs.readFileSync(path.join(certsFolder, 'server.crt'), 'utf8'),
23-
passphrase: 'coach'
24-
};
23+
const certsFolder = path.join(testdataFolder, 'testdata', 'certs');
24+
const httpsOptions = {
25+
key: fs.readFileSync(path.join(certsFolder, 'server.key'), 'utf8'),
26+
cert: fs.readFileSync(path.join(certsFolder, 'server.crt'), 'utf8'),
27+
passphrase: 'coach'
28+
};
2529

2630
return http2.createServer(httpsOptions, app);
2731
} else {
2832
return http.createServer(app);
2933
}
3034
}
3135

32-
let server;
33-
3436
module.exports = {
3537
async startServer(useHttp2) {
3638
if (!server) {
3739
server = createServer(useHttp2);
3840
}
39-
return new Promise((resolve, reject) => {
40-
server
41-
.listen(0, '0.0.0.0')
42-
.on('error', e => reject(e))
43-
.on('listening', () => resolve(server.address()));
44-
});
41+
42+
if (!isListening) {
43+
await new Promise((resolve, reject) => {
44+
server
45+
.listen(0, '0.0.0.0')
46+
.on('error', reject)
47+
.on('listening', () => {
48+
isListening = true;
49+
resolve(server.address());
50+
});
51+
});
52+
}
53+
54+
return server.address();
4555
},
56+
4657
async stopServer() {
47-
return Promise.resolve(server.close()).finally(() => {
58+
if (server && isListening) {
59+
await Promise.resolve(server.close());
4860
server = undefined;
49-
});
61+
isListening = false;
62+
}
5063
}
5164
};

0 commit comments

Comments
 (0)