PageRenderTime 30ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/js/lib/Socket.IO-node/tests/transports.websocket.js

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
JavaScript | 246 lines | 213 code | 33 blank | 0 comment | 38 complexity | 7d28ff78a8fce4eab17c8a1d7c1c38d9 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. var io = require('socket.io')
  2. , assert = require('assert')
  3. , encode = require('socket.io/utils').encode
  4. , decode = require('socket.io/utils').decode
  5. , port = 7200
  6. , Listener = io.Listener
  7. , Client = require('socket.io/client')
  8. , WebSocket = require('./../support/node-websocket-client/lib/websocket').WebSocket;
  9. function server(){
  10. return require('http').createServer(function(){});
  11. };
  12. function socket(server, options){
  13. if (!options) options = {};
  14. options.log = false;
  15. return io.listen(server, options);
  16. };
  17. function listen(s, callback){
  18. s._port = port;
  19. s.listen(port, callback);
  20. port++;
  21. return s;
  22. };
  23. function client(server, sessid){
  24. sessid = sessid ? '/' + sessid : '';
  25. return new WebSocket('ws://localhost:' + server._port + '/socket.io/websocket' + sessid, 'borf');
  26. };
  27. module.exports = {
  28. 'test connection and handshake': function(){
  29. var _server = server()
  30. , _socket = socket(_server)
  31. , _client
  32. , trips = 2;
  33. function close(){
  34. _client.close();
  35. _server.close();
  36. };
  37. listen(_server, function(){
  38. var messages = 0;
  39. _client = client(_server);
  40. _client.onopen = function(){
  41. _client.send(encode('from client'));
  42. };
  43. _client.onmessage = function(ev){
  44. if (++messages == 2){ // first message is the session id
  45. assert.ok(decode(ev.data), 'from server');
  46. --trips || close();
  47. }
  48. };
  49. });
  50. _socket.on('connection', function(conn){
  51. assert.ok(conn instanceof Client);
  52. conn
  53. .on('message', function(msg){
  54. assert.ok(msg == 'from client');
  55. --trips || close();
  56. })
  57. .send('from server');
  58. });
  59. },
  60. 'test clients tracking': function(){
  61. var _server = server()
  62. , _socket = socket(_server);
  63. listen(_server, function(){
  64. var _client = client(_server);
  65. _client.onopen = function(){
  66. assert.ok(Object.keys(_socket.clients).length == 1);
  67. var _client2 = client(_server);
  68. _client2.onopen = function(){
  69. assert.ok(Object.keys(_socket.clients).length == 2);
  70. _client.close();
  71. _client2.close();
  72. _server.close();
  73. };
  74. }
  75. });
  76. },
  77. 'test buffered messages': function(){
  78. var _server = server()
  79. , _socket = socket(_server, {
  80. transportOptions: {
  81. websocket: {
  82. closeTimeout: 5000
  83. }
  84. }
  85. });
  86. listen(_server, function(){
  87. var _client = client(_server);
  88. _client.onopen = function(){
  89. assert.ok(Object.keys(_socket.clients).length == 1);
  90. var sessionid = Object.keys(_socket.clients)[0]
  91. , runOnce = false;
  92. _socket.clients[sessionid].connection.addListener('end', function(){
  93. if (!runOnce){
  94. assert.ok(_socket.clients[sessionid]._open == false);
  95. assert.ok(_socket.clients[sessionid].connected);
  96. _socket.clients[sessionid].send('should get this');
  97. var _client2 = client(_server, sessionid);
  98. _client2.onmessage = function(ev){
  99. assert.ok(Object.keys(_socket.clients).length == 1);
  100. assert.ok(decode(ev.data), 'should get this');
  101. _socket.clients[sessionid].closeTimeout = 0;
  102. _client2.close();
  103. _server.close();
  104. };
  105. runOnce = true;
  106. }
  107. });
  108. _client.close();
  109. };
  110. });
  111. },
  112. 'test json encoding': function(){
  113. var _server = server()
  114. , _socket = socket(_server)
  115. , _client
  116. , trips = 2;
  117. function close(){
  118. _server.close();
  119. _client.close();
  120. };
  121. listen(_server, function(){
  122. _socket.on('connection', function(conn){
  123. conn.on('message', function(msg){
  124. assert.ok(msg.from == 'client');
  125. --trips || close();
  126. });
  127. conn.send({ from: 'server' });
  128. });
  129. var messages = 0;
  130. _client = client(_server);
  131. _client.onmessage = function(ev){
  132. if (++messages == 2){
  133. assert.ok(decode(ev.data)[0].substr(0, 3) == '~j~');
  134. assert.ok(JSON.parse(decode(ev.data)[0].substr(3)).from == 'server');
  135. _client.send(encode({ from: 'client' }));
  136. --trips || close();
  137. }
  138. };
  139. });
  140. },
  141. 'test hearbeat timeout': function(){
  142. var _server = server()
  143. , _socket = socket(_server, {
  144. transportOptions: {
  145. websocket: {
  146. timeout: 100,
  147. heartbeatInterval: 1
  148. }
  149. }
  150. });
  151. listen(_server, function(){
  152. var _client = client(_server)
  153. , messages = 0;
  154. _client.onmessage = function(ev){
  155. ++messages;
  156. if (decode(ev.data)[0].substr(0, 3) == '~h~'){
  157. assert.ok(messages === 2);
  158. assert.ok(Object.keys(_socket.clients).length == 1);
  159. setTimeout(function(){
  160. assert.ok(Object.keys(_socket.clients).length == 0);
  161. _client.close();
  162. _server.close();
  163. }, 150);
  164. }
  165. };
  166. });
  167. },
  168. 'test client broadcast': function(){
  169. var _server = server()
  170. , _socket = socket(_server);
  171. listen(_server, function(){
  172. var _client = client(_server)
  173. , _client2
  174. , _client3
  175. , _first
  176. , _connections = 0;
  177. _client.onmessage = function(ev){
  178. if (!('messages' in _client)) _client.messages = 0;
  179. if (++_client.messages == 2){
  180. assert.ok(decode(ev.data)[0] == 'not broadcasted');
  181. _client.close();
  182. _client2.close();
  183. _client3.close();
  184. _server.close();
  185. }
  186. };
  187. _client.onopen = function(){
  188. _client2 = client(_server);
  189. _client2.onmessage = function(ev){
  190. if (!('messages' in _client2)) _client2.messages = 0;
  191. if (++_client2.messages == 2)
  192. assert.ok(decode(ev.data)[0] == 'broadcasted')
  193. };
  194. _client2.onopen = function(){
  195. _client3 = client(_server);
  196. _client3.onmessage = function(ev){
  197. if (!('messages' in _client3)) _client3.messages = 0;
  198. if (++_client3.messages == 2)
  199. assert.ok(decode(ev.data)[0] == 'broadcasted')
  200. };
  201. };
  202. };
  203. _socket.on('connection', function(conn){
  204. if (!_first)
  205. _first = conn;
  206. if (++_connections == 3){
  207. _first.broadcast('broadcasted');
  208. _first.send('not broadcasted');
  209. }
  210. });
  211. });
  212. }
  213. };