wspeedtest.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. if (!requirelib("appdata")) {
  2. console.log("appdata import failed");
  3. }
  4. /*
  5. WebSocket Test Script
  6. This is a special test script and should not be mixed in with normal
  7. AGI module test scripts. Please test this seperately
  8. Author: tobychui
  9. */
  10. function setup() {
  11. //Require the WebSocket Library
  12. var succ = requirelib("websocket");
  13. if (!succ) {
  14. console.log("WebSocket Open Failed");
  15. return false
  16. }
  17. //Upgrade the current connection to WebSocket, set timeout to 30 seconds
  18. //Timeout value: if after 30 seconds nothing has been send / received, the websocket will be closed
  19. //set this value to 0 to display auto socket closing
  20. succ = websocket.upgrade(30);
  21. if (!succ) {
  22. console.log("WebSocket Upgrade Failed");
  23. return false
  24. }
  25. console.log("WebSocket Opened!")
  26. return true;
  27. }
  28. function waitForStart() {
  29. /*
  30. websocket.send("Send 'start' to start websocket.send test");
  31. var recv = "";
  32. for (var i = 0; i < 10; i++) {
  33. //Read the websocket input from Client (Web UI)
  34. recv = websocket.read();
  35. if (recv == null) {
  36. console.log("Read Failed!")
  37. return
  38. }
  39. if (recv != "start") {
  40. websocket.send(recv + " reveived. Type 'start' to start testing. (Retry count: " + i + "/10)");
  41. } else {
  42. websocket.send("'start' command received. Starting test");
  43. break;
  44. }
  45. }
  46. */
  47. }
  48. function closing() {
  49. //Try to close the WebSocket connection
  50. websocket.close();
  51. }
  52. //Start executing the script
  53. if (setup()) {
  54. websocket.send("DWL/UPL?");
  55. var recv = "";
  56. while (true) {
  57. //Read the websocket input from Client (Web UI)
  58. recv = websocket.read();
  59. if (recv == null) {
  60. console.log("Read Failed!")
  61. break;
  62. }
  63. if (recv == "DWL") {
  64. downloadTest();
  65. break;
  66. } else if (recv == "UPL") {
  67. uploadTest();
  68. break;
  69. } else if (recv == "PING") {
  70. pingTest();
  71. break;
  72. }
  73. }
  74. closing();
  75. } else {
  76. console.log("WebSocket Setup Failed.")
  77. }
  78. function downloadTest() {
  79. var CurrentPow = 0;
  80. var CurrentDif = 0;
  81. randomStr = appdata.readFile("Speedtest/special/random1MB.txt");
  82. var filesize = "DATA:".length + randomStr.length;
  83. waitForStart();
  84. while (CurrentDif < 5) {
  85. var CurrentMB = Math.pow(2, CurrentPow);
  86. var start = new Date();
  87. for (var i = 0; i < CurrentMB; i++) {
  88. websocket.send("DATA:" + randomStr);
  89. }
  90. var end = new Date();
  91. CurrentDif = (end.getTime() - start.getTime()) / 1000;
  92. websocket.send("TIME_DIFF=" + CurrentDif);
  93. CurrentPow++;
  94. }
  95. websocket.send("TTL_SIZE=" + bytesToSize(CurrentMB * filesize));
  96. websocket.send("TTL_TIME=" + CurrentDif + "s");
  97. websocket.send("TTL_BANDWIDTH=" + bytesToSpeed(CurrentMB * filesize / CurrentDif));
  98. }
  99. function uploadTest() {
  100. websocket.send("UPL");
  101. var recv = "";
  102. while (true) {
  103. //Read the websocket input from Client (Web UI)
  104. recv = websocket.read();
  105. if (recv == null) {
  106. console.log("Read Failed!")
  107. break;
  108. }
  109. if (recv == "stop") {
  110. websocket.send("Stopped.");
  111. break;
  112. }
  113. }
  114. }
  115. function pingTest() {
  116. websocket.send("UPL");
  117. var recv = "";
  118. for (var i = 0; i < 3; i++) {
  119. //Read the websocket input from Client (Web UI)
  120. recv = websocket.read();
  121. if (recv == null) {
  122. console.log("Read Failed!")
  123. break;
  124. } else {
  125. var rcvTime = new Date().getTime();
  126. var sendTime = new Date().getTime();
  127. websocket.send(rcvTime + "," + sendTime);
  128. }
  129. if (recv == "stop") {
  130. websocket.send("Stopped.");
  131. break;
  132. }
  133. }
  134. }
  135. //https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
  136. function rnd(length) {
  137. var result = '';
  138. var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  139. var charactersLength = characters.length;
  140. for (var i = 0; i < length; i++) {
  141. result += characters.charAt(Math.floor(Math.random() *
  142. charactersLength));
  143. }
  144. return result;
  145. }
  146. //https://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
  147. function bytesToSize(bytes) {
  148. var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  149. if (bytes == 0) return '0 Byte';
  150. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  151. return Math.round((bytes / Math.pow(1024, i)) * 100, 3) / 100 + ' ' + sizes[i];
  152. }
  153. function bytesToSpeed(bytes) {
  154. bytes = bytes * 8;
  155. var sizes = ['bps', 'Kbps', 'Mbps', 'Gbps', 'Tbps'];
  156. if (bytes == 0) return '0 Byte';
  157. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1000)));
  158. return Math.round((bytes / Math.pow(1000, i)) * 100, 3) / 100 + ' ' + sizes[i];
  159. }