2015-12-17 20:05:38 +08:00

448 lines
12 KiB
JavaScript

var assert = require('assert');
var path = require('path');
var fs = require('fs');
var muk = require('muk');
var Index = require('../../../lib/index.js');
var instance = new Index();
instance.load();
think.APP_PATH = path.dirname(__dirname) + think.sep + 'testApp';
var WebSocket = think.adapter('websocket', 'sockjs');
describe('adapter/websocket/sockjs.js', function(){
it('init', function(){
var server = {};
var config = {};
var app = {};
var instance = new WebSocket(server, config, app);
assert.equal(instance.server, server);
assert.equal(instance.config, config);
assert.equal(instance.app, app);
})
it('emit', function(){
var server = {};
var config = {};
var app = {};
var instance = new WebSocket(server, config, app);
instance.socket = {
write: function(data){
assert.equal(data, '{"event":"event","data":"data"}');
}
}
instance.emit('event', 'data');
})
it('broadcast', function(){
var server = {};
var config = {};
var app = {};
var flag = false;
var instance = new WebSocket(server, config, app);
instance.socket = {id: 111, write: function(data){
flag = true;
assert.equal(data, '{"event":"event","data":"data"}')
}}
thinkCache(thinkCache.WEBSOCKET, [instance.socket])
instance.broadcast('event', 'data');
assert.equal(flag, false);
})
it('broadcast, with self', function(){
var server = {};
var config = {};
var app = {};
var instance = new WebSocket(server, config, app);
instance.socket = {id: 111, write: function(data){
assert.equal(data, '{"event":"event","data":"data"}')
}}
thinkCache(thinkCache.WEBSOCKET, [instance.socket])
instance.broadcast('event', 'data', true)
})
it('add socket', function(){
var server = {};
var config = {};
var app = {};
var flag = false;
var instance = new WebSocket(server, config, app);
thinkCache(thinkCache.WEBSOCKET, [])
instance.addSocket({id: 1, write: function(){}});
assert.equal(thinkCache(thinkCache.WEBSOCKET).length, 1);
})
it('remove socket', function(){
var server = {};
var config = {};
var app = {};
var flag = false;
var instance = new WebSocket(server, config, app);
thinkCache(thinkCache.WEBSOCKET, [])
instance.addSocket({id: 1, write: function(){}});
instance.removeSocket({id: 2})
assert.equal(thinkCache(thinkCache.WEBSOCKET).length, 1);
})
it('remove socket 1', function(){
var server = {};
var config = {};
var app = {};
var flag = false;
var instance = new WebSocket(server, config, app);
thinkCache(thinkCache.WEBSOCKET, [])
instance.addSocket({id: 1, write: function(){}});
instance.removeSocket({id: 1})
assert.equal(thinkCache(thinkCache.WEBSOCKET).length, 0);
})
it('mesage', function(done){
var server = {};
var config = {};
var app = function(http){
return {run: function(){
assert.equal(http.data, 'data');
assert.equal(think.isFunction(http.socketEmit), true)
assert.equal(think.isFunction(http.socketBroadcast), true)
assert.equal(http.url, '/open');
assert.equal(think.isObject(http.socket), true);
return Promise.resolve();
}}
};;
var flag = false;
var instance = new WebSocket(server, config, app);
instance.message('open', 'data', {
headers: {},
remoteAddress: '100.200.100.200'
}).then(function(data){
done();
});
})
it('mesage, url has /', function(done){
var server = {};
var config = {};
var app = function(http){
return {run: function(){
assert.equal(http.data, 'data');
assert.equal(think.isFunction(http.socketEmit), true)
assert.equal(think.isFunction(http.socketBroadcast), true)
assert.equal(http.url, '/open');
assert.equal(think.isObject(http.socket), true);
return Promise.resolve();
}}
};;
var flag = false;
var instance = new WebSocket(server, config, app);
instance.message('/open', 'data', {
headers: {},
remoteAddress: '100.200.100.200'
}).then(function(data){
done();
});
})
it('run', function(done){
muk(think, 'npm', function(){
return {
createServer: function(){
return {
on: function(type, callback){
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/sockjs' })
}
}
}
}
})
var server = {};
var config = {};
var app = {};
var instance = new WebSocket(server, config, app);
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, sockjs_url', function(done){
muk(think, 'npm', function(){
return {
createServer: function(){
return {
on: function(type, callback){
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket'};
var app = {};
var instance = new WebSocket(server, config, app);
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, options', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket'};
var app = {};
var instance = new WebSocket(server, config, app);
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, connection', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
assert.equal(type, 'connection');
callback && callback({
id: 1,
write: function(){
},
on: function(ty, cb){
assert.equal(ty === 'data' || ty === 'close', true);
cb && cb();
}
});
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket'};
var app = {};
var instance = new WebSocket(server, config, app);
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, connection, open', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
assert.equal(type, 'connection');
callback && callback({
id: 1,
write: function(){
},
on: function(ty, cb){
assert.equal(ty === 'data' || ty === 'close', true);
cb && cb();
}
});
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket', messages: {
open: 'home/user/open'
}};
var app = {};
var instance = new WebSocket(server, config, app);
instance.message = function(url, data, socket){
assert.equal(url, 'home/user/open');
assert.equal(data, undefined)
}
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, connection, close', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
assert.equal(type, 'connection');
callback && callback({
id: 1,
write: function(){
},
on: function(ty, cb){
assert.equal(ty === 'data' || ty === 'close', true);
cb && cb();
}
});
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket', messages: {
close: 'home/user/close'
}};
var app = {};
var instance = new WebSocket(server, config, app);
instance.message = function(url, data, socket){
assert.equal(url, 'home/user/close');
assert.equal(data, undefined)
}
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, connection, has data', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
assert.equal(type, 'connection');
callback && callback({
id: 1,
write: function(){
},
on: function(ty, cb){
assert.equal(ty === 'data' || ty === 'close', true);
if(ty === 'data'){
cb && cb(JSON.stringify({event: 'test', data: 'data'}));
}else{
cb && cb();
}
}
});
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket', messages: {
test: 'home/user/test'
}};
var app = {};
var instance = new WebSocket(server, config, app);
instance.message = function(url, data, socket){
assert.equal(url, 'home/user/test');
assert.equal(data, 'data')
}
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
it('run, connection, has data, no method', function(done){
muk(think, 'npm', function(){
return {
createServer: function(options){
options.log();
return {
on: function(type, callback){
assert.equal(type, 'connection');
callback && callback({
id: 1,
write: function(){
},
on: function(ty, cb){
assert.equal(ty === 'data' || ty === 'close', true);
if(ty === 'data'){
cb && cb(JSON.stringify({event: 'test', data: 'data'}));
}else{
cb && cb();
}
}
});
},
installHandlers: function(ser, options){
assert.deepEqual(options, { prefix: '/websocket' })
}
}
}
}
})
var server = {};
var config = {sockjs_url: '/websocket', path: '/websocket', messages: {
test1: 'home/user/test'
}};
var app = {};
var instance = new WebSocket(server, config, app);
instance.message = function(url, data, socket){
assert.equal(url, 'home/user/test');
assert.equal(data, 'data')
}
instance.run().then(function(){
muk.restore();
done();
}).catch(function(err){
console.log(err.stack)
});
})
})