@libp2p/interface-compliance-tests 3.0.7-ea8a0637 → 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 (183) hide show
  1. package/README.md +9 -0
  2. package/dist/src/connection/index.d.ts +5 -0
  3. package/dist/src/connection/index.d.ts.map +1 -0
  4. package/dist/src/connection/index.js +150 -0
  5. package/dist/src/connection/index.js.map +1 -0
  6. package/dist/src/connection-encryption/index.d.ts +5 -0
  7. package/dist/src/connection-encryption/index.d.ts.map +1 -0
  8. package/dist/src/connection-encryption/index.js +71 -0
  9. package/dist/src/connection-encryption/index.js.map +1 -0
  10. package/dist/src/connection-encryption/utils/index.d.ts +3 -0
  11. package/dist/src/connection-encryption/utils/index.d.ts.map +1 -0
  12. package/dist/src/connection-encryption/utils/index.js +19 -0
  13. package/dist/src/connection-encryption/utils/index.js.map +1 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/is-valid-tick.d.ts.map +1 -1
  16. package/dist/src/is-valid-tick.js.map +1 -1
  17. package/dist/src/mocks/connection-encrypter.d.ts +3 -0
  18. package/dist/src/mocks/connection-encrypter.d.ts.map +1 -0
  19. package/dist/src/mocks/connection-encrypter.js +98 -0
  20. package/dist/src/mocks/connection-encrypter.js.map +1 -0
  21. package/dist/src/mocks/connection-gater.d.ts +3 -0
  22. package/dist/src/mocks/connection-gater.d.ts.map +1 -0
  23. package/dist/src/mocks/connection-gater.js +17 -0
  24. package/dist/src/mocks/connection-gater.js.map +1 -0
  25. package/dist/src/mocks/connection-manager.d.ts +29 -0
  26. package/dist/src/mocks/connection-manager.d.ts.map +1 -0
  27. package/dist/src/mocks/connection-manager.js +145 -0
  28. package/dist/src/mocks/connection-manager.js.map +1 -0
  29. package/dist/src/mocks/connection.d.ts +32 -0
  30. package/dist/src/mocks/connection.d.ts.map +1 -0
  31. package/dist/src/mocks/connection.js +167 -0
  32. package/dist/src/mocks/connection.js.map +1 -0
  33. package/dist/src/mocks/duplex.d.ts +3 -0
  34. package/dist/src/mocks/duplex.d.ts.map +1 -0
  35. package/dist/src/mocks/duplex.js +9 -0
  36. package/dist/src/mocks/duplex.js.map +1 -0
  37. package/dist/src/mocks/index.d.ts +13 -0
  38. package/dist/src/mocks/index.d.ts.map +1 -0
  39. package/dist/src/mocks/index.js +11 -0
  40. package/dist/src/mocks/index.js.map +1 -0
  41. package/dist/src/mocks/metrics.d.ts +3 -0
  42. package/dist/src/mocks/metrics.d.ts.map +1 -0
  43. package/dist/src/mocks/metrics.js +115 -0
  44. package/dist/src/mocks/metrics.js.map +1 -0
  45. package/dist/src/mocks/multiaddr-connection.d.ts +17 -0
  46. package/dist/src/mocks/multiaddr-connection.d.ts.map +1 -0
  47. package/dist/src/mocks/multiaddr-connection.js +60 -0
  48. package/dist/src/mocks/multiaddr-connection.js.map +1 -0
  49. package/dist/src/mocks/muxer.d.ts +36 -0
  50. package/dist/src/mocks/muxer.d.ts.map +1 -0
  51. package/dist/src/mocks/muxer.js +213 -0
  52. package/dist/src/mocks/muxer.js.map +1 -0
  53. package/dist/src/mocks/peer-discovery.d.ts +22 -0
  54. package/dist/src/mocks/peer-discovery.d.ts.map +1 -0
  55. package/dist/src/mocks/peer-discovery.js +47 -0
  56. package/dist/src/mocks/peer-discovery.js.map +1 -0
  57. package/dist/src/mocks/registrar.d.ts +18 -0
  58. package/dist/src/mocks/registrar.d.ts.map +1 -0
  59. package/dist/src/mocks/registrar.js +66 -0
  60. package/dist/src/mocks/registrar.js.map +1 -0
  61. package/dist/src/mocks/upgrader.d.ts +10 -0
  62. package/dist/src/mocks/upgrader.d.ts.map +1 -0
  63. package/dist/src/mocks/upgrader.js +31 -0
  64. package/dist/src/mocks/upgrader.js.map +1 -0
  65. package/dist/src/peer-discovery/index.d.ts +5 -0
  66. package/dist/src/peer-discovery/index.d.ts.map +1 -0
  67. package/dist/src/peer-discovery/index.js +66 -0
  68. package/dist/src/peer-discovery/index.js.map +1 -0
  69. package/dist/src/pubsub/api.d.ts +6 -0
  70. package/dist/src/pubsub/api.d.ts.map +1 -0
  71. package/dist/src/pubsub/api.js +87 -0
  72. package/dist/src/pubsub/api.js.map +1 -0
  73. package/dist/src/pubsub/connection-handlers.d.ts +6 -0
  74. package/dist/src/pubsub/connection-handlers.d.ts.map +1 -0
  75. package/dist/src/pubsub/connection-handlers.js +329 -0
  76. package/dist/src/pubsub/connection-handlers.js.map +1 -0
  77. package/dist/src/pubsub/emit-self.d.ts +6 -0
  78. package/dist/src/pubsub/emit-self.d.ts.map +1 -0
  79. package/dist/src/pubsub/emit-self.js +80 -0
  80. package/dist/src/pubsub/emit-self.js.map +1 -0
  81. package/dist/src/pubsub/index.d.ts +18 -0
  82. package/dist/src/pubsub/index.d.ts.map +1 -0
  83. package/dist/src/pubsub/index.js +17 -0
  84. package/dist/src/pubsub/index.js.map +1 -0
  85. package/dist/src/pubsub/messages.d.ts +6 -0
  86. package/dist/src/pubsub/messages.d.ts.map +1 -0
  87. package/dist/src/pubsub/messages.js +48 -0
  88. package/dist/src/pubsub/messages.js.map +1 -0
  89. package/dist/src/pubsub/multiple-nodes.d.ts +6 -0
  90. package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -0
  91. package/dist/src/pubsub/multiple-nodes.js +350 -0
  92. package/dist/src/pubsub/multiple-nodes.js.map +1 -0
  93. package/dist/src/pubsub/two-nodes.d.ts +6 -0
  94. package/dist/src/pubsub/two-nodes.d.ts.map +1 -0
  95. package/dist/src/pubsub/two-nodes.js +217 -0
  96. package/dist/src/pubsub/two-nodes.js.map +1 -0
  97. package/dist/src/pubsub/utils.d.ts +6 -0
  98. package/dist/src/pubsub/utils.d.ts.map +1 -0
  99. package/dist/src/pubsub/utils.js +22 -0
  100. package/dist/src/pubsub/utils.js.map +1 -0
  101. package/dist/src/stream-muxer/base-test.d.ts +5 -0
  102. package/dist/src/stream-muxer/base-test.d.ts.map +1 -0
  103. package/dist/src/stream-muxer/base-test.js +153 -0
  104. package/dist/src/stream-muxer/base-test.js.map +1 -0
  105. package/dist/src/stream-muxer/close-test.d.ts +5 -0
  106. package/dist/src/stream-muxer/close-test.d.ts.map +1 -0
  107. package/dist/src/stream-muxer/close-test.js +357 -0
  108. package/dist/src/stream-muxer/close-test.js.map +1 -0
  109. package/dist/src/stream-muxer/fixtures/pb/message.d.ts +13 -0
  110. package/dist/src/stream-muxer/fixtures/pb/message.d.ts.map +1 -0
  111. package/dist/src/stream-muxer/fixtures/pb/message.js +67 -0
  112. package/dist/src/stream-muxer/fixtures/pb/message.js.map +1 -0
  113. package/dist/src/stream-muxer/index.d.ts +5 -0
  114. package/dist/src/stream-muxer/index.d.ts.map +1 -0
  115. package/dist/src/stream-muxer/index.js +13 -0
  116. package/dist/src/stream-muxer/index.js.map +1 -0
  117. package/dist/src/stream-muxer/mega-stress-test.d.ts +5 -0
  118. package/dist/src/stream-muxer/mega-stress-test.d.ts.map +1 -0
  119. package/dist/src/stream-muxer/mega-stress-test.js +11 -0
  120. package/dist/src/stream-muxer/mega-stress-test.js.map +1 -0
  121. package/dist/src/stream-muxer/spawner.d.ts +4 -0
  122. package/dist/src/stream-muxer/spawner.d.ts.map +1 -0
  123. package/dist/src/stream-muxer/spawner.js +37 -0
  124. package/dist/src/stream-muxer/spawner.js.map +1 -0
  125. package/dist/src/stream-muxer/stress-test.d.ts +5 -0
  126. package/dist/src/stream-muxer/stress-test.d.ts.map +1 -0
  127. package/dist/src/stream-muxer/stress-test.js +23 -0
  128. package/dist/src/stream-muxer/stress-test.js.map +1 -0
  129. package/dist/src/transport/dial-test.d.ts +5 -0
  130. package/dist/src/transport/dial-test.d.ts.map +1 -0
  131. package/dist/src/transport/dial-test.js +98 -0
  132. package/dist/src/transport/dial-test.js.map +1 -0
  133. package/dist/src/transport/filter-test.d.ts +5 -0
  134. package/dist/src/transport/filter-test.d.ts.map +1 -0
  135. package/dist/src/transport/filter-test.js +18 -0
  136. package/dist/src/transport/filter-test.js.map +1 -0
  137. package/dist/src/transport/index.d.ts +15 -0
  138. package/dist/src/transport/index.d.ts.map +1 -0
  139. package/dist/src/transport/index.js +11 -0
  140. package/dist/src/transport/index.js.map +1 -0
  141. package/dist/src/transport/listen-test.d.ts +5 -0
  142. package/dist/src/transport/listen-test.d.ts.map +1 -0
  143. package/dist/src/transport/listen-test.js +152 -0
  144. package/dist/src/transport/listen-test.js.map +1 -0
  145. package/package.json +72 -5
  146. package/src/connection/index.ts +182 -0
  147. package/src/connection-encryption/index.ts +97 -0
  148. package/src/connection-encryption/utils/index.ts +24 -0
  149. package/src/index.ts +0 -1
  150. package/src/is-valid-tick.ts +0 -1
  151. package/src/mocks/connection-encrypter.ts +113 -0
  152. package/src/mocks/connection-gater.ts +18 -0
  153. package/src/mocks/connection-manager.ts +211 -0
  154. package/src/mocks/connection.ts +226 -0
  155. package/src/mocks/duplex.ts +10 -0
  156. package/src/mocks/index.ts +12 -0
  157. package/src/mocks/metrics.ts +162 -0
  158. package/src/mocks/multiaddr-connection.ts +76 -0
  159. package/src/mocks/muxer.ts +303 -0
  160. package/src/mocks/peer-discovery.ts +60 -0
  161. package/src/mocks/registrar.ts +88 -0
  162. package/src/mocks/upgrader.ts +49 -0
  163. package/src/peer-discovery/index.ts +90 -0
  164. package/src/pubsub/api.ts +114 -0
  165. package/src/pubsub/connection-handlers.ts +413 -0
  166. package/src/pubsub/emit-self.ts +99 -0
  167. package/src/pubsub/index.ts +34 -0
  168. package/src/pubsub/messages.ts +59 -0
  169. package/src/pubsub/multiple-nodes.ts +440 -0
  170. package/src/pubsub/two-nodes.ts +273 -0
  171. package/src/pubsub/utils.ts +29 -0
  172. package/src/stream-muxer/base-test.ts +196 -0
  173. package/src/stream-muxer/close-test.ts +442 -0
  174. package/src/stream-muxer/fixtures/pb/message.proto +7 -0
  175. package/src/stream-muxer/fixtures/pb/message.ts +87 -0
  176. package/src/stream-muxer/index.ts +15 -0
  177. package/src/stream-muxer/mega-stress-test.ts +14 -0
  178. package/src/stream-muxer/spawner.ts +55 -0
  179. package/src/stream-muxer/stress-test.ts +27 -0
  180. package/src/transport/dial-test.ts +124 -0
  181. package/src/transport/filter-test.ts +25 -0
  182. package/src/transport/index.ts +25 -0
  183. package/src/transport/listen-test.ts +191 -0
