@libp2p/interface-compliance-tests 1.0.7 → 1.0.8
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/stream-muxer/base-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/base-test.js +23 -17
- package/dist/src/stream-muxer/base-test.js.map +1 -1
- package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/close-test.js +14 -26
- package/dist/src/stream-muxer/close-test.js.map +1 -1
- package/dist/src/stream-muxer/index.d.ts +2 -2
- package/dist/src/stream-muxer/index.d.ts.map +1 -1
- package/dist/src/stream-muxer/index.js.map +1 -1
- package/dist/src/stream-muxer/mega-stress-test.js +1 -1
- package/dist/src/stream-muxer/mega-stress-test.js.map +1 -1
- package/dist/src/stream-muxer/spawner.js +2 -2
- package/dist/src/stream-muxer/spawner.js.map +1 -1
- package/dist/src/stream-muxer/stress-test.js +1 -1
- package/dist/src/stream-muxer/stress-test.js.map +1 -1
- package/dist/src/transport/utils/index.d.ts +9 -2
- package/dist/src/transport/utils/index.d.ts.map +1 -1
- package/dist/src/transport/utils/index.js +56 -16
- package/dist/src/transport/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/src/stream-muxer/base-test.ts +28 -18
- package/src/stream-muxer/close-test.ts +14 -28
- package/src/stream-muxer/index.ts +2 -2
- package/src/stream-muxer/mega-stress-test.ts +1 -1
- package/src/stream-muxer/spawner.ts +2 -2
- package/src/stream-muxer/stress-test.ts +1 -1
- package/src/transport/utils/index.ts +78 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAe,MAAM,iCAAiC,CAAA;iCAO/D,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,
|
|
1
|
+
{"version":3,"file":"base-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAe,MAAM,iCAAiC,CAAA;iCAO/D,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBAqJC"}
|
|
@@ -8,7 +8,7 @@ import defer from 'p-defer';
|
|
|
8
8
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
9
9
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
10
10
|
import { isValidTick } from '../transport/utils/index.js';
|
|
11
|
-
async function
|
|
11
|
+
async function drainAndClose(stream) {
|
|
12
12
|
return await pipe([], stream, drain);
|
|
13
13
|
}
|
|
14
14
|
export default (common) => {
|
|
@@ -26,16 +26,17 @@ export default (common) => {
|
|
|
26
26
|
onStreamEndPromise.resolve(stream);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
void pipe(p[0], dialer
|
|
30
|
-
void pipe(p[1], listener
|
|
29
|
+
void pipe(p[0], dialer, p[0]);
|
|
30
|
+
void pipe(p[1], listener, p[1]);
|
|
31
31
|
const conn = dialer.newStream();
|
|
32
32
|
expect(dialer.streams).to.include(conn);
|
|
33
33
|
expect(isValidTick(conn.timeline.open)).to.equal(true);
|
|
34
|
+
void drainAndClose(conn);
|
|
34
35
|
const stream = await onStreamPromise.promise;
|
|
35
36
|
expect(isValidTick(stream.timeline.open)).to.equal(true);
|
|
36
37
|
// Make sure the stream is being tracked
|
|
37
38
|
expect(listener.streams).to.include(stream);
|
|
38
|
-
void
|
|
39
|
+
void drainAndClose(stream);
|
|
39
40
|
// Make sure stream is closed properly
|
|
40
41
|
const endedStream = await onStreamEndPromise.promise;
|
|
41
42
|
expect(listener.streams).to.not.include(endedStream);
|
|
@@ -44,7 +45,8 @@ export default (common) => {
|
|
|
44
45
|
}
|
|
45
46
|
// Make sure the stream is removed from tracking
|
|
46
47
|
expect(isValidTick(endedStream.timeline.close)).to.equal(true);
|
|
47
|
-
await
|
|
48
|
+
await drainAndClose(dialer);
|
|
49
|
+
await drainAndClose(listener);
|
|
48
50
|
// ensure we have no streams left
|
|
49
51
|
expect(dialer.streams).to.have.length(0);
|
|
50
52
|
expect(listener.streams).to.have.length(0);
|
|
@@ -58,15 +60,17 @@ export default (common) => {
|
|
|
58
60
|
}
|
|
59
61
|
});
|
|
60
62
|
const listener = await common.setup();
|
|
61
|
-
void pipe(p[0], dialer
|
|
62
|
-
void pipe(p[1], listener
|
|
63
|
+
void pipe(p[0], dialer, p[0]);
|
|
64
|
+
void pipe(p[1], listener, p[1]);
|
|
63
65
|
const conn = listener.newStream();
|
|
66
|
+
void drainAndClose(conn);
|
|
64
67
|
const stream = await onStreamPromise.promise;
|
|
65
68
|
expect(isValidTick(stream.timeline.open)).to.equal(true);
|
|
66
69
|
expect(listener.streams).to.include(conn);
|
|
67
70
|
expect(isValidTick(conn.timeline.open)).to.equal(true);
|
|
68
|
-
|
|
69
|
-
await
|
|
71
|
+
void drainAndClose(stream);
|
|
72
|
+
await drainAndClose(dialer);
|
|
73
|
+
await drainAndClose(listener);
|
|
70
74
|
});
|
|
71
75
|
it('Open a stream on both sides', async () => {
|
|
72
76
|
const p = duplexPair();
|
|
@@ -82,16 +86,18 @@ export default (common) => {
|
|
|
82
86
|
onListenerStreamPromise.resolve(stream);
|
|
83
87
|
}
|
|
84
88
|
});
|
|
85
|
-
void pipe(p[0], dialer
|
|
86
|
-
void pipe(p[1], listener
|
|
89
|
+
void pipe(p[0], dialer, p[0]);
|
|
90
|
+
void pipe(p[1], listener, p[1]);
|
|
87
91
|
const listenerConn = listener.newStream();
|
|
88
92
|
const dialerConn = dialer.newStream();
|
|
93
|
+
void drainAndClose(dialerConn);
|
|
94
|
+
void drainAndClose(listenerConn);
|
|
89
95
|
const dialerStream = await onDialerStreamPromise.promise;
|
|
90
96
|
const listenerStream = await onListenerStreamPromise.promise;
|
|
91
|
-
await
|
|
92
|
-
await
|
|
93
|
-
await
|
|
94
|
-
await
|
|
97
|
+
await drainAndClose(dialerStream);
|
|
98
|
+
await drainAndClose(listenerStream);
|
|
99
|
+
await drainAndClose(dialer);
|
|
100
|
+
await drainAndClose(listener);
|
|
95
101
|
});
|
|
96
102
|
it('Open a stream on one side, write, open a stream on the other side', async () => {
|
|
97
103
|
const toString = (source) => map(source, (u) => uint8ArrayToString(u));
|
|
@@ -108,8 +114,8 @@ export default (common) => {
|
|
|
108
114
|
onListenerStreamPromise.resolve(stream);
|
|
109
115
|
}
|
|
110
116
|
});
|
|
111
|
-
void pipe(p[0], dialer
|
|
112
|
-
void pipe(p[1], listener
|
|
117
|
+
void pipe(p[0], dialer, p[0]);
|
|
118
|
+
void pipe(p[1], listener, p[1]);
|
|
113
119
|
const dialerConn = dialer.newStream();
|
|
114
120
|
const listenerConn = listener.newStream();
|
|
115
121
|
void pipe([uint8ArrayFromString('hey')], dialerConn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAMzD,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"base-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.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":"
|
|
1
|
+
{"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;iCAoBlD,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBA+EC"}
|
|
@@ -4,6 +4,8 @@ import { duplexPair } from 'it-pair/duplex';
|
|
|
4
4
|
import { abortableSource, abortableDuplex } from 'abortable-iterator';
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
6
6
|
import drain from 'it-drain';
|
|
7
|
+
import { mockUpgrader, mockMultiaddrConnection } from '../transport/utils/index.js';
|
|
8
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
7
9
|
async function pause(ms) {
|
|
8
10
|
return await new Promise(resolve => setTimeout(resolve, ms));
|
|
9
11
|
}
|
|
@@ -20,35 +22,20 @@ const infiniteRandom = {
|
|
|
20
22
|
};
|
|
21
23
|
export default (common) => {
|
|
22
24
|
describe('close', () => {
|
|
23
|
-
it('closing underlying socket closes streams
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
stream: muxer.newStream(`${multicodecs[0]}`)
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
return connection;
|
|
35
|
-
};
|
|
36
|
-
const mockUpgrade = async (maConn) => {
|
|
37
|
-
const muxer = await common.setup({
|
|
38
|
-
onStream: (stream) => {
|
|
39
|
-
void pipe(stream, stream);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
pipe(maConn, muxer.newStream('/test/stream'), maConn);
|
|
43
|
-
return mockConn(muxer);
|
|
44
|
-
};
|
|
25
|
+
it('closing underlying socket closes streams', async () => {
|
|
26
|
+
const muxer = await common.setup({
|
|
27
|
+
onStream: (stream) => {
|
|
28
|
+
void pipe(stream, stream);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const upgrader = mockUpgrader({ muxer });
|
|
45
32
|
const [local, remote] = duplexPair();
|
|
46
33
|
const controller = new AbortController();
|
|
47
34
|
const abortableRemote = abortableDuplex(remote, controller.signal, {
|
|
48
35
|
returnOnAbort: true
|
|
49
36
|
});
|
|
50
|
-
await
|
|
51
|
-
const dialerConn = await
|
|
37
|
+
await upgrader.upgradeInbound(mockMultiaddrConnection(abortableRemote));
|
|
38
|
+
const dialerConn = await upgrader.upgradeOutbound(mockMultiaddrConnection(local));
|
|
52
39
|
const s1 = await dialerConn.newStream(['']);
|
|
53
40
|
const s2 = await dialerConn.newStream(['']);
|
|
54
41
|
// close the remote in a bit
|
|
@@ -58,6 +45,7 @@ export default (common) => {
|
|
|
58
45
|
// test is complete when all muxed streams have closed
|
|
59
46
|
await s1Result;
|
|
60
47
|
await s2Result;
|
|
48
|
+
expect(muxer.streams).to.be.empty();
|
|
61
49
|
});
|
|
62
50
|
it('closing one of the muxed streams doesn\'t close others', async () => {
|
|
63
51
|
const p = duplexPair();
|
|
@@ -66,8 +54,8 @@ export default (common) => {
|
|
|
66
54
|
const listener = await common.setup({
|
|
67
55
|
onStream: async (stream) => await pipe(stream, stream)
|
|
68
56
|
});
|
|
69
|
-
void pipe(p[0], dialer
|
|
70
|
-
void pipe(p[1], listener
|
|
57
|
+
void pipe(p[0], dialer, p[0]);
|
|
58
|
+
void pipe(p[1], listener, p[1]);
|
|
71
59
|
const stream = dialer.newStream();
|
|
72
60
|
const streams = Array.from(Array(5), () => dialer.newStream());
|
|
73
61
|
let closed = false;
|
|
@@ -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,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"close-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TestSetup } from '../index.js';
|
|
2
|
-
import type { Muxer } from '@libp2p/interfaces/stream-muxer';
|
|
3
|
-
declare const _default: (common: TestSetup<Muxer>) => void;
|
|
2
|
+
import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
|
|
3
|
+
declare const _default: (common: TestSetup<Muxer, MuxerOptions>) => void;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;iCAElD,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBAOC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAIlD,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAIlD,eAAe,CAAC,MAAsC,EAAE,EAAE;IACxD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChB,SAAS,CAAC,MAAM,CAAC,CAAA;QACjB,UAAU,CAAC,MAAM,CAAC,CAAA;QAClB,cAAc,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mega-stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/mega-stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"mega-stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/mega-stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAIhC,eAAe,CAAC,MAAsC,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3E,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAChC,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -15,8 +15,8 @@ export default async (createMuxer, nStreams, nMsg, limit) => {
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
const dialer = await createMuxer();
|
|
18
|
-
void pipe(listenerSocket, listener
|
|
19
|
-
void pipe(dialerSocket, dialer
|
|
18
|
+
void pipe(listenerSocket, listener, listenerSocket);
|
|
19
|
+
void pipe(dialerSocket, dialer, dialerSocket);
|
|
20
20
|
const spawnStream = async () => {
|
|
21
21
|
const stream = dialer.newStream();
|
|
22
22
|
expect(stream).to.exist; // eslint-disable-line
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,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,WAAuD,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAE,EAAE;IAC/H,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,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,IAAI,CACR,MAAM,EACN,KAAK,CACN,CAAA;YAED,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAA;IAElC,KAAK,IAAI,CAAC,cAAc,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,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,WAAuD,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAE,EAAE;IAC/H,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,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,IAAI,CACR,MAAM,EACN,KAAK,CACN,CAAA;YAED,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC;KACF,CAAC,CAAA;IAEF,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAIhC,eAAe,CAAC,MAAsC,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrE,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACvE,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACzE,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAC1E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAC9E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9E,EAAE,CAAC,2BAA2B,EAAE,KAAK;YACnC,OAAO,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import type { Upgrader } from '@libp2p/interfaces/transport';
|
|
1
|
+
import type { Upgrader, MultiaddrConnection } from '@libp2p/interfaces/transport';
|
|
2
|
+
import type { Muxer } from '@libp2p/interfaces/stream-muxer';
|
|
3
|
+
import type { Duplex } from 'it-stream-types';
|
|
2
4
|
/**
|
|
3
5
|
* A tick is considered valid if it happened between now
|
|
4
6
|
* and `ms` milliseconds ago
|
|
5
7
|
*/
|
|
6
8
|
export declare function isValidTick(date?: number, ms?: number): boolean;
|
|
7
|
-
export declare function
|
|
9
|
+
export declare function mockMultiaddrConnection(source: Duplex<Uint8Array>): MultiaddrConnection;
|
|
10
|
+
export declare function mockMuxer(): Muxer;
|
|
11
|
+
export interface MockUpgraderOptions {
|
|
12
|
+
muxer?: Muxer;
|
|
13
|
+
}
|
|
14
|
+
export declare function mockUpgrader(options?: MockUpgraderOptions): Upgrader;
|
|
8
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transport/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transport/utils/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEjF,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,WAAW,CAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAE,MAAa,WAY5D;AAED,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAaxF;AAED,wBAAgB,SAAS,IAAK,KAAK,CAoClC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,wBAAgB,YAAY,CAAE,OAAO,GAAE,mBAAwB,YAuB9D"}
|
|
@@ -2,6 +2,10 @@ import { expect } from 'aegir/utils/chai.js';
|
|
|
2
2
|
import { pair } from 'it-pair';
|
|
3
3
|
import { PeerId } from '@libp2p/peer-id';
|
|
4
4
|
import * as PeerIdFactory from '@libp2p/peer-id-factory';
|
|
5
|
+
import { pushable } from 'it-pushable';
|
|
6
|
+
import drain from 'it-drain';
|
|
7
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
8
|
+
import { pipe } from 'it-pipe';
|
|
5
9
|
/**
|
|
6
10
|
* A tick is considered valid if it happened between now
|
|
7
11
|
* and `ms` milliseconds ago
|
|
@@ -16,7 +20,52 @@ export function isValidTick(date, ms = 5000) {
|
|
|
16
20
|
}
|
|
17
21
|
return false;
|
|
18
22
|
}
|
|
19
|
-
export function
|
|
23
|
+
export function mockMultiaddrConnection(source) {
|
|
24
|
+
const maConn = {
|
|
25
|
+
...source,
|
|
26
|
+
async close() {
|
|
27
|
+
},
|
|
28
|
+
timeline: {
|
|
29
|
+
open: Date.now()
|
|
30
|
+
},
|
|
31
|
+
remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001')
|
|
32
|
+
};
|
|
33
|
+
return maConn;
|
|
34
|
+
}
|
|
35
|
+
export function mockMuxer() {
|
|
36
|
+
let streamId = 0;
|
|
37
|
+
let streams = [];
|
|
38
|
+
const p = pushable();
|
|
39
|
+
const muxer = {
|
|
40
|
+
source: p,
|
|
41
|
+
sink: async (source) => {
|
|
42
|
+
await drain(source);
|
|
43
|
+
},
|
|
44
|
+
get streams() {
|
|
45
|
+
return streams;
|
|
46
|
+
},
|
|
47
|
+
newStream: (name) => {
|
|
48
|
+
const echo = pair();
|
|
49
|
+
const id = `${streamId++}`;
|
|
50
|
+
const stream = {
|
|
51
|
+
id,
|
|
52
|
+
sink: echo.sink,
|
|
53
|
+
source: echo.source,
|
|
54
|
+
close: () => {
|
|
55
|
+
streams = streams.filter(s => s !== stream);
|
|
56
|
+
},
|
|
57
|
+
abort: () => { },
|
|
58
|
+
reset: () => { },
|
|
59
|
+
timeline: {
|
|
60
|
+
open: 0
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return stream;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return muxer;
|
|
67
|
+
}
|
|
68
|
+
export function mockUpgrader(options = {}) {
|
|
20
69
|
const ensureProps = (multiaddrConnection) => {
|
|
21
70
|
['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
|
|
22
71
|
expect(multiaddrConnection).to.have.property(prop);
|
|
@@ -24,25 +73,27 @@ export function mockUpgrader() {
|
|
|
24
73
|
expect(isValidTick(multiaddrConnection.timeline.open)).to.equal(true);
|
|
25
74
|
return multiaddrConnection;
|
|
26
75
|
};
|
|
76
|
+
const muxer = options.muxer ?? mockMuxer();
|
|
27
77
|
const upgrader = {
|
|
28
78
|
async upgradeOutbound(multiaddrConnection) {
|
|
29
79
|
ensureProps(multiaddrConnection);
|
|
30
|
-
return await createConnection(multiaddrConnection, 'outbound');
|
|
80
|
+
return await createConnection(multiaddrConnection, 'outbound', muxer);
|
|
31
81
|
},
|
|
32
82
|
async upgradeInbound(multiaddrConnection) {
|
|
33
83
|
ensureProps(multiaddrConnection);
|
|
34
|
-
return await createConnection(multiaddrConnection, 'inbound');
|
|
84
|
+
return await createConnection(multiaddrConnection, 'inbound', muxer);
|
|
35
85
|
}
|
|
36
86
|
};
|
|
37
87
|
return upgrader;
|
|
38
88
|
}
|
|
39
|
-
async function createConnection(maConn, direction) {
|
|
89
|
+
async function createConnection(maConn, direction, muxer) {
|
|
40
90
|
const remoteAddr = maConn.remoteAddr;
|
|
41
91
|
const remotePeerIdStr = remoteAddr.getPeerId();
|
|
42
92
|
const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await PeerIdFactory.createEd25519PeerId();
|
|
43
93
|
const streams = [];
|
|
44
94
|
let streamId = 0;
|
|
45
95
|
const registry = new Map();
|
|
96
|
+
void pipe(maConn, muxer, maConn);
|
|
46
97
|
return {
|
|
47
98
|
id: 'mock-connection',
|
|
48
99
|
remoteAddr,
|
|
@@ -61,19 +112,8 @@ async function createConnection(maConn, direction) {
|
|
|
61
112
|
if (protocols.length === 0) {
|
|
62
113
|
throw new Error('protocols must have a length');
|
|
63
114
|
}
|
|
64
|
-
const echo = pair();
|
|
65
115
|
const id = `${streamId++}`;
|
|
66
|
-
const stream =
|
|
67
|
-
id,
|
|
68
|
-
sink: echo.sink,
|
|
69
|
-
source: echo.source,
|
|
70
|
-
close: () => { },
|
|
71
|
-
abort: () => { },
|
|
72
|
-
reset: () => { },
|
|
73
|
-
timeline: {
|
|
74
|
-
open: 0
|
|
75
|
-
}
|
|
76
|
-
};
|
|
116
|
+
const stream = muxer.newStream(id);
|
|
77
117
|
const streamData = {
|
|
78
118
|
protocol: protocols[0],
|
|
79
119
|
stream
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/transport/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/transport/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAM9B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAE,IAAa,EAAE,KAAa,IAAI;IAC3D,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;KACzC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE;QAClC,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAE,MAA0B;IACjE,MAAM,MAAM,GAAwB;QAClC,GAAG,MAAM;QACT,KAAK,CAAC,KAAK;QAEX,CAAC;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;SACjB;QACD,UAAU,EAAE,IAAI,SAAS,CAAC,yBAAyB,CAAC;KACrD,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,GAAkB,EAAE,CAAA;IAC/B,MAAM,CAAC,GAAG,QAAQ,EAAc,CAAA;IAEhC,MAAM,KAAK,GAAU;QACnB,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,EAAc,CAAA;YAE/B,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAgB;gBAC1B,EAAE;gBACF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,GAAG,EAAE;oBACV,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;gBAC7C,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,QAAQ,EAAE;oBACR,IAAI,EAAE,CAAC;iBACR;aACF,CAAA;YAED,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAMD,MAAM,UAAU,YAAY,CAAE,UAA+B,EAAE;IAC7D,MAAM,WAAW,GAAG,CAAC,mBAAwC,EAAE,EAAE;QAC/D,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnE,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrE,OAAO,mBAAmB,CAAA;IAC5B,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,CAAA;IAE1C,MAAM,QAAQ,GAAa;QACzB,KAAK,CAAC,eAAe,CAAE,mBAAmB;YACxC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC;QACD,KAAK,CAAC,cAAc,CAAE,mBAAmB;YACvC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QACtE,CAAC;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAE,MAA2B,EAAE,SAAiC,EAAE,KAAY;IAC3G,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IACpC,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,CAAA;IAC9C,MAAM,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAE3H,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;IAE1B,KAAK,IAAI,CACP,MAAM,EAAE,KAAK,EAAE,MAAM,CACtB,CAAA;IAED,OAAO;QACL,EAAE,EAAE,iBAAiB;QACrB,UAAU;QACV,UAAU;QACV,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,SAAS;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,kBAAkB;YAC/B,UAAU,EAAE,qBAAqB;SAClC;QACD,QAAQ;QACR,IAAI,EAAE,EAAE;QACR,OAAO;QACP,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;aAChD;YAED,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAgB,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG;gBACjB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;gBACtB,MAAM;aACP,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;YAE5B,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,SAAS,EAAE,CAAC,WAAwB,EAAE,UAAsB,EAAE,EAAE;QAEhE,CAAC;QACD,YAAY,EAAE,CAAC,EAAU,EAAE,EAAE;YAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACtB,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
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",
|
|
@@ -207,6 +207,7 @@
|
|
|
207
207
|
"it-map": "^1.0.6",
|
|
208
208
|
"it-pair": "^2.0.0",
|
|
209
209
|
"it-pipe": "^2.0.2",
|
|
210
|
+
"it-pushable": "^2.0.1",
|
|
210
211
|
"multiformats": "^9.4.10",
|
|
211
212
|
"p-defer": "^4.0.0",
|
|
212
213
|
"p-limit": "^4.0.0",
|
|
@@ -11,9 +11,9 @@ import { isValidTick } from '../transport/utils/index.js'
|
|
|
11
11
|
import type { DeferredPromise } from 'p-defer'
|
|
12
12
|
import type { TestSetup } from '../index.js'
|
|
13
13
|
import type { Muxer, MuxerOptions, MuxedStream } from '@libp2p/interfaces/stream-muxer'
|
|
14
|
-
import type { Source } from 'it-stream-types'
|
|
14
|
+
import type { Source, Duplex } from 'it-stream-types'
|
|
15
15
|
|
|
16
|
-
async function
|
|
16
|
+
async function drainAndClose (stream: Duplex<Uint8Array>) {
|
|
17
17
|
return await pipe([], stream, drain)
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -34,18 +34,21 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
34
34
|
}
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
-
void pipe(p[0], dialer
|
|
38
|
-
void pipe(p[1], listener
|
|
37
|
+
void pipe(p[0], dialer, p[0])
|
|
38
|
+
void pipe(p[1], listener, p[1])
|
|
39
39
|
|
|
40
40
|
const conn = dialer.newStream()
|
|
41
41
|
expect(dialer.streams).to.include(conn)
|
|
42
42
|
expect(isValidTick(conn.timeline.open)).to.equal(true)
|
|
43
43
|
|
|
44
|
+
void drainAndClose(conn)
|
|
45
|
+
|
|
44
46
|
const stream = await onStreamPromise.promise
|
|
45
47
|
expect(isValidTick(stream.timeline.open)).to.equal(true)
|
|
46
48
|
// Make sure the stream is being tracked
|
|
47
49
|
expect(listener.streams).to.include(stream)
|
|
48
|
-
|
|
50
|
+
|
|
51
|
+
void drainAndClose(stream)
|
|
49
52
|
|
|
50
53
|
// Make sure stream is closed properly
|
|
51
54
|
const endedStream = await onStreamEndPromise.promise
|
|
@@ -58,7 +61,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
58
61
|
// Make sure the stream is removed from tracking
|
|
59
62
|
expect(isValidTick(endedStream.timeline.close)).to.equal(true)
|
|
60
63
|
|
|
61
|
-
await
|
|
64
|
+
await drainAndClose(dialer)
|
|
65
|
+
await drainAndClose(listener)
|
|
62
66
|
|
|
63
67
|
// ensure we have no streams left
|
|
64
68
|
expect(dialer.streams).to.have.length(0)
|
|
@@ -76,18 +80,21 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
76
80
|
|
|
77
81
|
const listener = await common.setup()
|
|
78
82
|
|
|
79
|
-
void pipe(p[0], dialer
|
|
80
|
-
void pipe(p[1], listener
|
|
83
|
+
void pipe(p[0], dialer, p[0])
|
|
84
|
+
void pipe(p[1], listener, p[1])
|
|
81
85
|
|
|
82
86
|
const conn = listener.newStream()
|
|
83
87
|
|
|
88
|
+
void drainAndClose(conn)
|
|
89
|
+
|
|
84
90
|
const stream = await onStreamPromise.promise
|
|
85
91
|
expect(isValidTick(stream.timeline.open)).to.equal(true)
|
|
86
92
|
expect(listener.streams).to.include(conn)
|
|
87
93
|
expect(isValidTick(conn.timeline.open)).to.equal(true)
|
|
88
|
-
|
|
94
|
+
void drainAndClose(stream)
|
|
89
95
|
|
|
90
|
-
await
|
|
96
|
+
await drainAndClose(dialer)
|
|
97
|
+
await drainAndClose(listener)
|
|
91
98
|
})
|
|
92
99
|
|
|
93
100
|
it('Open a stream on both sides', async () => {
|
|
@@ -105,20 +112,23 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
105
112
|
}
|
|
106
113
|
})
|
|
107
114
|
|
|
108
|
-
void pipe(p[0], dialer
|
|
109
|
-
void pipe(p[1], listener
|
|
115
|
+
void pipe(p[0], dialer, p[0])
|
|
116
|
+
void pipe(p[1], listener, p[1])
|
|
110
117
|
|
|
111
118
|
const listenerConn = listener.newStream()
|
|
112
119
|
const dialerConn = dialer.newStream()
|
|
113
120
|
|
|
121
|
+
void drainAndClose(dialerConn)
|
|
122
|
+
void drainAndClose(listenerConn)
|
|
123
|
+
|
|
114
124
|
const dialerStream = await onDialerStreamPromise.promise
|
|
115
125
|
const listenerStream = await onListenerStreamPromise.promise
|
|
116
126
|
|
|
117
|
-
await
|
|
118
|
-
await
|
|
127
|
+
await drainAndClose(dialerStream)
|
|
128
|
+
await drainAndClose(listenerStream)
|
|
119
129
|
|
|
120
|
-
await
|
|
121
|
-
await
|
|
130
|
+
await drainAndClose(dialer)
|
|
131
|
+
await drainAndClose(listener)
|
|
122
132
|
})
|
|
123
133
|
|
|
124
134
|
it('Open a stream on one side, write, open a stream on the other side', async () => {
|
|
@@ -137,8 +147,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
137
147
|
}
|
|
138
148
|
})
|
|
139
149
|
|
|
140
|
-
void pipe(p[0], dialer
|
|
141
|
-
void pipe(p[1], listener
|
|
150
|
+
void pipe(p[0], dialer, p[0])
|
|
151
|
+
void pipe(p[1], listener, p[1])
|
|
142
152
|
|
|
143
153
|
const dialerConn = dialer.newStream()
|
|
144
154
|
const listenerConn = listener.newStream()
|
|
@@ -4,9 +4,10 @@ import { duplexPair } from 'it-pair/duplex'
|
|
|
4
4
|
import { abortableSource, abortableDuplex } from 'abortable-iterator'
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
6
|
import drain from 'it-drain'
|
|
7
|
+
import { mockUpgrader, mockMultiaddrConnection } from '../transport/utils/index.js'
|
|
7
8
|
import type { TestSetup } from '../index.js'
|
|
8
9
|
import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
|
|
9
|
-
import
|
|
10
|
+
import { expect } from 'aegir/utils/chai.js'
|
|
10
11
|
|
|
11
12
|
async function pause (ms: number) {
|
|
12
13
|
return await new Promise(resolve => setTimeout(resolve, ms))
|
|
@@ -27,30 +28,13 @@ const infiniteRandom = {
|
|
|
27
28
|
|
|
28
29
|
export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
29
30
|
describe('close', () => {
|
|
30
|
-
it('closing underlying socket closes streams
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
newStream: async (multicodecs) => {
|
|
35
|
-
return {
|
|
36
|
-
protocol: multicodecs[0],
|
|
37
|
-
stream: muxer.newStream(`${multicodecs[0]}`)
|
|
38
|
-
}
|
|
39
|
-
}
|
|
31
|
+
it('closing underlying socket closes streams', async () => {
|
|
32
|
+
const muxer = await common.setup({
|
|
33
|
+
onStream: (stream) => {
|
|
34
|
+
void pipe(stream, stream)
|
|
40
35
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const mockUpgrade = async (maConn: any) => {
|
|
46
|
-
const muxer = await common.setup({
|
|
47
|
-
onStream: (stream) => {
|
|
48
|
-
void pipe(stream, stream)
|
|
49
|
-
}
|
|
50
|
-
})
|
|
51
|
-
pipe(maConn, muxer.newStream('/test/stream'), maConn)
|
|
52
|
-
return mockConn(muxer)
|
|
53
|
-
}
|
|
36
|
+
})
|
|
37
|
+
const upgrader = mockUpgrader({ muxer })
|
|
54
38
|
|
|
55
39
|
const [local, remote] = duplexPair<Uint8Array>()
|
|
56
40
|
const controller = new AbortController()
|
|
@@ -58,8 +42,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
58
42
|
returnOnAbort: true
|
|
59
43
|
})
|
|
60
44
|
|
|
61
|
-
await
|
|
62
|
-
const dialerConn = await
|
|
45
|
+
await upgrader.upgradeInbound(mockMultiaddrConnection(abortableRemote))
|
|
46
|
+
const dialerConn = await upgrader.upgradeOutbound(mockMultiaddrConnection(local))
|
|
63
47
|
|
|
64
48
|
const s1 = await dialerConn.newStream([''])
|
|
65
49
|
const s2 = await dialerConn.newStream([''])
|
|
@@ -73,6 +57,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
73
57
|
// test is complete when all muxed streams have closed
|
|
74
58
|
await s1Result
|
|
75
59
|
await s2Result
|
|
60
|
+
|
|
61
|
+
expect(muxer.streams).to.be.empty()
|
|
76
62
|
})
|
|
77
63
|
|
|
78
64
|
it('closing one of the muxed streams doesn\'t close others', async () => {
|
|
@@ -84,8 +70,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
84
70
|
onStream: async (stream) => await pipe(stream, stream)
|
|
85
71
|
})
|
|
86
72
|
|
|
87
|
-
void pipe(p[0], dialer
|
|
88
|
-
void pipe(p[1], listener
|
|
73
|
+
void pipe(p[0], dialer, p[0])
|
|
74
|
+
void pipe(p[1], listener, p[1])
|
|
89
75
|
|
|
90
76
|
const stream = dialer.newStream()
|
|
91
77
|
const streams = Array.from(Array(5), () => dialer.newStream())
|
|
@@ -3,9 +3,9 @@ import closeTest from './close-test.js'
|
|
|
3
3
|
import stressTest from './stress-test.js'
|
|
4
4
|
import megaStressTest from './mega-stress-test.js'
|
|
5
5
|
import type { TestSetup } from '../index.js'
|
|
6
|
-
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
6
|
+
import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
|
|
7
7
|
|
|
8
|
-
export default (common: TestSetup<Muxer>) => {
|
|
8
|
+
export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
9
9
|
describe('interface-stream-muxer', () => {
|
|
10
10
|
baseTest(common)
|
|
11
11
|
closeTest(common)
|
|
@@ -25,8 +25,8 @@ export default async (createMuxer: (options?: MuxerOptions) => Promise<Muxer>, n
|
|
|
25
25
|
|
|
26
26
|
const dialer = await createMuxer()
|
|
27
27
|
|
|
28
|
-
void pipe(listenerSocket, listener
|
|
29
|
-
void pipe(dialerSocket, dialer
|
|
28
|
+
void pipe(listenerSocket, listener, listenerSocket)
|
|
29
|
+
void pipe(dialerSocket, dialer, dialerSocket)
|
|
30
30
|
|
|
31
31
|
const spawnStream = async () => {
|
|
32
32
|
const stream = dialer.newStream()
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { expect } from 'aegir/utils/chai.js'
|
|
2
|
-
import type { Upgrader, MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
3
|
-
import type { Connection, StreamData } from '@libp2p/interfaces/connection'
|
|
4
|
-
import type { MuxedStream } from '@libp2p/interfaces/stream-muxer'
|
|
5
2
|
import { pair } from 'it-pair'
|
|
6
3
|
import { PeerId } from '@libp2p/peer-id'
|
|
7
4
|
import * as PeerIdFactory from '@libp2p/peer-id-factory'
|
|
5
|
+
import { pushable } from 'it-pushable'
|
|
6
|
+
import drain from 'it-drain'
|
|
7
|
+
import { Multiaddr } from '@multiformats/multiaddr'
|
|
8
|
+
import { pipe } from 'it-pipe'
|
|
9
|
+
import type { Upgrader, MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
10
|
+
import type { Connection, StreamData } from '@libp2p/interfaces/connection'
|
|
11
|
+
import type { MuxedStream, Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
12
|
+
import type { Duplex } from 'it-stream-types'
|
|
13
|
+
|
|
8
14
|
/**
|
|
9
15
|
* A tick is considered valid if it happened between now
|
|
10
16
|
* and `ms` milliseconds ago
|
|
@@ -23,7 +29,64 @@ export function isValidTick (date?: number, ms: number = 5000) {
|
|
|
23
29
|
return false
|
|
24
30
|
}
|
|
25
31
|
|
|
26
|
-
export function
|
|
32
|
+
export function mockMultiaddrConnection (source: Duplex<Uint8Array>): MultiaddrConnection {
|
|
33
|
+
const maConn: MultiaddrConnection = {
|
|
34
|
+
...source,
|
|
35
|
+
async close () {
|
|
36
|
+
|
|
37
|
+
},
|
|
38
|
+
timeline: {
|
|
39
|
+
open: Date.now()
|
|
40
|
+
},
|
|
41
|
+
remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return maConn
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function mockMuxer (): Muxer {
|
|
48
|
+
let streamId = 0
|
|
49
|
+
let streams: MuxedStream[] = []
|
|
50
|
+
const p = pushable<Uint8Array>()
|
|
51
|
+
|
|
52
|
+
const muxer: Muxer = {
|
|
53
|
+
source: p,
|
|
54
|
+
sink: async (source) => {
|
|
55
|
+
await drain(source)
|
|
56
|
+
},
|
|
57
|
+
get streams () {
|
|
58
|
+
return streams
|
|
59
|
+
},
|
|
60
|
+
newStream: (name?: string) => {
|
|
61
|
+
const echo = pair<Uint8Array>()
|
|
62
|
+
|
|
63
|
+
const id = `${streamId++}`
|
|
64
|
+
const stream: MuxedStream = {
|
|
65
|
+
id,
|
|
66
|
+
sink: echo.sink,
|
|
67
|
+
source: echo.source,
|
|
68
|
+
close: () => {
|
|
69
|
+
streams = streams.filter(s => s !== stream)
|
|
70
|
+
},
|
|
71
|
+
abort: () => {},
|
|
72
|
+
reset: () => {},
|
|
73
|
+
timeline: {
|
|
74
|
+
open: 0
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return stream
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return muxer
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface MockUpgraderOptions {
|
|
86
|
+
muxer?: Muxer
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function mockUpgrader (options: MockUpgraderOptions = {}) {
|
|
27
90
|
const ensureProps = (multiaddrConnection: MultiaddrConnection) => {
|
|
28
91
|
['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
|
|
29
92
|
expect(multiaddrConnection).to.have.property(prop)
|
|
@@ -31,21 +94,24 @@ export function mockUpgrader () {
|
|
|
31
94
|
expect(isValidTick(multiaddrConnection.timeline.open)).to.equal(true)
|
|
32
95
|
return multiaddrConnection
|
|
33
96
|
}
|
|
97
|
+
|
|
98
|
+
const muxer = options.muxer ?? mockMuxer()
|
|
99
|
+
|
|
34
100
|
const upgrader: Upgrader = {
|
|
35
101
|
async upgradeOutbound (multiaddrConnection) {
|
|
36
102
|
ensureProps(multiaddrConnection)
|
|
37
|
-
return await createConnection(multiaddrConnection, 'outbound')
|
|
103
|
+
return await createConnection(multiaddrConnection, 'outbound', muxer)
|
|
38
104
|
},
|
|
39
105
|
async upgradeInbound (multiaddrConnection) {
|
|
40
106
|
ensureProps(multiaddrConnection)
|
|
41
|
-
return await createConnection(multiaddrConnection, 'inbound')
|
|
107
|
+
return await createConnection(multiaddrConnection, 'inbound', muxer)
|
|
42
108
|
}
|
|
43
109
|
}
|
|
44
110
|
|
|
45
111
|
return upgrader
|
|
46
112
|
}
|
|
47
113
|
|
|
48
|
-
async function createConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound'): Promise<Connection> {
|
|
114
|
+
async function createConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound', muxer: Muxer): Promise<Connection> {
|
|
49
115
|
const remoteAddr = maConn.remoteAddr
|
|
50
116
|
const remotePeerIdStr = remoteAddr.getPeerId()
|
|
51
117
|
const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await PeerIdFactory.createEd25519PeerId()
|
|
@@ -55,6 +121,10 @@ async function createConnection (maConn: MultiaddrConnection, direction: 'inboun
|
|
|
55
121
|
|
|
56
122
|
const registry = new Map()
|
|
57
123
|
|
|
124
|
+
void pipe(
|
|
125
|
+
maConn, muxer, maConn
|
|
126
|
+
)
|
|
127
|
+
|
|
58
128
|
return {
|
|
59
129
|
id: 'mock-connection',
|
|
60
130
|
remoteAddr,
|
|
@@ -74,21 +144,8 @@ async function createConnection (maConn: MultiaddrConnection, direction: 'inboun
|
|
|
74
144
|
throw new Error('protocols must have a length')
|
|
75
145
|
}
|
|
76
146
|
|
|
77
|
-
const echo = pair<Uint8Array>()
|
|
78
|
-
|
|
79
147
|
const id = `${streamId++}`
|
|
80
|
-
const stream: MuxedStream =
|
|
81
|
-
id,
|
|
82
|
-
sink: echo.sink,
|
|
83
|
-
source: echo.source,
|
|
84
|
-
close: () => {},
|
|
85
|
-
abort: () => {},
|
|
86
|
-
reset: () => {},
|
|
87
|
-
timeline: {
|
|
88
|
-
open: 0
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
148
|
+
const stream: MuxedStream = muxer.newStream(id)
|
|
92
149
|
const streamData = {
|
|
93
150
|
protocol: protocols[0],
|
|
94
151
|
stream
|