PageRenderTime 13ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 1ms

/js/lib/Socket.IO-node/tests/transports.jsonp-polling.js

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
JavaScript | 149 lines | 129 code | 19 blank | 1 comment | 10 complexity | 5a121d8e4273f13ea163e96f6f9a4360 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. , http = require('http')
  3. , querystring = require('querystring')
  4. , assert = require('assert')
  5. , port = 7500
  6. , encode = require('socket.io/utils').encode
  7. , _decode = require('socket.io/utils').decode
  8. , Polling = require('socket.io/transports/jsonp-polling');
  9. function decode(data){
  10. var io = {
  11. JSONP: [{
  12. '_': _decode
  13. }]
  14. };
  15. // the decode function simulates a browser executing the javascript jsonp call
  16. return eval(data);
  17. };
  18. function server(callback){
  19. return http.createServer(function(){});
  20. };
  21. function listen(s, callback){
  22. s._port = port;
  23. s.listen(port, callback);
  24. port++;
  25. return s;
  26. };
  27. function client(s){
  28. return http.createClient(s._port, 'localhost');
  29. };
  30. function socket(server, options){
  31. if (!options) options = {};
  32. options.log = false;
  33. if (!options.transportOptions) options.transportOptions = {
  34. 'jsonp-polling': {
  35. closeTimeout: 100
  36. }
  37. };
  38. return io.listen(server, options);
  39. };
  40. function get(client, url, callback){
  41. var request = client.request('GET', url + '/' + (+new Date) + '/0', {host: 'localhost'});
  42. request.end();
  43. request.on('response', function(response){
  44. var data = '';
  45. response.setEncoding('utf8');
  46. response.on('data', function(chunk){
  47. data += chunk;
  48. });
  49. response.on('end', function(chunk){
  50. callback(data);
  51. });
  52. });
  53. };
  54. function post(client, url, data, callback){
  55. var query = querystring.stringify(data)
  56. , request = client.request('POST', url, {'Content-Length': Buffer.byteLength(query)});
  57. request.write(query);
  58. request.end();
  59. };
  60. module.exports = {
  61. 'test connection and handshake': function(){
  62. var _server = server()
  63. , _socket = socket(_server)
  64. , trips = 2;
  65. _socket.on('connection', function(client){
  66. assert.ok(client instanceof Polling);
  67. client.on('message', function(msg){
  68. assert.ok(msg == 'from client');
  69. --trips || _server.close();
  70. });
  71. });
  72. listen(_server, function(){
  73. get(client(_server), '/socket.io/jsonp-polling/', function(data){
  74. var sessid = decode(data);
  75. assert.ok(Object.keys(_socket.clients).length == 1);
  76. assert.ok(sessid == Object.keys(_socket.clients)[0]);
  77. assert.ok(_socket.clients[sessid] instanceof Polling);
  78. _socket.clients[sessid].send('from server');
  79. get(client(_server), '/socket.io/jsonp-polling/' + sessid, function(data){
  80. assert.ok(decode(data), 'from server');
  81. --trips || _server.close();
  82. });
  83. post(client(_server), '/socket.io/jsonp-polling/' + sessid + '/send//0', {data: encode('from client')});
  84. });
  85. });
  86. },
  87. 'test clients tracking': function(){
  88. var _server = server()
  89. , _socket = socket(_server);
  90. listen(_server, function(){
  91. get(client(_server), '/socket.io/jsonp-polling/', function(){
  92. assert.ok(Object.keys(_socket.clients).length == 1);
  93. get(client(_server), '/socket.io/jsonp-polling/', function(){
  94. assert.ok(Object.keys(_socket.clients).length == 2);
  95. _server.close();
  96. });
  97. });
  98. });
  99. },
  100. 'test buffered messages': function(){
  101. var _server = server()
  102. , _socket = socket(_server, { transportOptions: {
  103. 'jsonp-polling': {
  104. closeTimeout: 100,
  105. duration: 200
  106. }
  107. } });
  108. listen(_server, function(){
  109. get(client(_server), '/socket.io/jsonp-polling/', function(data){
  110. var sessid = decode(data);
  111. assert.ok(_socket.clients[sessid]._open === false);
  112. assert.ok(_socket.clients[sessid].connected);
  113. _socket.clients[sessid].send('from server');
  114. get(client(_server), '/socket.io/jsonp-polling/' + sessid, function(data){
  115. var durationCheck;
  116. assert.ok(decode(data) == 'from server');
  117. setTimeout(function(){
  118. assert.ok(_socket.clients[sessid]._open);
  119. assert.ok(_socket.clients[sessid].connected);
  120. durationCheck = true;
  121. }, 50);
  122. get(client(_server), '/socket.io/jsonp-polling/' + sessid, function(){
  123. assert.ok(durationCheck);
  124. _server.close();
  125. });
  126. });
  127. });
  128. });
  129. }
  130. };