@@ -0,0 +1,98 @@
1
+ import { AbortError } from '@libp2p/interface/errors';
2
+ import { EventEmitter } from '@libp2p/interface/events';
3
+ import { expect } from 'aegir/chai';
4
+ import all from 'it-all';
5
+ import drain from 'it-drain';
6
+ import { pipe } from 'it-pipe';
7
+ import sinon from 'sinon';
8
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
9
+ import { isValidTick } from '../is-valid-tick.js';
10
+ import { mockUpgrader, mockRegistrar } from '../mocks/index.js';
11
+ export default (common) => {
12
+ describe('dial', () => {
13
+ let upgrader;
14
+ let registrar;
15
+ let addrs;
16
+ let transport;
17
+ let connector;
18
+ let listener;
19
+ before(async () => {
20
+ registrar = mockRegistrar();
21
+ upgrader = mockUpgrader({
22
+ registrar,
23
+ events: new EventEmitter()
24
+ });
25
+ ({ addrs, transport, connector } = await common.setup());
26
+ });
27
+ after(async () => {
28
+ await common.teardown();
29
+ });
30
+ beforeEach(async () => {
31
+ listener = transport.createListener({
32
+ upgrader
33
+ });
34
+ await listener.listen(addrs[0]);
35
+ });
36
+ afterEach(async () => {
37
+ sinon.restore();
38
+ connector.restore();
39
+ await listener.close();
40
+ });
41
+ it('simple', async () => {
42
+ const protocol = '/hello/1.0.0';
43
+ void registrar.handle(protocol, (data) => {
44
+ void pipe([
45
+ uint8ArrayFromString('hey')
46
+ ], data.stream, drain);
47
+ });
48
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound');
49
+ const conn = await transport.dial(addrs[0], {
50
+ upgrader
51
+ });
52
+ const stream = await conn.newStream([protocol]);
53
+ const result = await all(stream.source);
54
+ expect(upgradeSpy.callCount).to.equal(1);
55
+ await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn);
56
+ expect(result.length).to.equal(1);
57
+ expect(result[0].subarray()).to.equalBytes(uint8ArrayFromString('hey'));
58
+ await conn.close();
59
+ });
60
+ it('can close connections', async () => {
61
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound');
62
+ const conn = await transport.dial(addrs[0], {
63
+ upgrader
64
+ });
65
+ expect(upgradeSpy.callCount).to.equal(1);
66
+ await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn);
67
+ await conn.close();
68
+ expect(isValidTick(conn.timeline.close)).to.equal(true);
69
+ });
70
+ it('to non existent listener', async () => {
71
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound');
72
+ await expect(transport.dial(addrs[1], {
73
+ upgrader
74
+ })).to.eventually.be.rejected();
75
+ expect(upgradeSpy.callCount).to.equal(0);
76
+ });
77
+ it('abort before dialing throws AbortError', async () => {
78
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound');
79
+ const controller = new AbortController();
80
+ controller.abort();
81
+ const conn = transport.dial(addrs[0], { signal: controller.signal, upgrader });
82
+ await expect(conn).to.eventually.be.rejected().with.property('code', AbortError.code);
83
+ expect(upgradeSpy.callCount).to.equal(0);
84
+ });
85
+ it('abort while dialing throws AbortError', async () => {
86
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound');
87
+ // Add a delay to connect() so that we can abort while the dial is in
88
+ // progress
89
+ connector.delay(100);
90
+ const controller = new AbortController();
91
+ const conn = transport.dial(addrs[0], { signal: controller.signal, upgrader });
92
+ setTimeout(() => { controller.abort(); }, 50);
93
+ await expect(conn).to.eventually.be.rejected().with.property('code', AbortError.code);
94
+ expect(upgradeSpy.callCount).to.equal(0);
95
+ });
96
+ });
97
+ };
98
+ //# sourceMappingURL=dial-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-test.js","sourceRoot":"","sources":["../../../src/transport/dial-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TransportTestFixtures } from './index.js';
2
+ import type { TestSetup } from '../index.js';
3
+ declare const _default: (common: TestSetup<TransportTestFixtures>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=filter-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-test.d.ts","sourceRoot":"","sources":["../../../src/transport/filter-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;iCAIpB,UAAU,qBAAqB,CAAC,KAAG,IAAI;AAA/D,wBAkBC"}
@@ -0,0 +1,18 @@
1
+ import { expect } from 'aegir/chai';
2
+ export default (common) => {
3
+ describe('filter', () => {
4
+ let addrs;
5
+ let transport;
6
+ before(async () => {
7
+ ({ addrs, transport } = await common.setup());
8
+ });
9
+ after(async () => {
10
+ await common.teardown();
11
+ });
12
+ it('filters addresses', () => {
13
+ const filteredAddrs = transport.filter(addrs);
14
+ expect(filteredAddrs).to.eql(addrs);
15
+ });
16
+ });
17
+ };
18
+ //# sourceMappingURL=filter-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-test.js","sourceRoot":"","sources":["../../../src/transport/filter-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAMnC,eAAe,CAAC,MAAwC,EAAQ,EAAE;IAChE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,IAAI,KAAkB,CAAA;QACtB,IAAI,SAAoB,CAAA;QAExB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7C,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Transport } from '@libp2p/interface/transport';
3
+ import type { Multiaddr } from '@multiformats/multiaddr';
4
+ export interface Connector {
5
+ delay: (ms: number) => void;
6
+ restore: () => void;
7
+ }
8
+ export interface TransportTestFixtures {
9
+ addrs: Multiaddr[];
10
+ transport: Transport;
11
+ connector: Connector;
12
+ }
13
+ declare const _default: (common: TestSetup<TransportTestFixtures>) => void;
14
+ export default _default;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;CACrB;iCAEuB,UAAU,qBAAqB,CAAC,KAAG,IAAI;AAA/D,wBAMC"}
@@ -0,0 +1,11 @@
1
+ import dial from './dial-test.js';
2
+ import filter from './filter-test.js';
3
+ import listen from './listen-test.js';
4
+ export default (common) => {
5
+ describe('interface-transport', () => {
6
+ dial(common);
7
+ listen(common);
8
+ filter(common);
9
+ });
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,gBAAgB,CAAA;AACjC,OAAO,MAAM,MAAM,kBAAkB,CAAA;AACrC,OAAO,MAAM,MAAM,kBAAkB,CAAA;AAgBrC,eAAe,CAAC,MAAwC,EAAQ,EAAE;IAChE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,MAAM,CAAC,CAAA;QACZ,MAAM,CAAC,MAAM,CAAC,CAAA;QACd,MAAM,CAAC,MAAM,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TransportTestFixtures } from './index.js';
2
+ import type { TestSetup } from '../index.js';
3
+ declare const _default: (common: TestSetup<TransportTestFixtures>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=listen-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen-test.d.ts","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;iCAMpB,UAAU,qBAAqB,CAAC,KAAG,IAAI;AAA/D,wBA4KC"}
@@ -0,0 +1,152 @@
1
+ /* eslint max-nested-callbacks: ["error", 8] */
2
+ import { CustomEvent, EventEmitter } from '@libp2p/interface/events';
3
+ import { expect } from 'aegir/chai';
4
+ import drain from 'it-drain';
5
+ import { pipe } from 'it-pipe';
6
+ import defer from 'p-defer';
7
+ import pWaitFor from 'p-wait-for';
8
+ import sinon from 'sinon';
9
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
10
+ import { isValidTick } from '../is-valid-tick.js';
11
+ import { mockUpgrader, mockRegistrar } from '../mocks/index.js';
12
+ export default (common) => {
13
+ describe('listen', () => {
14
+ let upgrader;
15
+ let addrs;
16
+ let transport;
17
+ let registrar;
18
+ before(async () => {
19
+ registrar = mockRegistrar();
20
+ upgrader = mockUpgrader({
21
+ registrar,
22
+ events: new EventEmitter()
23
+ });
24
+ ({ transport, addrs } = await common.setup());
25
+ });
26
+ after(async () => {
27
+ await common.teardown();
28
+ });
29
+ afterEach(() => {
30
+ sinon.restore();
31
+ });
32
+ it('simple', async () => {
33
+ const listener = transport.createListener({
34
+ upgrader
35
+ });
36
+ await listener.listen(addrs[0]);
37
+ await listener.close();
38
+ });
39
+ it('close listener with connections, through timeout', async () => {
40
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound');
41
+ const listenerConns = [];
42
+ const protocol = '/test/protocol';
43
+ void registrar.handle(protocol, (data) => {
44
+ void drain(data.stream.source);
45
+ });
46
+ const listener = transport.createListener({
47
+ upgrader,
48
+ handler: (conn) => {
49
+ listenerConns.push(conn);
50
+ }
51
+ });
52
+ // Listen
53
+ await listener.listen(addrs[0]);
54
+ // Create two connections to the listener
55
+ const [conn1] = await Promise.all([
56
+ transport.dial(addrs[0], {
57
+ upgrader
58
+ }),
59
+ transport.dial(addrs[0], {
60
+ upgrader
61
+ })
62
+ ]);
63
+ // Give the listener a chance to finish its upgrade
64
+ await pWaitFor(() => listenerConns.length === 2);
65
+ const stream1 = await conn1.newStream([protocol]);
66
+ // Wait for the data send and close to finish
67
+ await Promise.all([
68
+ pipe([uint8ArrayFromString('Some data that is never handled')], stream1),
69
+ // Closer the listener (will take a couple of seconds to time out)
70
+ listener.close()
71
+ ]);
72
+ await stream1.close();
73
+ await conn1.close();
74
+ expect(isValidTick(conn1.timeline.close)).to.equal(true);
75
+ listenerConns.forEach(conn => {
76
+ expect(isValidTick(conn.timeline.close)).to.equal(true);
77
+ });
78
+ // 2 dials = 2 connections upgraded
79
+ expect(upgradeSpy.callCount).to.equal(2);
80
+ });
81
+ it('should not handle connection if upgradeInbound throws', async () => {
82
+ sinon.stub(upgrader, 'upgradeInbound').throws();
83
+ const listener = transport.createListener({
84
+ upgrader
85
+ });
86
+ // Listen
87
+ await listener.listen(addrs[0]);
88
+ // Create a connection to the listener
89
+ const conn = await transport.dial(addrs[0], {
90
+ upgrader
91
+ });
92
+ await pWaitFor(() => typeof conn.timeline.close === 'number');
93
+ await listener.close();
94
+ });
95
+ describe('events', () => {
96
+ it('connection', async () => {
97
+ const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound');
98
+ const listener = transport.createListener({
99
+ upgrader
100
+ });
101
+ const deferred = defer();
102
+ let conn;
103
+ listener.addEventListener('connection', (evt) => {
104
+ conn = evt.detail;
105
+ deferred.resolve();
106
+ });
107
+ void (async () => {
108
+ await listener.listen(addrs[0]);
109
+ await transport.dial(addrs[0], {
110
+ upgrader
111
+ });
112
+ })();
113
+ await deferred.promise;
114
+ await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn);
115
+ expect(upgradeSpy.callCount).to.equal(1);
116
+ await listener.close();
117
+ });
118
+ it('listening', (done) => {
119
+ const listener = transport.createListener({
120
+ upgrader
121
+ });
122
+ listener.addEventListener('listening', () => {
123
+ listener.close().then(done, done);
124
+ });
125
+ void listener.listen(addrs[0]);
126
+ });
127
+ it('error', (done) => {
128
+ const listener = transport.createListener({
129
+ upgrader
130
+ });
131
+ listener.addEventListener('error', (evt) => {
132
+ expect(evt.detail).to.be.an.instanceOf(Error);
133
+ listener.close().then(done, done);
134
+ });
135
+ listener.dispatchEvent(new CustomEvent('error', {
136
+ detail: new Error('my err')
137
+ }));
138
+ });
139
+ it('close', (done) => {
140
+ const listener = transport.createListener({
141
+ upgrader
142
+ });
143
+ listener.addEventListener('close', () => { done(); });
144
+ void (async () => {
145
+ await listener.listen(addrs[0]);
146
+ await listener.close();
147
+ })();
148
+ });
149
+ });
150
+ });
151
+ };
152
+ //# sourceMappingURL=listen-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen-test.js","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/interface-compliance-tests",
3
- "version": "3.0.7-ea8a0637",
3
+ "version": "3.0.7-eabf6f36",
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/tree/master/packages/interface-compliance-tests#readme",
@@ -44,13 +44,41 @@
44
44
  "types": "./dist/src/index.d.ts",
45
45
  "import": "./dist/src/index.js"
46
46
  },
