Bug 744663. (Bv1) Inline finishWSTest(), Use executeSoon() between sub-tests, Improve message contents, Receive "end" messages too, Add an additional forcegc(), Nits. r=smaug.
authorSerge Gautherie <sgautherie.bz@free.fr>
Tue, 24 Apr 2012 03:01:35 +0200
changeset 92148 03b56b258f69ee8b54a47d807f4fe34c407b5215
parent 92147 30404871c57ec6de3373acf7f0954706da15ef1f
child 92149 21da3f655b30f5dfb12e0da5764b0f0cb0fab10a
push id22518
push usersgautherie.bz@free.fr
push dateTue, 24 Apr 2012 01:10:58 +0000
treeherdermozilla-central@21da3f655b30 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssmaug
bugs744663
milestone14.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 744663. (Bv1) Inline finishWSTest(), Use executeSoon() between sub-tests, Improve message contents, Receive "end" messages too, Add an additional forcegc(), Nits. r=smaug. (a=test-only)
content/base/test/test_websocket_basic.html
--- a/content/base/test/test_websocket_basic.html
+++ b/content/base/test/test_websocket_basic.html
@@ -13,157 +13,158 @@
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
 const kUrl = "ws://mochi.test:8888/tests/content/base/test/file_websocket_basic";
 
 var ws;
 
-var results = ["test", "/tests/content/base/test/file_websocket_basic", "http://mochi.test:8888", "end"];
-
 function forcegc() {
   SpecialPowers.forceGC();
   SpecialPowers.gc();
 }
 
