multi-tape 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Changelog.md CHANGED
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.7.0] 2022-06-20
11
+
12
+ - Add a --controller argument
13
+
14
+ ## [1.6.1] 2021-01-29
15
+
16
+ - Add MT_DEBUG_INTERVAL setting
17
+ - Send SIGKILL if SIGTERM does not cause test to exit
18
+
19
+ ## [1.6.0] 2021-01-06
20
+
21
+ - Timeout for test execution
22
+
10
23
  ## [1.5.0] 2020-12-14
11
24
 
12
25
  - Build with github actions
package/README.md CHANGED
@@ -46,6 +46,10 @@ with output sent to stdout and print a summary at the end
46
46
  a junit xml-file. The output filename will be the name
47
47
  of the test-file with '.xml' appended.
48
48
 
49
+ - -t 10000 Timeout in ms for how long each test-file is allowed to run. Default is no timeout.
50
+
51
+ - --controller="command with parameters" Run a command before starting the tests. Wait for the command to print something on stdout before starting the tests. Kill the command when all tests are done.
52
+
49
53
  ## Exit code
50
54
 
51
55
  multi-tape exits with code 1 if any test failed as shown by the tap-results or
@@ -55,7 +59,7 @@ if any test-script exited with a non-zero code.
55
59
 
56
60
  MIT License
57
61
 
58
- Copyright (c) 2018-2020, Mattias Holmlund, <mattias@holmlund.se>
62
+ Copyright (c) 2018-2021, Mattias Holmlund, <mattias@holmlund.se>
59
63
 
60
64
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
61
65
 
package/build/index.js CHANGED
@@ -10,12 +10,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  });
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ const child_process_1 = require("child_process");
13
14
  const glob_1 = require("./lib/glob");
14
15
  const run_test_1 = require("./lib/run-test");
15
16
  const argv = require('minimist')(process.argv.slice(2), {
16
17
  boolean: ['o', 'j'],
17
18
  default: {
18
19
  p: 1,
20
+ t: 0,
19
21
  },
20
22
  });
21
23
  const results = new Map();