47
+ "./connection": {
48
+ "types": "./dist/src/connection/index.d.ts",
49
+ "import": "./dist/src/connection/index.js"
50
+ },
51
+ "./connection-encryption": {
52
+ "types": "./dist/src/connection-encryption/index.d.ts",
53
+ "import": "./dist/src/connection-encryption/index.js"
54
+ },
47
55
  "./is-valid-tick": {
48
56
  "types": "./dist/src/is-valid-tick.d.ts",
49
57
  "import": "./dist/src/is-valid-tick.js"
50
58
  },
59
+ "./mocks": {
60
+ "types": "./dist/src/mocks/index.d.ts",
61
+ "import": "./dist/src/mocks/index.js"
62
+ },
63
+ "./peer-discovery": {
64
+ "types": "./dist/src/peer-discovery/index.d.ts",
65
+ "import": "./dist/src/peer-discovery/index.js"
66
+ },
51
67
  "./peers": {
52
68
  "types": "./dist/src/peers.d.ts",
53
69
  "import": "./dist/src/peers.js"
70
+ },
71
+ "./pubsub": {
72
+ "types": "./dist/src/pubsub/index.d.ts",
73
+ "import": "./dist/src/pubsub/index.js"
74
+ },
75
+ "./stream-muxer": {
76
+ "types": "./dist/src/stream-muxer/index.d.ts",
77
+ "import": "./dist/src/stream-muxer/index.js"
78
+ },
79
+ "./transport": {
80
+ "types": "./dist/src/transport/index.d.ts",
81
+ "import": "./dist/src/transport/index.js"
54
82
  }
