wspeedtest.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. }
  70. }
  71. closing();
  72. } else {
  73. console.log("WebSocket Setup Failed.")
  74. }
  75. function downloadTest() {
  76. var CurrentPow = 0;
  77. var CurrentDif = 0;
  78. websocket.send("Waiting for the string to be generated...");
  79. //randomStr = rnd(10000);
  80. randomStr = appdata.readFile("Speedtest/special/random1MB.txt");
  81. var filesize = "DATA:".length + randomStr.length;
  82. websocket.send("Generated");
  83. waitForStart();
  84. while (CurrentDif < 5) {
  85. var CurrentMB = Math.pow(2, CurrentPow);
  86. websocket.send("Current File Size:" + bytesToSize(CurrentMB * 1024 * 1024));
  87. var start = new Date();
  88. //websocket.send("Start: " + start.toString());
  89. for (var i = 0; i < CurrentMB; i++) {
  90. websocket.send("DATA:" + randomStr);
  91. }
  92. var end = new Date();
  93. //websocket.send("End: " + end.toString());
  94. CurrentDif = (end.getTime() - start.getTime()) / 1000;
  95. CurrentPow++;
  96. }
  97. websocket.send("Total transmitted:" + bytesToSize(CurrentMB * filesize));
  98. websocket.send("Total time:" + CurrentDif + "s");
  99. websocket.send("Bandwidth:" + bytesToSize(CurrentMB * filesize / CurrentDif) + "/s OR " + bytesToSpeed(CurrentMB * filesize / CurrentDif));
  100. }
  101. function uploadTest() {
  102. websocket.send("UPL");
  103. var recv = "";
  104. while (true) {
  105. //Read the websocket input from Client (Web UI)
  106. recv = websocket.read();
  107. if (recv == null) {
  108. console.log("Read Failed!")
  109. break;
  110. }
  111. if (recv == "stop") {
  112. websocket.send("Stopped.");
  113. break;
  114. }
  115. }
  116. }
  117. //https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
  118. function rnd(length) {
  119. var result = '';
  120. var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  121. var charactersLength = characters.length;
  122. for (var i = 0; i < length; i++) {
  123. result += characters.charAt(Math.floor(Math.random() *
  124. charactersLength));
  125. }
  126. return result;
  127. }
  128. //https://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
  129. function bytesToSize(bytes) {
  130. var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  131. if (bytes == 0) return '0 Byte';
  132. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  133. return Math.round((bytes / Math.pow(1024, i)) * 100, 3) / 100 + ' ' + sizes[i];
  134. }
  135. function bytesToSpeed(bytes) {
  136. bytes = bytes * 8;
  137. var sizes = ['bps', 'Kbps', 'Mbps', 'Gbps', 'Tbps'];
  138. if (bytes == 0) return '0 Byte';
  139. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1000)));
  140. return Math.round((bytes / Math.pow(1000, i)) * 100, 3) / 100 + ' ' + sizes[i];
  141. }