test: increase timeouts on ARM
authorRoman Reiss <me@silverwind.io>
Tue, 7 Apr 2015 18:41:07 +0000 (20:41 +0200)
committerRoman Reiss <me@silverwind.io>
Thu, 9 Apr 2015 13:10:34 +0000 (15:10 +0200)
This commit introduces platform-specific test timeouts for the ARM
architectures. ARMv6 is notoriously slow so gets very large timeouts on
both the timeout value for each test, as well as certain problematic
individual tests. ARMv7 and ARMv8 also get slightly increased headroom.

PR-URL: https://github.com/iojs/io.js/pull/1366
Fixes: https://github.com/iojs/io.js/issues/1343
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
12 files changed:
test/common.js
test/parallel/test-child-process-fork-net2.js
test/parallel/test-debug-signal-cluster.js
test/parallel/test-fs-empty-readStream.js
test/parallel/test-http-end-throw-socket-handling.js
test/parallel/test-repl-timeout-throw.js
test/parallel/test-tls-fast-writing.js
test/parallel/test-tls-wrap-timeout.js
test/sequential/test-force-repl.js
test/sequential/test-net-GH-5504.js
tools/test.py
tools/utils.py

index 1ef491e..1e85d3d 100644 (file)
@@ -179,6 +179,16 @@ exports.spawnPwd = function(options) {
   }
 };
 
+exports.platformTimeout = function(ms) {
+  if (process.arch !== 'arm')
+    return ms;
+
+  if (process.config.variables.arm_version === '6')
+    return 6 * ms;  // ARMv6
+
+  return 2 * ms;  // ARMv7 and up.
+};
+
 var knownGlobals = [setTimeout,
                     setInterval,
                     setImmediate,
index 171abb7..c69fe84 100644 (file)
@@ -128,13 +128,13 @@ if (process.argv[2] === 'child') {
 
   server.listen(common.PORT, '127.0.0.1');
 
-  var timeElasped = 0;
+  var timeElapsed = 0;
   var closeServer = function() {
     console.error('[m] closeServer');
     var startTime = Date.now();
     server.on('close', function() {
       console.error('[m] emit(close)');
-      timeElasped = Date.now() - startTime;
+      timeElapsed = Date.now() - startTime;
     });
 
     console.error('[m] calling server.close');
@@ -149,11 +149,14 @@ if (process.argv[2] === 'child') {
     }, 200);
   };
 
+  var min = 190;
+  var max = common.platformTimeout(1500);
   process.on('exit', function() {
     assert.equal(disconnected, count);
     assert.equal(connected, count);
     assert.ok(closeEmitted);
-    assert.ok(timeElasped >= 190 && timeElasped <= 1000,
-              'timeElasped was not between 190 and 1000 ms');
+    assert.ok(timeElapsed >= min && timeElapsed <= max,
+              `timeElapsed was not between ${min} and ${max} ms:` +
+              `${timeElapsed}`);
   });
 }
index 026e293..c8b0387 100644 (file)
@@ -51,7 +51,7 @@ function onNoMoreLines() {
 
 setTimeout(function testTimedOut() {
   assert(false, 'test timed out.');
-}, 6000).unref();
+}, common.platformTimeout(3000)).unref();
 
 process.on('exit', function onExit() {
   // Kill processes in reverse order to avoid timing problems on Windows where
index bd6e191..0c47007 100644 (file)
@@ -22,7 +22,7 @@ fs.open(emptyFile, 'r', function (error, fd) {
 
   setTimeout(function () {
     assert.equal(readEmit, true);
-  }, 50);
+  }, common.platformTimeout(50));
 });
 
 fs.open(emptyFile, 'r', function (error, fd) {
@@ -43,5 +43,5 @@ fs.open(emptyFile, 'r', function (error, fd) {
 
   setTimeout(function () {
     assert.equal(readEmit, false);
-  }, 50);
+  }, common.platformTimeout(50));
 });
index a8566be..92a5ae6 100644 (file)
@@ -32,7 +32,7 @@ server.listen(common.PORT, function() {
 setTimeout(function() {
   process.removeListener('uncaughtException', catcher);
   throw new Error('Taking too long!');
-}, 1000).unref();
+}, common.platformTimeout(1000)).unref();
 
 process.on('uncaughtException', catcher);
 var errors = 0;
index f171341..eea2bea 100644 (file)
@@ -44,7 +44,7 @@ child.stdout.once('data', function() {
                       '  });\n' +
                       '});"";\n');
 
-    setTimeout(child.stdin.end.bind(child.stdin), 200);
+    setTimeout(child.stdin.end.bind(child.stdin), common.platformTimeout(200));
   }
 });
 
index 7fd3c8f..e9245aa 100644 (file)
@@ -22,7 +22,7 @@ var gotDrain = false;
 var timer = setTimeout(function() {
   console.log('not ok - timed out');
   process.exit(1);
-}, 500);
+}, common.platformTimeout(500));
 
 function onconnection(conn) {
   conn.on('data', function(c) {
index 7bb5bb1..3013f68 100644 (file)
@@ -27,7 +27,9 @@ var server = tls.createServer(options, function(c) {
 
 server.listen(common.PORT, function() {
   var socket = net.connect(common.PORT, function() {
-    socket.setTimeout(240, assert.fail);
+    socket.setTimeout(common.platformTimeout(240), function() {
+      throw new Error('timeout');
+    });
 
     var tsocket = tls.connect({
       socket: socket,
index fa17297..c0ad148 100644 (file)
@@ -7,7 +7,7 @@ var cp = spawn(process.execPath, ['-i']);
 var gotToEnd = false;
 var timeoutId = setTimeout(function() {
   throw new Error('timeout!');
-}, 1000); // give node + the repl 1 second to boot up
+}, common.platformTimeout(1000)); // give node + the repl 1 second to boot up
 
 cp.stdout.setEncoding('utf8');
 
index ef2e1ce..2ee0a1d 100644 (file)
@@ -72,7 +72,7 @@ function parent() {
     setTimeout(function() {
       throw new Error('hang');
     });
-  }, 4000).unref();
+  }, common.platformTimeout(2000)).unref();
 
   var s = spawn(node, [__filename, 'server'], opt);
   var c;
index efb2ed7..1de2661 100755 (executable)
@@ -729,8 +729,9 @@ FLAGS = {
     'debug'   : ['--enable-slow-asserts', '--debug-code', '--verify-heap'],
     'release' : []}
 TIMEOUT_SCALEFACTOR = {
-    'arm'  : { 'debug' : 8, 'release' : 2 },  # The ARM buildbots are slow.
-    'ia32' : { 'debug' : 4, 'release' : 1 } }
+    'armv6' : { 'debug' : 12, 'release' : 3 },  # The ARM buildbots are slow.
+    'arm'   : { 'debug' :  8, 'release' : 2 },
+    'ia32'  : { 'debug' :  4, 'release' : 1 } }
 
 
 class Context(object):
index 2b312a2..03c56ae 100644 (file)
@@ -73,7 +73,9 @@ def GuessOS():
 def GuessArchitecture():
   id = platform.machine()
   id = id.lower()  # Windows 7 capitalizes 'AMD64'.
-  if id.startswith('arm') or id == 'aarch64':
+  if id.startswith('armv6'): # Can return 'armv6l'.
+    return 'armv6'
+  elif id.startswith('arm') or id == 'aarch64':
     return 'arm'
   elif (not id) or (not re.match('(x|i[3-6])86$', id) is None):
     return 'ia32'