thread-stream 3.1.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/test/base.test.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { readFile } = require('fs')
6
7
  const { file } = require('./helper')
@@ -8,9 +9,7 @@ const ThreadStream = require('..')
8
9
  const { MessageChannel } = require('worker_threads')
9
10
  const { once } = require('events')
10
11
 
11
- test('base sync=true', function (t) {
12
- t.plan(15)
13
-
12
+ test('base sync=true', function (t, done) {
14
13
  const dest = file()
15
14
  const stream = new ThreadStream({
16
15
  filename: join(__dirname, 'to-file.js'),
@@ -18,37 +17,35 @@ test('base sync=true', function (t) {
18
17
  sync: true
19
18
  })
20
19
 
21
- t.same(stream.writableObjectMode, false)
20
+ assert.deepStrictEqual(stream.writableObjectMode, false)
22
21
 
23
- t.same(stream.writableFinished, false)
22
+ assert.deepStrictEqual(stream.writableFinished, false)
24
23
  stream.on('finish', () => {
25
- t.same(stream.writableFinished, true)
24
+ assert.deepStrictEqual(stream.writableFinished, true)
26
25
  readFile(dest, 'utf8', (err, data) => {
27
- t.error(err)
28
- t.equal(data, 'hello world\nsomething else\n')
26
+ assert.ifError(err)
27
+ assert.strictEqual(data, 'hello world\nsomething else\n')
29
28
  })
30
29
  })
31
30
 
32
- t.same(stream.closed, false)
31
+ assert.deepStrictEqual(stream.closed, false)
33
32
  stream.on('close', () => {
34
- t.same(stream.closed, true)
35
- t.notOk(stream.writable)
36
- t.pass('close emitted')
33
+ assert.deepStrictEqual(stream.closed, true)
34
+ assert.ok(!stream.writable)
35
+ done()
37
36
  })
38
37
 
39
- t.same(stream.writableNeedDrain, false)
40
- t.ok(stream.write('hello world\n'))
41
- t.ok(stream.write('something else\n'))
42
- t.ok(stream.writable)
38
+ assert.deepStrictEqual(stream.writableNeedDrain, false)
39
+ assert.ok(stream.write('hello world\n'))
40
+ assert.ok(stream.write('something else\n'))
41
+ assert.ok(stream.writable)
43
42
 
44
- t.same(stream.writableEnded, false)
43
+ assert.deepStrictEqual(stream.writableEnded, false)
45
44
  stream.end()
46
- t.same(stream.writableEnded, true)
45
+ assert.deepStrictEqual(stream.writableEnded, true)
47
46
  })
48
47
 
49
- test('overflow sync=true', function (t) {
50
- t.plan(3)
51
-
48
+ test('overflow sync=true', function (t, done) {
52
49
  const dest = file()
53
50
  const stream = new ThreadStream({
54
51
  bufferSize: 128,
@@ -73,19 +70,16 @@ test('overflow sync=true', function (t) {
73
70
 
74
71
  write()
75
72
 
76
- stream.on('finish', () => {
77
- t.pass('finish emitted')
78
- })
79
-
80
73
  stream.on('close', () => {
81
74
  readFile(dest, 'utf8', (err, data) => {
82
- t.error(err)
83
- t.equal(data.length, 200)
75
+ assert.ifError(err)
76
+ assert.strictEqual(data.length, 200)
77
+ done()
84
78
  })
85
79
  })
86
80
  })
87
81
 
88
- test('overflow sync=false', function (t) {
82
+ test('overflow sync=false', function (t, done) {
89
83
  const dest = file()
90
84
  const stream = new ThreadStream({
91
85
  bufferSize: 128,
@@ -96,18 +90,17 @@ test('overflow sync=false', function (t) {
96
90
 
97
91
  let count = 0
98
92
 
99
- t.same(stream.writableNeedDrain, false)
93
+ assert.deepStrictEqual(stream.writableNeedDrain, false)
100
94
 
101
95
  // Write 10 chars, 20 times
102
96
  function write () {
103
97
  if (count++ === 20) {
104
- t.pass('end sent')
105
98
  stream.end()
106
99
  return
107
100
  }
108
101
 
109
102
  if (!stream.write('aaaaaaaaaa')) {
110
- t.same(stream.writableNeedDrain, true)
103
+ assert.deepStrictEqual(stream.writableNeedDrain, true)
111
104
  }
112
105
  // do not wait for drain event
113
106
  setImmediate(write)
@@ -116,26 +109,19 @@ test('overflow sync=false', function (t) {
116
109
  write()
117
110
 
118
111
  stream.on('drain', () => {
119
- t.same(stream.writableNeedDrain, false)
120
- t.pass('drain')
121
- })
122
-
123
- stream.on('finish', () => {
124
- t.pass('finish emitted')
112
+ assert.deepStrictEqual(stream.writableNeedDrain, false)
125
113
  })
126
114
 
127
115
  stream.on('close', () => {
128
116
  readFile(dest, 'utf8', (err, data) => {
129
- t.error(err)
130
- t.equal(data.length, 200)
131
- t.end()
117
+ assert.ifError(err)
118
+ assert.strictEqual(data.length, 200)
119
+ done()
132
120
  })
133
121
  })
134
122
  })
135
123
 
136
- test('over the bufferSize at startup', function (t) {
137
- t.plan(6)
138
-
124
+ test('over the bufferSize at startup', function (t, done) {
139
125
  const dest = file()
140
126
  const stream = new ThreadStream({
141
127
  bufferSize: 10,
@@ -146,25 +132,23 @@ test('over the bufferSize at startup', function (t) {
146
132
 
147
133
  stream.on('finish', () => {
148
134
  readFile(dest, 'utf8', (err, data) => {
149
- t.error(err)
150
- t.equal(data, 'hello world\nsomething else\n')
135
+ assert.ifError(err)
136
+ assert.strictEqual(data, 'hello world\nsomething else\n')
151
137
  })
152
138
  })
153
139
 
154
140
  stream.on('close', () => {
155
- t.pass('close emitted')
141
+ done()
156
142
  })
157
143
 
158
- t.ok(stream.write('hello'))
159
- t.ok(stream.write(' world\n'))
160
- t.ok(stream.write('something else\n'))
144
+ assert.ok(stream.write('hello'))
145
+ assert.ok(stream.write(' world\n'))
146
+ assert.ok(stream.write('something else\n'))
161
147
 
162
148
  stream.end()
163
149
  })
164
150
 
165
- test('over the bufferSize at startup (async)', function (t) {
166
- t.plan(6)
167
-
151
+ test('over the bufferSize at startup (async)', function (t, done) {
168
152
  const dest = file()
169
153
  const stream = new ThreadStream({
170
154
  bufferSize: 10,
@@ -173,25 +157,25 @@ test('over the bufferSize at startup (async)', function (t) {
173
157
  sync: false
174
158
  })
175
159
 
176
- t.ok(stream.write('hello'))
177
- t.notOk(stream.write(' world\n'))
178
- t.notOk(stream.write('something else\n'))
160
+ assert.ok(stream.write('hello'))
161
+ assert.ok(!stream.write(' world\n'))
162
+ assert.ok(!stream.write('something else\n'))
179
163
 
180
164
  stream.end()
181
165
 
182
166
  stream.on('finish', () => {
183
167
  readFile(dest, 'utf8', (err, data) => {
184
- t.error(err)
185
- t.equal(data, 'hello world\nsomething else\n')
168
+ assert.ifError(err)
169
+ assert.strictEqual(data, 'hello world\nsomething else\n')
186
170
  })
187
171
  })
188
172
 
189
173
  stream.on('close', () => {
190
- t.pass('close emitted')
174
+ done()
191
175
  })
192
176
  })
193
177
 
194
- test('flushSync sync=false', function (t) {
178
+ test('flushSync sync=false', function (t, done) {
195
179
  const dest = file()
196
180
  const stream = new ThreadStream({
197
181
  bufferSize: 128,
@@ -201,19 +185,14 @@ test('flushSync sync=false', function (t) {
201
185
  })
202
186
 
203
187
  stream.on('drain', () => {
204
- t.pass('drain')
205
188
  stream.end()
206
189
  })
207
190
 
208
- stream.on('finish', () => {
209
- t.pass('finish emitted')
210
- })
211
-
212
191
  stream.on('close', () => {
213
192
  readFile(dest, 'utf8', (err, data) => {
214
- t.error(err)
215
- t.equal(data.length, 200)
216
- t.end()
193
+ assert.ifError(err)
194
+ assert.strictEqual(data.length, 200)
195
+ done()
217
196
  })
218
197
  })
219
198
 
@@ -224,8 +203,6 @@ test('flushSync sync=false', function (t) {
224
203
  })
225
204
 
226
205
  test('pass down MessagePorts', async function (t) {
227
- t.plan(3)
228
-
229
206
  const { port1, port2 } = new MessageChannel()
230
207
  const stream = new ThreadStream({
231
208
  filename: join(__dirname, 'port.js'),
@@ -235,21 +212,19 @@ test('pass down MessagePorts', async function (t) {
235
212
  },
236
213
  sync: false
237
214
  })
238
- t.teardown(() => {
215
+ t.after(() => {
239
216
  stream.end()
240
217
  })
241
218
 
242
- t.ok(stream.write('hello world\n'))
243
- t.ok(stream.write('something else\n'))
219
+ assert.ok(stream.write('hello world\n'))
220
+ assert.ok(stream.write('something else\n'))
244
221
 
245
222
  const [strings] = await once(port2, 'message')
246
223
 
247
- t.equal(strings, 'hello world\nsomething else\n')
224
+ assert.strictEqual(strings, 'hello world\nsomething else\n')
248
225
  })
249
226
 
250
- test('destroy does not error', function (t) {
251
- t.plan(5)
252
-
227
+ test('destroy does not error', function (t, done) {
253
228
  const dest = file()
254
229
  const stream = new ThreadStream({
255
230
  filename: join(__dirname, 'to-file.js'),
@@ -258,28 +233,27 @@ test('destroy does not error', function (t) {
258
233
  })
259
234
 
260
235
  stream.on('ready', () => {
261
- t.pass('ready emitted')
262
236
  stream.worker.terminate()
263
237
  })
264
238
 
265
239
  stream.on('error', (err) => {
266
- t.equal(err.message, 'the worker thread exited')
240
+ assert.strictEqual(err.message, 'the worker thread exited')
267
241
  stream.flush((err) => {
268
- t.equal(err.message, 'the worker has exited')
242
+ assert.strictEqual(err.message, 'the worker has exited')
269
243
  })
270
- t.doesNotThrow(() => stream.flushSync())
271
- t.doesNotThrow(() => stream.end())
244
+ assert.doesNotThrow(() => stream.flushSync())
245
+ assert.doesNotThrow(() => stream.end())
246
+ done()
272
247
  })
273
248
  })
274
249
 
275
- test('syntax error', function (t) {
276
- t.plan(1)
277
-
250
+ test('syntax error', function (t, done) {
278
251
  const stream = new ThreadStream({
279
252
  filename: join(__dirname, 'syntax-error.mjs')
280
253
  })
281
254
 
282
255
  stream.on('error', (err) => {
283
- t.equal(err.message, 'Unexpected end of input')
256
+ assert.strictEqual(err.message, 'Unexpected end of input')
257
+ done()
284
258
  })
285
259
  })
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const { join } = require('path')
5
5
  const ThreadStream = require('..')
6
6
  const { file } = require('./helper')
@@ -13,7 +13,7 @@ for (let i = 0; i < 10; i++) {
13
13
  str += 'hello'
14
14
  }
15
15
 
16
- test('base', function (t) {
16
+ test('base', function (t, done) {
17
17
  const dest = file()
18
18
  const stream = new ThreadStream({
19
19
  filename: join(__dirname, 'to-file.js'),
@@ -33,6 +33,6 @@ test('base', function (t) {
33
33
  }
34
34
  benchThreadStream()
35
35
  stream.on('finish', function () {
36
- t.end()
36
+ done()
37
37
  })
38
38
  })
@@ -1,13 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { file } = require('./helper')
6
7
  const ThreadStream = require('..')
7
8
 
8
- test('bundlers support with .js file', function (t) {
9
- t.plan(1)
10
-
9
+ test('bundlers support with .js file', function (t, done) {
11
10
  globalThis.__bundlerPathsOverrides = {
12
11
  'thread-stream-worker': join(__dirname, 'custom-worker.js')
13
12
  }
@@ -26,15 +25,14 @@ test('bundlers support with .js file', function (t) {
26
25
 
27
26
  stream.worker.removeAllListeners('message')
28
27
  stream.worker.once('message', message => {
29
- t.equal(message.code, 'CUSTOM-WORKER-CALLED')
28
+ assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED')
29
+ done()
30
30
  })
31
31
 
32
32
  stream.end()
33
33
  })
34
34
 
35
- test('bundlers support with .mjs file', function (t) {
36
- t.plan(1)
37
-
35
+ test('bundlers support with .mjs file', function (t, done) {
38
36
  globalThis.__bundlerPathsOverrides = {
39
37
  'thread-stream-worker': join(__dirname, 'custom-worker.js')
40
38
  }
@@ -53,7 +51,8 @@ test('bundlers support with .mjs file', function (t) {
53
51
 
54
52
  stream.worker.removeAllListeners('message')
55
53
  stream.worker.once('message', message => {
56
- t.equal(message.code, 'CUSTOM-WORKER-CALLED')
54
+ assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED')
55
+ done()
57
56
  })
58
57
 
59
58
  stream.end()
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { MessageChannel } = require('worker_threads')
6
7
  const { once } = require('events')
@@ -8,11 +9,9 @@ const ThreadStream = require('..')
8
9
 
9
10
  const isYarnPnp = process.versions.pnp !== undefined
10
11
 
11
- test('yarn module resolution', { skip: !isYarnPnp }, t => {
12
- t.plan(6)
13
-
12
+ test('yarn module resolution', { skip: !isYarnPnp }, (t, done) => {
14
13
  const modulePath = require.resolve('pino-elasticsearch')
15
- t.match(modulePath, /.*\.zip.*/)
14
+ assert.match(modulePath, /.*\.zip.*/)
16
15
 
17
16
  const stream = new ThreadStream({
18
17
  filename: modulePath,
@@ -20,20 +19,18 @@ test('yarn module resolution', { skip: !isYarnPnp }, t => {
20
19
  sync: true
21
20
  })
22
21
 
23
- t.same(stream.writableErrored, null)
22
+ assert.deepStrictEqual(stream.writableErrored, null)
24
23
  stream.on('error', (err) => {
25
- t.same(stream.writableErrored, err)
26
- t.pass('error emitted')
24
+ assert.deepStrictEqual(stream.writableErrored, err)
27
25
  })
28
26
 
29
- t.ok(stream.write('hello world\n'))
30
- t.ok(stream.writable)
27
+ assert.ok(stream.write('hello world\n'))
28
+ assert.ok(stream.writable)
31
29
  stream.end()
30
+ done()
32
31
  })
33
32
 
34
33
  test('yarn module resolution for directories with special characters', { skip: !isYarnPnp }, async t => {
35
- t.plan(3)
36
-
37
34
  const { port1, port2 } = new MessageChannel()
38
35
  const stream = new ThreadStream({
39
36
  filename: join(__dirname, 'dir with spaces', 'test-package.zip', 'worker.js'),
@@ -43,21 +40,19 @@ test('yarn module resolution for directories with special characters', { skip: !
43
40
  },
44
41
  sync: false
45
42
  })
46
- t.teardown(() => {
43
+ t.after(() => {
47
44
  stream.end()
48
45
  })
49
46
 
50
- t.ok(stream.write('hello world\n'))
51
- t.ok(stream.write('something else\n'))
47
+ assert.ok(stream.write('hello world\n'))
48
+ assert.ok(stream.write('something else\n'))
52
49
 
53
50
  const [strings] = await once(port2, 'message')
54
51
 
55
- t.equal(strings, 'hello world\nsomething else\n')
52
+ assert.strictEqual(strings, 'hello world\nsomething else\n')
56
53
  })
57
54
 
58
55
  test('yarn module resolution for typescript commonjs modules', { skip: !isYarnPnp }, async t => {
59
- t.plan(3)
60
-
61
56
  const { port1, port2 } = new MessageChannel()
62
57
  const stream = new ThreadStream({
63
58
  filename: join(__dirname, 'ts-commonjs-default-export.zip', 'worker.js'),
@@ -67,14 +62,14 @@ test('yarn module resolution for typescript commonjs modules', { skip: !isYarnPn
67
62
  },
68
63
  sync: false
69
64
  })
70
- t.teardown(() => {
65
+ t.after(() => {
71
66
  stream.end()
72
67
  })
73
68
 
74
- t.ok(stream.write('hello world\n'))
75
- t.ok(stream.write('something else\n'))
69
+ assert.ok(stream.write('hello world\n'))
70
+ assert.ok(stream.write('something else\n'))
76
71
 
77
72
  const [strings] = await once(port2, 'message')
78
73
 
79
- t.equal(strings, 'hello world\nsomething else\n')
74
+ assert.strictEqual(strings, 'hello world\nsomething else\n')
80
75
  })
@@ -1,21 +1,21 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const ThreadStream = require('..')
6
7
  const { version } = require('../package.json')
7
- require('why-is-node-running')
8
8
 
9
- test('get context', (t) => {
9
+ test('get context', (t, done) => {
10
10
  const stream = new ThreadStream({
11
11
  filename: join(__dirname, 'get-context.js'),
12
12
  workerData: {},
13
13
  sync: true
14
14
  })
15
- t.on('end', () => stream.end())
15
+ t.after(() => stream.end())
16
16
  stream.on('context', (ctx) => {
17
- t.same(ctx.threadStreamVersion, version)
18
- t.end()
17
+ assert.deepStrictEqual(ctx.threadStreamVersion, version)
18
+ done()
19
19
  })
20
20
  stream.write('hello')
21
21
  })
package/test/end.test.js CHANGED
@@ -1,14 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { readFile } = require('fs')
6
7
  const { file } = require('./helper')
7
8
  const ThreadStream = require('..')
8
9
 
9
- test('destroy support', function (t) {
10
- t.plan(7)
11
-
10
+ test('destroy support', function (t, done) {
12
11
  const dest = file()
13
12
  const stream = new ThreadStream({
14
13
  filename: join(__dirname, 'to-file-on-destroy.js'),
@@ -17,25 +16,22 @@ test('destroy support', function (t) {
17
16
  })
18
17
 
19
18
  stream.on('close', () => {
20
- t.notOk(stream.writable)
21
- t.pass('close emitted')
19
+ assert.ok(!stream.writable)
20
+ readFile(dest, 'utf8', (err, data) => {
21
+ assert.ifError(err)
22
+ assert.strictEqual(data, 'hello world\nsomething else\n')
23
+ done()
24
+ })
22
25
  })
23
26
 
24
- t.ok(stream.write('hello world\n'))
25
- t.ok(stream.write('something else\n'))
26
- t.ok(stream.writable)
27
+ assert.ok(stream.write('hello world\n'))
28
+ assert.ok(stream.write('something else\n'))
29
+ assert.ok(stream.writable)
27
30
 
28
31
  stream.end()
29
-
30
- readFile(dest, 'utf8', (err, data) => {
31
- t.error(err)
32
- t.equal(data, 'hello world\nsomething else\n')
33
- })
34
32
  })
35
33
 
36
- test('synchronous _final support', function (t) {
37
- t.plan(7)
38
-
34
+ test('synchronous _final support', function (t, done) {
39
35
  const dest = file()
40
36
  const stream = new ThreadStream({
41
37
  filename: join(__dirname, 'to-file-on-final.js'),
@@ -44,18 +40,17 @@ test('synchronous _final support', function (t) {
44
40
  })
45
41
 
46
42
  stream.on('close', () => {
47
- t.notOk(stream.writable)
48
- t.pass('close emitted')
43
+ assert.ok(!stream.writable)
44
+ readFile(dest, 'utf8', (err, data) => {
45
+ assert.ifError(err)
46
+ assert.strictEqual(data, 'hello world\nsomething else\n')
47
+ done()
48
+ })
49
49
  })
50
50
 
51
- t.ok(stream.write('hello world\n'))
52
- t.ok(stream.write('something else\n'))
53
- t.ok(stream.writable)
51
+ assert.ok(stream.write('hello world\n'))
52
+ assert.ok(stream.write('something else\n'))
53
+ assert.ok(stream.writable)
54
54
 
55
55
  stream.end()
56
-
57
- readFile(dest, 'utf8', (err, data) => {
58
- t.error(err)
59
- t.equal(data, 'hello world\nsomething else\n')
60
- })
61
56
  })
package/test/esm.test.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { test } from 'tap'
1
+ import { test } from 'node:test'
2
+ import assert from 'node:assert'
2
3
  import { readFile } from 'fs'
3
4
  import ThreadStream from '../index.js'
4
5
  import { join } from 'desm'
@@ -6,9 +7,7 @@ import { pathToFileURL } from 'url'
6
7
  import { file } from './helper.js'
7
8
 
8
9
  function basic (text, filename) {
9
- test(text, function (t) {
10
- t.plan(5)
11
-
10
+ test(text, function (t, done) {
12
11
  const dest = file()
13
12
  const stream = new ThreadStream({
14
13
  filename,
@@ -18,17 +17,17 @@ function basic (text, filename) {
18
17
 
19
18
  stream.on('finish', () => {
20
19
  readFile(dest, 'utf8', (err, data) => {
21
- t.error(err)
22
- t.equal(data, 'hello world\nsomething else\n')
20
+ assert.ifError(err)
21
+ assert.strictEqual(data, 'hello world\nsomething else\n')
23
22
  })
24
23
  })
25
24
 
26
25
  stream.on('close', () => {
27
- t.pass('close emitted')
26
+ done()
28
27
  })
29
28
 
30
- t.ok(stream.write('hello world\n'))
31
- t.ok(stream.write('something else\n'))
29
+ assert.ok(stream.write('hello world\n'))
30
+ assert.ok(stream.write('something else\n'))
32
31
 
33
32
  stream.end()
34
33
  })
@@ -1,23 +1,24 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const ThreadStream = require('..')
6
7
 
7
- test('event propagate', t => {
8
+ test('event propagate', (t, done) => {
8
9
  const stream = new ThreadStream({
9
10
  filename: join(__dirname, 'emit-event.js'),
10
11
  workerData: {},
11
12
  sync: true
12
13
  })
13
- t.on('end', () => stream.end())
14
+ t.after(() => stream.end())
14
15
  stream.on('socketError', function (a, b, c, n, error) {
15
- t.same(a, 'list')
16
- t.same(b, 'of')
17
- t.same(c, 'args')
18
- t.same(n, 123)
19
- t.same(error, new Error('unable to write data to the TCP socket'))
20
- t.end()
16
+ assert.deepStrictEqual(a, 'list')
17
+ assert.deepStrictEqual(b, 'of')
18
+ assert.deepStrictEqual(c, 'args')
19
+ assert.deepStrictEqual(n, 123)
20
+ assert.deepStrictEqual(error, new Error('unable to write data to the TCP socket'))
21
+ done()
21
22
  })
22
23
  stream.write('hello')
23
24
  })