@libp2p/interface-compliance-tests 3.0.7-e9cafd3d → 3.0.7-eabf6f36

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.
Files changed (51) hide show
  1. package/dist/src/connection/index.js +5 -5
  2. package/dist/src/connection/index.js.map +1 -1
  3. package/dist/src/connection-encryption/utils/index.d.ts.map +1 -1
  4. package/dist/src/connection-encryption/utils/index.js +1 -0
  5. package/dist/src/connection-encryption/utils/index.js.map +1 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/is-valid-tick.d.ts.map +1 -1
  8. package/dist/src/is-valid-tick.js.map +1 -1
  9. package/dist/src/mocks/connection-manager.d.ts.map +1 -1
  10. package/dist/src/mocks/connection.d.ts.map +1 -1
  11. package/dist/src/mocks/connection.js +30 -21
  12. package/dist/src/mocks/connection.js.map +1 -1
  13. package/dist/src/mocks/multiaddr-connection.d.ts.map +1 -1
  14. package/dist/src/mocks/multiaddr-connection.js +9 -0
  15. package/dist/src/mocks/multiaddr-connection.js.map +1 -1
  16. package/dist/src/mocks/muxer.d.ts +28 -0
  17. package/dist/src/mocks/muxer.d.ts.map +1 -1
  18. package/dist/src/mocks/muxer.js +85 -211
  19. package/dist/src/mocks/muxer.js.map +1 -1
  20. package/dist/src/mocks/upgrader.d.ts +1 -1
  21. package/dist/src/mocks/upgrader.d.ts.map +1 -1
  22. package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
  23. package/dist/src/stream-muxer/close-test.js +100 -12
  24. package/dist/src/stream-muxer/close-test.js.map +1 -1
  25. package/dist/src/stream-muxer/fixtures/pb/message.d.ts +13 -0
  26. package/dist/src/stream-muxer/fixtures/pb/message.d.ts.map +1 -0
  27. package/dist/src/stream-muxer/fixtures/pb/message.js +67 -0
  28. package/dist/src/stream-muxer/fixtures/pb/message.js.map +1 -0
  29. package/dist/src/stream-muxer/spawner.d.ts.map +1 -1
  30. package/dist/src/stream-muxer/spawner.js +4 -3
  31. package/dist/src/stream-muxer/spawner.js.map +1 -1
  32. package/dist/src/stream-muxer/stress-test.js +1 -1
  33. package/dist/src/stream-muxer/stress-test.js.map +1 -1
  34. package/dist/src/transport/listen-test.js +1 -1
  35. package/dist/src/transport/listen-test.js.map +1 -1
  36. package/package.json +15 -14
  37. package/src/connection/index.ts +5 -5
  38. package/src/connection-encryption/utils/index.ts +1 -0
  39. package/src/index.ts +0 -1
  40. package/src/is-valid-tick.ts +0 -1
  41. package/src/mocks/connection-manager.ts +2 -2
  42. package/src/mocks/connection.ts +35 -24
  43. package/src/mocks/multiaddr-connection.ts +9 -0
  44. package/src/mocks/muxer.ts +105 -247
  45. package/src/mocks/upgrader.ts +1 -1
  46. package/src/stream-muxer/close-test.ts +110 -14
  47. package/src/stream-muxer/fixtures/pb/message.proto +7 -0
  48. package/src/stream-muxer/fixtures/pb/message.ts +87 -0
  49. package/src/stream-muxer/spawner.ts +3 -2
  50. package/src/stream-muxer/stress-test.ts +1 -1
  51. package/src/transport/listen-test.ts +1 -1
@@ -1,7 +1,6 @@
1
- import { CodeError } from '@libp2p/interface/errors';
1
+ import { AbstractStream } from '@libp2p/interface/stream-muxer/stream';
2
2
  import { logger } from '@libp2p/logger';
3
3
  import { abortableSource } from 'abortable-iterator';
4
- import { anySignal } from 'any-signal';
5
4
  import map from 'it-map';
6
5
  import * as ndjson from 'it-ndjson';
7
6
  import { pipe } from 'it-pipe';
@@ -11,181 +10,48 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
11
10
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
12
11
  let muxers = 0;
13
12
  let streams = 0;
