@streamr/dht 102.0.0-beta.1 → 102.0.0-beta.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/generated/google/protobuf/any.d.ts +180 -0
- package/dist/generated/google/protobuf/any.js +155 -0
- package/dist/generated/google/protobuf/any.js.map +1 -0
- package/dist/generated/google/protobuf/empty.d.ts +31 -0
- package/dist/generated/google/protobuf/empty.js +32 -0
- package/dist/generated/google/protobuf/empty.js.map +1 -0
- package/dist/generated/google/protobuf/timestamp.d.ts +155 -0
- package/dist/generated/google/protobuf/timestamp.js +136 -0
- package/dist/generated/google/protobuf/timestamp.js.map +1 -0
- package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +361 -0
- package/dist/generated/packages/dht/protos/DhtRpc.client.js +285 -0
- package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
- package/dist/generated/packages/dht/protos/DhtRpc.d.ts +999 -0
- package/dist/generated/packages/dht/protos/DhtRpc.js +677 -0
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
- package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +162 -0
- package/dist/generated/packages/dht/protos/DhtRpc.server.js +3 -0
- package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +87 -0
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +66 -0
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
- package/dist/package.json +7 -7
- package/package.json +7 -7
- package/src/connection/Connection.ts +0 -28
- package/src/connection/ConnectionLockRpcLocal.ts +0 -78
- package/src/connection/ConnectionLockRpcRemote.ts +0 -64
- package/src/connection/ConnectionLockStates.ts +0 -131
- package/src/connection/ConnectionManager.ts +0 -661
- package/src/connection/ConnectionsView.ts +0 -8
- package/src/connection/ConnectorFacade.ts +0 -217
- package/src/connection/Handshaker.ts +0 -209
- package/src/connection/IConnection.ts +0 -40
- package/src/connection/ManagedConnection.ts +0 -113
- package/src/connection/OutputBuffer.ts +0 -28
- package/src/connection/PendingConnection.ts +0 -68
- package/src/connection/connectivityChecker.ts +0 -108
- package/src/connection/connectivityRequestHandler.ts +0 -116
- package/src/connection/simulator/Simulator.ts +0 -369
- package/src/connection/simulator/SimulatorConnection.ts +0 -137
- package/src/connection/simulator/SimulatorConnector.ts +0 -98
- package/src/connection/simulator/SimulatorTransport.ts +0 -15
- package/src/connection/simulator/pings.ts +0 -42
- package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
- package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
- package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -245
- package/src/connection/webrtc/WebrtcConnector.ts +0 -234
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
- package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
- package/src/connection/webrtc/iceServerAsString.ts +0 -15
- package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
- package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
- package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
- package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
- package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
- package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
- package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
- package/src/connection/websocket/WebsocketServer.ts +0 -164
- package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
- package/src/connection/websocket/WebsocketServerConnector.ts +0 -290
- package/src/dht/DhtNode.ts +0 -683
- package/src/dht/DhtNodeRpcLocal.ts +0 -84
- package/src/dht/DhtNodeRpcRemote.ts +0 -107
- package/src/dht/ExternalApiRpcLocal.ts +0 -58
- package/src/dht/ExternalApiRpcRemote.ts +0 -41
- package/src/dht/PeerManager.ts +0 -305
- package/src/dht/contact/Contact.ts +0 -19
- package/src/dht/contact/ContactList.ts +0 -43
- package/src/dht/contact/RandomContactList.ts +0 -56
- package/src/dht/contact/RingContactList.ts +0 -143
- package/src/dht/contact/RpcRemote.ts +0 -72
- package/src/dht/contact/SortedContactList.ts +0 -173
- package/src/dht/contact/getClosestNodes.ts +0 -24
- package/src/dht/contact/ringIdentifiers.ts +0 -62
- package/src/dht/discovery/DiscoverySession.ts +0 -129
- package/src/dht/discovery/PeerDiscovery.ts +0 -244
- package/src/dht/discovery/RingDiscoverySession.ts +0 -148
- package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
- package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
- package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
- package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
- package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
- package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
- package/src/dht/routing/DuplicateDetector.ts +0 -34
- package/src/dht/routing/Router.ts +0 -246
- package/src/dht/routing/RouterRpcLocal.ts +0 -78
- package/src/dht/routing/RouterRpcRemote.ts +0 -80
- package/src/dht/routing/RoutingSession.ts +0 -243
- package/src/dht/routing/RoutingTablesCache.ts +0 -60
- package/src/dht/routing/getPreviousPeer.ts +0 -6
- package/src/dht/store/LocalDataStore.ts +0 -84
- package/src/dht/store/StoreManager.ts +0 -170
- package/src/dht/store/StoreRpcLocal.ts +0 -89
- package/src/dht/store/StoreRpcRemote.ts +0 -32
- package/src/exports.ts +0 -33
- package/src/helpers/AddressTools.ts +0 -28
- package/src/helpers/Connectivity.ts +0 -19
- package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
- package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
- package/src/helpers/createPeerDescriptor.ts +0 -57
- package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
- package/src/helpers/debugHelpers.ts +0 -9
- package/src/helpers/errors.ts +0 -49
- package/src/helpers/offering.ts +0 -15
- package/src/helpers/protoClasses.ts +0 -57
- package/src/helpers/protoToString.ts +0 -21
- package/src/helpers/version.ts +0 -32
- package/src/identifiers.ts +0 -29
- package/src/rpc-protocol/DhtCallContext.ts +0 -14
- package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
- package/src/transport/ITransport.ts +0 -37
- package/src/transport/ListeningRpcCommunicator.ts +0 -32
- package/src/transport/RoutingRpcCommunicator.ts +0 -66
- package/src/types/ServiceID.ts +0 -1
- package/src/types/textencoding.d.ts +0 -6
- package/test/benchmark/Find.test.ts +0 -72
- package/test/benchmark/KademliaCorrectness.test.ts +0 -114
- package/test/benchmark/RingCorrectness.test.ts +0 -157
- package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
- package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
- package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
- package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
- package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
- package/test/end-to-end/Layer0.test.ts +0 -76
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
- package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
- package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
- package/test/end-to-end/memory-leak.test.ts +0 -80
- package/test/integration/ConnectionLocking.test.ts +0 -192
- package/test/integration/ConnectionManager.test.ts +0 -528
- package/test/integration/ConnectivityChecking.test.ts +0 -53
- package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
- package/test/integration/DhtNode.test.ts +0 -66
- package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
- package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
- package/test/integration/DhtRpc.test.ts +0 -121
- package/test/integration/Find.test.ts +0 -45
- package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
- package/test/integration/Layer1-scale.test.ts +0 -189
- package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
- package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
- package/test/integration/ReplicateData.test.ts +0 -104
- package/test/integration/RouteMessage.test.ts +0 -230
- package/test/integration/RouterRpcRemote.test.ts +0 -77
- package/test/integration/SimultaneousConnections.test.ts +0 -316
- package/test/integration/Store.test.ts +0 -85
- package/test/integration/StoreAndDelete.test.ts +0 -77
- package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
- package/test/integration/StoreRpcRemote.test.ts +0 -54
- package/test/integration/WebrtcConnectionManagement.test.ts +0 -191
- package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
- package/test/integration/Websocket.test.ts +0 -65
- package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
- package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
- package/test/integration/rpc-connections-over-webrtc.test.ts +0 -123
- package/test/kademlia-simulation/data/nodeids.json +0 -13002
- package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
- package/test/types/global.d.ts +0 -1
- package/test/unit/AddressTools.test.ts +0 -44
- package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
- package/test/unit/ConnectionManager.test.ts +0 -65
- package/test/unit/ConnectivityHelpers.test.ts +0 -61
- package/test/unit/DiscoverySession.test.ts +0 -87
- package/test/unit/DuplicateDetector.test.ts +0 -31
- package/test/unit/Handshaker.test.ts +0 -169
- package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
- package/test/unit/LocalDataStore.test.ts +0 -108
- package/test/unit/ManagedConnection.test.ts +0 -58
- package/test/unit/PeerManager.test.ts +0 -93
- package/test/unit/PendingConnection.test.ts +0 -57
- package/test/unit/ProtobufMessage.test.ts +0 -21
- package/test/unit/RandomContactList.test.ts +0 -58
- package/test/unit/RecursiveOperationManager.test.ts +0 -161
- package/test/unit/RecursiveOperationSession.test.ts +0 -68
- package/test/unit/Router.test.ts +0 -137
- package/test/unit/RoutingSession.test.ts +0 -86
- package/test/unit/SortedContactList.test.ts +0 -115
- package/test/unit/StoreManager.test.ts +0 -146
- package/test/unit/StoreRpcLocal.test.ts +0 -167
- package/test/unit/WebrtcConnection.test.ts +0 -29
- package/test/unit/WebrtcConnector.test.ts +0 -56
- package/test/unit/WebsocketClientConnector.test.ts +0 -101
- package/test/unit/WebsocketServer.test.ts +0 -66
- package/test/unit/WebsocketServerConnector.test.ts +0 -102
- package/test/unit/connectivityRequestHandler.test.ts +0 -104
- package/test/unit/createPeerDescriptor.test.ts +0 -69
- package/test/unit/customMatchers.test.ts +0 -34
- package/test/unit/getClosestNodes.test.ts +0 -30
- package/test/unit/version.test.ts +0 -18
- package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
- package/test/utils/FakeConnectorFacade.ts +0 -41
- package/test/utils/FakeRpcCommunicator.ts +0 -23
- package/test/utils/FakeTransport.ts +0 -79
- package/test/utils/customMatchers.ts +0 -71
- package/test/utils/mock/MockConnection.ts +0 -26
- package/test/utils/mock/MockConnectionsView.ts +0 -18
- package/test/utils/mock/MockRouter.ts +0 -62
- package/test/utils/mock/MockRpcCommunicator.ts +0 -7
- package/test/utils/mock/MockTransport.ts +0 -26
- package/test/utils/mock/mockDataEntry.ts +0 -38
- package/test/utils/topology.ts +0 -79
- package/test/utils/utils.ts +0 -268
- package/tsconfig.browser.json +0 -17
- package/tsconfig.jest.json +0 -25
- package/tsconfig.json +0 -3
- package/tsconfig.node.json +0 -24
|
@@ -1,528 +0,0 @@
|
|
|
1
|
-
import { Logger, MetricsContext, until, waitForEvent3 } from '@streamr/utils'
|
|
2
|
-
import { MarkOptional } from 'ts-essentials'
|
|
3
|
-
import { ConnectionManager } from '../../src/connection/ConnectionManager'
|
|
4
|
-
import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
|
|
5
|
-
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
6
|
-
import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
|
|
7
|
-
import { createPeerDescriptor } from '../../src/helpers/createPeerDescriptor'
|
|
8
|
-
import { randomDhtAddress, toDhtAddressRaw } from '../../src/identifiers'
|
|
9
|
-
import { ConnectivityResponse, Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
|
|
10
|
-
import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
|
|
11
|
-
import { TransportEvents } from '../../src/transport/ITransport'
|
|
12
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
13
|
-
import { getRandomRegion } from '../../src/connection/simulator/pings'
|
|
14
|
-
import { range } from 'lodash'
|
|
15
|
-
|
|
16
|
-
const SERVICE_ID = 'demo'
|
|
17
|
-
|
|
18
|
-
const logger = new Logger(module)
|
|
19
|
-
|
|
20
|
-
// TODO: refactor this test file to use beforeEach and AfterEach for proper teardown
|
|
21
|
-
describe('ConnectionManager', () => {
|
|
22
|
-
|
|
23
|
-
const mockPeerDescriptor1 = createMockPeerDescriptor()
|
|
24
|
-
const mockPeerDescriptor2 = createMockPeerDescriptor()
|
|
25
|
-
const mockPeerDescriptor3 = createMockPeerDescriptor()
|
|
26
|
-
const mockPeerDescriptor4 = createMockPeerDescriptor()
|
|
27
|
-
const simulator = new Simulator()
|
|
28
|
-
const mockTransport = new SimulatorTransport(mockPeerDescriptor1, simulator)
|
|
29
|
-
const mockConnectorTransport1 = new SimulatorTransport(mockPeerDescriptor1, simulator)
|
|
30
|
-
const mockConnectorTransport2 = new SimulatorTransport(mockPeerDescriptor2, simulator)
|
|
31
|
-
let createLocalPeerDescriptor: jest.Mock<PeerDescriptor, [ConnectivityResponse]>
|
|
32
|
-
|
|
33
|
-
const createConnectionManager = (opts: MarkOptional<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
|
|
34
|
-
return new ConnectionManager({
|
|
35
|
-
createConnectorFacade: () => new DefaultConnectorFacade({
|
|
36
|
-
createLocalPeerDescriptor: async (response) => createLocalPeerDescriptor(response),
|
|
37
|
-
websocketServerEnableTls: false,
|
|
38
|
-
...opts
|
|
39
|
-
}),
|
|
40
|
-
metricsContext: new MetricsContext(),
|
|
41
|
-
allowIncomingPrivateConnections: true
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
beforeEach(() => {
|
|
46
|
-
createLocalPeerDescriptor = jest.fn().mockImplementation((response) => createPeerDescriptor(response, getRandomRegion()))
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
beforeAll(async () => {
|
|
50
|
-
await mockTransport.start()
|
|
51
|
-
await mockConnectorTransport1.start()
|
|
52
|
-
await mockConnectorTransport2.start()
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
afterAll(async () => {
|
|
56
|
-
await mockTransport.stop()
|
|
57
|
-
await mockConnectorTransport1.stop()
|
|
58
|
-
await mockConnectorTransport2.stop()
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('Can start alone', async () => {
|
|
62
|
-
|
|
63
|
-
const connectionManager = createConnectionManager({
|
|
64
|
-
transport: mockTransport,
|
|
65
|
-
websocketHost: '127.0.0.1',
|
|
66
|
-
websocketPortRange: { min: 9991, max: 9991 }
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
await connectionManager.start()
|
|
70
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
71
|
-
|
|
72
|
-
await connectionManager.stop()
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it('Throws an async exception if fails to connect to entrypoints', async () => {
|
|
76
|
-
|
|
77
|
-
const entryPoint = createMockPeerDescriptor({
|
|
78
|
-
websocket: { host: '127.0.0.1', port: 12345, tls: false }
|
|
79
|
-
})
|
|
80
|
-
const connectionManager = createConnectionManager({
|
|
81
|
-
transport: mockTransport,
|
|
82
|
-
websocketPortRange: { min: 9992, max: 9992 },
|
|
83
|
-
entryPoints: [entryPoint]
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
await expect(connectionManager.start()).rejects.toThrow('Failed to connect to the entrypoints')
|
|
87
|
-
|
|
88
|
-
await connectionManager.stop()
|
|
89
|
-
}, 15000)
|
|
90
|
-
|
|
91
|
-
it('Succesfully connectivityChecks if at least one entry point is online', async () => {
|
|
92
|
-
// Create offline PeerDescriptors
|
|
93
|
-
const entryPoints = range(4).map((i) => {
|
|
94
|
-
return createMockPeerDescriptor({
|
|
95
|
-
websocket: { host: '127.0.0.1', port: 12345 + i, tls: false }
|
|
96
|
-
})
|
|
97
|
-
})
|
|
98
|
-
entryPoints.push(createMockPeerDescriptor({
|
|
99
|
-
websocket: { host: '127.0.0.1', port: 9998, tls: false }
|
|
100
|
-
}))
|
|
101
|
-
const connectionManager = createConnectionManager({
|
|
102
|
-
transport: mockTransport,
|
|
103
|
-
websocketPortRange: { min: 9998, max: 9998 },
|
|
104
|
-
entryPoints
|
|
105
|
-
})
|
|
106
|
-
await connectionManager.start()
|
|
107
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
108
|
-
|
|
109
|
-
await connectionManager.stop()
|
|
110
|
-
}, 20000)
|
|
111
|
-
|
|
112
|
-
it('Can probe connectivity in open internet', async () => {
|
|
113
|
-
const connectionManager1 = createConnectionManager({
|
|
114
|
-
transport: mockTransport,
|
|
115
|
-
websocketHost: '127.0.0.1',
|
|
116
|
-
websocketPortRange: { min: 9993, max: 9993 }
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
await connectionManager1.start()
|
|
120
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
121
|
-
|
|
122
|
-
const entryPoint = createMockPeerDescriptor({
|
|
123
|
-
websocket: { host: '127.0.0.1', port: 9993, tls: false }
|
|
124
|
-
})
|
|
125
|
-
const connectionManager2 = createConnectionManager({
|
|
126
|
-
transport: mockConnectorTransport2,
|
|
127
|
-
websocketPortRange: { min: 9994, max: 9994 },
|
|
128
|
-
entryPoints: [entryPoint]
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
await connectionManager2.start()
|
|
132
|
-
expect(createLocalPeerDescriptor.mock.calls[1][0].host).toEqual('127.0.0.1')
|
|
133
|
-
|
|
134
|
-
await connectionManager1.stop()
|
|
135
|
-
await connectionManager2.stop()
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
it('Can send data to other connectionmanager over websocket', async () => {
|
|
139
|
-
const connectionManager1 = createConnectionManager({
|
|
140
|
-
transport: mockConnectorTransport1,
|
|
141
|
-
websocketHost: '127.0.0.1',
|
|
142
|
-
websocketPortRange: { min: 9995, max: 9995 }
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
await connectionManager1.start()
|
|
146
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
147
|
-
|
|
148
|
-
const connectionManager2 = createConnectionManager({
|
|
149
|
-
transport: mockConnectorTransport2,
|
|
150
|
-
websocketPortRange: { min: 9996, max: 9996 },
|
|
151
|
-
entryPoints: [
|
|
152
|
-
connectionManager1.getLocalPeerDescriptor()
|
|
153
|
-
]
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
await connectionManager2.start()
|
|
157
|
-
expect(createLocalPeerDescriptor.mock.calls[1][0].host).toEqual('127.0.0.1')
|
|
158
|
-
|
|
159
|
-
const msg: Message = {
|
|
160
|
-
serviceId: SERVICE_ID,
|
|
161
|
-
messageId: '1',
|
|
162
|
-
body: {
|
|
163
|
-
oneofKind: 'rpcMessage',
|
|
164
|
-
rpcMessage: RpcMessage.create()
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const promise = new Promise<void>((resolve, _reject) => {
|
|
169
|
-
connectionManager2.on('message', async (message: Message) => {
|
|
170
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
171
|
-
resolve()
|
|
172
|
-
})
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
const connectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
176
|
-
connectionManager1.on('connected', () => {
|
|
177
|
-
resolve()
|
|
178
|
-
})
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
const connectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
182
|
-
connectionManager2.on('connected', () => {
|
|
183
|
-
resolve()
|
|
184
|
-
})
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
msg.targetDescriptor = connectionManager2.getLocalPeerDescriptor()
|
|
188
|
-
connectionManager1.send(msg)
|
|
189
|
-
|
|
190
|
-
await Promise.all([promise, connectedPromise1, connectedPromise2])
|
|
191
|
-
|
|
192
|
-
await connectionManager1.stop()
|
|
193
|
-
await connectionManager2.stop()
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
it('Can disconnect websockets', async () => {
|
|
197
|
-
const connectionManager1 = createConnectionManager({
|
|
198
|
-
transport: mockConnectorTransport1,
|
|
199
|
-
websocketHost: '127.0.0.1',
|
|
200
|
-
websocketPortRange: { min: 9997, max: 9997 },
|
|
201
|
-
})
|
|
202
|
-
|
|
203
|
-
await connectionManager1.start()
|
|
204
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
205
|
-
|
|
206
|
-
const connectionManager2 = createConnectionManager({
|
|
207
|
-
transport: mockConnectorTransport2,
|
|
208
|
-
websocketPortRange: { min: 9999, max: 9999 },
|
|
209
|
-
websocketServerEnableTls: false,
|
|
210
|
-
entryPoints: [
|
|
211
|
-
connectionManager1.getLocalPeerDescriptor()
|
|
212
|
-
]
|
|
213
|
-
})
|
|
214
|
-
|
|
215
|
-
await connectionManager2.start()
|
|
216
|
-
|
|
217
|
-
const msg: Message = {
|
|
218
|
-
serviceId: SERVICE_ID,
|
|
219
|
-
messageId: '1',
|
|
220
|
-
body: {
|
|
221
|
-
oneofKind: 'rpcMessage',
|
|
222
|
-
rpcMessage: RpcMessage.create()
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
227
|
-
connectionManager1.on('disconnected', () => {
|
|
228
|
-
logger.info('disconnectedPromise1')
|
|
229
|
-
resolve()
|
|
230
|
-
})
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
234
|
-
connectionManager2.on('disconnected', () => {
|
|
235
|
-
logger.info('disconnectedPromise2')
|
|
236
|
-
resolve()
|
|
237
|
-
})
|
|
238
|
-
})
|
|
239
|
-
|
|
240
|
-
const promise = new Promise<void>((resolve, _reject) => {
|
|
241
|
-
connectionManager2.on('message', async (message: Message) => {
|
|
242
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
243
|
-
resolve()
|
|
244
|
-
})
|
|
245
|
-
})
|
|
246
|
-
msg.targetDescriptor = connectionManager2.getLocalPeerDescriptor()
|
|
247
|
-
connectionManager1.send(msg)
|
|
248
|
-
|
|
249
|
-
await promise
|
|
250
|
-
|
|
251
|
-
// @ts-expect-error private field
|
|
252
|
-
connectionManager1.closeConnection(connectionManager2.getLocalPeerDescriptor())
|
|
253
|
-
|
|
254
|
-
await Promise.all([disconnectedPromise1, disconnectedPromise2])
|
|
255
|
-
|
|
256
|
-
await connectionManager1.stop()
|
|
257
|
-
await connectionManager2.stop()
|
|
258
|
-
})
|
|
259
|
-
|
|
260
|
-
it('Connects and disconnects over simulated connections', async () => {
|
|
261
|
-
const simulator2 = new Simulator()
|
|
262
|
-
const connectionManager3 = new SimulatorTransport(mockPeerDescriptor3, simulator2)
|
|
263
|
-
await connectionManager3.start()
|
|
264
|
-
const connectionManager4 = new SimulatorTransport(mockPeerDescriptor4, simulator2)
|
|
265
|
-
await connectionManager4.start()
|
|
266
|
-
|
|
267
|
-
const msg: Message = {
|
|
268
|
-
serviceId: SERVICE_ID,
|
|
269
|
-
messageId: '1',
|
|
270
|
-
body: {
|
|
271
|
-
oneofKind: 'rpcMessage',
|
|
272
|
-
rpcMessage: RpcMessage.create()
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
const dataPromise = new Promise<void>((resolve, _reject) => {
|
|
277
|
-
connectionManager4.on('message', async (message: Message) => {
|
|
278
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
279
|
-
resolve()
|
|
280
|
-
})
|
|
281
|
-
})
|
|
282
|
-
|
|
283
|
-
const connectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
284
|
-
connectionManager4.on('connected', () => {
|
|
285
|
-
resolve()
|
|
286
|
-
})
|
|
287
|
-
})
|
|
288
|
-
|
|
289
|
-
const connectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
290
|
-
connectionManager3.on('connected', () => {
|
|
291
|
-
resolve()
|
|
292
|
-
})
|
|
293
|
-
})
|
|
294
|
-
|
|
295
|
-
const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
296
|
-
connectionManager4.on('disconnected', () => {
|
|
297
|
-
resolve()
|
|
298
|
-
})
|
|
299
|
-
})
|
|
300
|
-
|
|
301
|
-
const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
302
|
-
connectionManager3.on('disconnected', () => {
|
|
303
|
-
resolve()
|
|
304
|
-
})
|
|
305
|
-
})
|
|
306
|
-
msg.targetDescriptor = mockPeerDescriptor4
|
|
307
|
-
connectionManager3.send(msg)
|
|
308
|
-
|
|
309
|
-
await Promise.all([dataPromise, connectedPromise1, connectedPromise2])
|
|
310
|
-
|
|
311
|
-
// @ts-expect-error private field
|
|
312
|
-
connectionManager3.closeConnection(mockPeerDescriptor4)
|
|
313
|
-
|
|
314
|
-
await Promise.all([disconnectedPromise1, disconnectedPromise2])
|
|
315
|
-
await connectionManager3.stop()
|
|
316
|
-
await connectionManager4.stop()
|
|
317
|
-
simulator2.stop()
|
|
318
|
-
})
|
|
319
|
-
|
|
320
|
-
it('Cannot send to own WebsocketServer if nodeIds do not match', async () => {
|
|
321
|
-
const connectionManager1 = createConnectionManager({
|
|
322
|
-
transport: mockTransport,
|
|
323
|
-
websocketHost: '127.0.0.1',
|
|
324
|
-
websocketPortRange: { min: 10001, max: 10001 }
|
|
325
|
-
})
|
|
326
|
-
|
|
327
|
-
await connectionManager1.start()
|
|
328
|
-
expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
|
|
329
|
-
|
|
330
|
-
const peerDescriptor = connectionManager1.getLocalPeerDescriptor()
|
|
331
|
-
peerDescriptor.nodeId = new Uint8Array([12, 12, 12, 12])
|
|
332
|
-
const msg: Message = {
|
|
333
|
-
serviceId: SERVICE_ID,
|
|
334
|
-
messageId: '1',
|
|
335
|
-
targetDescriptor: peerDescriptor,
|
|
336
|
-
body: {
|
|
337
|
-
oneofKind: 'rpcMessage',
|
|
338
|
-
rpcMessage: RpcMessage.create()
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
await expect(connectionManager1.send(msg))
|
|
342
|
-
.rejects
|
|
343
|
-
.toThrow('Cannot send to self')
|
|
344
|
-
|
|
345
|
-
await connectionManager1.stop()
|
|
346
|
-
})
|
|
347
|
-
|
|
348
|
-
it('Cannot send to a WebSocketServer if nodeIds do not match', async () => {
|
|
349
|
-
|
|
350
|
-
const peerDescriptor1 = createMockPeerDescriptor({
|
|
351
|
-
websocket: {
|
|
352
|
-
host: '127.0.0.1',
|
|
353
|
-
port: 10002,
|
|
354
|
-
tls: false
|
|
355
|
-
}
|
|
356
|
-
})
|
|
357
|
-
const peerDescriptor2 = createMockPeerDescriptor({
|
|
358
|
-
websocket: {
|
|
359
|
-
host: '127.0.0.1',
|
|
360
|
-
port: 10003,
|
|
361
|
-
tls: false
|
|
362
|
-
}
|
|
363
|
-
})
|
|
364
|
-
const connectionManager1 = createConnectionManager({
|
|
365
|
-
transport: mockTransport,
|
|
366
|
-
websocketHost: '127.0.0.1',
|
|
367
|
-
websocketPortRange: { min: 10002, max: 10002 },
|
|
368
|
-
createLocalPeerDescriptor: async () => peerDescriptor1
|
|
369
|
-
})
|
|
370
|
-
|
|
371
|
-
await connectionManager1.start()
|
|
372
|
-
|
|
373
|
-
const connectionManager2 = createConnectionManager({
|
|
374
|
-
transport: mockTransport,
|
|
375
|
-
websocketHost: '127.0.0.1',
|
|
376
|
-
websocketPortRange: { min: 10003, max: 10003 },
|
|
377
|
-
createLocalPeerDescriptor: async () => peerDescriptor2
|
|
378
|
-
})
|
|
379
|
-
|
|
380
|
-
await connectionManager2.start()
|
|
381
|
-
|
|
382
|
-
const msg: Message = {
|
|
383
|
-
serviceId: SERVICE_ID,
|
|
384
|
-
messageId: '1',
|
|
385
|
-
targetDescriptor: {
|
|
386
|
-
// This is not the correct nodeId of peerDescriptor2
|
|
387
|
-
nodeId: toDhtAddressRaw(randomDhtAddress()),
|
|
388
|
-
type: NodeType.NODEJS,
|
|
389
|
-
websocket: peerDescriptor2.websocket
|
|
390
|
-
},
|
|
391
|
-
body: {
|
|
392
|
-
oneofKind: 'rpcMessage',
|
|
393
|
-
rpcMessage: RpcMessage.create()
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
await Promise.all([
|
|
397
|
-
waitForEvent3<TransportEvents>(connectionManager1, 'disconnected'),
|
|
398
|
-
expect(connectionManager1.send(msg))
|
|
399
|
-
.rejects
|
|
400
|
-
.toThrow()
|
|
401
|
-
])
|
|
402
|
-
|
|
403
|
-
await connectionManager1.stop()
|
|
404
|
-
await connectionManager2.stop()
|
|
405
|
-
}, 10000)
|
|
406
|
-
|
|
407
|
-
it('Failed autocertification', async () => {
|
|
408
|
-
const connectionManager1 = createConnectionManager({
|
|
409
|
-
transport: mockTransport,
|
|
410
|
-
websocketHost: '127.0.0.1',
|
|
411
|
-
autoCertifierUrl: 'https://127.0.0.1:12333',
|
|
412
|
-
websocketServerEnableTls: true,
|
|
413
|
-
websocketPortRange: { min: 10004, max: 10004 }
|
|
414
|
-
})
|
|
415
|
-
|
|
416
|
-
await connectionManager1.start()
|
|
417
|
-
expect(connectionManager1.getLocalPeerDescriptor().websocket!.tls).toEqual(false)
|
|
418
|
-
await connectionManager1.stop()
|
|
419
|
-
})
|
|
420
|
-
|
|
421
|
-
it('Stopping ConnectionManager is cleaned up from peers', async () => {
|
|
422
|
-
const connectionManager1 = createConnectionManager({
|
|
423
|
-
transport: mockTransport,
|
|
424
|
-
websocketHost: '127.0.0.1',
|
|
425
|
-
websocketServerEnableTls: false,
|
|
426
|
-
websocketPortRange: { min: 10005, max: 10005 }
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
await connectionManager1.start()
|
|
430
|
-
|
|
431
|
-
const connectionManager2 = createConnectionManager({
|
|
432
|
-
transport: mockTransport,
|
|
433
|
-
websocketHost: '127.0.0.1',
|
|
434
|
-
websocketServerEnableTls: false,
|
|
435
|
-
websocketPortRange: { min: 10006, max: 10006 }
|
|
436
|
-
})
|
|
437
|
-
|
|
438
|
-
await connectionManager2.start()
|
|
439
|
-
|
|
440
|
-
const msg: Message = {
|
|
441
|
-
serviceId: SERVICE_ID,
|
|
442
|
-
messageId: '1',
|
|
443
|
-
body: {
|
|
444
|
-
oneofKind: 'rpcMessage',
|
|
445
|
-
rpcMessage: RpcMessage.create()
|
|
446
|
-
},
|
|
447
|
-
targetDescriptor: connectionManager1.getLocalPeerDescriptor()
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
const connectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
451
|
-
connectionManager1.on('connected', () => {
|
|
452
|
-
resolve()
|
|
453
|
-
})
|
|
454
|
-
})
|
|
455
|
-
|
|
456
|
-
const connectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
457
|
-
connectionManager2.on('connected', () => {
|
|
458
|
-
resolve()
|
|
459
|
-
})
|
|
460
|
-
})
|
|
461
|
-
await Promise.all([connectedPromise1, connectedPromise2, connectionManager2.send(msg)])
|
|
462
|
-
|
|
463
|
-
expect(connectionManager1.getConnections().length).toEqual(1)
|
|
464
|
-
expect(connectionManager2.getConnections().length).toEqual(1)
|
|
465
|
-
|
|
466
|
-
await connectionManager1.stop()
|
|
467
|
-
|
|
468
|
-
expect(connectionManager2.getConnections().length).toEqual(0)
|
|
469
|
-
|
|
470
|
-
await connectionManager2.stop()
|
|
471
|
-
})
|
|
472
|
-
|
|
473
|
-
it('private connections', async () => {
|
|
474
|
-
const connectionManager1 = createConnectionManager({
|
|
475
|
-
transport: mockTransport,
|
|
476
|
-
websocketHost: '127.0.0.1',
|
|
477
|
-
websocketServerEnableTls: false,
|
|
478
|
-
websocketPortRange: { min: 10009, max: 10009 }
|
|
479
|
-
})
|
|
480
|
-
|
|
481
|
-
await connectionManager1.start()
|
|
482
|
-
|
|
483
|
-
const connectionManager2 = createConnectionManager({
|
|
484
|
-
transport: mockTransport,
|
|
485
|
-
websocketHost: '127.0.0.1',
|
|
486
|
-
websocketServerEnableTls: false,
|
|
487
|
-
websocketPortRange: { min: 10010, max: 100010 }
|
|
488
|
-
})
|
|
489
|
-
|
|
490
|
-
await connectionManager2.start()
|
|
491
|
-
|
|
492
|
-
const msg: Message = {
|
|
493
|
-
serviceId: SERVICE_ID,
|
|
494
|
-
messageId: '1',
|
|
495
|
-
body: {
|
|
496
|
-
oneofKind: 'rpcMessage',
|
|
497
|
-
rpcMessage: RpcMessage.create()
|
|
498
|
-
},
|
|
499
|
-
targetDescriptor: connectionManager1.getLocalPeerDescriptor()
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
const connectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
503
|
-
connectionManager1.on('connected', () => {
|
|
504
|
-
resolve()
|
|
505
|
-
})
|
|
506
|
-
})
|
|
507
|
-
|
|
508
|
-
const connectedPromise2 = new Promise<void>((resolve, _reject) => {
|
|
509
|
-
connectionManager2.on('connected', () => {
|
|
510
|
-
resolve()
|
|
511
|
-
})
|
|
512
|
-
})
|
|
513
|
-
await Promise.all([connectedPromise1, connectedPromise2, connectionManager2.send(msg)])
|
|
514
|
-
|
|
515
|
-
await connectionManager1.enablePrivateClientMode()
|
|
516
|
-
await until(() => connectionManager2.getConnections().length === 0)
|
|
517
|
-
expect(connectionManager1.getConnections().length).toEqual(1)
|
|
518
|
-
|
|
519
|
-
await connectionManager1.disablePrivateClientMode()
|
|
520
|
-
await until(() => connectionManager2.getConnections().length === 1)
|
|
521
|
-
expect(connectionManager1.getConnections().length).toEqual(1)
|
|
522
|
-
|
|
523
|
-
await connectionManager1.stop()
|
|
524
|
-
await connectionManager2.stop()
|
|
525
|
-
|
|
526
|
-
})
|
|
527
|
-
|
|
528
|
-
})
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { MetricsContext } from '@streamr/utils'
|
|
2
|
-
import { ConnectionManager } from '../../src/connection/ConnectionManager'
|
|
3
|
-
import { DefaultConnectorFacade } from '../../src/connection/ConnectorFacade'
|
|
4
|
-
import { MockTransport } from '../utils/mock/MockTransport'
|
|
5
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
6
|
-
import { sendConnectivityRequest } from '../../src/connection/connectivityChecker'
|
|
7
|
-
import { LOCAL_PROTOCOL_VERSION } from '../../src/helpers/version'
|
|
8
|
-
|
|
9
|
-
describe('ConnectivityChecking', () => {
|
|
10
|
-
|
|
11
|
-
let server: ConnectionManager
|
|
12
|
-
const PORT = 15000
|
|
13
|
-
const HOST = '127.0.0.1'
|
|
14
|
-
|
|
15
|
-
beforeEach(async () => {
|
|
16
|
-
server = new ConnectionManager({
|
|
17
|
-
createConnectorFacade: () => new DefaultConnectorFacade({
|
|
18
|
-
createLocalPeerDescriptor: async () => {
|
|
19
|
-
return {
|
|
20
|
-
...createMockPeerDescriptor(),
|
|
21
|
-
websocket: {
|
|
22
|
-
host: HOST,
|
|
23
|
-
port: PORT,
|
|
24
|
-
tls: false
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
websocketHost: HOST,
|
|
29
|
-
websocketPortRange: { min: PORT, max: PORT },
|
|
30
|
-
websocketServerEnableTls: false,
|
|
31
|
-
transport: new MockTransport()
|
|
32
|
-
}),
|
|
33
|
-
metricsContext: new MetricsContext(),
|
|
34
|
-
allowIncomingPrivateConnections: false
|
|
35
|
-
})
|
|
36
|
-
await server.start()
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
afterEach(async () => {
|
|
40
|
-
await server.stop()
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('connectivityCheck with compatible version', async () => {
|
|
44
|
-
const request = {
|
|
45
|
-
host: HOST,
|
|
46
|
-
port: PORT,
|
|
47
|
-
tls: false,
|
|
48
|
-
allowSelfSignedCertificate: false
|
|
49
|
-
}
|
|
50
|
-
const response = await sendConnectivityRequest(request, server.getLocalPeerDescriptor())
|
|
51
|
-
expect(response.protocolVersion).toEqual(LOCAL_PROTOCOL_VERSION)
|
|
52
|
-
})
|
|
53
|
-
})
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { getRandomRegion } from '../../src/connection/simulator/pings'
|
|
3
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
4
|
-
import { toDhtAddress } from '../../src/identifiers'
|
|
5
|
-
import { createMockConnectionDhtNode, createMockPeerDescriptor } from '../utils/utils'
|
|
6
|
-
|
|
7
|
-
const NUM_OF_NODES_PER_KBUCKET = 8
|
|
8
|
-
|
|
9
|
-
const runTest = async (latencyType: LatencyType) => {
|
|
10
|
-
const simulator = new Simulator(latencyType)
|
|
11
|
-
const entrypointDescriptor = createMockPeerDescriptor({
|
|
12
|
-
region: getRandomRegion()
|
|
13
|
-
})
|
|
14
|
-
const entryPoint = await createMockConnectionDhtNode(simulator, toDhtAddress(entrypointDescriptor.nodeId), NUM_OF_NODES_PER_KBUCKET)
|
|
15
|
-
const nodes: DhtNode[] = []
|
|
16
|
-
for (let i = 1; i < 100; i++) {
|
|
17
|
-
const node = await createMockConnectionDhtNode(simulator, undefined, NUM_OF_NODES_PER_KBUCKET)
|
|
18
|
-
nodes.push(node)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
await entryPoint.joinDht([entrypointDescriptor])
|
|
22
|
-
await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
|
|
23
|
-
nodes.forEach((node) => {
|
|
24
|
-
expect(node.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
25
|
-
expect(node.getClosestContacts().length).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
26
|
-
})
|
|
27
|
-
expect(entryPoint.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
28
|
-
|
|
29
|
-
await Promise.all([
|
|
30
|
-
entryPoint.stop(),
|
|
31
|
-
...nodes.map((node) => node.stop())
|
|
32
|
-
])
|
|
33
|
-
simulator.stop()
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
describe('DhtJoinPeerDiscovery', () => {
|
|
37
|
-
|
|
38
|
-
it('latency: none', async () => {
|
|
39
|
-
await runTest(LatencyType.NONE)
|
|
40
|
-
}, 60 * 1000)
|
|
41
|
-
|
|
42
|
-
it('latency: random', async () => {
|
|
43
|
-
await runTest(LatencyType.RANDOM)
|
|
44
|
-
}, 60 * 1000)
|
|
45
|
-
|
|
46
|
-
it('latency: real', async () => {
|
|
47
|
-
await runTest(LatencyType.REAL)
|
|
48
|
-
}, 60 * 1000)
|
|
49
|
-
})
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { until } from '@streamr/utils'
|
|
2
|
-
import { range, without } from 'lodash'
|
|
3
|
-
import { DhtNodeRpcLocal } from '../../src/dht/DhtNodeRpcLocal'
|
|
4
|
-
import { DhtNode, ListeningRpcCommunicator, toNodeId } from '../../src/exports'
|
|
5
|
-
import { ClosestPeersRequest, ClosestPeersResponse, PeerDescriptor, PingRequest, PingResponse } from '../../generated/packages/dht/protos/DhtRpc'
|
|
6
|
-
import { FakeEnvironment } from '../utils/FakeTransport'
|
|
7
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
8
|
-
|
|
9
|
-
const OTHER_NODE_COUNT = 3
|
|
10
|
-
const SERVICE_ID_LAYER0 = 'layer0'
|
|
11
|
-
|
|
12
|
-
describe('DhtNode', () => {
|
|
13
|
-
|
|
14
|
-
let localPeerDescriptor: PeerDescriptor
|
|
15
|
-
let entryPointPeerDescriptor: PeerDescriptor
|
|
16
|
-
let otherPeerDescriptors: PeerDescriptor[]
|
|
17
|
-
|
|
18
|
-
const startRemoteNode = (peerDescriptor: PeerDescriptor, environment: FakeEnvironment) => {
|
|
19
|
-
const epRpcCommunicator = new ListeningRpcCommunicator(SERVICE_ID_LAYER0, environment.createTransport(peerDescriptor))
|
|
20
|
-
const dhtNodeRpcLocal = new DhtNodeRpcLocal({
|
|
21
|
-
peerDiscoveryQueryBatchSize: undefined as any,
|
|
22
|
-
getNeighbors: () => without(getAllPeerDescriptors(), peerDescriptor),
|
|
23
|
-
getClosestRingContactsTo: undefined as any,
|
|
24
|
-
addContact: () => {},
|
|
25
|
-
removeContact: undefined as any,
|
|
26
|
-
})
|
|
27
|
-
epRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping',
|
|
28
|
-
(req: PingRequest, context) => dhtNodeRpcLocal.ping(req, context))
|
|
29
|
-
epRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers',
|
|
30
|
-
(req: ClosestPeersRequest, context) => dhtNodeRpcLocal.getClosestPeers(req, context))
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const getAllPeerDescriptors = () => {
|
|
34
|
-
return [localPeerDescriptor, entryPointPeerDescriptor, ...otherPeerDescriptors]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
beforeAll(() => {
|
|
38
|
-
localPeerDescriptor = createMockPeerDescriptor()
|
|
39
|
-
entryPointPeerDescriptor = createMockPeerDescriptor()
|
|
40
|
-
otherPeerDescriptors = range(OTHER_NODE_COUNT).map(() => createMockPeerDescriptor())
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('start node and join DHT', async () => {
|
|
44
|
-
const environment = new FakeEnvironment()
|
|
45
|
-
startRemoteNode(entryPointPeerDescriptor, environment)
|
|
46
|
-
for (const other of otherPeerDescriptors) {
|
|
47
|
-
startRemoteNode(other, environment)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const transport = environment.createTransport(localPeerDescriptor)
|
|
51
|
-
const localNode = new DhtNode({
|
|
52
|
-
peerDescriptor: localPeerDescriptor,
|
|
53
|
-
transport,
|
|
54
|
-
connectionsView: transport,
|
|
55
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
56
|
-
})
|
|
57
|
-
await localNode.start()
|
|
58
|
-
await localNode.joinDht([entryPointPeerDescriptor])
|
|
59
|
-
await localNode.waitForNetworkConnectivity()
|
|
60
|
-
|
|
61
|
-
await until(() => localNode.getNeighborCount() === otherPeerDescriptors.length + 1)
|
|
62
|
-
const expectedNodeIds = without(getAllPeerDescriptors(), localPeerDescriptor).map((n) => toNodeId(n))
|
|
63
|
-
const actualNodeIds = localNode.getClosestContacts().map((n) => toNodeId(n))
|
|
64
|
-
expect(actualNodeIds).toIncludeSameMembers(expectedNodeIds)
|
|
65
|
-
})
|
|
66
|
-
})
|