@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,48 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { randomDhtAddress, toDhtAddress, toNodeId } from '../../src/identifiers'
|
|
4
|
-
import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
|
|
5
|
-
import { createMockConnectionDhtNode } from '../utils/utils'
|
|
6
|
-
|
|
7
|
-
describe('DhtNodeExternalApi', () => {
|
|
8
|
-
|
|
9
|
-
let simulator: Simulator
|
|
10
|
-
let dhtNode1: DhtNode
|
|
11
|
-
let remote: DhtNode
|
|
12
|
-
|
|
13
|
-
beforeEach(async () => {
|
|
14
|
-
simulator = new Simulator(LatencyType.NONE)
|
|
15
|
-
dhtNode1 = await createMockConnectionDhtNode(simulator)
|
|
16
|
-
remote = await createMockConnectionDhtNode(simulator)
|
|
17
|
-
await dhtNode1.joinDht([dhtNode1.getLocalPeerDescriptor()])
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
afterEach(async () => {
|
|
21
|
-
await Promise.all([
|
|
22
|
-
dhtNode1.stop(),
|
|
23
|
-
remote.stop()
|
|
24
|
-
])
|
|
25
|
-
simulator.stop()
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
it('fetch data happy path', async () => {
|
|
29
|
-
const entry = createMockDataEntry()
|
|
30
|
-
await dhtNode1.storeDataToDht(toDhtAddress(entry.key), entry.data!)
|
|
31
|
-
const foundData = await remote.fetchDataFromDhtViaPeer(toDhtAddress(entry.key), dhtNode1.getLocalPeerDescriptor())
|
|
32
|
-
expectEqualData(foundData[0], entry)
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('fetch data returns empty array if no data found', async () => {
|
|
36
|
-
const foundData = await remote.fetchDataFromDhtViaPeer(randomDhtAddress(), dhtNode1.getLocalPeerDescriptor())
|
|
37
|
-
expect(foundData).toEqual([])
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('external store data happy path', async () => {
|
|
41
|
-
const entry = createMockDataEntry()
|
|
42
|
-
await remote.storeDataToDhtViaPeer(toDhtAddress(entry.key), entry.data!, dhtNode1.getLocalPeerDescriptor())
|
|
43
|
-
const foundData = await remote.fetchDataFromDhtViaPeer(toDhtAddress(entry.key), dhtNode1.getLocalPeerDescriptor())
|
|
44
|
-
expectEqualData(foundData[0], entry)
|
|
45
|
-
expect(toDhtAddress(foundData[0].creator)).toEqual(toNodeId(remote.getLocalPeerDescriptor()))
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
})
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
|
|
2
|
-
import { RpcCommunicator } from '@streamr/proto-rpc'
|
|
3
|
-
import { createMockDhtRpc, createMockPeerDescriptor, createMockPeers } from '../utils/utils'
|
|
4
|
-
import {
|
|
5
|
-
ClosestPeersRequest,
|
|
6
|
-
ClosestPeersResponse,
|
|
7
|
-
PingRequest,
|
|
8
|
-
PingResponse
|
|
9
|
-
} from '../../generated/packages/dht/protos/DhtRpc'
|
|
10
|
-
import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
|
|
11
|
-
import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
|
|
12
|
-
import { toNodeId } from '../../src/identifiers'
|
|
13
|
-
|
|
14
|
-
const SERVICE_ID = 'test'
|
|
15
|
-
|
|
16
|
-
describe('DhtNodeRpcRemote', () => {
|
|
17
|
-
|
|
18
|
-
let rpcRemote: DhtNodeRpcRemote
|
|
19
|
-
let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
|
|
20
|
-
let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
|
|
21
|
-
const clientPeerDescriptor = createMockPeerDescriptor()
|
|
22
|
-
const serverPeerDescriptor = createMockPeerDescriptor()
|
|
23
|
-
const mockDhtRpc = createMockDhtRpc(createMockPeers())
|
|
24
|
-
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
clientRpcCommunicator = new RpcCommunicator()
|
|
27
|
-
serverRpcCommunicator = new RpcCommunicator()
|
|
28
|
-
serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
|
|
29
|
-
serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', mockDhtRpc.ping)
|
|
30
|
-
clientRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
|
|
31
|
-
serverRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
|
|
32
|
-
})
|
|
33
|
-
serverRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
|
|
34
|
-
clientRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
|
|
35
|
-
})
|
|
36
|
-
rpcRemote = new DhtNodeRpcRemote(clientPeerDescriptor, serverPeerDescriptor, SERVICE_ID, clientRpcCommunicator)
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
afterEach(() => {
|
|
40
|
-
clientRpcCommunicator.stop()
|
|
41
|
-
serverRpcCommunicator.stop()
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
it('Ping happy path', async () => {
|
|
45
|
-
const active = await rpcRemote.ping()
|
|
46
|
-
expect(active).toEqual(true)
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('getClosestPeers happy path', async () => {
|
|
50
|
-
const neighbors = await rpcRemote.getClosestPeers(toNodeId(clientPeerDescriptor))
|
|
51
|
-
expect(neighbors.length).toEqual(createMockPeers().length)
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
it('ping error path', async () => {
|
|
55
|
-
serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', mockDhtRpc.throwPingError)
|
|
56
|
-
const active = await rpcRemote.ping()
|
|
57
|
-
expect(active).toEqual(false)
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('getClosestPeers error path', async () => {
|
|
61
|
-
serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.throwGetClosestPeersError)
|
|
62
|
-
await expect(rpcRemote.getClosestPeers(toNodeId(clientPeerDescriptor)))
|
|
63
|
-
.rejects.toThrow('Closest peers error')
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
})
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { createMockDhtRpc, createMockPeerDescriptor, createMockPeers } from '../utils/utils'
|
|
2
|
-
import { ProtoRpcClient, RpcCommunicator, RpcError, toProtoRpcClient } from '@streamr/proto-rpc'
|
|
3
|
-
import { DhtNodeRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
|
|
4
|
-
import { ClosestPeersRequest, ClosestPeersResponse } from '../../generated/packages/dht/protos/DhtRpc'
|
|
5
|
-
import { wait } from '@streamr/utils'
|
|
6
|
-
import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
|
|
7
|
-
import { toNodeId } from '../../src/identifiers'
|
|
8
|
-
import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
|
|
9
|
-
|
|
10
|
-
describe('DhtRpc', () => {
|
|
11
|
-
|
|
12
|
-
let rpcCommunicator1: RpcCommunicator<DhtCallContext>
|
|
13
|
-
let rpcCommunicator2: RpcCommunicator<DhtCallContext>
|
|
14
|
-
let client1: ProtoRpcClient<DhtNodeRpcClient>
|
|
15
|
-
let client2: ProtoRpcClient<DhtNodeRpcClient>
|
|
16
|
-
const peerDescriptor1 = createMockPeerDescriptor()
|
|
17
|
-
const peerDescriptor2 = createMockPeerDescriptor()
|
|
18
|
-
const neighbors = createMockPeers()
|
|
19
|
-
const mockDhtRpc = createMockDhtRpc(neighbors)
|
|
20
|
-
|
|
21
|
-
const outgoingListener2 = async (message: RpcMessage) => {
|
|
22
|
-
rpcCommunicator1.handleIncomingMessage(message, new DhtCallContext())
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
rpcCommunicator1 = new RpcCommunicator()
|
|
27
|
-
rpcCommunicator1.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
|
|
28
|
-
|
|
29
|
-
rpcCommunicator2 = new RpcCommunicator()
|
|
30
|
-
rpcCommunicator2.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
|
|
31
|
-
|
|
32
|
-
rpcCommunicator1.setOutgoingMessageListener(async (message: RpcMessage) => {
|
|
33
|
-
rpcCommunicator2.handleIncomingMessage(message, new DhtCallContext())
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
rpcCommunicator2.setOutgoingMessageListener(outgoingListener2)
|
|
37
|
-
|
|
38
|
-
client1 = toProtoRpcClient(new DhtNodeRpcClient(rpcCommunicator1.getRpcClientTransport()))
|
|
39
|
-
client2 = toProtoRpcClient(new DhtNodeRpcClient(rpcCommunicator1.getRpcClientTransport()))
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
afterEach(async () => {
|
|
43
|
-
rpcCommunicator1.stop()
|
|
44
|
-
rpcCommunicator2.stop()
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('Happy path', async () => {
|
|
48
|
-
const response1 = client1.getClosestPeers(
|
|
49
|
-
{ nodeId: peerDescriptor1.nodeId, requestId: '1' },
|
|
50
|
-
{
|
|
51
|
-
sourceDescriptor: peerDescriptor1,
|
|
52
|
-
targetDescriptor: peerDescriptor2,
|
|
53
|
-
}
|
|
54
|
-
)
|
|
55
|
-
const res1 = await response1
|
|
56
|
-
expect(res1.peers.map((p) => toNodeId(p))).toEqual(neighbors.map((n) => toNodeId(n)))
|
|
57
|
-
|
|
58
|
-
const response2 = client2.getClosestPeers(
|
|
59
|
-
{ nodeId: peerDescriptor2.nodeId, requestId: '1' },
|
|
60
|
-
{
|
|
61
|
-
sourceDescriptor: peerDescriptor2,
|
|
62
|
-
targetDescriptor: peerDescriptor1
|
|
63
|
-
}
|
|
64
|
-
)
|
|
65
|
-
const res2 = await response2
|
|
66
|
-
expect(res2.peers.map((p) => toNodeId(p))).toEqual(neighbors.map((n) => toNodeId(n)))
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
it('Default RPC timeout, client side', async () => {
|
|
70
|
-
rpcCommunicator2.setOutgoingMessageListener(async () => {
|
|
71
|
-
await wait(3000)
|
|
72
|
-
})
|
|
73
|
-
const response2 = client2.getClosestPeers(
|
|
74
|
-
{ nodeId: peerDescriptor2.nodeId, requestId: '1' },
|
|
75
|
-
{
|
|
76
|
-
sourceDescriptor: peerDescriptor2,
|
|
77
|
-
targetDescriptor: peerDescriptor1
|
|
78
|
-
}
|
|
79
|
-
)
|
|
80
|
-
await expect(response2).rejects.toEqual(
|
|
81
|
-
new RpcError.RpcTimeout('Rpc request timed out')
|
|
82
|
-
)
|
|
83
|
-
}, 15000)
|
|
84
|
-
|
|
85
|
-
it('Server side timeout', async () => {
|
|
86
|
-
let timeout: NodeJS.Timeout
|
|
87
|
-
|
|
88
|
-
async function respondGetClosestPeersWithTimeout(): Promise<ClosestPeersResponse> {
|
|
89
|
-
const neighbors = createMockPeers()
|
|
90
|
-
const response: ClosestPeersResponse = {
|
|
91
|
-
peers: neighbors,
|
|
92
|
-
requestId: 'why am i still here'
|
|
93
|
-
}
|
|
94
|
-
await wait(5000)
|
|
95
|
-
return response
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
rpcCommunicator2.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', respondGetClosestPeersWithTimeout)
|
|
99
|
-
const response = client2.getClosestPeers(
|
|
100
|
-
{ nodeId: peerDescriptor2.nodeId, requestId: '1' },
|
|
101
|
-
{
|
|
102
|
-
sourceDescriptor: peerDescriptor2,
|
|
103
|
-
targetDescriptor: peerDescriptor1
|
|
104
|
-
}
|
|
105
|
-
)
|
|
106
|
-
await expect(response).rejects.toEqual(
|
|
107
|
-
new RpcError.RpcTimeout('Server timed out on request')
|
|
108
|
-
)
|
|
109
|
-
clearTimeout(timeout!)
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
it('Server responds with error on unknown method', async () => {
|
|
113
|
-
const response = client2.ping(
|
|
114
|
-
{ requestId: '1' },
|
|
115
|
-
{ targetDescriptor: peerDescriptor1 }
|
|
116
|
-
)
|
|
117
|
-
await expect(response).rejects.toEqual(
|
|
118
|
-
new RpcError.UnknownRpcMethod('Server does not implement method ping')
|
|
119
|
-
)
|
|
120
|
-
})
|
|
121
|
-
})
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
|
|
4
|
-
import { createMockConnectionDhtNode, waitForStableTopology } from '../utils/utils'
|
|
5
|
-
import { toDhtAddress, toNodeId, toDhtAddressRaw } from '../../src/identifiers'
|
|
6
|
-
|
|
7
|
-
const NUM_NODES = 100
|
|
8
|
-
const K = 8
|
|
9
|
-
|
|
10
|
-
describe('Find correctness', () => {
|
|
11
|
-
|
|
12
|
-
let entryPoint: DhtNode
|
|
13
|
-
let nodes: DhtNode[]
|
|
14
|
-
let entrypointDescriptor: PeerDescriptor
|
|
15
|
-
const simulator = new Simulator(LatencyType.REAL)
|
|
16
|
-
|
|
17
|
-
beforeEach(async () => {
|
|
18
|
-
nodes = []
|
|
19
|
-
entryPoint = await createMockConnectionDhtNode(simulator, undefined, K)
|
|
20
|
-
nodes.push(entryPoint)
|
|
21
|
-
entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
|
|
22
|
-
for (let i = 1; i < NUM_NODES; i++) {
|
|
23
|
-
const node = await createMockConnectionDhtNode(simulator, undefined, K, 15, 60000)
|
|
24
|
-
nodes.push(node)
|
|
25
|
-
}
|
|
26
|
-
await entryPoint.joinDht([entrypointDescriptor])
|
|
27
|
-
await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
|
|
28
|
-
await waitForStableTopology(nodes, 15, 45 * 1000)
|
|
29
|
-
}, 90000)
|
|
30
|
-
|
|
31
|
-
afterEach(async () => {
|
|
32
|
-
await Promise.all([
|
|
33
|
-
entryPoint.stop(),
|
|
34
|
-
...nodes.map(async (node) => await node.stop())
|
|
35
|
-
])
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('Entrypoint can find a node from the network (exact match)', async () => {
|
|
39
|
-
const targetId = toDhtAddressRaw(nodes[45].getNodeId())
|
|
40
|
-
const closestNodes = await entryPoint.findClosestNodesFromDht(toDhtAddress(targetId))
|
|
41
|
-
expect(closestNodes.length).toBeGreaterThanOrEqual(5)
|
|
42
|
-
expect(toDhtAddress(targetId)).toEqual(toNodeId(closestNodes[0]))
|
|
43
|
-
}, 90000)
|
|
44
|
-
|
|
45
|
-
})
|
|
@@ -1,72 +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
|
-
import { WebsocketServerConnection } from '../../src/connection/websocket/WebsocketServerConnection'
|
|
9
|
-
import fs from 'fs'
|
|
10
|
-
|
|
11
|
-
// helsinki.fi
|
|
12
|
-
const testIp = '128.214.222.50'
|
|
13
|
-
|
|
14
|
-
// Helsinki, Finland
|
|
15
|
-
const testLatitude = 60.1719
|
|
16
|
-
const testLongitude = 24.9347
|
|
17
|
-
|
|
18
|
-
const dbPath = '/tmp/geoipdatabasesintegration'
|
|
19
|
-
|
|
20
|
-
describe('ConnectivityChecking', () => {
|
|
21
|
-
|
|
22
|
-
let server: ConnectionManager
|
|
23
|
-
const PORT = 15002
|
|
24
|
-
const HOST = '127.0.0.1'
|
|
25
|
-
let mock: jest.SpyInstance<string, [], any>
|
|
26
|
-
|
|
27
|
-
beforeEach(async () => {
|
|
28
|
-
server = new ConnectionManager({
|
|
29
|
-
createConnectorFacade: () => new DefaultConnectorFacade({
|
|
30
|
-
createLocalPeerDescriptor: async () => {
|
|
31
|
-
return {
|
|
32
|
-
...createMockPeerDescriptor(),
|
|
33
|
-
websocket: {
|
|
34
|
-
host: HOST,
|
|
35
|
-
port: PORT,
|
|
36
|
-
tls: false
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
websocketHost: HOST,
|
|
41
|
-
websocketPortRange: { min: PORT, max: PORT },
|
|
42
|
-
websocketServerEnableTls: false,
|
|
43
|
-
transport: new MockTransport(),
|
|
44
|
-
geoIpDatabaseFolder: dbPath
|
|
45
|
-
}),
|
|
46
|
-
metricsContext: new MetricsContext(),
|
|
47
|
-
allowIncomingPrivateConnections: false
|
|
48
|
-
})
|
|
49
|
-
await server.start()
|
|
50
|
-
mock = jest.spyOn(WebsocketServerConnection.prototype, 'getRemoteIpAddress').mockImplementation(() => testIp)
|
|
51
|
-
}, 15000)
|
|
52
|
-
|
|
53
|
-
afterEach(async () => {
|
|
54
|
-
await server.stop()
|
|
55
|
-
fs.unlinkSync(dbPath + '/GeoLite2-City.mmdb')
|
|
56
|
-
fs.rmSync(dbPath, { recursive: true })
|
|
57
|
-
mock.mockRestore()
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('connectivityCheck replies with correct latitude and longitude', async () => {
|
|
61
|
-
const request = {
|
|
62
|
-
host: HOST,
|
|
63
|
-
port: PORT,
|
|
64
|
-
tls: false,
|
|
65
|
-
allowSelfSignedCertificate: false
|
|
66
|
-
}
|
|
67
|
-
const response = await sendConnectivityRequest(request, server.getLocalPeerDescriptor())
|
|
68
|
-
expect(response.protocolVersion).toEqual(LOCAL_PROTOCOL_VERSION)
|
|
69
|
-
expect(response.latitude).toEqual(testLatitude)
|
|
70
|
-
expect(response.longitude).toEqual(testLongitude)
|
|
71
|
-
})
|
|
72
|
-
})
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { toDhtAddress } from '../../src/identifiers'
|
|
4
|
-
import { createMockConnectionDhtNode, createMockConnectionLayer1Node, createMockPeerDescriptor } from '../utils/utils'
|
|
5
|
-
|
|
6
|
-
const NODE_COUNT = 48
|
|
7
|
-
const NUM_OF_NODES_PER_KBUCKET = 8
|
|
8
|
-
|
|
9
|
-
describe('Layer1', () => {
|
|
10
|
-
|
|
11
|
-
let simulator: Simulator
|
|
12
|
-
const entryPoint0Descriptor = createMockPeerDescriptor()
|
|
13
|
-
let layer0EntryPoint: DhtNode
|
|
14
|
-
let nodes: DhtNode[]
|
|
15
|
-
let layer1CleanUp: DhtNode[]
|
|
16
|
-
|
|
17
|
-
beforeEach(async () => {
|
|
18
|
-
simulator = new Simulator()
|
|
19
|
-
layer0EntryPoint = await createMockConnectionDhtNode(simulator, toDhtAddress(entryPoint0Descriptor.nodeId))
|
|
20
|
-
await layer0EntryPoint.joinDht([entryPoint0Descriptor])
|
|
21
|
-
|
|
22
|
-
nodes = []
|
|
23
|
-
layer1CleanUp = []
|
|
24
|
-
|
|
25
|
-
for (let i = 0; i < NODE_COUNT; i++) {
|
|
26
|
-
const node = await createMockConnectionDhtNode(
|
|
27
|
-
simulator,
|
|
28
|
-
undefined,
|
|
29
|
-
undefined,
|
|
30
|
-
undefined,
|
|
31
|
-
60000
|
|
32
|
-
)
|
|
33
|
-
nodes.push(node)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
await Promise.all(nodes.map((node) => node.joinDht([entryPoint0Descriptor])))
|
|
37
|
-
|
|
38
|
-
}, 30000)
|
|
39
|
-
|
|
40
|
-
afterEach(async () => {
|
|
41
|
-
await Promise.all(layer1CleanUp.map((node) => node.stop()))
|
|
42
|
-
await Promise.all(nodes.map((node) => node.stop()))
|
|
43
|
-
await layer0EntryPoint.stop()
|
|
44
|
-
simulator.stop()
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('single layer1 dht', async () => {
|
|
48
|
-
const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
|
|
49
|
-
await layer1EntryPoint.joinDht([entryPoint0Descriptor])
|
|
50
|
-
layer1CleanUp.push(layer1EntryPoint)
|
|
51
|
-
|
|
52
|
-
const layer1Nodes: DhtNode[] = []
|
|
53
|
-
for (let i = 0; i < NODE_COUNT; i++) {
|
|
54
|
-
const layer0 = nodes[i]
|
|
55
|
-
const layer1 = await createMockConnectionLayer1Node(layer0, undefined, NUM_OF_NODES_PER_KBUCKET)
|
|
56
|
-
layer1Nodes.push(layer1)
|
|
57
|
-
layer1CleanUp.push(layer1)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
await Promise.all(layer1Nodes.map((node) => node.joinDht([entryPoint0Descriptor])))
|
|
61
|
-
|
|
62
|
-
for (let i = 0; i < NODE_COUNT; i++) {
|
|
63
|
-
const layer0Node = nodes[i]
|
|
64
|
-
const layer1Node = layer1Nodes[i]
|
|
65
|
-
expect(layer1Node.getNodeId()).toEqual(layer0Node.getNodeId())
|
|
66
|
-
expect(layer1Node.getConnectionsView().getConnectionCount()).toEqual(layer0Node.getConnectionsView().getConnectionCount())
|
|
67
|
-
expect(layer1Node.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
68
|
-
expect(layer1Node.getConnectionsView().getConnections()).toEqual(layer0Node.getConnectionsView().getConnections())
|
|
69
|
-
}
|
|
70
|
-
}, 120000)
|
|
71
|
-
|
|
72
|
-
it('multiple layer1 dht', async () => {
|
|
73
|
-
const stream1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'one')
|
|
74
|
-
await stream1EntryPoint.joinDht([entryPoint0Descriptor])
|
|
75
|
-
|
|
76
|
-
const stream2EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'two')
|
|
77
|
-
await stream2EntryPoint.joinDht([entryPoint0Descriptor])
|
|
78
|
-
|
|
79
|
-
const stream3EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'three')
|
|
80
|
-
await stream3EntryPoint.joinDht([entryPoint0Descriptor])
|
|
81
|
-
|
|
82
|
-
const stream4EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'four')
|
|
83
|
-
await stream4EntryPoint.joinDht([entryPoint0Descriptor])
|
|
84
|
-
|
|
85
|
-
layer1CleanUp.push(stream1EntryPoint)
|
|
86
|
-
layer1CleanUp.push(stream2EntryPoint)
|
|
87
|
-
layer1CleanUp.push(stream3EntryPoint)
|
|
88
|
-
layer1CleanUp.push(stream4EntryPoint)
|
|
89
|
-
|
|
90
|
-
const stream1: DhtNode[] = []
|
|
91
|
-
const stream2: DhtNode[] = []
|
|
92
|
-
const stream3: DhtNode[] = []
|
|
93
|
-
const stream4: DhtNode[] = []
|
|
94
|
-
|
|
95
|
-
for (let i = 0; i < NODE_COUNT; i++) {
|
|
96
|
-
const layer0 = nodes[i]
|
|
97
|
-
const one = await createMockConnectionLayer1Node(layer0, 'one')
|
|
98
|
-
const two = await createMockConnectionLayer1Node(layer0, 'two')
|
|
99
|
-
const three = await createMockConnectionLayer1Node(layer0, 'three')
|
|
100
|
-
const four = await createMockConnectionLayer1Node(layer0, 'four')
|
|
101
|
-
|
|
102
|
-
stream1.push(one)
|
|
103
|
-
stream2.push(two)
|
|
104
|
-
stream3.push(three)
|
|
105
|
-
stream4.push(four)
|
|
106
|
-
|
|
107
|
-
layer1CleanUp.push(one)
|
|
108
|
-
layer1CleanUp.push(two)
|
|
109
|
-
layer1CleanUp.push(three)
|
|
110
|
-
layer1CleanUp.push(four)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
await Promise.all(layer1CleanUp.map((node) => node.joinDht([entryPoint0Descriptor])))
|
|
114
|
-
|
|
115
|
-
for (let i = 0; i < NODE_COUNT; i++) {
|
|
116
|
-
const layer0Node = nodes[i]
|
|
117
|
-
const stream1Node = stream1[i]
|
|
118
|
-
const stream2Node = stream2[i]
|
|
119
|
-
const stream3Node = stream3[i]
|
|
120
|
-
const stream4Node = stream4[i]
|
|
121
|
-
|
|
122
|
-
expect(layer0Node.getConnectionsView().getConnectionCount()).toEqual(stream1Node.getConnectionsView().getConnectionCount())
|
|
123
|
-
expect(layer0Node.getConnectionsView().getConnectionCount()).toEqual(stream2Node.getConnectionsView().getConnectionCount())
|
|
124
|
-
expect(layer0Node.getConnectionsView().getConnectionCount()).toEqual(stream3Node.getConnectionsView().getConnectionCount())
|
|
125
|
-
expect(layer0Node.getConnectionsView().getConnectionCount()).toEqual(stream4Node.getConnectionsView().getConnectionCount())
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
}, 120000)
|
|
129
|
-
|
|
130
|
-
// TODO: Make this work
|
|
131
|
-
// it('layer1 routing', async () => {
|
|
132
|
-
// const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint)
|
|
133
|
-
// await layer1EntryPoint.joinDht(entryPoint0Descriptor)
|
|
134
|
-
// layer1CleanUp.push(layer1EntryPoint)
|
|
135
|
-
//
|
|
136
|
-
// const receivedMessages: Map<string, Set<string>> = new Map()
|
|
137
|
-
//
|
|
138
|
-
// const layer1Nodes: DhtNode[] = []
|
|
139
|
-
// for (let i = 0; i < NODE_COUNT; i++) {
|
|
140
|
-
// const layer0 = nodes[i]
|
|
141
|
-
// if (i > NODE_COUNT - 5) {
|
|
142
|
-
// const layer1 = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0)
|
|
143
|
-
// layer1Nodes.push(layer1)
|
|
144
|
-
// layer1CleanUp.push(layer1)
|
|
145
|
-
// receivedMessages.set(layer0.getNodeId().toKey(), new Set())
|
|
146
|
-
// layer1.on('message', (msg: Message) => {
|
|
147
|
-
// const peerId = PeerID.fromValue(msg.sourceDescriptor!.nodeId)
|
|
148
|
-
// receivedMessages.get(layer0.getNodeId().toKey())!.add(peerId.toKey())
|
|
149
|
-
// })
|
|
150
|
-
// }
|
|
151
|
-
// }
|
|
152
|
-
//
|
|
153
|
-
// await Promise.all(layer1Nodes.map((node) => node.joinDht(entryPoint0Descriptor)))
|
|
154
|
-
//
|
|
155
|
-
// layer1Nodes.forEach((sender) => {
|
|
156
|
-
// layer1Nodes.forEach(async (receiver) => {
|
|
157
|
-
// if (!sender.getNodeId().equals(receiver.getNodeId())) {
|
|
158
|
-
// const rpcWrapper = createWrappedClosestPeersRequest(sender.getPeerDescriptor(), receiver.getPeerDescriptor())
|
|
159
|
-
// const message: Message = {
|
|
160
|
-
// serviceId: 'service',
|
|
161
|
-
// messageId: v4(),
|
|
162
|
-
// body: {
|
|
163
|
-
// oneofKind: 'rpcMessage',
|
|
164
|
-
// rpcMessage: rpcWrapper
|
|
165
|
-
// },
|
|
166
|
-
// sourceDescriptor: sender.getPeerDescriptor(),
|
|
167
|
-
// targetDescriptor: receiver.getPeerDescriptor()
|
|
168
|
-
// }
|
|
169
|
-
// await sender.doRouteMessage({
|
|
170
|
-
// message,
|
|
171
|
-
// target: receiver.getPeerDescriptor().nodeId,
|
|
172
|
-
// sourcePeer: sender.getPeerDescriptor(),
|
|
173
|
-
// requestId: v4(),
|
|
174
|
-
// reachableThrough: [],
|
|
175
|
-
// routingPath: []
|
|
176
|
-
// })
|
|
177
|
-
// }
|
|
178
|
-
// })
|
|
179
|
-
// })
|
|
180
|
-
//
|
|
181
|
-
// await until(() => {
|
|
182
|
-
// return [...receivedMessages.values()].every((set) => {
|
|
183
|
-
// return set.size === receivedMessages.size - 1
|
|
184
|
-
// })
|
|
185
|
-
// }, 15000)
|
|
186
|
-
//
|
|
187
|
-
// }, 120000)
|
|
188
|
-
|
|
189
|
-
})
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@streamr/utils'
|
|
2
|
-
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
3
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
4
|
-
import { createMockConnectionDhtNode, createMockConnectionLayer1Node } from '../utils/utils'
|
|
5
|
-
import { randomDhtAddress } from '../../src/identifiers'
|
|
6
|
-
|
|
7
|
-
const logger = new Logger(module)
|
|
8
|
-
|
|
9
|
-
describe('Layer 1 on Layer 0 with mocked connections', () => {
|
|
10
|
-
|
|
11
|
-
const simulator = new Simulator()
|
|
12
|
-
let layer0EntryPoint: DhtNode
|
|
13
|
-
let layer1Node1: DhtNode
|
|
14
|
-
let layer0Node1: DhtNode
|
|
15
|
-
let layer1EntryPoint: DhtNode
|
|
16
|
-
let layer0Node2: DhtNode
|
|
17
|
-
let layer1Node2: DhtNode
|
|
18
|
-
let layer0Node3: DhtNode
|
|
19
|
-
let layer1Node3: DhtNode
|
|
20
|
-
let layer0Node4: DhtNode
|
|
21
|
-
let layer1Node4: DhtNode
|
|
22
|
-
|
|
23
|
-
beforeEach(async () => {
|
|
24
|
-
|
|
25
|
-
layer0EntryPoint = await createMockConnectionDhtNode(simulator, randomDhtAddress())
|
|
26
|
-
layer0Node1 = await createMockConnectionDhtNode(simulator, randomDhtAddress())
|
|
27
|
-
layer0Node2 = await createMockConnectionDhtNode(simulator, randomDhtAddress())
|
|
28
|
-
layer0Node3 = await createMockConnectionDhtNode(simulator, randomDhtAddress())
|
|
29
|
-
layer0Node4 = await createMockConnectionDhtNode(simulator, randomDhtAddress())
|
|
30
|
-
|
|
31
|
-
layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
|
|
32
|
-
|
|
33
|
-
layer1Node1 = await createMockConnectionLayer1Node(layer0Node1)
|
|
34
|
-
layer1Node2 = await createMockConnectionLayer1Node(layer0Node2)
|
|
35
|
-
layer1Node3 = await createMockConnectionLayer1Node(layer0Node3)
|
|
36
|
-
layer1Node4 = await createMockConnectionLayer1Node(layer0Node4)
|
|
37
|
-
|
|
38
|
-
await layer0EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
39
|
-
await layer1EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
afterEach(async () => {
|
|
43
|
-
await Promise.all([
|
|
44
|
-
layer0EntryPoint.stop(),
|
|
45
|
-
layer0Node1.stop(),
|
|
46
|
-
layer0Node2.stop(),
|
|
47
|
-
layer0Node3.stop(),
|
|
48
|
-
layer0Node4.stop(),
|
|
49
|
-
layer1EntryPoint.stop(),
|
|
50
|
-
layer1Node1.stop(),
|
|
51
|
-
layer1Node2.stop(),
|
|
52
|
-
layer1Node3.stop(),
|
|
53
|
-
layer1Node4.stop()
|
|
54
|
-
])
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('Happy Path', async () => {
|
|
58
|
-
await layer0Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
59
|
-
await layer0Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
60
|
-
await layer0Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
61
|
-
await layer0Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
62
|
-
|
|
63
|
-
await layer1Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
64
|
-
await layer1Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
65
|
-
await layer1Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
66
|
-
await layer1Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
67
|
-
|
|
68
|
-
logger.info('layer1EntryPoint.getNeighborCount() ' + layer1EntryPoint.getNeighborCount())
|
|
69
|
-
logger.info('layer1Node1.getNeighborCount()' + layer1Node1.getNeighborCount())
|
|
70
|
-
logger.info('layer1Node2.getNeighborCount()' + layer1Node2.getNeighborCount())
|
|
71
|
-
logger.info('layer1Node3.getNeighborCount()' + layer1Node3.getNeighborCount())
|
|
72
|
-
logger.info('layer1Node4.getNeighborCount()' + layer1Node4.getNeighborCount())
|
|
73
|
-
|
|
74
|
-
expect(layer1Node1.getNeighborCount()).toEqual(layer0Node1.getNeighborCount())
|
|
75
|
-
expect(layer1Node2.getNeighborCount()).toEqual(layer0Node2.getNeighborCount())
|
|
76
|
-
expect(layer1Node3.getNeighborCount()).toEqual(layer0Node3.getNeighborCount())
|
|
77
|
-
expect(layer1Node4.getNeighborCount()).toEqual(layer0Node4.getNeighborCount())
|
|
78
|
-
|
|
79
|
-
expect(layer1Node1.getNeighbors()).toContainValues(layer0Node1.getNeighbors())
|
|
80
|
-
expect(layer1Node2.getNeighbors()).toContainValues(layer0Node2.getNeighbors())
|
|
81
|
-
expect(layer1Node3.getNeighbors()).toContainValues(layer0Node3.getNeighbors())
|
|
82
|
-
expect(layer1Node4.getNeighbors()).toContainValues(layer0Node4.getNeighbors())
|
|
83
|
-
|
|
84
|
-
}, 60000)
|
|
85
|
-
})
|