提交 04970105 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

use co/yield to sync test

上级 841e433c
......@@ -49,6 +49,7 @@
"node": ">= 6.1.0"
},
"devDependencies": {
"co": "^4.6.0",
"eslint": "^2.9.0",
"tape": "^4.5.1"
}
......
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')
}
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册