@libp2p/interface-compliance-tests 1.1.34 → 2.0.2
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/dist/src/mocks/connection.d.ts.map +1 -1
- package/dist/src/mocks/connection.js +4 -2
- package/dist/src/mocks/connection.js.map +1 -1
- package/dist/src/mocks/muxer.d.ts.map +1 -1
- package/dist/src/mocks/muxer.js +47 -11
- package/dist/src/mocks/muxer.js.map +1 -1
- package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/close-test.js +87 -0
- package/dist/src/stream-muxer/close-test.js.map +1 -1
- package/dist/src/stream-muxer/spawner.js +1 -1
- package/dist/src/stream-muxer/spawner.js.map +1 -1
- package/package.json +3 -2
- package/src/mocks/connection.ts +5 -2
- package/src/mocks/muxer.ts +55 -12
- package/src/stream-muxer/close-test.ts +110 -0
- package/src/stream-muxer/spawner.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/mocks/connection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAA4C,MAAM,+BAA+B,CAAA;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAO7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/mocks/connection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAA4C,MAAM,+BAA+B,CAAA;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAO7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAK1D,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IAClC,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AA4FD,wBAAgB,cAAc,CAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,GAAE,qBAA0B,GAAG,UAAU,CAmDzG;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAa9D;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,CAAE,UAAU,EAAE,UAAU,CAAE,CAexF"}
|
|
@@ -29,7 +29,7 @@ class MockConnection {
|
|
|
29
29
|
this.muxer = muxer;
|
|
30
30
|
this.maConn = maConn;
|
|
31
31
|
}
|
|
32
|
-
async newStream(protocols) {
|
|
32
|
+
async newStream(protocols, options) {
|
|
33
33
|
if (!Array.isArray(protocols)) {
|
|
34
34
|
protocols = [protocols];
|
|
35
35
|
}
|
|
@@ -39,7 +39,7 @@ class MockConnection {
|
|
|
39
39
|
const id = `${Math.random()}`;
|
|
40
40
|
const stream = this.muxer.newStream(id);
|
|
41
41
|
const mss = new Dialer(stream);
|
|
42
|
-
const result = await mss.select(protocols);
|
|
42
|
+
const result = await mss.select(protocols, options);
|
|
43
43
|
const streamData = {
|
|
44
44
|
protocol: result.protocol,
|
|
45
45
|
stream: {
|
|
@@ -114,6 +114,8 @@ export function mockStream(stream) {
|
|
|
114
114
|
return {
|
|
115
115
|
...stream,
|
|
116
116
|
close: () => { },
|
|
117
|
+
closeRead: () => { },
|
|
118
|
+
closeWrite: () => { },
|
|
117
119
|
abort: () => { },
|
|
118
120
|
reset: () => { },
|
|
119
121
|
timeline: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/mocks/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAI3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/mocks/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAIvG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAIvG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAiY/D,cAAM,gBAAiB,YAAW,kBAAkB;IAC3C,QAAQ,EAAE,MAAM,CAAsB;IAE7C,iBAAiB,CAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW;CAkBvE;AAED,wBAAgB,SAAS,IAAK,gBAAgB,CAE7C"}
|
package/dist/src/mocks/muxer.js
CHANGED
|
@@ -8,8 +8,10 @@ import { logger } from '@libp2p/logger';
|
|
|
8
8
|
import * as ndjson from 'it-ndjson';
|
|
9
9
|
import { pipe } from 'it-pipe';
|
|
10
10
|
import map from 'it-map';
|
|
11
|
+
import { Uint8ArrayList } from 'uint8arraylist';
|
|
11
12
|
let muxers = 0;
|
|
12
13
|
let streams = 0;
|
|
14
|
+
const MAX_MESSAGE_SIZE = 1024 * 1024;
|
|
13
15
|
class MuxedStream {
|
|
14
16
|
constructor(init) {
|
|
15
17
|
const { id, type, push, onEnd } = init;
|
|
@@ -18,6 +20,7 @@ class MuxedStream {
|
|
|
18
20
|
this.type = type;
|
|
19
21
|
this.abortController = new AbortController();
|
|
20
22
|
this.resetController = new AbortController();
|
|
23
|
+
this.closeController = new AbortController();
|
|
21
24
|
this.sourceEnded = false;
|
|
22
25
|
this.sinkEnded = false;
|
|
23
26
|
let endErr;
|
|
@@ -59,9 +62,13 @@ class MuxedStream {
|
|
|
59
62
|
this.stream = {
|
|
60
63
|
id,
|
|
61
64
|
sink: async (source) => {
|
|
65
|
+
if (this.sinkEnded) {
|
|
66
|
+
throw errCode(new Error('stream closed for writing'), 'ERR_SINK_ENDED');
|
|
67
|
+
}
|
|
62
68
|
source = abortableSource(source, anySignal([
|
|
63
69
|
this.abortController.signal,
|
|
64
|
-
this.resetController.signal
|
|
70
|
+
this.resetController.signal,
|
|
71
|
+
this.closeController.signal
|
|
65
72
|
]));
|
|
66
73
|
try {
|
|
67
74
|
if (this.type === 'initiator') {
|
|
@@ -73,18 +80,28 @@ class MuxedStream {
|
|
|
73
80
|
};
|
|
74
81
|
push.push(createMsg);
|
|
75
82
|
}
|
|
83
|
+
const list = new Uint8ArrayList();
|
|
76
84
|
for await (const chunk of source) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
list.append(chunk);
|
|
86
|
+
while (list.length > 0) {
|
|
87
|
+
const available = Math.min(list.length, MAX_MESSAGE_SIZE);
|
|
88
|
+
const subList = list.subarray(0, available);
|
|
89
|
+
const dataMsg = {
|
|
90
|
+
id,
|
|
91
|
+
type: 'data',
|
|
92
|
+
chunk: uint8ArrayToString(subList.slice(), 'base64'),
|
|
93
|
+
direction: this.type
|
|
94
|
+
};
|
|
95
|
+
push.push(dataMsg);
|
|
96
|
+
list.consume(available);
|
|
97
|
+
}
|
|
84
98
|
}
|
|
85
99
|
}
|
|
86
100
|
catch (err) {
|
|
87
101
|
if (err.type === 'aborted' && err.message === 'The operation was aborted') {
|
|
102
|
+
if (this.closeController.signal.aborted) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
88
105
|
if (this.resetController.signal.aborted) {
|
|
89
106
|
err.message = 'stream reset';
|
|
90
107
|
err.code = 'ERR_STREAM_RESET';
|
|
@@ -120,12 +137,26 @@ class MuxedStream {
|
|
|
120
137
|
source: this.input,
|
|
121
138
|
// Close for reading
|
|
122
139
|
close: () => {
|
|
140
|
+
this.stream.closeRead();
|
|
141
|
+
this.stream.closeWrite();
|
|
142
|
+
},
|
|
143
|
+
closeRead: () => {
|
|
123
144
|
this.input.end();
|
|
124
145
|
},
|
|
146
|
+
closeWrite: () => {
|
|
147
|
+
this.closeController.abort();
|
|
148
|
+
const closeMsg = {
|
|
149
|
+
id,
|
|
150
|
+
type: 'close',
|
|
151
|
+
direction: this.type
|
|
152
|
+
};
|
|
153
|
+
push.push(closeMsg);
|
|
154
|
+
onSinkEnd();
|
|
155
|
+
},
|
|
125
156
|
// Close for reading and writing (local error)
|
|
126
157
|
abort: (err) => {
|
|
127
158
|
// End the source with the passed error
|
|
128
|
-
this.input.end();
|
|
159
|
+
this.input.end(err);
|
|
129
160
|
this.abortController.abort();
|
|
130
161
|
onSinkEnd(err);
|
|
131
162
|
},
|
|
@@ -156,7 +187,12 @@ class MockMuxer {
|
|
|
156
187
|
onEnd: (err) => {
|
|
157
188
|
this.log('closing muxed streams');
|
|
158
189
|
for (const stream of this.streams) {
|
|
159
|
-
|
|
190
|
+
if (err == null) {
|
|
191
|
+
stream.close();
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
stream.abort(err);
|
|
195
|
+
}
|
|
160
196
|
}
|
|
161
197
|
}
|
|
162
198
|
});
|
|
@@ -207,7 +243,7 @@ class MockMuxer {
|
|
|
207
243
|
}
|
|
208
244
|
else if (message.type === 'close') {
|
|
209
245
|
this.log('-> closing stream %s %s', muxedStream.type, muxedStream.stream.id);
|
|
210
|
-
muxedStream.stream.close();
|
|
246
|
+
void muxedStream.stream.close();
|
|
211
247
|
}
|
|
212
248
|
}
|
|
213
249
|
get streams() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAU,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,WAAW,CAAA;AAInC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,GAAG,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../../src/mocks/muxer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;iCAkBjD,UAAU,kBAAkB,CAAC;AAArD,wBAuMC"}
|
|
@@ -7,6 +7,8 @@ import drain from 'it-drain';
|
|
|
7
7
|
import { expect } from 'aegir/chai';
|
|
8
8
|
import delay from 'delay';
|
|
9
9
|
import { Components } from '@libp2p/interfaces/components';
|
|
10
|
+
import pDefer from 'p-defer';
|
|
11
|
+
import all from 'it-all';
|
|
10
12
|
function randomBuffer() {
|
|
11
13
|
return uint8ArrayFromString(Math.random().toString());
|
|
12
14
|
}
|
|
@@ -88,6 +90,91 @@ export default (common) => {
|
|
|
88
90
|
// These should now all resolve without error
|
|
89
91
|
await Promise.all(streamResults);
|
|
90
92
|
});
|
|
93
|
+
it('can close a stream for writing', async () => {
|
|
94
|
+
const deferred = pDefer();
|
|
95
|
+
const p = duplexPair();
|
|
96
|
+
const dialerFactory = await common.setup();
|
|
97
|
+
const dialer = dialerFactory.createStreamMuxer(new Components());
|
|
98
|
+
const data = [randomBuffer(), randomBuffer()];
|
|
99
|
+
const listenerFactory = await common.setup();
|
|
100
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
101
|
+
onIncomingStream: (stream) => {
|
|
102
|
+
void Promise.resolve().then(async () => {
|
|
103
|
+
// Immediate close for write
|
|
104
|
+
await stream.closeWrite();
|
|
105
|
+
const results = await pipe(stream, async (source) => {
|
|
106
|
+
const data = [];
|
|
107
|
+
for await (const chunk of source) {
|
|
108
|
+
data.push(chunk.slice());
|
|
109
|
+
}
|
|
110
|
+
return data;
|
|
111
|
+
});
|
|
112
|
+
expect(results).to.eql(data);
|
|
113
|
+
try {
|
|
114
|
+
await stream.sink([randomBuffer()]);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
deferred.resolve(err);
|
|
118
|
+
}
|
|
119
|
+
deferred.reject(new Error('should not support writing to closed writer'));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
void pipe(p[0], dialer, p[0]);
|
|
124
|
+
void pipe(p[1], listener, p[1]);
|
|
125
|
+
const stream = dialer.newStream();
|
|
126
|
+
await stream.sink(data);
|
|
127
|
+
const err = await deferred.promise;
|
|
128
|
+
expect(err).to.have.property('message').that.matches(/stream closed for writing/);
|
|
129
|
+
});
|
|
130
|
+
it('can close a stream for reading', async () => {
|
|
131
|
+
const deferred = pDefer();
|
|
132
|
+
const p = duplexPair();
|
|
133
|
+
const dialerFactory = await common.setup();
|
|
134
|
+
const dialer = dialerFactory.createStreamMuxer(new Components());
|
|
135
|
+
const data = [randomBuffer(), randomBuffer()];
|
|
136
|
+
const listenerFactory = await common.setup();
|
|
137
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
138
|
+
onIncomingStream: (stream) => {
|
|
139
|
+
void all(stream.source).then(deferred.resolve, deferred.reject);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
void pipe(p[0], dialer, p[0]);
|
|
143
|
+
void pipe(p[1], listener, p[1]);
|
|
144
|
+
const stream = dialer.newStream();
|
|
145
|
+
await stream.closeRead();
|
|
146
|
+
// Source should be done
|
|
147
|
+
void Promise.resolve().then(async () => {
|
|
148
|
+
// @ts-expect-error next is part of the iterable protocol
|
|
149
|
+
expect(await stream.source.next()).to.have.property('done', true);
|
|
150
|
+
await stream.sink(data);
|
|
151
|
+
});
|
|
152
|
+
const results = await deferred.promise;
|
|
153
|
+
expect(results).to.eql(data);
|
|
154
|
+
});
|
|
155
|
+
it('calls onStreamEnd for closed streams not previously written', async () => {
|
|
156
|
+
const deferred = pDefer();
|
|
157
|
+
const onStreamEnd = () => deferred.resolve();
|
|
158
|
+
const dialerFactory = await common.setup();
|
|
159
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
160
|
+
onStreamEnd
|
|
161
|
+
});
|
|
162
|
+
const stream = await dialer.newStream();
|
|
163
|
+
await stream.close();
|
|
164
|
+
await deferred.promise;
|
|
165
|
+
});
|
|
166
|
+
it('calls onStreamEnd for read and write closed streams not previously written', async () => {
|
|
167
|
+
const deferred = pDefer();
|
|
168
|
+
const onStreamEnd = () => deferred.resolve();
|
|
169
|
+
const dialerFactory = await common.setup();
|
|
170
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
171
|
+
onStreamEnd
|
|
172
|
+
});
|
|
173
|
+
const stream = await dialer.newStream();
|
|
174
|
+
await stream.closeWrite();
|
|
175
|
+
await stream.closeRead();
|
|
176
|
+
await deferred.promise;
|
|
177
|
+
});
|
|
91
178
|
});
|
|
92
179
|
};
|
|
93
180
|
//# sourceMappingURL=close-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"close-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC1D,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB,SAAS,YAAY;IACnB,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,cAAc,GAAG;IACrB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,SAAU,CAAC;QACtC,OAAO,IAAI,EAAE;YACX,MAAM,YAAY,EAAE,CAAA;YACpB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;SAChB;IACH,CAAC;CACF,CAAA;AAED,eAAe,CAAC,MAAqC,EAAE,EAAE;IACvD,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,IAAI,aAAa,GAAG,CAAC,CAAA;YACrB,MAAM,eAAe,GAAG,CAAC,CAAA;YACzB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;YAEhE,6BAA6B;YAC7B,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,aAAa,EAAE,CAAA;oBACf,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAC3B,CAAC;aACF,CAAC,CAAA;YAEF,MAAM,CAAC,GAAG,UAAU,EAAc,CAAA;YAClC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;YAE5E,KAAK,OAAO,CAAC,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;gBACzB,OAAO,MAAM,IAAI,CACf,cAAc,EACd,MAAM,EACN,KAAK,CACN,CAAA;YACH,CAAC,CAAC,CACH,CAAA;YAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;YAExD,sDAAsD;YACtD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAE3C,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,CAAC,GAAG,UAAU,EAAc,CAAA;YAClC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;YAEhE,6BAA6B;YAC7B,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAC3B,CAAC;aACF,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;YAC9D,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,MAAM,WAAW,GAAsB,EAAE,CAAA;YAEzC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;gBAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;gBACxC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAE5B,IAAI;oBACF,MAAM,aAAa,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAA;oBACzG,MAAM,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;iBACzC;gBAAC,OAAO,GAAQ,EAAE;oBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB;wBAAE,MAAM,GAAG,CAAA;iBAC7C;gBAED,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACnE,CAAC,CAAC,CAAA;YAEF,4DAA4D;YAC5D,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC3C,MAAM,GAAG,IAAI,CAAA;YAEb,oCAAoC;YACpC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YACf,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YAEnC,6CAA6C;YAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,QAAQ,GAAG,MAAM,EAAO,CAAA;YAE9B,MAAM,CAAC,GAAG,UAAU,EAAc,CAAA;YAClC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;YAChE,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;YAE7C,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBACrC,4BAA4B;wBAC5B,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;wBAEzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;4BAClD,MAAM,IAAI,GAAG,EAAE,CAAA;4BACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE;gCAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;6BACzB;4BACD,OAAO,IAAI,CAAA;wBACb,CAAC,CAAC,CAAA;wBACF,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;wBAE5B,IAAI;4BACF,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;yBACpC;wBAAC,OAAO,GAAG,EAAE;4BACZ,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;yBACtB;wBAED,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAA;oBAC3E,CAAC,CAAC,CAAA;gBACJ,CAAC;aACF,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;YACjC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEvB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAA;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,QAAQ,GAAG,MAAM,EAAO,CAAA;YAE9B,MAAM,CAAC,GAAG,UAAU,EAAc,CAAA;YAClC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;YAChE,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;YAE7C,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACjE,CAAC;aACF,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;YACjC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;YAExB,wBAAwB;YACxB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACrC,yDAAyD;gBACzD,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBACjE,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAA;YACtC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAA;YAEzB,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAC5C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBAC/D,WAAW;aACZ,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;YAEvC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,QAAQ,CAAC,OAAO,CAAA;QACxB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAA;YAEzB,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAC5C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,UAAU,EAAE,EAAE;gBAC/D,WAAW;aACZ,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;YAEvC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;YACzB,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;YACxB,MAAM,QAAQ,CAAC,OAAO,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -10,7 +10,7 @@ export default async (createMuxer, nStreams, nMsg, limit) => {
|
|
|
10
10
|
const msg = uint8ArrayFromString('simple msg');
|
|
11
11
|
const listener = await createMuxer({
|
|
12
12
|
onIncomingStream: (stream) => {
|
|
13
|
-
void pipe(stream, drain)
|
|
13
|
+
void pipe(stream, drain);
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
const dialer = await createMuxer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB,eAAe,KAAK,EAAE,WAA6D,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAE,EAAE;IACrI,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,UAAU,EAAc,CAAA;IAE/D,MAAM,GAAG,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAE9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACjC,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,KAAK,IAAI,CACP,MAAM,EACN,KAAK,CACN,
|
|
1
|
+
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB,eAAe,KAAK,EAAE,WAA6D,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAE,EAAE;IACrI,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,UAAU,EAAc,CAAA;IAE/D,MAAM,GAAG,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAE9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACjC,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,KAAK,IAAI,CACP,MAAM,EACN,KAAK,CACN,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAA;IAElC,KAAK,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IACnD,KAAK,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAE7C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,CAAC,sBAAsB;QAE9C,MAAM,GAAG,GAAG,MAAM,IAAI,CACpB,CAAC,KAAK,SAAU,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC7B,MAAM,GAAG,CAAA;aACV;QACH,CAAC,EAAE,CAAC,EACJ,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CACpC,CAAA;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAA;IAEzC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CACxF,CAAA;AACH,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Compliance tests for JS libp2p interfaces",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-interfaces/tree/master/packages/libp2p-interface-compliance-tests#readme",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
},
|
|
201
201
|
"dependencies": {
|
|
202
202
|
"@libp2p/crypto": "^0.22.8",
|
|
203
|
-
"@libp2p/interfaces": "^
|
|
203
|
+
"@libp2p/interfaces": "^2.0.0",
|
|
204
204
|
"@libp2p/logger": "^1.1.0",
|
|
205
205
|
"@libp2p/multistream-select": "^1.0.0",
|
|
206
206
|
"@libp2p/peer-id": "^1.1.0",
|
|
@@ -228,6 +228,7 @@
|
|
|
228
228
|
"p-limit": "^4.0.0",
|
|
229
229
|
"p-wait-for": "^4.1.0",
|
|
230
230
|
"sinon": "^14.0.0",
|
|
231
|
+
"uint8arraylist": "^1.5.1",
|
|
231
232
|
"uint8arrays": "^3.0.0",
|
|
232
233
|
"util": "^0.12.4"
|
|
233
234
|
}
|
package/src/mocks/connection.ts
CHANGED
|
@@ -15,6 +15,7 @@ import * as STATUS from '@libp2p/interfaces/connection/status'
|
|
|
15
15
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
16
16
|
import type { StreamMuxer } from '@libp2p/interfaces/stream-muxer'
|
|
17
17
|
import { Components } from '@libp2p/interfaces/components'
|
|
18
|
+
import type { AbortOptions } from '@libp2p/interfaces'
|
|
18
19
|
|
|
19
20
|
const log = logger('libp2p:mock-connection')
|
|
20
21
|
|
|
@@ -65,7 +66,7 @@ class MockConnection implements Connection {
|
|
|
65
66
|
this.maConn = maConn
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
async newStream (protocols: string | string[]) {
|
|
69
|
+
async newStream (protocols: string | string[], options?: AbortOptions) {
|
|
69
70
|
if (!Array.isArray(protocols)) {
|
|
70
71
|
protocols = [protocols]
|
|
71
72
|
}
|
|
@@ -77,7 +78,7 @@ class MockConnection implements Connection {
|
|
|
77
78
|
const id = `${Math.random()}`
|
|
78
79
|
const stream: Stream = this.muxer.newStream(id)
|
|
79
80
|
const mss = new Dialer(stream)
|
|
80
|
-
const result = await mss.select(protocols)
|
|
81
|
+
const result = await mss.select(protocols, options)
|
|
81
82
|
|
|
82
83
|
const streamData: ProtocolStream = {
|
|
83
84
|
protocol: result.protocol,
|
|
@@ -170,6 +171,8 @@ export function mockStream (stream: Duplex<Uint8Array>): Stream {
|
|
|
170
171
|
return {
|
|
171
172
|
...stream,
|
|
172
173
|
close: () => {},
|
|
174
|
+
closeRead: () => {},
|
|
175
|
+
closeWrite: () => {},
|
|
173
176
|
abort: () => {},
|
|
174
177
|
reset: () => {},
|
|
175
178
|
timeline: {
|
package/src/mocks/muxer.ts
CHANGED
|
@@ -12,9 +12,11 @@ import type { Source } from 'it-stream-types'
|
|
|
12
12
|
import { pipe } from 'it-pipe'
|
|
13
13
|
import map from 'it-map'
|
|
14
14
|
import type { Components } from '@libp2p/interfaces/components'
|
|
15
|
+
import { Uint8ArrayList } from 'uint8arraylist'
|
|
15
16
|
|
|
16
17
|
let muxers = 0
|
|
17
18
|
let streams = 0
|
|
19
|
+
const MAX_MESSAGE_SIZE = 1024 * 1024
|
|
18
20
|
|
|
19
21
|
interface DataMessage {
|
|
20
22
|
id: string
|
|
@@ -53,6 +55,7 @@ class MuxedStream {
|
|
|
53
55
|
private sourceEnded: boolean
|
|
54
56
|
private readonly abortController: AbortController
|
|
55
57
|
private readonly resetController: AbortController
|
|
58
|
+
private readonly closeController: AbortController
|
|
56
59
|
private readonly log: Logger
|
|
57
60
|
|
|
58
61
|
constructor (init: { id: string, type: 'initiator' | 'recipient', push: Pushable<StreamMessage>, onEnd: (err?: Error) => void }) {
|
|
@@ -64,6 +67,7 @@ class MuxedStream {
|
|
|
64
67
|
this.type = type
|
|
65
68
|
this.abortController = new AbortController()
|
|
66
69
|
this.resetController = new AbortController()
|
|
70
|
+
this.closeController = new AbortController()
|
|
67
71
|
|
|
68
72
|
this.sourceEnded = false
|
|
69
73
|
this.sinkEnded = false
|
|
@@ -121,9 +125,14 @@ class MuxedStream {
|
|
|
121
125
|
this.stream = {
|
|
122
126
|
id,
|
|
123
127
|
sink: async (source) => {
|
|
128
|
+
if (this.sinkEnded) {
|
|
129
|
+
throw errCode(new Error('stream closed for writing'), 'ERR_SINK_ENDED')
|
|
130
|
+
}
|
|
131
|
+
|
|
124
132
|
source = abortableSource(source, anySignal([
|
|
125
133
|
this.abortController.signal,
|
|
126
|
-
this.resetController.signal
|
|
134
|
+
this.resetController.signal,
|
|
135
|
+
this.closeController.signal
|
|
127
136
|
]))
|
|
128
137
|
|
|
129
138
|
try {
|
|
@@ -137,18 +146,31 @@ class MuxedStream {
|
|
|
137
146
|
push.push(createMsg)
|
|
138
147
|
}
|
|
139
148
|
|
|
149
|
+
const list = new Uint8ArrayList()
|
|
150
|
+
|
|
140
151
|
for await (const chunk of source) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
list.append(chunk)
|
|
153
|
+
|
|
154
|
+
while (list.length > 0) {
|
|
155
|
+
const available = Math.min(list.length, MAX_MESSAGE_SIZE)
|
|
156
|
+
const subList = list.subarray(0, available)
|
|
157
|
+
const dataMsg: DataMessage = {
|
|
158
|
+
id,
|
|
159
|
+
type: 'data',
|
|
160
|
+
chunk: uint8ArrayToString(subList.slice(), 'base64'),
|
|
161
|
+
direction: this.type
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
push.push(dataMsg)
|
|
165
|
+
list.consume(available)
|
|
146
166
|
}
|
|
147
|
-
|
|
148
|
-
push.push(dataMsg)
|
|
149
167
|
}
|
|
150
168
|
} catch (err: any) {
|
|
151
169
|
if (err.type === 'aborted' && err.message === 'The operation was aborted') {
|
|
170
|
+
if (this.closeController.signal.aborted) {
|
|
171
|
+
return
|
|
172
|
+
}
|
|
173
|
+
|
|
152
174
|
if (this.resetController.signal.aborted) {
|
|
153
175
|
err.message = 'stream reset'
|
|
154
176
|
err.code = 'ERR_STREAM_RESET'
|
|
@@ -192,13 +214,30 @@ class MuxedStream {
|
|
|
192
214
|
|
|
193
215
|
// Close for reading
|
|
194
216
|
close: () => {
|
|
217
|
+
this.stream.closeRead()
|
|
218
|
+
this.stream.closeWrite()
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
closeRead: () => {
|
|
195
222
|
this.input.end()
|
|
196
223
|
},
|
|
197
224
|
|
|
225
|
+
closeWrite: () => {
|
|
226
|
+
this.closeController.abort()
|
|
227
|
+
|
|
228
|
+
const closeMsg: CloseMessage = {
|
|
229
|
+
id,
|
|
230
|
+
type: 'close',
|
|
231
|
+
direction: this.type
|
|
232
|
+
}
|
|
233
|
+
push.push(closeMsg)
|
|
234
|
+
onSinkEnd()
|
|
235
|
+
},
|
|
236
|
+
|
|
198
237
|
// Close for reading and writing (local error)
|
|
199
|
-
abort: (err
|
|
238
|
+
abort: (err: Error) => {
|
|
200
239
|
// End the source with the passed error
|
|
201
|
-
this.input.end()
|
|
240
|
+
this.input.end(err)
|
|
202
241
|
this.abortController.abort()
|
|
203
242
|
onSinkEnd(err)
|
|
204
243
|
},
|
|
@@ -242,7 +281,11 @@ class MockMuxer implements StreamMuxer {
|
|
|
242
281
|
onEnd: (err) => {
|
|
243
282
|
this.log('closing muxed streams')
|
|
244
283
|
for (const stream of this.streams) {
|
|
245
|
-
|
|
284
|
+
if (err == null) {
|
|
285
|
+
stream.close()
|
|
286
|
+
} else {
|
|
287
|
+
stream.abort(err)
|
|
288
|
+
}
|
|
246
289
|
}
|
|
247
290
|
}
|
|
248
291
|
})
|
|
@@ -307,7 +350,7 @@ class MockMuxer implements StreamMuxer {
|
|
|
307
350
|
muxedStream.stream.reset()
|
|
308
351
|
} else if (message.type === 'close') {
|
|
309
352
|
this.log('-> closing stream %s %s', muxedStream.type, muxedStream.stream.id)
|
|
310
|
-
muxedStream.stream.close()
|
|
353
|
+
void muxedStream.stream.close()
|
|
311
354
|
}
|
|
312
355
|
}
|
|
313
356
|
|
|
@@ -9,6 +9,8 @@ import delay from 'delay'
|
|
|
9
9
|
import type { TestSetup } from '../index.js'
|
|
10
10
|
import type { StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
|
|
11
11
|
import { Components } from '@libp2p/interfaces/components'
|
|
12
|
+
import pDefer from 'p-defer'
|
|
13
|
+
import all from 'it-all'
|
|
12
14
|
|
|
13
15
|
function randomBuffer () {
|
|
14
16
|
return uint8ArrayFromString(Math.random().toString())
|
|
@@ -113,5 +115,113 @@ export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
|
113
115
|
// These should now all resolve without error
|
|
114
116
|
await Promise.all(streamResults)
|
|
115
117
|
})
|
|
118
|
+
|
|
119
|
+
it('can close a stream for writing', async () => {
|
|
120
|
+
const deferred = pDefer<any>()
|
|
121
|
+
|
|
122
|
+
const p = duplexPair<Uint8Array>()
|
|
123
|
+
const dialerFactory = await common.setup()
|
|
124
|
+
const dialer = dialerFactory.createStreamMuxer(new Components())
|
|
125
|
+
const data = [randomBuffer(), randomBuffer()]
|
|
126
|
+
|
|
127
|
+
const listenerFactory = await common.setup()
|
|
128
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
129
|
+
onIncomingStream: (stream) => {
|
|
130
|
+
void Promise.resolve().then(async () => {
|
|
131
|
+
// Immediate close for write
|
|
132
|
+
await stream.closeWrite()
|
|
133
|
+
|
|
134
|
+
const results = await pipe(stream, async (source) => {
|
|
135
|
+
const data = []
|
|
136
|
+
for await (const chunk of source) {
|
|
137
|
+
data.push(chunk.slice())
|
|
138
|
+
}
|
|
139
|
+
return data
|
|
140
|
+
})
|
|
141
|
+
expect(results).to.eql(data)
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
await stream.sink([randomBuffer()])
|
|
145
|
+
} catch (err) {
|
|
146
|
+
deferred.resolve(err)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
deferred.reject(new Error('should not support writing to closed writer'))
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
void pipe(p[0], dialer, p[0])
|
|
155
|
+
void pipe(p[1], listener, p[1])
|
|
156
|
+
|
|
157
|
+
const stream = dialer.newStream()
|
|
158
|
+
await stream.sink(data)
|
|
159
|
+
|
|
160
|
+
const err = await deferred.promise
|
|
161
|
+
expect(err).to.have.property('message').that.matches(/stream closed for writing/)
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('can close a stream for reading', async () => {
|
|
165
|
+
const deferred = pDefer<any>()
|
|
166
|
+
|
|
167
|
+
const p = duplexPair<Uint8Array>()
|
|
168
|
+
const dialerFactory = await common.setup()
|
|
169
|
+
const dialer = dialerFactory.createStreamMuxer(new Components())
|
|
170
|
+
const data = [randomBuffer(), randomBuffer()]
|
|
171
|
+
|
|
172
|
+
const listenerFactory = await common.setup()
|
|
173
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
174
|
+
onIncomingStream: (stream) => {
|
|
175
|
+
void all(stream.source).then(deferred.resolve, deferred.reject)
|
|
176
|
+
}
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
void pipe(p[0], dialer, p[0])
|
|
180
|
+
void pipe(p[1], listener, p[1])
|
|
181
|
+
|
|
182
|
+
const stream = dialer.newStream()
|
|
183
|
+
await stream.closeRead()
|
|
184
|
+
|
|
185
|
+
// Source should be done
|
|
186
|
+
void Promise.resolve().then(async () => {
|
|
187
|
+
// @ts-expect-error next is part of the iterable protocol
|
|
188
|
+
expect(await stream.source.next()).to.have.property('done', true)
|
|
189
|
+
await stream.sink(data)
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
const results = await deferred.promise
|
|
193
|
+
expect(results).to.eql(data)
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
it('calls onStreamEnd for closed streams not previously written', async () => {
|
|
197
|
+
const deferred = pDefer()
|
|
198
|
+
|
|
199
|
+
const onStreamEnd = () => deferred.resolve()
|
|
200
|
+
const dialerFactory = await common.setup()
|
|
201
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
202
|
+
onStreamEnd
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
const stream = await dialer.newStream()
|
|
206
|
+
|
|
207
|
+
await stream.close()
|
|
208
|
+
await deferred.promise
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
it('calls onStreamEnd for read and write closed streams not previously written', async () => {
|
|
212
|
+
const deferred = pDefer()
|
|
213
|
+
|
|
214
|
+
const onStreamEnd = () => deferred.resolve()
|
|
215
|
+
const dialerFactory = await common.setup()
|
|
216
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
217
|
+
onStreamEnd
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
const stream = await dialer.newStream()
|
|
221
|
+
|
|
222
|
+
await stream.closeWrite()
|
|
223
|
+
await stream.closeRead()
|
|
224
|
+
await deferred.promise
|
|
225
|
+
})
|
|
116
226
|
})
|
|
117
227
|
}
|