@libp2p/interface-compliance-tests 1.0.5 → 1.1.0
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/connection/connection.d.ts.map +1 -1
- package/dist/src/connection/connection.js +0 -2
- package/dist/src/connection/connection.js.map +1 -1
- package/dist/src/crypto/utils/index.d.ts.map +1 -1
- package/dist/src/crypto/utils/index.js +0 -1
- package/dist/src/crypto/utils/index.js.map +1 -1
- 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/dial-test.js +1 -1
- package/dist/src/transport/dial-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 +61 -26
- package/dist/src/transport/utils/index.js.map +1 -1
- package/dist/src/utils/mock-connection-gater.d.ts +12 -0
- package/dist/src/utils/mock-connection-gater.d.ts.map +1 -0
- package/dist/src/utils/mock-connection-gater.js +14 -0
- package/dist/src/utils/mock-connection-gater.js.map +1 -0
- package/dist/src/utils/mock-connection.d.ts +5 -0
- package/dist/src/utils/mock-connection.d.ts.map +1 -0
- package/dist/src/utils/mock-connection.js +52 -0
- package/dist/src/utils/mock-connection.js.map +1 -0
- package/dist/src/utils/mock-multiaddr-connection.d.ts +4 -0
- package/dist/src/utils/mock-multiaddr-connection.d.ts.map +1 -0
- package/dist/src/utils/mock-multiaddr-connection.js +14 -0
- package/dist/src/utils/mock-multiaddr-connection.js.map +1 -0
- package/dist/src/utils/mock-muxer.d.ts +3 -0
- package/dist/src/utils/mock-muxer.d.ts.map +1 -0
- package/dist/src/utils/mock-muxer.js +37 -0
- package/dist/src/utils/mock-muxer.js.map +1 -0
- package/dist/src/utils/mock-upgrader.d.ts +7 -0
- package/dist/src/utils/mock-upgrader.d.ts.map +1 -0
- package/dist/src/utils/mock-upgrader.js +24 -0
- package/dist/src/utils/mock-upgrader.js.map +1 -0
- package/package.json +34 -7
- package/src/connection/connection.ts +0 -2
- package/src/crypto/utils/index.ts +0 -1
- package/src/stream-muxer/base-test.ts +37 -26
- 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/dial-test.ts +1 -1
- package/src/transport/utils/index.ts +86 -35
- package/src/utils/mock-connection-gater.ts +14 -0
- package/src/utils/mock-connection.ts +66 -0
- package/src/utils/mock-multiaddr-connection.ts +18 -0
- package/src/utils/mock-muxer.ts +43 -0
- package/src/utils/mock-upgrader.ts +33 -0
|
@@ -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, Stream, Metadata, ProtocolStream } from '@libp2p/interfaces/connection'
|
|
11
|
+
import type { 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,51 +29,105 @@ 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: Stream[] = []
|
|
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: Stream = {
|
|
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
|
-
['sink', 'source', 'remoteAddr', '
|
|
91
|
+
['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
|
|
29
92
|
expect(multiaddrConnection).to.have.property(prop)
|
|
30
93
|
})
|
|
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> {
|
|
49
|
-
const localAddr = maConn.localAddr
|
|
114
|
+
async function createConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound', muxer: Muxer): Promise<Connection> {
|
|
50
115
|
const remoteAddr = maConn.remoteAddr
|
|
51
|
-
|
|
52
|
-
if (localAddr == null) {
|
|
53
|
-
throw new Error('No localAddr found on MultiaddrConnection')
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const localPeerIdStr = localAddr.getPeerId()
|
|
57
116
|
const remotePeerIdStr = remoteAddr.getPeerId()
|
|
58
|
-
const localPeer = localPeerIdStr != null ? PeerId.fromString(localPeerIdStr) : await PeerIdFactory.createEd25519PeerId()
|
|
59
117
|
const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await PeerIdFactory.createEd25519PeerId()
|
|
60
118
|
|
|
61
|
-
const streams:
|
|
119
|
+
const streams: Stream[] = []
|
|
62
120
|
let streamId = 0
|
|
63
121
|
|
|
64
122
|
const registry = new Map()
|
|
65
123
|
|
|
124
|
+
void pipe(
|
|
125
|
+
maConn, muxer, maConn
|
|
126
|
+
)
|
|
127
|
+
|
|
66
128
|
return {
|
|
67
129
|
id: 'mock-connection',
|
|
68
|
-
localAddr,
|
|
69
130
|
remoteAddr,
|
|
70
|
-
localPeer,
|
|
71
131
|
remotePeer,
|
|
72
132
|
stat: {
|
|
73
133
|
status: 'OPEN',
|
|
@@ -80,26 +140,17 @@ async function createConnection (maConn: MultiaddrConnection, direction: 'inboun
|
|
|
80
140
|
tags: [],
|
|
81
141
|
streams,
|
|
82
142
|
newStream: async (protocols) => {
|
|
143
|
+
if (!Array.isArray(protocols)) {
|
|
144
|
+
protocols = [protocols]
|
|
145
|
+
}
|
|
146
|
+
|
|
83
147
|
if (protocols.length === 0) {
|
|
84
148
|
throw new Error('protocols must have a length')
|
|
85
149
|
}
|
|
86
150
|
|
|
87
|
-
const echo = pair<Uint8Array>()
|
|
88
|
-
|
|
89
151
|
const id = `${streamId++}`
|
|
90
|
-
const stream:
|
|
91
|
-
|
|
92
|
-
sink: echo.sink,
|
|
93
|
-
source: echo.source,
|
|
94
|
-
close: () => {},
|
|
95
|
-
abort: () => {},
|
|
96
|
-
reset: () => {},
|
|
97
|
-
timeline: {
|
|
98
|
-
open: 0
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const streamData = {
|
|
152
|
+
const stream: Stream = muxer.newStream(id)
|
|
153
|
+
const streamData: ProtocolStream = {
|
|
103
154
|
protocol: protocols[0],
|
|
104
155
|
stream
|
|
105
156
|
}
|
|
@@ -108,7 +159,7 @@ async function createConnection (maConn: MultiaddrConnection, direction: 'inboun
|
|
|
108
159
|
|
|
109
160
|
return streamData
|
|
110
161
|
},
|
|
111
|
-
addStream: (
|
|
162
|
+
addStream: (stream: Stream, metadata: Metadata) => {
|
|
112
163
|
|
|
113
164
|
},
|
|
114
165
|
removeStream: (id: string) => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
export function mockConnectionGater () {
|
|
3
|
+
return {
|
|
4
|
+
denyDialPeer: async () => await Promise.resolve(false),
|
|
5
|
+
denyDialMultiaddr: async () => await Promise.resolve(false),
|
|
6
|
+
denyInboundConnection: async () => await Promise.resolve(false),
|
|
7
|
+
denyOutboundConnection: async () => await Promise.resolve(false),
|
|
8
|
+
denyInboundEncryptedConnection: async () => await Promise.resolve(false),
|
|
9
|
+
denyOutboundEncryptedConnection: async () => await Promise.resolve(false),
|
|
10
|
+
denyInboundUpgradedConnection: async () => await Promise.resolve(false),
|
|
11
|
+
denyOutboundUpgradedConnection: async () => await Promise.resolve(false),
|
|
12
|
+
filterMultiaddrForPeer: async () => await Promise.resolve(true)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { PeerId } from '@libp2p/peer-id'
|
|
2
|
+
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
3
|
+
import { pipe } from 'it-pipe'
|
|
4
|
+
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
5
|
+
import type { Connection, Stream, Metadata, ProtocolStream } from '@libp2p/interfaces/connection'
|
|
6
|
+
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
7
|
+
|
|
8
|
+
export async function mockConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound', muxer: Muxer): Promise<Connection> {
|
|
9
|
+
const remoteAddr = maConn.remoteAddr
|
|
10
|
+
const remotePeerIdStr = remoteAddr.getPeerId()
|
|
11
|
+
const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await createEd25519PeerId()
|
|
12
|
+
|
|
13
|
+
const streams: Stream[] = []
|
|
14
|
+
let streamId = 0
|
|
15
|
+
|
|
16
|
+
const registry = new Map()
|
|
17
|
+
|
|
18
|
+
void pipe(
|
|
19
|
+
maConn, muxer, maConn
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
id: 'mock-connection',
|
|
24
|
+
remoteAddr,
|
|
25
|
+
remotePeer,
|
|
26
|
+
stat: {
|
|
27
|
+
status: 'OPEN',
|
|
28
|
+
direction,
|
|
29
|
+
timeline: maConn.timeline,
|
|
30
|
+
multiplexer: 'test-multiplexer',
|
|
31
|
+
encryption: 'yes-yes-very-secure'
|
|
32
|
+
},
|
|
33
|
+
registry,
|
|
34
|
+
tags: [],
|
|
35
|
+
streams,
|
|
36
|
+
newStream: async (protocols) => {
|
|
37
|
+
if (!Array.isArray(protocols)) {
|
|
38
|
+
protocols = [protocols]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (protocols.length === 0) {
|
|
42
|
+
throw new Error('protocols must have a length')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const id = `${streamId++}`
|
|
46
|
+
const stream: Stream = muxer.newStream(id)
|
|
47
|
+
const streamData: ProtocolStream = {
|
|
48
|
+
protocol: protocols[0],
|
|
49
|
+
stream
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
registry.set(id, streamData)
|
|
53
|
+
|
|
54
|
+
return streamData
|
|
55
|
+
},
|
|
56
|
+
addStream: (stream: Stream, metadata: Metadata) => {
|
|
57
|
+
|
|
58
|
+
},
|
|
59
|
+
removeStream: (id: string) => {
|
|
60
|
+
registry.delete(id)
|
|
61
|
+
},
|
|
62
|
+
close: async () => {
|
|
63
|
+
await maConn.close()
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Multiaddr } from '@multiformats/multiaddr'
|
|
2
|
+
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
3
|
+
import type { Duplex } from 'it-stream-types'
|
|
4
|
+
|
|
5
|
+
export function mockMultiaddrConnection (source: Duplex<Uint8Array>): MultiaddrConnection {
|
|
6
|
+
const maConn: MultiaddrConnection = {
|
|
7
|
+
...source,
|
|
8
|
+
async close () {
|
|
9
|
+
|
|
10
|
+
},
|
|
11
|
+
timeline: {
|
|
12
|
+
open: Date.now()
|
|
13
|
+
},
|
|
14
|
+
remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001')
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return maConn
|
|
18
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { pair } from 'it-pair'
|
|
2
|
+
import { pushable } from 'it-pushable'
|
|
3
|
+
import drain from 'it-drain'
|
|
4
|
+
import type { Stream } from '@libp2p/interfaces/connection'
|
|
5
|
+
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
6
|
+
|
|
7
|
+
export function mockMuxer (): Muxer {
|
|
8
|
+
let streamId = 0
|
|
9
|
+
let streams: Stream[] = []
|
|
10
|
+
const p = pushable<Uint8Array>()
|
|
11
|
+
|
|
12
|
+
const muxer: Muxer = {
|
|
13
|
+
source: p,
|
|
14
|
+
sink: async (source) => {
|
|
15
|
+
await drain(source)
|
|
16
|
+
},
|
|
17
|
+
get streams () {
|
|
18
|
+
return streams
|
|
19
|
+
},
|
|
20
|
+
newStream: (name?: string) => {
|
|
21
|
+
const echo = pair<Uint8Array>()
|
|
22
|
+
|
|
23
|
+
const id = `${streamId++}`
|
|
24
|
+
const stream: Stream = {
|
|
25
|
+
id,
|
|
26
|
+
sink: echo.sink,
|
|
27
|
+
source: echo.source,
|
|
28
|
+
close: () => {
|
|
29
|
+
streams = streams.filter(s => s !== stream)
|
|
30
|
+
},
|
|
31
|
+
abort: () => {},
|
|
32
|
+
reset: () => {},
|
|
33
|
+
timeline: {
|
|
34
|
+
open: 0
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return stream
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return muxer
|
|
43
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { expect } from 'aegir/utils/chai.js'
|
|
2
|
+
import { mockMuxer } from './mock-muxer.js'
|
|
3
|
+
import { mockConnection } from './mock-connection.js'
|
|
4
|
+
import type { Upgrader, MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
5
|
+
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
6
|
+
|
|
7
|
+
export interface MockUpgraderOptions {
|
|
8
|
+
muxer?: Muxer
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function mockUpgrader (options: MockUpgraderOptions = {}) {
|
|
12
|
+
const ensureProps = (multiaddrConnection: MultiaddrConnection) => {
|
|
13
|
+
['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
|
|
14
|
+
expect(multiaddrConnection).to.have.property(prop)
|
|
15
|
+
})
|
|
16
|
+
return multiaddrConnection
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const muxer = options.muxer ?? mockMuxer()
|
|
20
|
+
|
|
21
|
+
const upgrader: Upgrader = {
|
|
22
|
+
async upgradeOutbound (multiaddrConnection) {
|
|
23
|
+
ensureProps(multiaddrConnection)
|
|
24
|
+
return await mockConnection(multiaddrConnection, 'outbound', muxer)
|
|
25
|
+
},
|
|
26
|
+
async upgradeInbound (multiaddrConnection) {
|
|
27
|
+
ensureProps(multiaddrConnection)
|
|
28
|
+
return await mockConnection(multiaddrConnection, 'inbound', muxer)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return upgrader
|
|
33
|
+
}
|