@@ -41,7 +43,7 @@ function thread() {
41
43
  let file;
42
44
  while ((file = files.shift())) {
43
45
  inProgress.add(file);
44
- const result = yield run_test_1.runTest(file, nodeArgs, argv.p === 1, argv.o, argv.j);
46
+ const result = yield run_test_1.runTest(file, nodeArgs, argv.p === 1, argv.o, argv.j, argv.t);
45
47
  inProgress.delete(file);
46
48
  results.set(file, result);
47
49
  }
@@ -49,8 +51,41 @@ function thread() {
49
51
  }
50
52
  function run() {
51
53
  return __awaiter(this, void 0, void 0, function* () {
54
+ let controller;
55
+ let controllerRunning = false;
56
+ if (argv.controller) {
57
+ yield new Promise((resolve, reject) => {
58
+ var _a, _b;
59
+ controller = child_process_1.spawn(argv.controller, [], {
60
+ shell: true,
61
+ stdio: ['ignore', 'pipe', 'pipe'],
62
+ });
63
+ (_a = controller.stdout) === null || _a === void 0 ? void 0 : _a.on('data', data => {
64
+ console.log(`controller: ${data}`);
65
+ controllerRunning = true;
66
+ resolve();
67
+ });
68
+ (_b = controller.stderr) === null || _b === void 0 ? void 0 : _b.on('data', data => {
69
+ console.error(`controller: ${data}`);
70
+ });
71
+ controller.on('error', code => {
72
+ reject();
73
+ console.log(`controller error ${code}`);
74
+ });
75
+ controller.on('close', () => {
76
+ controllerRunning = false;
77
+ });
78
+ });
79
+ }
52
80
  yield Promise.all(new Array(argv.p).fill(0).map(() => thread()));
53
- printSummary();
81
+ if (controller && controllerRunning) {
82
+ console.log('controller: stopping');
83
+ controller.once('close', () => printSummary());
84
+ controller.kill();
85
+ }
86
+ else {
87
+ printSummary();
88
+ }
54
89
  });
55
90
  }
56
91
  function printSummary() {
@@ -64,7 +99,7 @@ function printSummary() {
64
99
  }
65
100
  else if (!r.ok) {
66
101
  success = false;
67
- console.log(`FAIL ${file} (${timeStr}) ${r.pass}/${r.count}`);
102
+ console.log(`FAIL ${file} (${timeStr}) ${r.pass || 0}/${r.count || 0}`);
68
103
  }
69
104
  else {
70
105
  success = false;
@@ -82,5 +117,11 @@ function printSummary() {
82
117
  }
83
118
  process.on('SIGTERM', printInProgress);
84
119
  process.on('SIGINT', printInProgress);
120
+ if (process.env.MT_DEBUG_INTERVAL) {
121
+ setInterval(() => {
122
+ console.log(`## Queued: ${files.length}`);
123
+ console.log(`## Running: ${[...inProgress.keys()]}`);
124
+ }, parseInt(process.env.MT_DEBUG_INTERVAL)).unref();
125
+ }
85
126
  void run();
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQSxxQ0FBcUM7QUFDckMsNkNBQWdEO0FBRWhELE1BQU0sSUFBSSxHQU1OLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMzQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ25CLE9BQU8sRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ1A7Q0FDSixDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtBQUV6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0FBRXBDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ2xCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7S0FDckM7U0FBTTtRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7S0FDbEM7Q0FDSjtBQUVELE1BQU0sS0FBSyxHQUFHLGVBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtBQUVwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0FBRS9CLFNBQVMsZUFBZTtJQUNwQixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckIsQ0FBQyxD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
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQSxpREFBcUM7QUFDckMscUNBQXFDO0FBQ3JDLDZDQUFnRDtBQUVoRCxNQUFNLElBQUksR0FRTixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDM0MsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNuQixPQUFPLEVBQUU7UUFDTCxDQUFDLEVBQUUsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDO0tBQ1A7Q0FDSixDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtBQUV6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0FBRXBDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ2xCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7S0FDckM7U0FBTTtRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7S0FDbEM7Q0FDSjtBQUVELE1BQU0sS0FBSyxHQUFHLGVBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtBQUVwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0FBRS9CLFNBQVMsZUFBZTtJQUNwQixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxHQUFH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
@@ -3,4 +3,4 @@ export interface Result {
3
3
  executionTime: number;
4
4
  result: any;
5
5
  }
6
- export declare function runTest(filename: string, nodeArgs: string[], logConsole: boolean, outputToFile: boolean, junitOutput: boolean): Promise<Result>;
6
+ export declare function runTest(filename: string, nodeArgs: string[], logConsole: boolean, outputToFile: boolean, junitOutput: boolean, timeout: number): Promise<Result>;
@@ -16,7 +16,7 @@ const streams = require("stream-buffers");
16
16
  const child_process_1 = require("child_process");
17
17
  const fs_1 = require("fs");
18
18
  const path_1 = require("path");
19
- function runTest(filename, nodeArgs, logConsole, outputToFile, junitOutput) {
19
+ function runTest(filename, nodeArgs, logConsole, outputToFile, junitOutput, timeout) {
20
20
  return __awaiter(this, void 0, void 0, function* () {
21
21
  const extraEnv = {};
22
22
  if (junitOutput) {
@@ -27,8 +27,23 @@ function runTest(filename, nodeArgs, logConsole, outputToFile, junitOutput) {
27
27
  let proc = child_process_1.spawn('node', nodeArgs.concat(filename), {
28
28
  env: Object.assign(Object.assign({}, process.env), extraEnv),
29
29
  });
30
- let exited = new Promise(resolve => {
30
+ let aborted = false;
31
+ const exited = new Promise(resolve => {
32
+ let timer = timeout > 0
33
+ ? setTimeout(() => {
34
+ console.log(`## multi-tape: Timeout for ${path_1.basename(filename)}. Sending SIGTERM`);
35
+ proc.kill('SIGTERM');
36
+ aborted = true;
37
+ timer = setTimeout(() => {
38
+ console.log(`## multi-tape: Second timeout for ${path_1.basename(filename)}. Sending SIGKILL`);
39
+ proc.kill('SIGKILL');
40
+ }, 10000);
41
+ }, timeout)
42
+ : undefined;
31
43
  proc.on('exit', (exitCode, signal) => {
44
+ if (timer) {
45
+ clearTimeout(timer);
46
+ }
32
47
  resolve({ exitCode, signal });
33
48
  });
34
49
  });
@@ -48,9 +63,13 @@ function runTest(filename, nodeArgs, logConsole, outputToFile, junitOutput) {
48
63
  }
49
64
  proc.stderr.pipe(output);
50
65
  });
51
- const { exitCode, signal } = yield exited;
66
+ let { exitCode, signal } = yield exited;
52
67
  const endTime = Date.now();
53
- const result = yield parsed;
68
+ let result = yield parsed;
69
+ if (aborted) {
70
+ result += `\n\n# Test aborted after ${timeout}ms`;
71
+ exitCode = exitCode || 1;
72
+ }
54
73
  if (!logConsole) {
55
74
  const lines = output.getContentsAsString('utf8');
56
75
  if (lines) {
@@ -70,4 +89,4 @@ function runTest(filename, nodeArgs, logConsole, outputToFile, junitOutput) {
70
89
  });
71
90
  }
72
91
  exports.runTest = runTest;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcnVuLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQiwwQ0FBeUM7QUFDekMsaURBQXFDO0FBQ3JDLDJCQUFzQztBQUN0QywrQkFBK0I7QUFXL0IsU0FBc0IsT0FBTyxDQUN6QixRQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFtQixFQUNuQixZQUFxQixFQUNyQixXQUFvQjs7UUFFcEIsTUFBTSxRQUFRLEdBQUcsRUFBUyxDQUFBO1FBQzFCLElBQUksV0FBVyxFQUFFO1lBQ2IsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFBO1lBQzFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsZUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQzlDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzVCLElBQUksSUFBSSxHQUFHLHFCQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsR0FBRyxrQ0FDSSxPQUFPLENBQUMsR0FBRyxHQUNYLFFBQVEsQ0FDZDtTQUNKLENBQUMsQ0FBQTtRQUNGLElBQUksTUFBTSxHQUFHLElBQUksT0FBTyxDQUF1QyxPQUFPLENBQUMsRUFBRTtZQUNyRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLEVBQUU7Z0JBQ2pELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLE1BQU0sR0FBYSxVQUFVO1lBQy9CLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNoQixDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUV4QyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsUUFBUSxPQUFPLENBQUMsQ0FBQTtRQUV2QyxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBTSxPQUFPLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUUzQixJQUFJLFlBQVksRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTTtxQkFDTixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxzQkFBaUIsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQ3BCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUN4QztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUE7UUFFM0IsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE1BQU0sS0FBSyxHQUFJLE1BQXVDLENBQUMsbUJBQW1CLENBQ3RFLE1BQU0sQ0FDVCxDQUFBO1lBQ0QsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUNwQjthQUNKO1NBQ0o7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLHVCQUF1QixNQUFNLEVBQUUsQ0FBQyxDQUFBO1NBQzFEO1FBQ0QsT0FBTztZQUNILFFBQVE7WUFDUixhQUFhLEVBQUUsT0FBTyxHQUFHLFNBQVM7WUFDbEMsTUFBTTtTQUNULENBQUE7SUFDTCxDQUFDO0NBQUE7QUFwRUQsMEJBb0VDIn0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcnVuLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQiwwQ0FBeUM7QUFDekMsaURBQXFDO0FBQ3JDLDJCQUFzQztBQUN0QywrQkFBK0I7QUFXL0IsU0FBc0IsT0FBTyxDQUN6QixRQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFtQixFQUNuQixZQUFxQixFQUNyQixXQUFvQixFQUNwQixPQUFlOztRQUVmLE1BQU0sUUFBUSxHQUFHLEVBQVMsQ0FBQTtRQUMxQixJQUFJLFdBQVcsRUFBRTtZQUNiLFFBQVEsQ0FBQyxhQUFhLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQTtZQUMxQyxRQUFRLENBQUMsYUFBYSxHQUFHLGVBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUM5QztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUU1QixJQUFJLElBQUksR0FBRyxxQkFBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hELEdBQUcsa0NBQ0ksT0FBTyxDQUFDLEdBQUcsR0FDWCxRQUFRLENBQ2Q7U0FDSixDQUFDLENBQUE7UUFFRixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7UUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3RCLE9BQU8sQ0FBQyxFQUFFO1lBQ04sSUFBSSxLQUFLLEdBQ0wsT0FBTyxHQUFHLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FDUCw4QkFBOEIsZUFBUSxDQUNsQyxRQUFRLENBQ1gsbUJB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multi-tape",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "Runner for tape-tests",
5
5
  "bin": {
6
6
  "multi-tape": "build/index.js"