From bf65e226855db4fdf80b0f097355db22408a947b Mon Sep 17 00:00:00 2001 From: James Talmage Date: Thu, 5 Nov 2015 17:01:20 -0500 Subject: [PATCH] add failing test demonstrating long running onExit() hook in child process --- package.json | 1 + test/fixture/long-running.js | 17 +++++++++++++++-- test/fork.js | 9 +++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index be3ad3be7e..0adee4440c 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "devDependencies": { "coveralls": "^2.11.4", "nyc": "^3.2.2", + "signal-exit": "^2.1.2", "tap-dot": "^1.0.0", "tape": "^4.0.0", "xo": "*" diff --git a/test/fixture/long-running.js b/test/fixture/long-running.js index 5b964c5a0e..eeff7ff79d 100644 --- a/test/fixture/long-running.js +++ b/test/fixture/long-running.js @@ -1,12 +1,25 @@ 'use strict'; const test = require('../../'); +var onExit = require('signal-exit'); test('long running', function (t) { t.plan(1); + onExit(function () { + // simulate an exit hook that lasts a short while + var start = Date.now(); + while(Date.now() - start < 2000) { + //synchronously wait for 2 seconds + } + process.send('cleanup-completed', true); + }); + + setTimeout(function () { + t.ok(true); + }); + setTimeout(function () { + // this would keep the process running for a long time. console.log('I\'m gonna live forever!!'); }, 15000); - - t.ok(true); }); diff --git a/test/fork.js b/test/fork.js index 11c9bb3824..c41fbfeb9c 100644 --- a/test/fork.js +++ b/test/fork.js @@ -41,12 +41,17 @@ test('rejects on error and streams output', function (t) { }); test('exit after tests are finished', function (t) { - t.plan(1); + t.plan(2); var start = Date.now(); + var cleanupCompleted = false; fork(fixture('long-running.js')) .on('exit', function () { - t.ok(Date.now() - start < 10000); + t.ok(Date.now() - start < 10000, 'did NOT wait for setTimeout(fn, 15000'); + t.ok(cleanupCompleted, 'did wait for onExit(fn) to complete'); + }) + .on('cleanup-completed', function (completed) { + cleanupCompleted = completed; }); });