File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ This directory contains modules used to test the Node.js implementation.
55## Table of Contents
66
77* [ Common module API] ( #common-module-api )
8+ * [ Duplex pair helper] ( #duplex-pair-helper )
89* [ WPT module] ( #wpt-module )
910
1011## Common Module API
@@ -318,6 +319,14 @@ Decrements the `Countdown` counter.
318319Specifies the remaining number of times ` Countdown.prototype.dec() ` must be
319320called before the callback is invoked.
320321
322+ ## Duplex pair helper
323+
324+ The ` common/duplexpair ` module exports a single function ` makeDuplexPair ` ,
325+ which returns an object ` { clientSide, serverSide } ` where each side is a
326+ ` Duplex ` stream connected to the other side.
327+
328+ There is no difference between client or server side beyond their names.
329+
321330## Fixtures Module
322331
323332The ` common/fixtures ` module provides convenience methods for working with
Original file line number Diff line number Diff line change 1+ /* eslint-disable required-modules */
2+ 'use strict' ;
3+ const { Duplex } = require ( 'stream' ) ;
4+ const assert = require ( 'assert' ) ;
5+
6+ const kCallback = Symbol ( 'Callback' ) ;
7+ const kOtherSide = Symbol ( 'Other' ) ;
8+
9+ class DuplexSocket extends Duplex {
10+ constructor ( ) {
11+ super ( ) ;
12+ this [ kCallback ] = null ;
13+ this [ kOtherSide ] = null ;
14+ }
15+
16+ _read ( ) {
17+ const callback = this [ kCallback ] ;
18+ if ( callback ) {
19+ this [ kCallback ] = null ;
20+ callback ( ) ;
21+ }
22+ }
23+
24+ _write ( chunk , encoding , callback ) {
25+ assert . notStrictEqual ( this [ kOtherSide ] , null ) ;
26+ assert . strictEqual ( this [ kOtherSide ] [ kCallback ] , null ) ;
27+ this [ kOtherSide ] [ kCallback ] = callback ;
28+ this [ kOtherSide ] . push ( chunk ) ;
29+ }
30+
31+ _final ( callback ) {
32+ this [ kOtherSide ] . on ( 'end' , callback ) ;
33+ this [ kOtherSide ] . push ( null ) ;
34+ }
35+ }
36+
37+ function makeDuplexPair ( ) {
38+ const clientSide = new DuplexSocket ( ) ;
39+ const serverSide = new DuplexSocket ( ) ;
40+ clientSide [ kOtherSide ] = serverSide ;
41+ serverSide [ kOtherSide ] = clientSide ;
42+ return { clientSide, serverSide } ;
43+ }
44+
45+ module . exports = makeDuplexPair ;
You can’t perform that action at this time.
0 commit comments