diff options
Diffstat (limited to 'test/ufuzz/job.js')
-rw-r--r-- | test/ufuzz/job.js | 84 |
1 files changed, 52 insertions, 32 deletions
diff --git a/test/ufuzz/job.js b/test/ufuzz/job.js index 5d4add83..e4d9ece7 100644 --- a/test/ufuzz/job.js +++ b/test/ufuzz/job.js @@ -1,43 +1,63 @@ +var actions = require("./actions"); var child_process = require("child_process"); -var ping = 5 * 60 * 1000; -var period = +process.argv[2]; -var endTime = period < 0 ? period : Date.now() + period; -for (var i = 0; i < 2; i++) spawn(endTime); - -function spawn(endTime) { - var args = [ - "--max-old-space-size=2048", - "test/ufuzz" - ]; - if (endTime < 0) args.push(-endTime); - var child = child_process.spawn("node", args, { - stdio: [ "ignore", "pipe", "pipe" ] - }).on("exit", respawn); - var stdout = ""; - child.stdout.on("data", function(data) { - stdout += data; +var args = [ + "--max-old-space-size=2048", + "test/ufuzz", +]; +var iterations; +switch (process.argv.length) { + case 3: + iterations = +process.argv[2]; + args.push(iterations); + break; + case 5: + actions.init(process.argv[2], process.argv[3], +process.argv[4]); + break; + default: + throw new Error("invalid parameters"); +} +var tasks = [ run(), run() ]; +if (iterations) return; +var alive = setInterval(function() { + actions.should_stop(function() { + clearInterval(alive); + tasks.forEach(function(kill) { + kill(); + }); }); - var stderr = ""; - child.stderr.on("data", trap).pipe(process.stdout); - var keepAlive = setInterval(function() { - var end = stdout.lastIndexOf("\r"); - console.log(stdout.slice(stdout.lastIndexOf("\r", end - 1) + 1, end)); - stdout = stdout.slice(end + 1); - }, ping); - if (endTime < 0) return; - var timer = setTimeout(function() { - clearInterval(keepAlive); +}, 8 * 60 * 1000); + +function run() { + var child, stdout, stderr, log; + spawn(); + return function() { + clearInterval(log); child.removeListener("exit", respawn); child.kill(); - }, endTime - Date.now()); + }; + + function spawn() { + child = child_process.spawn("node", args, { + stdio: [ "ignore", "pipe", "pipe" ] + }).on("exit", respawn); + stdout = ""; + child.stdout.on("data", function(data) { + stdout += data; + }); + stderr = ""; + child.stderr.on("data", trap).pipe(process.stdout); + log = setInterval(function() { + var end = stdout.lastIndexOf("\r"); + console.log(stdout.slice(stdout.lastIndexOf("\r", end - 1) + 1, end)); + stdout = stdout.slice(end + 1); + }, 5 * 60 * 1000); + } function respawn() { console.log(stdout.replace(/[^\r\n]*\r/g, "")); - clearInterval(keepAlive); - if (endTime < 0) return; - clearTimeout(timer); - spawn(endTime); + clearInterval(log); + if (!iterations) spawn(); } function trap(data) { |