aboutsummaryrefslogtreecommitdiff
path: root/test/ufuzz/job.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/ufuzz/job.js')
-rw-r--r--test/ufuzz/job.js84
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) {