summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-10-22 17:05:05 +0200
committerAnna Henningsen <anna@addaleax.net>2017-10-23 16:50:43 +0200
commite340a66cb1c951620b360b9420269b36c742ba57 (patch)
treee918014ae11bba804f392c6e3f2dfab7354e70ad
parent170bc3166963a9d8811b5bcdd45de6b12827f55c (diff)
downloadandroid-node-v8-e340a66cb1c951620b360b9420269b36c742ba57.tar.gz
android-node-v8-e340a66cb1c951620b360b9420269b36c742ba57.tar.bz2
android-node-v8-e340a66cb1c951620b360b9420269b36c742ba57.zip
test: add `makeDuplexPair()` helper
Add a utility for adding simple, streams-API based duplex pairs. PR-URL: https://github.com/nodejs/node/pull/16269 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--test/common/README.md9
-rw-r--r--test/common/duplexpair.js45
2 files changed, 54 insertions, 0 deletions
diff --git a/test/common/README.md b/test/common/README.md
index 93106ad076..46eb001df8 100644
--- a/test/common/README.md
+++ b/test/common/README.md
@@ -8,6 +8,7 @@ This directory contains modules used to test the Node.js implementation.
* [Common module API](#common-module-api)
* [Countdown module](#countdown-module)
* [DNS module](#dns-module)
+* [Duplex pair helper](#duplex-pair-helper)
* [Fixtures module](#fixtures-module)
* [WPT module](#wpt-module)
@@ -458,6 +459,14 @@ Reads a Domain String and returns a Buffer containing the domain.
Takes in a parsed Object and writes its fields to a DNS packet as a Buffer
object.
+## Duplex pair helper
+
+The `common/duplexpair` module exports a single function `makeDuplexPair`,
+which returns an object `{ clientSide, serverSide }` where each side is a
+`Duplex` stream connected to the other side.
+
+There is no difference between client or server side beyond their names.
+
## Fixtures Module
The `common/fixtures` module provides convenience methods for working with
diff --git a/test/common/duplexpair.js b/test/common/duplexpair.js
new file mode 100644
index 0000000000..ea5bd86a04
--- /dev/null
+++ b/test/common/duplexpair.js
@@ -0,0 +1,45 @@
+/* eslint-disable required-modules */
+'use strict';
+const { Duplex } = require('stream');
+const assert = require('assert');
+
+const kCallback = Symbol('Callback');
+const kOtherSide = Symbol('Other');
+
+class DuplexSocket extends Duplex {
+ constructor() {
+ super();
+ this[kCallback] = null;
+ this[kOtherSide] = null;
+ }
+
+ _read() {
+ const callback = this[kCallback];
+ if (callback) {
+ this[kCallback] = null;
+ callback();
+ }
+ }
+
+ _write(chunk, encoding, callback) {
+ assert.notStrictEqual(this[kOtherSide], null);
+ assert.strictEqual(this[kOtherSide][kCallback], null);
+ this[kOtherSide][kCallback] = callback;
+ this[kOtherSide].push(chunk);
+ }
+
+ _final(callback) {
+ this[kOtherSide].on('end', callback);
+ this[kOtherSide].push(null);
+ }
+}
+
+function makeDuplexPair() {
+ const clientSide = new DuplexSocket();
+ const serverSide = new DuplexSocket();
+ clientSide[kOtherSide] = serverSide;
+ serverSide[kOtherSide] = clientSide;
+ return { clientSide, serverSide };
+}
+
+module.exports = makeDuplexPair;