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

/source/server/test/server.js

https://bitbucket.org/andrioid/netgrade-release
JavaScript | 271 lines | 215 code | 36 blank | 20 comment | 3 complexity | e355eac615af7a8024086a5cad3171b7 MD5 | raw file
  1. var system = require('../src/system');
  2. var http = system.http; // shorthand
  3. var dns = system.dns;
  4. var box = system.box;
  5. function measurement (token) {
  6. var t = this; // So sub functions can access the mother object
  7. this.token = token;
  8. this.statusCode = 0; // (0: Initial, 1: Done, 2: Server Pending, 3: Client Pending)+
  9. this.tasks = {};
  10. this.tasks.client = [];
  11. this.tasks.server = [];
  12. this.getStatus = function() {
  13. return {
  14. 'code': this.statusCode,
  15. 'tasks': this.tasks
  16. };
  17. };
  18. this.setStatus = function (s) {
  19. this.statusCode = s;
  20. };
  21. this.addTask = function(taskName, taskExecutor) {
  22. var tasks = t.tasks.server;
  23. switch (taskExecutor) {
  24. case 'client':
  25. tasks = t.tasks.client;
  26. break;
  27. default:
  28. // Assume it's server
  29. break;
  30. }
  31. tasks.push(taskName);
  32. };
  33. }
  34. function task() {
  35. this.executor = 'server';
  36. this.results = {};
  37. this.name = "Unnamed Measurement Task";
  38. }
  39. function getToken() {
  40. if (system.status != 1) {
  41. return system.status;
  42. }
  43. return "token123";
  44. }
  45. exports.common = {
  46. should_return_token_on_request: function(test) {
  47. var token = getToken();
  48. test.equal("token123", token);
  49. test.done();
  50. },
  51. should_return_error_token_when_over_capacity: function(test) {
  52. system.status = 2;
  53. var token = getToken();
  54. test.equal(2, token);
  55. test.done();
  56. },
  57. should_return_measurement_status_initial: function(test) {
  58. var token = getToken();
  59. var mes = new measurement(token);
  60. var status = mes.getStatus();
  61. test.equal(0, status.code); // We expect initial status
  62. test.done();
  63. },
  64. should_return_measurement_status_done: function(test) {
  65. var mes = new measurement(getToken());
  66. mes.setStatus(1); // Indicating the measurements are finished
  67. test.equal(1, mes.getStatus().code);
  68. test.done();
  69. },
  70. should_return_measurement_status_pending_server: function(test) {
  71. var mes = new measurement(getToken());
  72. mes.setStatus(2); // Pending on Server
  73. test.equal(2, mes.getStatus().code);
  74. test.done();
  75. },
  76. should_return_measurement_status_pending_client: function(test) {
  77. var mes = new measurement(getToken());
  78. mes.setStatus(3); // Pending on Client
  79. var status = mes.getStatus();
  80. test.equal(status.code, 3);
  81. test.done();
  82. },
  83. should_return_measurement_status_pending_client_task: function(test) {
  84. var mes = new measurement(getToken());
  85. mes.setStatus(3); // Pending on Client
  86. mes.addTask('download', 'client');
  87. var status = mes.getStatus();
  88. //console.log(mes.tasks);
  89. test.equal(status.tasks.client.length ,1);
  90. test.done();
  91. },
  92. should_have_handler_for_webroot: function(test) {
  93. test.equal('function',typeof(http.routes['/']));
  94. test.done();
  95. },
  96. should_not_have_handler_for_pie: function(test) {
  97. test.notEqual('function',typeof(http.routes['/pie']));
  98. test.done();
  99. },
  100. should_return_httpok_header_for_webroot: function(test) {
  101. var HttpCode;
  102. var response = {}; // mock object for the response
  103. var request = {};
  104. response.writeHead = function(code, contentType) {
  105. HttpCode = code;
  106. test.equal(HttpCode, 200);
  107. }
  108. response.write = function(data) {
  109. // stub
  110. }
  111. response.end = function() { /* stub */ }
  112. http.routes['/'](request, response);
  113. test.done();
  114. },
  115. should_fallback_to_filesystem_if_no_route_found: function(test) {
  116. var HttpCode = null;
  117. var response = {}; // mock object for the response
  118. var request = {};
  119. box.fileExists = function(uri, truecb, falsecb) { // mocking the file exist to always return true
  120. truecb();
  121. };
  122. box.readFile = function(uri, cb) {
  123. cb(null, "pie");
  124. }
  125. response.writeHead = function(code, contentType) {
  126. HttpCode = code;
  127. }
  128. response.write = function(data) {
  129. test.equal("pie", data);
  130. }
  131. response.end = function() { /* stub */ }
  132. //http.routes['/'](request, response);
  133. http.route('doesExist.html', request, response);
  134. test.done();
  135. },
  136. should_start_web_server: function(test) {
  137. http.listen = function(port) { // Mock the listen function
  138. return 1;
  139. }
  140. var ret = http.listen(8080);
  141. test.equal(ret, 1);
  142. test.done();
  143. },
  144. should_start_dns_server: function(test) {
  145. var called = false;
  146. dns.listen = function() { // Mock the listen function
  147. called = true;
  148. }
  149. dns.listen();
  150. test.equal(true,called);
  151. test.done();
  152. },
  153. should_reply_on_dns_requests: function(test) {
  154. var ass = false;
  155. var request = {
  156. question: [
  157. {type: 1, name: "local.netgrade.me"}
  158. ]
  159. };
  160. var response = {
  161. send: function() { ass = true; },
  162. header: {}
  163. };
  164. dns.responder(request, response);
  165. test.equal(true, ass);
  166. test.done();
  167. },
  168. should_return_404_when_no_handler_and_no_file: function(test) {
  169. var HttpCode = null;
  170. var response = {}; // mock object for the response
  171. var request = {};
  172. box.fileExists = function(uri, truecb, falsecb) { // mocking the file exist to always return false
  173. falsecb();
  174. };
  175. response.writeHead = function(code, contentType) {
  176. HttpCode = code;
  177. }
  178. response.write = function(data) {
  179. // stub
  180. }
  181. response.end = function() { /* stub */ }
  182. //http.routes['/'](request, response);
  183. http.route('doesNotExist.html', request, response);
  184. test.equal(404, HttpCode);
  185. test.done();
  186. },
  187. should_receive_mime_for_request: function(test) {
  188. var mimeResponse;
  189. var response = {
  190. writeHead: function(code, contentType) {
  191. mimeResponse = contentType;
  192. },
  193. write: function(data) {
  194. // stub
  195. },
  196. end: function() {
  197. // stub
  198. }
  199. }; // mock object for the response
  200. var request = {};
  201. http.route('/', request, response);
  202. test.equal(mimeResponse, "text/html");
  203. test.done();
  204. },
  205. should_return_sequence_number_for_host: function(test) {
  206. var testString = "1.2a3b4c5d6d7e8f9g.t.de.netgrade.me:8082";
  207. var res = box.parseHost(testString);
  208. test.equal(res.sequence, "1");
  209. test.done();
  210. },
  211. should_return_token_for_host: function(test) {
  212. var testString = "1.2a3b4c5d6d7e8f9g.t.de.netgrade.me:8082";
  213. var res = box.parseHost(testString);
  214. test.equal(res.token, "2a3b4c5d6d7e8f9g");
  215. test.done();
  216. },
  217. should_return_baseHost_for_host: function(test) {
  218. var testString = "1.2a3b4c5d6d7e8f9g.t.de.netgrade.me:8082";
  219. var res = box.parseHost(testString);
  220. test.equal(res.baseHost,"de.netgrade.me");
  221. test.done();
  222. }
  223. /*
  224. should_return_port_for_host: function(test) {
  225. }
  226. */
  227. /* (on hold)
  228. should_verify_results_of_client_task: function(test) {
  229. test.equal(1,0);
  230. test.done();
  231. }
  232. */
  233. };