55
83
  },
56
84
  "eslintConfig": {
@@ -63,12 +91,51 @@
63
91
  "clean": "aegir clean",
64
92
  "lint": "aegir lint",
65
93
  "dep-check": "aegir dep-check",
66
- "build": "aegir build"
94
+ "build": "aegir build",
95
+ "generate": "protons src/stream-muxer/fixtures/pb/message.proto",
96
+ "test": "aegir test",
97
+ "test:chrome": "aegir test -t browser --cov",
98
+ "test:chrome-webworker": "aegir test -t webworker",
99
+ "test:firefox": "aegir test -t browser -- --browser firefox",
100
+ "test:firefox-webworker": "aegir test -t webworker -- --browser firefox",
101
+ "test:node": "aegir test -t node --cov",
102
+ "test:electron-main": "aegir test -t electron-main"
67
103
  },
68
104
  "dependencies": {
69
- "aegir": "^39.0.5"
105
+ "@libp2p/interface": "0.0.1-eabf6f36",
106
+ "@libp2p/interface-internal": "0.0.1-eabf6f36",
107
+ "@libp2p/logger": "2.1.1-eabf6f36",
108
+ "@libp2p/multistream-select": "3.1.9-eabf6f36",
109
+ "@libp2p/peer-collections": "3.0.2-eabf6f36",
110
+ "@libp2p/peer-id": "2.0.3-eabf6f36",
111
+ "@libp2p/peer-id-factory": "2.0.3-eabf6f36",
112
+ "@multiformats/multiaddr": "^12.1.3",
113
+ "abortable-iterator": "^5.0.1",
114
+ "delay": "^6.0.0",
115
+ "it-all": "^3.0.2",
116
+ "it-drain": "^3.0.2",
117
+ "it-handshake": "^4.1.3",
118
+ "it-map": "^3.0.3",
119
+ "it-ndjson": "^1.0.3",
120
+ "it-pair": "^2.0.6",
121
+ "it-pipe": "^3.0.1",
122
+ "it-protobuf-stream": "^1.0.0",
123
+ "it-pushable": "^3.2.0",
124
+ "it-stream-types": "^2.0.1",
125
+ "it-to-buffer": "^4.0.2",
126
+ "merge-options": "^3.0.4",
127
+ "p-defer": "^4.0.0",
128
+ "p-event": "^6.0.0",
129
+ "p-limit": "^4.0.0",
130
+ "p-wait-for": "^5.0.2",
131
+ "protons-runtime": "^5.0.0",
132
+ "sinon": "^15.1.2",
133
+ "ts-sinon": "^2.0.2",
134
+ "uint8arraylist": "^2.4.3",
135
+ "uint8arrays": "^4.0.4"
70
136
  },