14
- const MAX_MESSAGE_SIZE = 1024 * 1024;
15
- class MuxedStream {
16
- id;
17
- input;
18
- stream;
19
- type;
20
- sinkEnded;
21
- sourceEnded;
22
- abortController;
23
- resetController;
24
- closeController;
25
- log;
13
+ class MuxedStream extends AbstractStream {
14
+ push;
26
15
  constructor(init) {
27
- const { id, type, push, onEnd } = init;
28
- this.log = logger(`libp2p:mock-muxer:stream:${id}:${type}`);
29
- this.id = id;
30
- this.type = type;
31
- this.abortController = new AbortController();
32
- this.resetController = new AbortController();
33
- this.closeController = new AbortController();
34
- this.sourceEnded = false;
35
- this.sinkEnded = false;
36
- let endErr;
37
- const onSourceEnd = (err) => {
38
- if (this.sourceEnded) {
39
- return;
40
- }
41
- this.log('onSourceEnd sink ended? %s', this.sinkEnded);
42
- this.sourceEnded = true;
43
- if (err != null && endErr == null) {
44
- endErr = err;
45
- }
46
- if (this.sinkEnded) {
47
- this.stream.timeline.close = Date.now();
48
- if (onEnd != null) {
49
- onEnd(endErr);
50
- }
51
- }
16
+ super(init);
17
+ this.push = init.push;
18
+ }
19
+ sendNewStream() {
20
+ // If initiator, open a new stream
21
+ const createMsg = {
22
+ id: this.id,
23
+ type: 'create',
24
+ direction: 'outbound'
52
25
  };
53
- const onSinkEnd = (err) => {
54
- if (this.sinkEnded) {
55
- return;
56
- }
57
- this.log('onSinkEnd source ended? %s', this.sourceEnded);
58
- this.sinkEnded = true;
59
- if (err != null && endErr == null) {
60
- endErr = err;
61
- }
62
- if (this.sourceEnded) {
63
- this.stream.timeline.close = Date.now();
64
- if (onEnd != null) {
65
- onEnd(endErr);
66
- }
67
- }
26
+ this.push.push(createMsg);
27
+ }
28
+ sendData(data) {
29
+ const dataMsg = {
30
+ id: this.id,
31
+ type: 'data',
32
+ chunk: uint8ArrayToString(data.subarray(), 'base64pad'),
33
+ direction: this.direction
68
34
  };
69
- this.input = pushable({
70
- onEnd: onSourceEnd
71
- });
72
- this.stream = {
73
- id,
74
- sink: async (source) => {
75
- if (this.sinkEnded) {
76
- throw new CodeError('stream closed for writing', 'ERR_SINK_ENDED');
77
- }
78
- const signal = anySignal([
79
- this.abortController.signal,
80
- this.resetController.signal,
81
- this.closeController.signal
82
- ]);
83
- source = abortableSource(source, signal);
84
- try {
85
- if (this.type === 'initiator') {
86
- // If initiator, open a new stream
87
- const createMsg = {
88
- id: this.id,
89
- type: 'create',
90
- direction: this.type
91
- };
92
- push.push(createMsg);
93
- }
94
- const list = new Uint8ArrayList();
95
- for await (const chunk of source) {
96
- list.append(chunk);
97
- while (list.length > 0) {
98
- const available = Math.min(list.length, MAX_MESSAGE_SIZE);
99
- const dataMsg = {
100
- id,
101
- type: 'data',
102
- chunk: uint8ArrayToString(list.subarray(0, available), 'base64pad'),
103
- direction: this.type
104
- };
105
- push.push(dataMsg);
106
- list.consume(available);
107
- }
108
- }
109
- }
110
- catch (err) {
111
- if (err.type === 'aborted' && err.message === 'The operation was aborted') {
112
- if (this.closeController.signal.aborted) {
113
- return;
114
- }
115
- if (this.resetController.signal.aborted) {
116
- err.message = 'stream reset';
117
- err.code = 'ERR_STREAM_RESET';
118
- }
119
- if (this.abortController.signal.aborted) {
120
- err.message = 'stream aborted';
121
- err.code = 'ERR_STREAM_ABORT';
122
- }
123
- }
124
- // Send no more data if this stream was remotely reset
125
- if (err.code !== 'ERR_STREAM_RESET') {
126
- const resetMsg = {
127
- id,
128
- type: 'reset',
129
- direction: this.type
130
- };
131
- push.push(resetMsg);
132
- }
133
- this.log('sink erred', err);
134
- this.input.end(err);
135
- onSinkEnd(err);
136
- return;
137
- }
138
- finally {
139
- signal.clear();
140
- }
141
- this.log('sink ended');
142
- onSinkEnd();
143
- const closeMsg = {
144
- id,
145
- type: 'close',
146
- direction: this.type
147
- };
148
- push.push(closeMsg);
149
- },
150
- source: this.input,
151
- // Close for reading
152
- close: () => {
153
- this.stream.closeRead();
154
- this.stream.closeWrite();
155
- },
156
- closeRead: () => {
157
- this.input.end();
158
- },
159
- closeWrite: () => {
160
- this.closeController.abort();
161
- const closeMsg = {
162
- id,
163
- type: 'close',
164
- direction: this.type
165
- };
166
- push.push(closeMsg);
167
- onSinkEnd();
168
- },
169
- // Close for reading and writing (local error)
170
- abort: (err) => {
171
- // End the source with the passed error
172
- this.input.end(err);
173
- this.abortController.abort();
174
- onSinkEnd(err);
175
- },
176
- // Close immediately for reading and writing (remote error)
177
- reset: () => {
178
- const err = new CodeError('stream reset', 'ERR_STREAM_RESET');
179
- this.resetController.abort();
180
- this.input.end(err);
181
- onSinkEnd(err);
182
- },
183
- direction: type === 'initiator' ? 'outbound' : 'inbound',
184
- timeline: {
185
- open: Date.now()
186
- },
187
- metadata: {}
35
+ this.push.push(dataMsg);
36
+ }
37
+ sendReset() {
38
+ const resetMsg = {
39
+ id: this.id,
40
+ type: 'reset',
41
+ direction: this.direction
42
+ };
43
+ this.push.push(resetMsg);
44
+ }
45
+ sendCloseWrite() {
46
+ const closeMsg = {
47
+ id: this.id,
48
+ type: 'close',
49
+ direction: this.direction
188
50
  };
51
+ this.push.push(closeMsg);
52
+ }
53
+ sendCloseRead() {
54
+ // does not support close read, only close write
189
55
  }
190
56
  }
191
57
  class MockMuxer {
@@ -209,8 +75,13 @@ class MockMuxer {
209
75
  this.closeController = new AbortController();
210
76
  // receives data from the muxer at the other end of the stream
211
77
  this.source = this.input = pushable({
212
- onEnd: (err) => {
213
- this.close(err);
78
+ onEnd: () => {
79
+ for (const stream of this.registryInitiatorStreams.values()) {
80
+ stream.destroy();
81
+ }
82
+ for (const stream of this.registryRecipientStreams.values()) {
83
+ stream.destroy();
84
+ }
214
85
  }
215
86
  });
216
87
  // receives messages from all of the muxed streams
@@ -237,15 +108,15 @@ class MockMuxer {
237
108
  }
238
109
  handleMessage(message) {
239
110
  let muxedStream;
240
- const registry = message.direction === 'initiator' ? this.registryRecipientStreams : this.registryInitiatorStreams;
111
+ const registry = message.direction === 'outbound' ? this.registryRecipientStreams : this.registryInitiatorStreams;
241
112
  if (message.type === 'create') {
242
113
  if (registry.has(message.id)) {
243
114
  throw new Error(`Already had stream for ${message.id}`);
244
115
  }
245
- muxedStream = this.createStream(message.id, 'recipient');
246
- registry.set(muxedStream.stream.id, muxedStream);
116
+ muxedStream = this.createStream(message.id, 'inbound');
117
+ registry.set(muxedStream.id, muxedStream);
247
118
  if (this.options.onIncomingStream != null) {
248
- this.options.onIncomingStream(muxedStream.stream);
119
+ this.options.onIncomingStream(muxedStream);
249
120
  }
250
121
  }
251
122
  muxedStream = registry.get(message.id);
@@ -254,68 +125,71 @@ class MockMuxer {
254
125
  return;
255
126
  }
256
127
  if (message.type === 'data') {
257
- muxedStream.input.push(new Uint8ArrayList(uint8ArrayFromString(message.chunk, 'base64pad')));
128
+ muxedStream.sourcePush(new Uint8ArrayList(uint8ArrayFromString(message.chunk, 'base64pad')));
258
129
  }
259
130
  else if (message.type === 'reset') {
260
- this.log('-> reset stream %s %s', muxedStream.type, muxedStream.stream.id);
261
- muxedStream.stream.reset();
131
+ this.log('-> reset stream %s %s', muxedStream.direction, muxedStream.id);
132
+ muxedStream.reset();
262
133
  }
263
134
  else if (message.type === 'close') {
264
- this.log('-> closing stream %s %s', muxedStream.type, muxedStream.stream.id);
265
- muxedStream.stream.closeRead();
135
+ this.log('-> closing stream %s %s', muxedStream.direction, muxedStream.id);
136
+ muxedStream.remoteCloseWrite();
266
137
  }
267
138
  }
268
139
  get streams() {
269
140
  return Array.from(this.registryRecipientStreams.values())
270
- .concat(Array.from(this.registryInitiatorStreams.values()))
271
- .map(({ stream }) => stream);
141
+ .concat(Array.from(this.registryInitiatorStreams.values()));
272
142
  }
273
143
  newStream(name) {
274
144
  if (this.closeController.signal.aborted) {
275
145
  throw new Error('Muxer already closed');
276
146
  }
277
147
  this.log('newStream %s', name);
278
- const storedStream = this.createStream(name, 'initiator');
279
- this.registryInitiatorStreams.set(storedStream.stream.id, storedStream);
280
- return storedStream.stream;
148
+ const storedStream = this.createStream(name, 'outbound');
149
+ this.registryInitiatorStreams.set(storedStream.id, storedStream);
150
+ return storedStream;
281
151
  }
282
- createStream(name, type = 'initiator') {
283
- const id = name ?? `${this.name}:stream:${streams++}`;
284
- this.log('createStream %s %s', type, id);
152
+ createStream(name, direction = 'outbound') {
153
+ const id = name ?? `${streams++}`;
154
+ this.log('createStream %s %s', direction, id);
285
155
  const muxedStream = new MuxedStream({
286
156
  id,
287
- type,
157
+ direction,
288
158
  push: this.streamInput,
289
159
  onEnd: () => {
290
- this.log('stream ended %s %s', type, id);
291
- if (type === 'initiator') {
292
- this.registryInitiatorStreams.delete(id);
160
+ this.log('stream ended');
161
+ if (direction === 'outbound') {
162
+ this.registryInitiatorStreams.delete(muxedStream.id);
293
163
  }
294
164
  else {
295
- this.registryRecipientStreams.delete(id);
165
+ this.registryRecipientStreams.delete(muxedStream.id);
296
166
  }
297
167
  if (this.options.onStreamEnd != null) {
298
- this.options.onStreamEnd(muxedStream.stream);
168
+ this.options.onStreamEnd(muxedStream);
299
169
  }
300
- }
170
+ },
171
+ log: logger(`libp2p:mock-muxer:stream:${direction}:${id}`)
301
172
  });
302
173
  return muxedStream;
303
174
  }
304
- close(err) {
305
- if (this.closeController.signal.aborted)
175
+ async close(options) {
176
+ if (this.closeController.signal.aborted) {
306
177
  return;
307
- this.log('closing muxed streams');
308
- if (err == null) {
309
- this.streams.forEach(s => {
310
- s.close();
311
- });
312
- }
313
- else {
314
- this.streams.forEach(s => {
315
- s.abort(err);
316
- });
317
178
  }
179
+ this.log('closing muxed streams');
180
+ await Promise.all(this.streams.map(async (s) => s.close()));
318
181
  this.closeController.abort();
182
+ this.input.end();
183
+ }
184
+ abort(err) {
185
+ if (this.closeController.signal.aborted) {
186
+ return;
187
+ }
188
+ this.log('aborting muxed streams');
189
+ this.streams.forEach(s => {
190
+ s.abort(err);
191
+ });
192
+ this.closeController.abort(err);
319
193
  this.input.end(err);
320
194
  }
321
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { Libp2pEvents } from '@libp2p/interface';
2
2
  import type { EventEmitter } from '@libp2p/interface/events';
3
+ import type { Upgrader } from '@libp2p/interface/transport';
3
4
  import type { Registrar } from '@libp2p/interface-internal/registrar';
4
- import type { Upgrader } from '@libp2p/interface-internal/upgrader';
5
5
  export interface MockUpgraderInit {
6
6
  registrar?: Registrar;
7
7
  events?: EventEmitter<Libp2pEvents>;
@@ -1 +1 @@
1
- {"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../../src/mocks/upgrader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,qCAAqC,CAAA;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACpC;AAoCD,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,QAAQ,CAEnE"}
1
+ {"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../../src/mocks/upgrader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,6BAA6B,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAErE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACpC;AAoCD,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,QAAQ,CAEnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;iCAehD,UAAU,kBAAkB,CAAC,KAAG,IAAI;AAA5D,wBA8TC"}
1
+ {"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;iCAehD,UAAU,kBAAkB,CAAC,KAAG,IAAI;AAA5D,wBA2ZC"}
@@ -6,9 +6,12 @@ import all from 'it-all';
6
6
  import drain from 'it-drain';
7
7
  import { duplexPair } from 'it-pair/duplex';
8
8
  import { pipe } from 'it-pipe';
9
+ import { pbStream } from 'it-protobuf-stream';
10
+ import toBuffer from 'it-to-buffer';
9
11
  import pDefer from 'p-defer';
10
12
  import { Uint8ArrayList } from 'uint8arraylist';
11
13
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
14
+ import { Message } from './fixtures/pb/message.js';
12
15
  function randomBuffer() {
13
16
  return uint8ArrayFromString(Math.random().toString());
14
17
  }
@@ -44,9 +47,9 @@ export default (common) => {
44
47
  await pipe(infiniteRandom, stream, drain);
45
48
  }));
46
49
  expect(dialer.streams).to.have.lengthOf(expectedStreams);
47
- // Pause, and then send some data and close the dialer
50
+ // Pause, and then close the dialer
48
51
  await delay(50);
49
- await pipe([randomBuffer()], dialer, drain);
52
+ await pipe([], dialer, drain);
50
53
  expect(openedStreams).to.have.equal(expectedStreams);
51
54
  expect(dialer.streams).to.have.lengthOf(0);
52
55
  });
@@ -74,7 +77,7 @@ export default (common) => {
74
77
  expect(dialer.streams, 'dialer - number of opened streams should match number of calls to newStream').to.have.lengthOf(expectedStreams);
75
78
  // Pause, and then close the dialer
76
79
  await delay(50);
77
- dialer.close();
80
+ await dialer.close();
78
81
  expect(openedStreams, 'listener - number of opened streams should match number of calls to newStream').to.have.equal(expectedStreams);
79
82
  expect(dialer.streams, 'all tracked streams should be deleted after the muxer has called close').to.have.lengthOf(0);
80
83
  });
@@ -103,7 +106,7 @@ export default (common) => {
103
106
  // Pause, and then close the dialer
104
107
  await delay(50);
105
108
  // close _with an error_
106
- dialer.close(new Error());
109
+ dialer.abort(new Error('Oh no!'));
107
110
  const timeoutError = new Error('timeout');
108
111
  for (const pipe of streamPipes) {
109
112
  try {
@@ -125,7 +128,7 @@ export default (common) => {
125
128
  it('calling newStream after close throws an error', async () => {
126
129
  const dialerFactory = await common.setup();
127
130
  const dialer = dialerFactory.createStreamMuxer({ direction: 'outbound' });
128
- dialer.close();
131
+ await dialer.close();
129
132
  try {
130
133
  await dialer.newStream();
131
134
  expect.fail('newStream should throw if called after close');
@@ -188,7 +191,7 @@ export default (common) => {
188
191
  onIncomingStream: (stream) => {
189
192
  void Promise.resolve().then(async () => {
190
193
  // Immediate close for write
191
- stream.closeWrite();
194
+ await stream.closeWrite();
192
195
  const results = await pipe(stream, async (source) => {
193
196
  const data = [];
194
197
  for await (const chunk of source) {
@@ -212,7 +215,7 @@ export default (common) => {
212
215
  const stream = await dialer.newStream();
213
216
  await stream.sink(data);
214
217
  const err = await deferred.promise;
215
- expect(err).to.have.property('message').that.matches(/stream closed for writing/);
218
+ expect(err).to.have.property('code', 'ERR_SINK_INVALID_STATE');
216
219
  });
217
220
  it('can close a stream for reading', async () => {
218
221
  const deferred = pDefer();
@@ -220,6 +223,7 @@ export default (common) => {
220
223
  const dialerFactory = await common.setup();
221
224
  const dialer = dialerFactory.createStreamMuxer({ direction: 'outbound' });
222
225
  const data = [randomBuffer(), randomBuffer()].map(d => new Uint8ArrayList(d));
226
+ const expected = toBuffer(data.map(d => d.subarray()));
223
227
  const listenerFactory = await common.setup();
224
228
  const listener = listenerFactory.createStreamMuxer({
225
229
  direction: 'inbound',
@@ -230,14 +234,14 @@ export default (common) => {
230
234
  void pipe(p[0], dialer, p[0]);
231
235
  void pipe(p[1], listener, p[1]);
232
236
  const stream = await dialer.newStream();
233
- stream.closeRead();
237
+ await stream.closeRead();
234
238
  // Source should be done
235
239
  void Promise.resolve().then(async () => {
236
240
  expect(await stream.source.next()).to.have.property('done', true);
237
241
  await stream.sink(data);
238
242
  });
239
243
  const results = await deferred.promise;
240
- expect(results).to.eql(data);
244
+ expect(toBuffer(results.map(b => b.subarray()))).to.equalBytes(expected);
241
245
  });
242
246
  it('calls onStreamEnd for closed streams not previously written', async () => {
243
247
  const deferred = pDefer();
@@ -248,7 +252,7 @@ export default (common) => {
248
252
  onStreamEnd
249
253
  });
250
254
  const stream = await dialer.newStream();
251
- stream.close();
255
+ await stream.close();
252
256
  await deferred.promise;
253
257
  });
254
258
  it('calls onStreamEnd for read and write closed streams not previously written', async () => {
@@ -260,10 +264,94 @@ export default (common) => {
260
264
  onStreamEnd
261
265
  });
262
266
  const stream = await dialer.newStream();
263
- stream.closeWrite();
264
- stream.closeRead();
267
+ await stream.closeWrite();
268
+ await stream.closeRead();
265
269
  await deferred.promise;
266
270
  });
271
+ it('should wait for all data to be sent when closing streams', async () => {
272
+ const deferred = pDefer();
273
+ const p = duplexPair();
274
+ const dialerFactory = await common.setup();
275
+ const dialer = dialerFactory.createStreamMuxer({ direction: 'outbound' });
276
+ const listenerFactory = await common.setup();
277
+ const listener = listenerFactory.createStreamMuxer({
278
+ direction: 'inbound',
279
+ onIncomingStream: (stream) => {
280
+ const pb = pbStream(stream);
281
+ void pb.read(Message)
282
+ .then(async (message) => {
283
+ deferred.resolve(message);
284
+ await pb.unwrap().close();
285
+ })
286
+ .catch(err => {
287
+ deferred.reject(err);
288
+ });
289
+ }
290
+ });
291
+ void pipe(p[0], dialer, p[0]);
292
+ void pipe(p[1], listener, p[1]);
293
+ const message = {
294
+ message: 'hello world',
295
+ value: 5,
296
+ flag: true
297
+ };
298
+ const stream = await dialer.newStream();
299
+ const pb = pbStream(stream);
300
+ await pb.write(message, Message);
301
+ await pb.unwrap().close();
302
+ await expect(deferred.promise).to.eventually.deep.equal(message);
303
+ });
304
+ /*
305
+ it('should abort closing a stream with outstanding data to read', async () => {
306
+ const deferred = pDefer<Message>()
307
+
308
+ const p = duplexPair<Uint8Array>()
309
+ const dialerFactory = await common.setup()
310
+ const dialer = dialerFactory.createStreamMuxer({ direction: 'outbound' })
311
+
312
+ const listenerFactory = await common.setup()
313
+ const listener = listenerFactory.createStreamMuxer({
314
+ direction: 'inbound',
315
+ onIncomingStream: (stream) => {
316
+ const pb = pbStream(stream)
317
+
318
+ void pb.read(Message)
319
+ .then(async message => {
320
+ await pb.write(message, Message)
321
+ await pb.unwrap().close()
322
+ deferred.resolve(message)
323
+ })
324
+ .catch(err => {
325
+ deferred.reject(err)
326
+ })
327
+ }
328
+ })
329
+
330
+ void pipe(p[0], dialer, p[0])
331
+ void pipe(p[1], listener, p[1])
332
+
333
+ const message = {
334
+ message: 'hello world',
335
+ value: 5,
336
+ flag: true
337
+ }
338
+
339
+ const stream = await dialer.newStream()
340
+
341
+ const pb = pbStream(stream)
342
+ await pb.write(message, Message)
343
+
344
+ console.info('await write back')
345
+ await deferred.promise
346
+
347
+ // let message arrive
348
+ await delay(100)
349
+
350
+ // close should time out as message is never read
351
+ await expect(pb.unwrap().close()).to.eventually.be.rejected
352
+ .with.property('code', 'ERR_CLOSE_READ_ABORTED')
353
+ })
354
+ */
267
355
  });
268
356
  };
269
357
  //# sourceMappingURL=close-test.js.map