-function finishWSTest() {
-  SimpleTest.finish();
-}
-
 function testWebSocket() {
-  testWebSocket1();
+  SimpleTest.executeSoon(testWebSocket1);
 }
 
 /**
  * Sends message keywords, then receives their values.
  */
 function testWebSocket1() {
+  var results = ["test",
+                 "/tests/content/base/test/file_websocket_basic",
+                 "http://mochi.test:8888",
+                 "end"];
+
   ws = new WebSocket(kUrl, "test");
   is(ws.url, kUrl, "[1] WebSocket.url");
   ws.onopen = function(e) {
     const params = ["protocol", "resource", "origin", "end"];
 
     for (var i = 0; i < params.length; ++i) {
       document.getElementById('log').textContent += "sending " + params[i] + "\n";
       ws.send(params[i]);
     }
   };
   ws.onclose = function(e) {
     is(results.length, 0, "[1] Number of unreceived messages");
     ok(e.wasClean, "[1] Connection closed cleanly");
 
-    testWebSocket2();
+    SimpleTest.executeSoon(testWebSocket2);
   };
   ws.onerror = function(e) {
     ok(false, "[1] onerror() should not have been called!");
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
   ws.onmessage = function(e) {
     document.getElementById('log').textContent += "\n" + e.data;
     is(e.data, results[0], "[1] Received message");
     results.shift();
   };
 }
 
 /**
- * Sends 1000(+1) test messages, then receives them.
+ * Sends 1000+1 test messages, then receives them.
  */
 function testWebSocket2() {
   const testCount = 1000;
+  const testMessage = "test message 2.";
 
   var messageCount = 0;
-  var testMessage = "test message";
 
   ws = new WebSocket(kUrl, "test");
   ws.onopen = function(e) {
     for (var i = 1; i <= testCount; ++i) {
       ws.send(testMessage + i);
     }
     ws.send("end");
   };
   ws.onclose = function(e) {
-    is(messageCount, testCount, "[2] Number of received messages");
+    is(messageCount, testCount + 1, "[2] Number of received messages");
     ok(e.wasClean, "[2] Connection closed cleanly");
 
-    testWebSocket3();
+    SimpleTest.executeSoon(testWebSocket3);
   };
   ws.onerror = function(e) {
     ok(false, "[2] onerror() should not have been called!");
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
   ws.onmessage = function(e) {
     ++messageCount;
-    is(e.data, testMessage + messageCount, "[2] Received message");
+    if (messageCount > testCount)
+      is(e.data, "end", "[2] Received message");
+    else
+      is(e.data, testMessage + messageCount, "[2] Received message");
     document.getElementById('log').textContent = messageCount;
-    if (messageCount == testCount) {
-      this.onmessage = null;
-    }
   };
 }
 
 /**
- * Sends 100(+1) test messages, then receives them, calling forcegc() at each step.
+ * Sends 100+1 test messages, then receives them, calling forcegc() at each step.
  */
 function testWebSocket3() {
   const testCount = 100;
+  const testMessage = "test message 3.";
 
   var messageCount = 0;
-  var testMessage = "test message";
 
   ws = new WebSocket(kUrl, "test");
   ws.onopen = function(e) {
     for (var i = 1; i <= testCount; ++i) {
       forcegc();
       ws.send(testMessage + i);
     }
+    forcegc();
     ws.send("end");
   };
   ws.onclose = function(e) {
-    is(messageCount, testCount, "[3] Number of received messages");
+    is(messageCount, testCount + 1, "[3] Number of received messages");
     ok(e.wasClean, "[3] Connection closed cleanly");
 
-    testWebSocket4();
+    SimpleTest.executeSoon(testWebSocket4);
   };
   ws.onerror = function(e) {
     ok(false, "[3] onerror() should not have been called!");
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
   ws.onmessage = function(e) {
     forcegc();
     ++messageCount;
-    is(e.data, testMessage + messageCount, "[3] Received message");
+    if (messageCount > testCount)
+      is(e.data, "end", "[3] Received message");
+    else
+      is(e.data, testMessage + messageCount, "[3] Received message");
     document.getElementById('log').textContent = messageCount;
-    if (messageCount == testCount) {
-      this.onmessage = null;
-    }
   };
 }
 
 /**
  * Sends a huge test message, then receives it, then closes the WebSocket from client-side.
  */
 function testWebSocket4() {
+  // String length = 13 + ((10,000 - 1) * 26) + 11 = 259,998 = almost 254 KiB.
+  const longString = "messageStart " + new Array(10000).join(" -huge WebSocket message- ") + " messageEnd";
+
   ws = new WebSocket(kUrl, "test");
-  // String length = (10,000 - 1) * 23 = 229,977 = almost 225 KiB.
-  var longString = new Array(10000).join("-huge websocket message");
   ws.onopen = function(e) {
     is(this, ws, "[4, onopen()] 'this' should point to the WebSocket.");
     ws.send(longString);
   };
   ws.onclose = function(e) {
     is(this, ws, "[4, onclose()] 'this' should point to the WebSocket.");
     ok(e.wasClean, "[4] Connection closed cleanly");
 
-    testWebSocket5();
+    SimpleTest.executeSoon(testWebSocket5);
   };
   ws.onerror = function(e) {
     is(this, ws, "[4, onerror()] 'this' should point to the WebSocket.");
     ok(false, "[4, onerror()] should not have been called!");
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
   ws.onmessage = function(e) {
     is(this, ws, "[4, onmessage()] 'this' should point to the WebSocket.");
     // Do not use |is(e.data, longString, "...");| that results in a _very_ long line.
     is(e.data.length, longString.length, "[4] Length of received message");
     ok(e.data == longString, "[4] Content of received message");
     document.getElementById('log').textContent += "\nReceived the huge message";
     this.close();
@@ -182,21 +183,21 @@ function testWebSocket5() {
   ws.onclose = function(e) {
     ok(e.wasClean, "[5] Connection closed cleanly");
     is(this.bufferedAmount, 0, "[5] Length of empty buffer after closing");
 
     var msg = "test message to be buffered";
     this.send(msg);
     is(this.bufferedAmount, msg.length, "[5] Length of buffered message sent after closing");
 
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
   ws.onerror = function(e) {
     ok(false, "[5] onerror() should not have been called!");
-    finishWSTest();
+    SimpleTest.executeSoon(SimpleTest.finish);
   };
 }
 
 SimpleTest.waitForExplicitFinish();
 
 </script>
 <pre id="log">
 </pre>