From 049701058da323209fb75b07928608b514623cba Mon Sep 17 00:00:00 2001 From: "Zhuohuan LI (CARPE DIEM)" Date: Sat, 14 May 2016 01:50:36 +0800 Subject: [PATCH] use co/yield to sync test --- package.json | 1 + tests/puppet-web-server-tests.js | 158 +++++++++++++++---------------- 2 files changed, 76 insertions(+), 83 deletions(-) mode change 100644 => 100755 package.json diff --git a/package.json b/package.json old mode 100644 new mode 100755 index 07a9ec8f..bf35b942 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "node": ">= 6.1.0" }, "devDependencies": { + "co": "^4.6.0", "eslint": "^2.9.0", "tape": "^4.5.1" } diff --git a/tests/puppet-web-server-tests.js b/tests/puppet-web-server-tests.js index c3d170c7..7e8943ef 100644 --- a/tests/puppet-web-server-tests.js +++ b/tests/puppet-web-server-tests.js @@ -1,6 +1,7 @@ const https = require('https') const log = require('npmlog') const test = require('tape') +const co = require('co') const Server = require('../src/puppet-web-server') test('Server basic tests', function(t) { @@ -37,96 +38,87 @@ test('Server smoke testing', function(t) { const PORT = 58788 const server = new Server({port: PORT}) - server.init() - .then(() => { + co(function* () { + yield server.init() t.ok(true, 'server:' + PORT + ' inited') - Promise.all([ - dingHttps() // retHttps - , dingSocket() // retSocket - , dingBrowser() // retBrowser - , dingProxy() // retProxy - , getLoginStatusCode() // retStatus - ]).then(([ - retHttps - , retSocket - , retBrowser - , retProxy - , retStatus - ]) => { - t.equal(retHttps , 'dong', 'ding https got dong') - t.equal(retSocket, 'dong', 'ding socket got dong') - t.equal(retBrowser, 'dong', 'ding browser got dong') - t.equal(retProxy, 'dong', 'ding proxy got dong') - - // XXX sometimes object? 201605 - t.equal(typeof retStatus, 'number', 'status is number') - - t.end() + server.quit() - }).catch(e => { - t.fail('ding promise rejected:' + e) - t.end() + server.quit() - }) - - function dingHttps() { - const options = require('url').parse(`https://localhost:${PORT}/ding`) - options.rejectUnauthorized = false // permit self-signed CA - - return new Promise((resolve, reject) => { - https.get(options, res => { - res.on('data', chunk => { - log.verbose('TestingServer', 'https on data got: ' + chunk.toString()) - resolve(chunk.toString()) - }) - }).on('error', e => reject('https get error:' + e)) - }) - } - - function dingSocket() { - const maxTime = 3000 - const waitTime = 500 - let totalTime = 0 - return new Promise((resolve, reject) => { - setTimeout(testDing, waitTime) - - function testDing() { - log.silly('TestingServer', server.socketio) - if (!server.socketClient) { - totalTime += waitTime - if (totalTime > maxTime) { - return reject('timeout after ' + totalTime + 'ms') - } - - log.verbose('TestingServer', 'waiting socketClient to connect for ' + totalTime + '/' + maxTime + ' ms...') - setTimeout(testDing, waitTime) - return - } - log.silly('TestingServer', server.socketClient) - server.socketClient.on('dong', data => { - log.verbose('TestingServer', 'socket on dong got: ' + data) - resolve(data) - }) - server.socketClient.emit('ding') - server.socketClient.emit('ding') - server.socketClient.emit('ding') - } - }) - } + const retHttps = yield dingHttps() + t.equal(retHttps , 'dong', 'ding https got dong') - function dingBrowser() { - return server.browserExecute('return Wechaty.ding()') - } + const retSocket = yield dingSocket() + t.equal(retSocket, 'dong', 'ding socket got dong') - function dingProxy() { - return server.proxyWechaty('ding') - } + const retBrowser = yield dingBrowser() + t.equal(retBrowser, 'dong', 'ding browser got dong') - function getLoginStatusCode() { - return server.proxyWechaty('getLoginStatusCode') - } + const retProxy = yield dingProxy() + t.equal(retProxy, 'dong', 'ding proxy got dong') - }).catch((e) => { + const retStatus = yield getLoginStatusCode() + // XXX sometimes object? 201605 + t.equal(typeof retStatus, 'number', 'status is number') + }).catch(e => { t.fail('server init promise rejected:' + e) }) + + server.quit() + return t.end() + + function dingHttps() { + const options = require('url').parse(`https://localhost:${PORT}/ding`) + options.rejectUnauthorized = false // permit self-signed CA + + return new Promise((resolve, reject) => { + https.get(options, res => { + res.on('data', chunk => { + log.verbose('TestingServer', 'https on data got: ' + chunk.toString()) + resolve(chunk.toString()) + }) + }).on('error', e => reject('https get error:' + e)) + }) + } + + function dingSocket() { + const maxTime = 3000 + const waitTime = 500 + let totalTime = 0 + return new Promise((resolve, reject) => { + setTimeout(testDing, waitTime) + + function testDing() { + log.silly('TestingServer', server.socketio) + if (!server.socketClient) { + totalTime += waitTime + if (totalTime > maxTime) { + return reject('timeout after ' + totalTime + 'ms') + } + + log.verbose('TestingServer', 'waiting socketClient to connect for ' + totalTime + '/' + maxTime + ' ms...') + setTimeout(testDing, waitTime) + return + } + log.silly('TestingServer', server.socketClient) + server.socketClient.on('dong', data => { + log.verbose('TestingServer', 'socket on dong got: ' + data) + resolve(data) + }) + server.socketClient.emit('ding') + server.socketClient.emit('ding') + server.socketClient.emit('ding') + } + }) + } + + function dingBrowser() { + return server.browserExecute('return Wechaty.ding()') + } + + function dingProxy() { + return server.proxyWechaty('ding') + } + + function getLoginStatusCode() { + return server.proxyWechaty('getLoginStatusCode') + } }) -- GitLab