71
- "typedoc": {
72
- "entryPoint": "./src/index.ts"
137
+ "devDependencies": {
138
+ "aegir": "^40.0.1",
139
+ "protons": "^7.0.2"
73
140
  }
74
141
  }
@@ -0,0 +1,182 @@
1
+ import { expect } from 'aegir/chai'
2
+ import sinon from 'sinon'
3
+ import { stubInterface } from 'ts-sinon'
4
+ import type { TestSetup } from '../index.js'
5
+ import type { Connection, Stream } from '@libp2p/interface/connection'
6
+
7
+ export default (test: TestSetup<Connection>): void => {
8
+ describe('connection', () => {
9
+ describe('open connection', () => {
10
+ let connection: Connection
11
+
12
+ beforeEach(async () => {
13
+ connection = await test.setup()
14
+ })
15
+
16
+ afterEach(async () => {
17
+ await connection.close()
18
+ await test.teardown()
19
+ })
20
+
21
+ it('should have properties set', () => {
22
+ expect(connection.id).to.exist()
23
+ expect(connection.remotePeer).to.exist()
24
+ expect(connection.remoteAddr).to.exist()
25
+ expect(connection.status).to.equal('open')
26
+ expect(connection.timeline.open).to.exist()
27
+ expect(connection.timeline.close).to.not.exist()
28
+ expect(connection.direction).to.exist()
29
+ expect(connection.streams).to.eql([])
30
+ expect(connection.tags).to.eql([])
31
+ })
32
+
33
+ it('should get the metadata of an open connection', () => {
34
+ expect(connection.status).to.equal('open')
35
+ expect(connection.direction).to.exist()
36
+ expect(connection.timeline.open).to.exist()
37
+ expect(connection.timeline.close).to.not.exist()
38
+ })
39
+
40
+ it('should return an empty array of streams', () => {
41
+ const streams = connection.streams
42
+
43
+ expect(streams).to.eql([])
44
+ })
45
+
46
+ it('should be able to create a new stream', async () => {
47
+ expect(connection.streams).to.be.empty()
48
+
49
+ const protocolToUse = '/echo/0.0.1'
50
+ const stream = await connection.newStream([protocolToUse])
51
+
52
+ expect(stream).to.have.property('protocol', protocolToUse)
53
+
54
+ const connStreams = connection.streams
55
+
56
+ expect(stream).to.exist()
57
+ expect(connStreams).to.exist()
58
+ expect(connStreams).to.have.lengthOf(1)
59
+ expect(connStreams[0]).to.equal(stream)
60
+ })
61
+ })
62
+
63
+ describe('close connection', () => {
64
+ let connection: Connection
65
+ let timelineProxy
66
+ const proxyHandler = {
67
+ set () {
68
+ // @ts-expect-error - TS fails to infer here
69
+ return Reflect.set(...arguments)
70
+ }
71
+ }
72
+
73
+ beforeEach(async () => {
74
+ timelineProxy = new Proxy({
75
+ open: Date.now() - 10,
76
+ upgraded: Date.now()
77
+ }, proxyHandler)
78
+
79
+ connection = await test.setup()
80
+ connection.timeline = timelineProxy
81
+ })
82
+
83
+ afterEach(async () => {
84
+ await test.teardown()
85
+ })
86
+
87
+ it('should be able to close the connection after being created', async () => {
88
+ expect(connection.timeline.close).to.not.exist()
89
+ await connection.close()
90
+
91
+ expect(connection.timeline.close).to.exist()
92
+ expect(connection.status).to.equal('closed')
93
+ })
94
+
95
+ it('should be able to close the connection after opening a stream', async () => {
96
+ // Open stream
97
+ const protocol = '/echo/0.0.1'
98
+ await connection.newStream([protocol])
99
+
100
+ // Close connection
101
+ expect(connection.timeline.close).to.not.exist()
102
+ await connection.close()
103
+
104
+ expect(connection.timeline.close).to.exist()
105
+ expect(connection.status).to.equal('closed')
106
+ })
107
+
108
+ it('should properly track streams', async () => {
109
+ // Open stream
110
+ const protocol = '/echo/0.0.1'
111
+ const stream = await connection.newStream([protocol])
112
+ expect(stream).to.have.property('protocol', protocol)
113
+
114
+ // Close stream
115
+ await stream.close()
116
+
117
+ expect(connection.streams.filter(s => s.id === stream.id)).to.be.empty()
118
+ })
119
+
120
+ it('should track outbound streams', async () => {
121
+ // Open stream
122
+ const protocol = '/echo/0.0.1'
123
+ const stream = await connection.newStream(protocol)
124
+ expect(stream).to.have.property('direction', 'outbound')
125
+ })
126
+
127
+ it.skip('should track inbound streams', async () => {
128
+ // Add an remotely opened stream
129
+ const stream = stubInterface<Stream>()
130
+ connection.addStream(stream)
131
+ expect(stream).to.have.property('direction', 'inbound')
132
+ })
133
+
134
+ it('should support a proxy on the timeline', async () => {
135
+ sinon.spy(proxyHandler, 'set')
136
+ expect(connection.timeline.close).to.not.exist()
137
+
138
+ await connection.close()
139
+ // @ts-expect-error - fails to infer callCount
140
+ expect(proxyHandler.set.callCount).to.equal(1)
141
+ // @ts-expect-error - fails to infer getCall
142
+ const [obj, key, value] = proxyHandler.set.getCall(0).args
143
+ expect(obj).to.eql(connection.timeline)
144
+ expect(key).to.equal('close')
145
+ expect(value).to.be.a('number').that.equals(connection.timeline.close)
146
+ })
147
+
148
+ it('should fail to create a new stream if the connection is closing', async () => {
149
+ expect(connection.timeline.close).to.not.exist()
150
+ const p = connection.close()
151
+
152
+ try {
153
+ const protocol = '/echo/0.0.1'
154
+ await connection.newStream([protocol])
155
+ } catch (err: any) {
156
+ expect(err).to.exist()
157
+ return
158
+ } finally {
159
+ await p
160
+ }
161
+
162
+ throw new Error('should fail to create a new stream if the connection is closing')
163
+ })
164
+
165
+ it('should fail to create a new stream if the connection is closed', async () => {
166
+ expect(connection.timeline.close).to.not.exist()
167
+ await connection.close()
168
+
169
+ try {
170
+ const protocol = '/echo/0.0.1'
171
+ await connection.newStream([protocol])
172
+ } catch (err: any) {
173
+ expect(err).to.exist()
174
+ expect(err.code).to.equal('ERR_CONNECTION_CLOSED')
175
+ return
176
+ }
177
+
178
+ throw new Error('should fail to create a new stream if the connection is closing')
179
+ })
180
+ })
181
+ })
182
+ }