aboutsummaryrefslogtreecommitdiff
path: root/test/ufuzz/job.js
blob: e4d9ece764e33df50e7440819f27ed49ec1ac728 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var actions = require("./actions");
var child_process = require("child_process");

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();
        });
    });
}, 8 * 60 * 1000);

function run() {
    var child, stdout, stderr, log;
    spawn();
    return function() {
        clearInterval(log);
        child.removeListener("exit", respawn);
        child.kill();
    };

    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(log);
        if (!iterations) spawn();
    }

    function trap(data) {
        stderr += data;
        if (~stderr.indexOf("\nminify(options):\n")) {
            process.exitCode = 1;
            child.stderr.removeListener("data", trap);
        }
    }
}