Skip to content

Commit 02f285f

Browse files
authored
chore: run transport compliance tests on WebRTC and Circuit Relay (#2816)
Runs transport compliance tests with WebRTC and Circuit Relay transports
1 parent 18e8e1c commit 02f285f

File tree

37 files changed

+589
-673
lines changed

37 files changed

+589
-673
lines changed

packages/integration-tests/.aegir.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ export default {
3737
],
3838
streamMuxers: [
3939
yamux(),
40-
mplex(),
41-
() => mockMuxer()
40+
() => mockMuxer(),
41+
mplex()
4242
],
4343
connectionEncrypters: [
4444
noise(),
@@ -48,7 +48,8 @@ export default {
4848
identify: identify(),
4949
relay: circuitRelayServer({
5050
reservations: {
51-
maxReservations: Infinity
51+
maxReservations: Infinity,
52+
applyDefaultLimit: false
5253
}
5354
}),
5455
echo: echo({

packages/integration-tests/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
},
2222
"scripts": {
2323
"build": "aegir build",
24-
"test": "aegir test",
24+
"test": "aegir test -- --exit",
2525
"clean": "aegir clean",
2626
"lint": "aegir lint",
2727
"test:chrome": "aegir test -t browser --cov",
2828
"test:chrome-webworker": "aegir test -t webworker",
2929
"test:firefox": "aegir test -t browser -- --browser firefox",
3030
"test:firefox-webworker": "aegir test -t webworker -- --browser firefox",
31-
"test:node": "aegir test -t node --cov",
31+
"test:node": "aegir test -t node --cov -- --exit",
3232
"test:interop": "aegir test -t node -f dist/test/interop.js",
3333
"dep-check": "aegir dep-check"
3434
},
@@ -50,7 +50,7 @@
5050
"@libp2p/interface-compliance-tests": "^6.0.0",
5151
"@libp2p/interface-internal": "^2.0.0",
5252
"@libp2p/interop": "^13.0.0",
53-
"@libp2p/kad-dht": "^13.0.0",
53+
"@libp2p/kad-dht": "^14.0.0",
5454
"@libp2p/logger": "^5.0.0",
5555
"@libp2p/mdns": "^11.0.0",
5656
"@libp2p/memory": "^0.0.0",
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/* eslint-env mocha */
2+
3+
import { noise } from '@chainsafe/libp2p-noise'
4+
import { yamux } from '@chainsafe/libp2p-yamux'
5+
import { circuitRelayTransport } from '@libp2p/circuit-relay-v2'
6+
import { identify } from '@libp2p/identify'
7+
import tests from '@libp2p/interface-compliance-tests/transport'
8+
import { webSockets } from '@libp2p/websockets'
9+
import { all } from '@libp2p/websockets/filters'
10+
import { Circuit, P2P } from '@multiformats/multiaddr-matcher'
11+
import { and, fmt, literal } from '@multiformats/multiaddr-matcher/utils'
12+
13+
export const CircuitListen = fmt(
14+
and(P2P.matchers[0], literal('p2p-circuit'))
15+
)
16+
17+
describe('Circuit relay transport interface compliance', () => {
18+
tests({
19+
async setup () {
20+
const dialer = {
21+
transports: [
22+
circuitRelayTransport(),
23+
webSockets({
24+
filter: all
25+
})
26+
],
27+
connectionEncrypters: [
28+
noise()
29+
],
30+
streamMuxers: [
31+
yamux()
32+
],
33+
services: {
34+
identify: identify()
35+
},
36+
connectionGater: {
37+
denyDialMultiaddr: () => false
38+
}
39+
}
40+
41+
return {
42+
dialer,
43+
listener: {
44+
addresses: {
45+
listen: [
46+
`${process.env.RELAY_WS_MULTIADDR_0}/p2p-circuit`,
47+
`${process.env.RELAY_WS_MULTIADDR_1}/p2p-circuit`
48+
]
49+
},
50+
...dialer
51+
},
52+
dialMultiaddrMatcher: Circuit,
53+
listenMultiaddrMatcher: CircuitListen
54+
}
55+
},
56+
async teardown () {}
57+
})
58+
})

packages/integration-tests/test/compliance/transport/memory.spec.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,38 @@
1+
import { noise } from '@chainsafe/libp2p-noise'
2+
import { yamux } from '@chainsafe/libp2p-yamux'
13
import tests from '@libp2p/interface-compliance-tests/transport'
24
import { memory } from '@libp2p/memory'
3-
import { multiaddr } from '@multiformats/multiaddr'
4-
import type { Multiaddr } from '@multiformats/multiaddr'
5+
import { Memory } from '@multiformats/multiaddr-matcher'
56

67
describe('memory transport interface compliance tests', () => {
78
tests({
89
async setup () {
9-
const transport = memory()
10-
const dialAddrs: [Multiaddr, Multiaddr] = [
11-
multiaddr('/memory/addr-1'),
12-
multiaddr('/memory/addr-2')
13-
]
10+
const dialer = {
11+
transports: [
12+
memory()
13+
],
14+
connectionEncrypters: [
15+
noise()
16+
],
17+
streamMuxers: [
18+
yamux()
19+
]
20+
}
1421

15-
return { transport, dialAddrs }
22+
return {
23+
dialer,
24+
listener: {
25+
addresses: {
26+
listen: [
27+
'/memory/addr-1',
28+
'/memory/addr-2'
29+
]
30+
},
31+
...dialer
32+
},
33+
dialMultiaddrMatcher: Memory,
34+
listenMultiaddrMatcher: Memory
35+
}
1636
},
1737
async teardown () {}
1838
})

packages/integration-tests/test/compliance/transport/tcp.spec.ts

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import { noise } from '@chainsafe/libp2p-noise'
2+
import { yamux } from '@chainsafe/libp2p-yamux'
13
import tests from '@libp2p/interface-compliance-tests/transport'
24
import { tcp } from '@libp2p/tcp'
3-
import { multiaddr } from '@multiformats/multiaddr'
5+
import { TCP } from '@multiformats/multiaddr-matcher'
46
import { isBrowser, isWebWorker } from 'wherearewe'
5-
import type { Multiaddr } from '@multiformats/multiaddr'
67

78
describe('tcp transport interface compliance IPv4', () => {
89
if (isBrowser || isWebWorker) {
@@ -11,13 +12,32 @@ describe('tcp transport interface compliance IPv4', () => {
1112

1213
tests({
1314
async setup () {
14-
const transport = tcp()
15-
const dialAddrs: [Multiaddr, Multiaddr] = [
16-
multiaddr('/ip4/127.0.0.1/tcp/9091'),
17-
multiaddr('/ip4/127.0.0.1/tcp/9092')
18-
]
15+
const dialer = {
16+
transports: [
17+
tcp()
18+
],
19+
connectionEncrypters: [
20+
noise()
21+
],
22+
streamMuxers: [
23+
yamux()
24+
]
25+
}
1926

20-
return { transport, dialAddrs }
27+
return {
28+
dialer,
29+
listener: {
30+
addresses: {
31+
listen: [
32+
'/ip4/127.0.0.1/tcp/0',
33+
'/ip4/127.0.0.1/tcp/0'
34+
]
35+
},
36+
...dialer
37+
},
38+
dialMultiaddrMatcher: TCP,
39+
listenMultiaddrMatcher: TCP
40+
}
2141
},
2242
async teardown () {}
2343
})
@@ -30,13 +50,32 @@ describe('tcp transport interface compliance IPv6', () => {
3050

3151
tests({
3252
async setup () {
33-
const transport = tcp()
34-
const dialAddrs: [Multiaddr, Multiaddr] = [
35-
multiaddr('/ip6/::/tcp/9093'),
36-
multiaddr('/ip6/::/tcp/9094')
37-
]
53+
const dialer = {
54+
transports: [
55+
tcp()
56+
],
57+
connectionEncrypters: [
58+
noise()
59+
],
60+
streamMuxers: [
61+
yamux()
62+
]
63+
}
3864

39-
return { transport, dialAddrs }
65+
return {
66+
dialer,
67+
listener: {
68+
addresses: {
69+
listen: [
70+
'/ip6/::/tcp/0',
71+
'/ip6/::/tcp/0'
72+
]
73+
},
74+
...dialer
75+
},
76+
dialMultiaddrMatcher: TCP,
77+
listenMultiaddrMatcher: TCP
78+
}
4079
},
4180
async teardown () {}
4281
})
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/* eslint-env mocha */
2+
3+
import { noise } from '@chainsafe/libp2p-noise'
4+
import { yamux } from '@chainsafe/libp2p-yamux'
5+
import { circuitRelayTransport } from '@libp2p/circuit-relay-v2'
6+
import { identify } from '@libp2p/identify'
7+
import tests from '@libp2p/interface-compliance-tests/transport'
8+
import { webRTC } from '@libp2p/webrtc'
9+
import { webSockets } from '@libp2p/websockets'
10+
import { all } from '@libp2p/websockets/filters'
11+
import { WebRTC } from '@multiformats/multiaddr-matcher'
12+
import { isWebWorker } from 'wherearewe'
13+
14+
describe('WebRTC transport interface compliance', () => {
15+
if (isWebWorker) {
16+
return
17+
}
18+
19+
tests({
20+
async setup () {
21+
const dialer = {
22+
transports: [
23+
circuitRelayTransport(),
24+
webSockets({
25+
filter: all
26+
}),
27+
webRTC()
28+
],
29+
connectionEncrypters: [
30+
noise()
31+
],
32+
streamMuxers: [
33+
yamux()
34+
],
35+
services: {
36+
identify: identify()
37+
},
38+
connectionGater: {
39+
denyDialMultiaddr: () => false
40+
}
41+
}
42+
43+
return {
44+
dialer,
45+
listener: {
46+
addresses: {
47+
listen: [
48+
`${process.env.RELAY_WS_MULTIADDR_0}/p2p-circuit`,
49+
`${process.env.RELAY_WS_MULTIADDR_1}/p2p-circuit`,
50+
'/webrtc'
51+
]
52+
},
53+
...dialer
54+
},
55+
dialMultiaddrMatcher: WebRTC,
56+
listenMultiaddrMatcher: WebRTC
57+
}
58+
},
59+
async teardown () {}
60+
})
61+
})

packages/integration-tests/test/compliance/transport/websockets.spec.ts

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,57 @@
11
/* eslint-env mocha */
22

3+
import { noise } from '@chainsafe/libp2p-noise'
4+
import { yamux } from '@chainsafe/libp2p-yamux'
35
import tests from '@libp2p/interface-compliance-tests/transport'
46
import { webSockets } from '@libp2p/websockets'
5-
import * as filters from '@libp2p/websockets/filters'
7+
import { all } from '@libp2p/websockets/filters'
68
import { multiaddr } from '@multiformats/multiaddr'
9+
import { WebSockets } from '@multiformats/multiaddr-matcher'
710
import { isElectronMain, isNode } from 'wherearewe'
8-
import type { Multiaddr } from '@multiformats/multiaddr'
911

1012
describe('websocket transport interface compliance', () => {
1113
tests({
1214
async setup () {
13-
const dialOnly = !isNode && !isElectronMain
15+
const canListen = isNode || isElectronMain
1416

15-
const transport = webSockets({ filter: filters.all })
16-
let dialAddrs: [Multiaddr, Multiaddr] = [
17-
multiaddr('/ip4/127.0.0.1/tcp/9096/ws'),
18-
multiaddr('/ip4/127.0.0.1/tcp/9097/ws')
19-
]
20-
21-
if (dialOnly) {
22-
dialAddrs = [
23-
multiaddr(process.env.RELAY_WS_MULTIADDR_0),
24-
multiaddr(process.env.RELAY_WS_MULTIADDR_1)
25-
]
17+
const dialer = {
18+
transports: [
19+
webSockets({
20+
filter: all
21+
})
22+
],
23+
connectionEncrypters: [
24+
noise()
25+
],
26+
streamMuxers: [
27+
yamux()
28+
],
29+
connectionGater: {
30+
denyDialMultiaddr: () => false
31+
}
2632
}
2733

2834
return {
29-
transport,
30-
listenAddrs: dialOnly ? undefined : dialAddrs,
31-
dialAddrs,
32-
dialOnly
35+
dialer,
36+
listener: canListen
37+
? {
38+
addresses: {
39+
listen: [
40+
'/ip4/127.0.0.1/tcp/0/ws',
41+
'/ip4/127.0.0.1/tcp/0/ws'
42+
]
43+
},
44+
...dialer
45+
}
46+
: undefined,
47+
dialAddrs: canListen
48+
? undefined
49+
: [
50+
multiaddr(process.env.RELAY_WS_MULTIADDR_0 ?? ''),
51+
multiaddr(process.env.RELAY_WS_MULTIADDR_1 ?? '')
52+
],
53+
dialMultiaddrMatcher: WebSockets,
54+
listenMultiaddrMatcher: WebSockets
3355
}
3456
},
3557
async teardown () {}

packages/interface-compliance-tests/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
"@libp2p/plaintext": "^2.0.10",
117117
"@libp2p/utils": "^6.1.3",
118118
"@multiformats/multiaddr": "^12.2.3",
119+
"@multiformats/multiaddr-matcher": "^1.5.0",
119120
"abortable-iterator": "^5.0.1",
120121
"aegir": "^44.0.1",
121122
"delay": "^6.0.0",

0 commit comments

Comments
 (0)