Browse Source

fix: possible timing issue in utility-process spec (#45728)

This fixture has been calling process.exit() immediately after writing
to stdout and stderr, which the Node.js docs say is risky behavior:

> Calling process.exit() will force the process to exit as quickly as
> possible even if there are still asynchronous operations pending that
> have not yet completed fully, including I/O operations to
> process.stdout and process.stderr.

This fixture's been around for years without problems (AFAIK).
The writes are very small ('hello\n' and 'world') and finish quickly.
But recently I've been testing on a very slow CI machine. There, I see
this spec flaking when it expects stderr to be 'world' but it gets ''.

This PR changes the fixture to wait for stdout & stderr to flush
before calling process.exit().

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <[email protected]>
trop[bot] 2 months ago
parent
commit
727e218c47
1 changed files with 7 additions and 3 deletions
  1. 7 3
      spec/fixtures/api/utility-process/log.js

+ 7 - 3
spec/fixtures/api/utility-process/log.js

@@ -1,3 +1,7 @@
-console.log('hello');
-process.stderr.write('world');
-process.exit(0);
+function write (writable, chunk) {
+  return new Promise((resolve) => writable.write(chunk, resolve));
+}
+
+write(process.stdout, 'hello\n')
+  .then(() => write(process.stderr, 'world'))
+  .then(() => process.exit(0));