summaryrefslogtreecommitdiff
path: root/test/parallel/test-worker-stdio.js
blob: d4c008713bf918e2221bed059676588bbfd7e4a5 (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
'use strict';
const common = require('../common');
const assert = require('assert');
const fs = require('fs');
const util = require('util');
const { Writable } = require('stream');
const { Worker, isMainThread } = require('worker_threads');

class BufferingWritable extends Writable {
  constructor() {
    super();
    this.chunks = [];
  }

  _write(chunk, enc, cb) {
    this.chunks.push(chunk);
    cb();
  }

  get buffer() {
    return Buffer.concat(this.chunks);
  }
}

if (isMainThread) {
  const original = new BufferingWritable();
  const passed = new BufferingWritable();

  const w = new Worker(__filename, { stdin: true, stdout: true });
  const source = fs.createReadStream(process.execPath);
  source.pipe(w.stdin);
  source.pipe(original);
  w.stdout.pipe(passed);

  passed.on('finish', common.mustCall(() => {
    assert.strictEqual(original.buffer.compare(passed.buffer), 0,
                       `Original: ${util.inspect(original.buffer)}, ` +
                       `Actual: ${util.inspect(passed.buffer)}`);
  }));
} else {
  process.stdin.pipe(process.stdout);
}