@streamr/dht 100.0.0-testnet-one.0 → 100.0.0-testnet-one.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/connection/ConnectionLockRpcRemote.js +1 -25
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +0 -1
- package/dist/src/connection/ConnectionManager.js +7 -6
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +2 -2
- package/dist/src/connection/ConnectorFacade.js +2 -3
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +1 -0
- package/dist/src/connection/ManagedConnection.js +11 -1
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.js +3 -2
- package/dist/src/connection/connectivityChecker.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
- package/dist/src/connection/websocket/ClientWebsocket.js +6 -3
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/ServerWebsocket.d.ts +4 -0
- package/dist/src/connection/websocket/ServerWebsocket.js +32 -21
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +0 -1
- package/dist/src/connection/websocket/WebsocketConnector.js +21 -10
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -11
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +2 -2
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +3 -37
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketServer.js +21 -4
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +4 -4
- package/dist/src/dht/DhtNode.js +31 -20
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -4
- package/dist/src/dht/DhtNodeRpcLocal.js +1 -5
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +10 -6
- package/dist/src/dht/PeerManager.js +95 -30
- package/dist/src/dht/PeerManager.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +20 -6
- package/dist/src/dht/contact/SortedContactList.js +55 -24
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +3 -5
- package/dist/src/dht/discovery/DiscoverySession.js +11 -9
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +4 -2
- package/dist/src/dht/discovery/PeerDiscovery.js +17 -16
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindSession.js +6 -1
- package/dist/src/dht/find/FindSession.js.map +1 -1
- package/dist/src/dht/find/Finder.js +6 -1
- package/dist/src/dht/find/Finder.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +1 -1
- package/dist/src/dht/routing/Router.js +8 -4
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.js +8 -1
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/StoreRpcLocal.js +19 -5
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +1 -0
- package/dist/src/helpers/PeerID.js +7 -2
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -2
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/package.json +5 -5
- package/src/connection/ConnectionLockRpcRemote.ts +1 -2
- package/src/connection/ConnectionManager.ts +16 -17
- package/src/connection/ConnectorFacade.ts +1 -4
- package/src/connection/ManagedConnection.ts +12 -1
- package/src/connection/connectivityChecker.ts +3 -2
- package/src/connection/websocket/ClientWebsocket.ts +5 -2
- package/src/connection/websocket/ServerWebsocket.ts +40 -25
- package/src/connection/websocket/WebsocketConnector.ts +23 -12
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +5 -14
- package/src/connection/websocket/WebsocketServer.ts +20 -5
- package/src/dht/DhtNode.ts +32 -24
- package/src/dht/DhtNodeRpcLocal.ts +2 -9
- package/src/dht/PeerManager.ts +110 -36
- package/src/dht/contact/SortedContactList.ts +87 -44
- package/src/dht/discovery/DiscoverySession.ts +15 -14
- package/src/dht/discovery/PeerDiscovery.ts +37 -22
- package/src/dht/find/FindSession.ts +6 -1
- package/src/dht/find/Finder.ts +6 -7
- package/src/dht/routing/Router.ts +8 -4
- package/src/dht/routing/RoutingSession.ts +8 -8
- package/src/dht/store/StoreRpcLocal.ts +19 -7
- package/src/helpers/PeerID.ts +6 -2
- package/src/helpers/peerIdFromPeerDescriptor.ts +4 -4
- package/test/benchmark/Find.test.ts +1 -1
- package/test/benchmark/KademliaCorrectness.test.ts +1 -1
- package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
- package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
- package/test/end-to-end/Layer0.test.ts +4 -4
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +10 -10
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -4
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +2 -2
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +2 -2
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
- package/test/end-to-end/memory-leak.test.ts +1 -0
- package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/Mock-Layer1-Layer0.test.ts +15 -15
- package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
- package/test/integration/ReplicateData.test.ts +6 -1
- package/test/integration/SimultaneousConnections.test.ts +81 -49
- package/test/integration/Store.test.ts +1 -1
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +1 -1
- package/test/integration/WebrtcConnectionManagement.test.ts +29 -0
- package/test/integration/WebsocketConnectionManagement.test.ts +65 -4
- package/test/integration/WebsocketConnectorRpc.test.ts +3 -5
- package/test/unit/SortedContactList.test.ts +15 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable promise/no-nesting */
|
|
2
2
|
|
|
3
|
-
import { MetricsContext, waitForCondition } from '@streamr/utils'
|
|
3
|
+
import { MetricsContext, waitForCondition, waitForEvent3 } from '@streamr/utils'
|
|
4
4
|
import { ConnectionManager } from '../../src/connection/ConnectionManager'
|
|
5
5
|
import { DefaultConnectorFacade, DefaultConnectorFacadeConfig } from '../../src/connection/ConnectorFacade'
|
|
6
6
|
import { ConnectionType } from '../../src/connection/IConnection'
|
|
@@ -10,6 +10,7 @@ import { PeerID } from '../../src/helpers/PeerID'
|
|
|
10
10
|
import * as Err from '../../src/helpers/errors'
|
|
11
11
|
import { Message, MessageType, NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
12
12
|
import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
|
|
13
|
+
import { TransportEvents } from '../../src/transport/ITransport'
|
|
13
14
|
|
|
14
15
|
const createConfig = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeConfig, 'createLocalPeerDescriptor'>) => {
|
|
15
16
|
return {
|
|
@@ -26,11 +27,12 @@ describe('Websocket Connection Management', () => {
|
|
|
26
27
|
const serviceId = 'test'
|
|
27
28
|
let wsServerManager: ConnectionManager
|
|
28
29
|
let noWsServerManager: ConnectionManager
|
|
30
|
+
let biggerNoWsServerManager: ConnectionManager
|
|
29
31
|
|
|
30
32
|
const simulator = new Simulator()
|
|
31
33
|
|
|
32
34
|
const wsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
33
|
-
nodeId: PeerID.fromString('
|
|
35
|
+
nodeId: PeerID.fromString('2').value,
|
|
34
36
|
type: NodeType.NODEJS,
|
|
35
37
|
websocket: {
|
|
36
38
|
host: '127.0.0.1',
|
|
@@ -40,12 +42,18 @@ describe('Websocket Connection Management', () => {
|
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
const noWsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
43
|
-
nodeId: PeerID.fromString('
|
|
45
|
+
nodeId: PeerID.fromString('1').value,
|
|
46
|
+
type: NodeType.NODEJS,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const biggerNoWsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
50
|
+
nodeId: PeerID.fromString('3').value,
|
|
44
51
|
type: NodeType.NODEJS,
|
|
45
52
|
}
|
|
46
53
|
|
|
47
54
|
let connectorTransport1: SimulatorTransport
|
|
48
55
|
let connectorTransport2: SimulatorTransport
|
|
56
|
+
let connectorTransport3: SimulatorTransport
|
|
49
57
|
|
|
50
58
|
beforeEach(async () => {
|
|
51
59
|
|
|
@@ -53,6 +61,8 @@ describe('Websocket Connection Management', () => {
|
|
|
53
61
|
await connectorTransport1.start()
|
|
54
62
|
connectorTransport2 = new SimulatorTransport(noWsServerConnectorPeerDescriptor, simulator)
|
|
55
63
|
await connectorTransport2.start()
|
|
64
|
+
connectorTransport3 = new SimulatorTransport(biggerNoWsServerConnectorPeerDescriptor, simulator)
|
|
65
|
+
await connectorTransport3.start()
|
|
56
66
|
|
|
57
67
|
const config1 = createConfig(wsServerConnectorPeerDescriptor, {
|
|
58
68
|
transport: connectorTransport1,
|
|
@@ -62,22 +72,29 @@ describe('Websocket Connection Management', () => {
|
|
|
62
72
|
const config2 = createConfig(noWsServerConnectorPeerDescriptor, {
|
|
63
73
|
transport: connectorTransport2
|
|
64
74
|
})
|
|
75
|
+
const config3 = createConfig(biggerNoWsServerConnectorPeerDescriptor, {
|
|
76
|
+
transport: connectorTransport3
|
|
77
|
+
})
|
|
65
78
|
|
|
66
79
|
wsServerManager = new ConnectionManager(config1)
|
|
67
80
|
noWsServerManager = new ConnectionManager(config2)
|
|
81
|
+
biggerNoWsServerManager = new ConnectionManager(config3)
|
|
68
82
|
|
|
69
83
|
await wsServerManager.start()
|
|
70
84
|
await noWsServerManager.start()
|
|
85
|
+
await biggerNoWsServerManager.start()
|
|
71
86
|
})
|
|
72
87
|
|
|
73
88
|
afterEach(async () => {
|
|
74
89
|
await wsServerManager.stop()
|
|
75
90
|
await noWsServerManager.stop()
|
|
91
|
+
await biggerNoWsServerManager.stop()
|
|
76
92
|
await connectorTransport1.stop()
|
|
77
93
|
await connectorTransport2.stop()
|
|
94
|
+
await connectorTransport3.stop()
|
|
78
95
|
})
|
|
79
96
|
|
|
80
|
-
it('Can open connections to serverless peer', (done) => {
|
|
97
|
+
it('Can open connections to serverless peer with smaller peerId', (done) => {
|
|
81
98
|
const dummyMessage: Message = {
|
|
82
99
|
serviceId,
|
|
83
100
|
body: {
|
|
@@ -99,6 +116,50 @@ describe('Websocket Connection Management', () => {
|
|
|
99
116
|
wsServerManager.send(dummyMessage)
|
|
100
117
|
})
|
|
101
118
|
|
|
119
|
+
it('Can open connections to serverless peer with bigger peerId', (done) => {
|
|
120
|
+
const dummyMessage: Message = {
|
|
121
|
+
serviceId,
|
|
122
|
+
body: {
|
|
123
|
+
oneofKind: 'rpcMessage',
|
|
124
|
+
rpcMessage: RpcMessage.create()
|
|
125
|
+
},
|
|
126
|
+
messageType: MessageType.RPC,
|
|
127
|
+
messageId: 'mockerer',
|
|
128
|
+
targetDescriptor: biggerNoWsServerConnectorPeerDescriptor
|
|
129
|
+
}
|
|
130
|
+
biggerNoWsServerManager.on('message', (message: Message) => {
|
|
131
|
+
expect(message.messageId).toEqual('mockerer')
|
|
132
|
+
expect(wsServerManager.getConnection(biggerNoWsServerConnectorPeerDescriptor)!.connectionType).toEqual(ConnectionType.WEBSOCKET_SERVER)
|
|
133
|
+
expect(biggerNoWsServerManager.getConnection(wsServerConnectorPeerDescriptor)!.connectionType).toEqual(ConnectionType.WEBSOCKET_CLIENT)
|
|
134
|
+
|
|
135
|
+
done()
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
wsServerManager.send(dummyMessage)
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it('Failed connection requests are cleaned up', async () => {
|
|
142
|
+
const dummyMessage: Message = {
|
|
143
|
+
serviceId,
|
|
144
|
+
body: {
|
|
145
|
+
oneofKind: 'rpcMessage',
|
|
146
|
+
rpcMessage: RpcMessage.create()
|
|
147
|
+
},
|
|
148
|
+
messageType: MessageType.RPC,
|
|
149
|
+
messageId: 'mockerer',
|
|
150
|
+
targetDescriptor: {
|
|
151
|
+
nodeId: new Uint8Array([1, 2, 4]),
|
|
152
|
+
type: NodeType.NODEJS
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
await Promise.allSettled([
|
|
157
|
+
waitForEvent3<TransportEvents>(wsServerManager, 'disconnected', 15000),
|
|
158
|
+
wsServerManager.send(dummyMessage)
|
|
159
|
+
])
|
|
160
|
+
expect(wsServerManager.getConnection(dummyMessage.targetDescriptor!)).toBeUndefined()
|
|
161
|
+
}, 20000)
|
|
162
|
+
|
|
102
163
|
it('Can open connections to peer with server', async () => {
|
|
103
164
|
const dummyMessage: Message = {
|
|
104
165
|
serviceId,
|
|
@@ -67,16 +67,14 @@ describe('WebsocketConnectorRpc', () => {
|
|
|
67
67
|
},
|
|
68
68
|
{ targetDescriptor: peerDescriptor2 },
|
|
69
69
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
await response1
|
|
71
|
+
|
|
73
72
|
const response2 = client2.requestConnection({
|
|
74
73
|
ip: '127.0.0.1',
|
|
75
74
|
port: 9111
|
|
76
75
|
},
|
|
77
76
|
{ targetDescriptor: peerDescriptor1 },
|
|
78
77
|
)
|
|
79
|
-
|
|
80
|
-
expect(res2.accepted).toEqual(true)
|
|
78
|
+
await response2
|
|
81
79
|
})
|
|
82
80
|
})
|
|
@@ -13,7 +13,7 @@ describe('SortedContactList', () => {
|
|
|
13
13
|
const item4 = createItem(new Uint8Array([0, 0, 0, 4]))
|
|
14
14
|
|
|
15
15
|
it('compares Ids correctly', async () => {
|
|
16
|
-
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
16
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
|
|
17
17
|
expect(list.compareIds(item0.getPeerId(), item0.getPeerId())).toBe(0)
|
|
18
18
|
expect(list.compareIds(item1.getPeerId(), item1.getPeerId())).toBe(0)
|
|
19
19
|
expect(list.compareIds(item0.getPeerId(), item1.getPeerId())).toBe(-1)
|
|
@@ -23,9 +23,9 @@ describe('SortedContactList', () => {
|
|
|
23
23
|
expect(list.compareIds(item2.getPeerId(), item3.getPeerId())).toBe(-1)
|
|
24
24
|
expect(list.compareIds(item1.getPeerId(), item4.getPeerId())).toBe(-3)
|
|
25
25
|
})
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
it('orders itself correctly', async () => {
|
|
28
|
-
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
28
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
|
|
29
29
|
list.addContact(item3)
|
|
30
30
|
list.addContact(item2)
|
|
31
31
|
list.addContact(item1)
|
|
@@ -35,9 +35,9 @@ describe('SortedContactList', () => {
|
|
|
35
35
|
expect(contacts[1]).toEqual(item2)
|
|
36
36
|
expect(contacts[2]).toEqual(item3)
|
|
37
37
|
})
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
it('handles contacted nodes correctly', async () => {
|
|
40
|
-
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
40
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: false, emitEvents: false })
|
|
41
41
|
list.addContact(item3)
|
|
42
42
|
list.addContact(item2)
|
|
43
43
|
list.addContact(item1)
|
|
@@ -49,7 +49,7 @@ describe('SortedContactList', () => {
|
|
|
49
49
|
})
|
|
50
50
|
|
|
51
51
|
it('cannot exceed maxSize', async () => {
|
|
52
|
-
const list = new SortedContactList(item0.getPeerId(), 3)
|
|
52
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 3, allowToContainReferenceId: false, emitEvents: true })
|
|
53
53
|
const onContactRemoved = jest.fn()
|
|
54
54
|
list.on('contactRemoved', onContactRemoved)
|
|
55
55
|
list.addContact(item1)
|
|
@@ -62,7 +62,7 @@ describe('SortedContactList', () => {
|
|
|
62
62
|
})
|
|
63
63
|
|
|
64
64
|
it('removing contacts', async () => {
|
|
65
|
-
const list = new SortedContactList(item0.getPeerId(), 8)
|
|
65
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: true })
|
|
66
66
|
const onContactRemoved = jest.fn()
|
|
67
67
|
list.on('contactRemoved', onContactRemoved)
|
|
68
68
|
list.addContact(item4)
|
|
@@ -79,8 +79,13 @@ describe('SortedContactList', () => {
|
|
|
79
79
|
expect(ret).toEqual(false)
|
|
80
80
|
})
|
|
81
81
|
|
|
82
|
-
it('get
|
|
83
|
-
const list = new SortedContactList(
|
|
82
|
+
it('get closest contacts', () => {
|
|
83
|
+
const list = new SortedContactList({
|
|
84
|
+
referenceId: item0.getPeerId(),
|
|
85
|
+
maxSize: 8,
|
|
86
|
+
allowToContainReferenceId: false,
|
|
87
|
+
emitEvents: false
|
|
88
|
+
})
|
|
84
89
|
list.addContact(item1)
|
|
85
90
|
list.addContact(item3)
|
|
86
91
|
list.addContact(item4)
|
|
@@ -90,7 +95,7 @@ describe('SortedContactList', () => {
|
|
|
90
95
|
})
|
|
91
96
|
|
|
92
97
|
it('get active contacts', () => {
|
|
93
|
-
const list = new SortedContactList(item0.getPeerId(), 8)
|
|
98
|
+
const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: false })
|
|
94
99
|
list.addContact(item1)
|
|
95
100
|
list.addContact(item3)
|
|
96
101
|
list.addContact(item4)
|