@streamr/dht 102.0.0-beta.0 → 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/packages/dht/protos/DhtRpc.d.ts +16 -8
- package/dist/generated/packages/dht/protos/DhtRpc.js +7 -5
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/package.json +15 -16
- package/dist/src/connection/ConnectionManager.js +18 -8
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +1 -1
- package/dist/src/connection/Handshaker.js +9 -5
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/ManagedConnection.js +17 -7
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.js +20 -10
- package/dist/src/connection/connectivityChecker.js.map +1 -1
- package/dist/src/connection/connectivityRequestHandler.js +3 -3
- package/dist/src/connection/connectivityRequestHandler.js.map +1 -1
- package/dist/src/connection/simulator/Simulator.js +3 -2
- package/dist/src/connection/simulator/Simulator.js.map +1 -1
- package/dist/src/connection/simulator/pings.d.ts +1 -1
- package/dist/src/connection/simulator/pings.js +3 -3
- package/dist/src/connection/simulator/pings.js.map +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +0 -2
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.js +19 -9
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
- package/dist/src/connection/webrtc/iceServerAsString.js +1 -2
- package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
- package/dist/src/connection/websocket/AbstractWebsocketClientConnection.d.ts +0 -2
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.d.ts +0 -1
- package/dist/src/connection/websocket/WebsocketServerConnection.d.ts +0 -1
- package/dist/src/connection/websocket/WebsocketServerConnector.js +28 -18
- package/dist/src/connection/websocket/WebsocketServerConnector.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +1 -0
- package/dist/src/dht/DhtNode.js +3 -2
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -1
- package/dist/src/dht/PeerManager.d.ts +2 -1
- package/dist/src/dht/PeerManager.js +2 -1
- package/dist/src/dht/PeerManager.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.js +1 -1
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +0 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +0 -1
- package/dist/src/dht/discovery/RingDiscoverySession.d.ts +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +2 -2
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.js +2 -2
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/routing/RoutingTablesCache.d.ts +1 -1
- package/dist/src/dht/store/LocalDataStore.js +1 -1
- package/dist/src/dht/store/LocalDataStore.js.map +1 -1
- package/dist/src/dht/store/StoreManager.d.ts +1 -1
- package/dist/src/dht/store/StoreRpcLocal.d.ts +1 -1
- package/dist/src/helpers/AddressTools.js +2 -3
- package/dist/src/helpers/AddressTools.js.map +1 -1
- package/dist/src/helpers/debugHelpers.js +2 -2
- package/dist/src/helpers/debugHelpers.js.map +1 -1
- package/dist/src/helpers/protoClasses.d.ts +1 -1
- package/dist/src/helpers/protoClasses.js.map +1 -1
- package/dist/src/helpers/protoToString.js +1 -2
- package/dist/src/helpers/protoToString.js.map +1 -1
- package/dist/src/helpers/version.d.ts +1 -1
- package/dist/src/helpers/version.js +4 -4
- package/dist/src/helpers/version.js.map +1 -1
- package/eslint.config.mjs +12 -0
- package/jest.config.ts +12 -0
- package/package.json +15 -16
- package/protos/DhtRpc.proto +6 -4
- package/.eslintignore +0 -5
- package/.eslintrc +0 -3
- package/generated/google/protobuf/any.ts +0 -326
- package/generated/google/protobuf/empty.ts +0 -81
- package/generated/google/protobuf/timestamp.ts +0 -287
- package/generated/packages/dht/protos/DhtRpc.client.ts +0 -419
- package/generated/packages/dht/protos/DhtRpc.server.ts +0 -165
- package/generated/packages/dht/protos/DhtRpc.ts +0 -1266
- package/generated/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
- package/jest.config.js +0 -5
- 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 -205
- 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 -368
- 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 -247
- 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 -286
- package/src/dht/DhtNode.ts +0 -678
- 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 -303
- 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 -182
- 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 -219
- 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 -158
- 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 -79
- 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 -16
- 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 -80
- 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,316 +0,0 @@
|
|
|
1
|
-
import { MetricsContext, waitForCondition } from '@streamr/utils'
|
|
2
|
-
import { ConnectionManager } from '../../src/connection/ConnectionManager'
|
|
3
|
-
import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
|
|
4
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
5
|
-
import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
|
|
6
|
-
import { Message, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
|
|
7
|
-
import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
|
|
8
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
9
|
-
import { getRandomRegion } from '../../src/connection/simulator/pings'
|
|
10
|
-
import { MockTransport } from '../utils/mock/MockTransport'
|
|
11
|
-
import { toNodeId } from '../../src/identifiers'
|
|
12
|
-
|
|
13
|
-
const BASE_MESSAGE: Message = {
|
|
14
|
-
serviceId: 'serviceId',
|
|
15
|
-
messageId: '1',
|
|
16
|
-
body: {
|
|
17
|
-
oneofKind: 'rpcMessage',
|
|
18
|
-
rpcMessage: RpcMessage.create()
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
|
|
23
|
-
return new ConnectionManager({
|
|
24
|
-
createConnectorFacade: () => new DefaultConnectorFacade({
|
|
25
|
-
createLocalPeerDescriptor: async () => localPeerDescriptor,
|
|
26
|
-
...opts
|
|
27
|
-
}),
|
|
28
|
-
metricsContext: new MetricsContext(),
|
|
29
|
-
allowIncomingPrivateConnections: false
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
describe('SimultaneousConnections', () => {
|
|
34
|
-
|
|
35
|
-
let simulator: Simulator
|
|
36
|
-
let simTransport1: SimulatorTransport
|
|
37
|
-
let simTransport2: SimulatorTransport
|
|
38
|
-
const peerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
|
|
39
|
-
const peerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
|
|
40
|
-
|
|
41
|
-
beforeEach(async () => {
|
|
42
|
-
simulator = new Simulator(LatencyType.REAL)
|
|
43
|
-
simTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
44
|
-
await simTransport1.start()
|
|
45
|
-
simTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
46
|
-
await simTransport2.start()
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
afterEach(async () => {
|
|
50
|
-
await simTransport1.stop()
|
|
51
|
-
await simTransport2.stop()
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
it('simultanous simulated connection', async () => {
|
|
55
|
-
const msg1: Message = {
|
|
56
|
-
...BASE_MESSAGE,
|
|
57
|
-
targetDescriptor: peerDescriptor2
|
|
58
|
-
}
|
|
59
|
-
const msg2: Message = {
|
|
60
|
-
...BASE_MESSAGE,
|
|
61
|
-
targetDescriptor: peerDescriptor1
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
65
|
-
simTransport1.on('message', async (message: Message) => {
|
|
66
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
67
|
-
resolve()
|
|
68
|
-
})
|
|
69
|
-
})
|
|
70
|
-
const promise2 = new Promise<void>((resolve, _reject) => {
|
|
71
|
-
simTransport2.on('message', async (message: Message) => {
|
|
72
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
73
|
-
resolve()
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
await Promise.all([
|
|
77
|
-
promise1,
|
|
78
|
-
promise2,
|
|
79
|
-
simTransport1.send(msg1),
|
|
80
|
-
simTransport2.send(msg2)
|
|
81
|
-
])
|
|
82
|
-
await waitForCondition(() => simTransport2.hasConnection(toNodeId(peerDescriptor1)))
|
|
83
|
-
await waitForCondition(() => simTransport1.hasConnection(toNodeId(peerDescriptor2)))
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
describe('Websocket 2 servers', () => {
|
|
87
|
-
|
|
88
|
-
let connectionManager1: ConnectionManager
|
|
89
|
-
let connectionManager2: ConnectionManager
|
|
90
|
-
|
|
91
|
-
const wsPeerDescriptor1 = createMockPeerDescriptor({
|
|
92
|
-
websocket: {
|
|
93
|
-
host: '127.0.0.1',
|
|
94
|
-
port: 43432,
|
|
95
|
-
tls: false
|
|
96
|
-
},
|
|
97
|
-
region: getRandomRegion()
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
const wsPeerDescriptor2 = createMockPeerDescriptor({
|
|
101
|
-
websocket: {
|
|
102
|
-
host: '127.0.0.1',
|
|
103
|
-
port: 43433,
|
|
104
|
-
tls: false
|
|
105
|
-
},
|
|
106
|
-
region: getRandomRegion()
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
beforeEach(async () => {
|
|
110
|
-
|
|
111
|
-
const websocketPortRange = { min: 43432, max: 43433 }
|
|
112
|
-
connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
|
|
113
|
-
transport: new MockTransport(),
|
|
114
|
-
websocketPortRange,
|
|
115
|
-
entryPoints: [wsPeerDescriptor1],
|
|
116
|
-
websocketServerEnableTls: false
|
|
117
|
-
})
|
|
118
|
-
connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
|
|
119
|
-
transport: new MockTransport(),
|
|
120
|
-
websocketPortRange,
|
|
121
|
-
entryPoints: [wsPeerDescriptor1],
|
|
122
|
-
websocketServerEnableTls: false
|
|
123
|
-
})
|
|
124
|
-
await connectionManager1.start()
|
|
125
|
-
await connectionManager2.start()
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
afterEach(async () => {
|
|
129
|
-
await connectionManager1.stop()
|
|
130
|
-
await connectionManager2.stop()
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
it('Simultaneous Connections', async () => {
|
|
134
|
-
const msg1: Message = {
|
|
135
|
-
...BASE_MESSAGE,
|
|
136
|
-
targetDescriptor: wsPeerDescriptor2
|
|
137
|
-
}
|
|
138
|
-
const msg2: Message = {
|
|
139
|
-
...BASE_MESSAGE,
|
|
140
|
-
targetDescriptor: wsPeerDescriptor1
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
144
|
-
connectionManager1.on('message', async (message: Message) => {
|
|
145
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
146
|
-
resolve()
|
|
147
|
-
})
|
|
148
|
-
})
|
|
149
|
-
const promise2 = new Promise<void>((resolve, _reject) => {
|
|
150
|
-
connectionManager2.on('message', async (message: Message) => {
|
|
151
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
152
|
-
resolve()
|
|
153
|
-
})
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
await Promise.all([
|
|
157
|
-
promise1,
|
|
158
|
-
promise2,
|
|
159
|
-
connectionManager1.send(msg1),
|
|
160
|
-
connectionManager2.send(msg2)
|
|
161
|
-
])
|
|
162
|
-
|
|
163
|
-
await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wsPeerDescriptor2)))
|
|
164
|
-
await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wsPeerDescriptor1)))
|
|
165
|
-
})
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
describe('Websocket 1 server (ConnectionRequests)', () => {
|
|
169
|
-
|
|
170
|
-
let simTransport1: SimulatorTransport
|
|
171
|
-
let simTransport2: SimulatorTransport
|
|
172
|
-
let connectionManager1: ConnectionManager
|
|
173
|
-
let connectionManager2: ConnectionManager
|
|
174
|
-
|
|
175
|
-
const wsPeerDescriptor1 = createMockPeerDescriptor({
|
|
176
|
-
websocket: {
|
|
177
|
-
host: '127.0.0.1',
|
|
178
|
-
port: 43432,
|
|
179
|
-
tls: false
|
|
180
|
-
},
|
|
181
|
-
region: getRandomRegion()
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
const wsPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
|
|
185
|
-
|
|
186
|
-
beforeEach(async () => {
|
|
187
|
-
simulator = new Simulator(LatencyType.REAL)
|
|
188
|
-
simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
|
|
189
|
-
await simTransport1.start()
|
|
190
|
-
simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
|
|
191
|
-
await simTransport2.start()
|
|
192
|
-
|
|
193
|
-
connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
|
|
194
|
-
transport: simTransport1,
|
|
195
|
-
websocketPortRange: { min: 43432, max: 43432 },
|
|
196
|
-
entryPoints: [wsPeerDescriptor1],
|
|
197
|
-
websocketServerEnableTls: false
|
|
198
|
-
})
|
|
199
|
-
connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
|
|
200
|
-
transport: simTransport2
|
|
201
|
-
})
|
|
202
|
-
await connectionManager1.start()
|
|
203
|
-
await connectionManager2.start()
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
afterEach(async () => {
|
|
207
|
-
await connectionManager1.stop()
|
|
208
|
-
await connectionManager2.stop()
|
|
209
|
-
await simTransport1.stop()
|
|
210
|
-
await simTransport2.stop()
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
it('Simultaneous Connections', async () => {
|
|
214
|
-
const msg1: Message = {
|
|
215
|
-
...BASE_MESSAGE,
|
|
216
|
-
targetDescriptor: wsPeerDescriptor2
|
|
217
|
-
}
|
|
218
|
-
const msg2: Message = {
|
|
219
|
-
...BASE_MESSAGE,
|
|
220
|
-
targetDescriptor: wsPeerDescriptor1
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
224
|
-
connectionManager1.on('message', async (message: Message) => {
|
|
225
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
226
|
-
resolve()
|
|
227
|
-
})
|
|
228
|
-
})
|
|
229
|
-
const promise2 = new Promise<void>((resolve, _reject) => {
|
|
230
|
-
connectionManager2.on('message', async (message: Message) => {
|
|
231
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
232
|
-
resolve()
|
|
233
|
-
})
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
await Promise.all([
|
|
237
|
-
promise1,
|
|
238
|
-
promise2,
|
|
239
|
-
connectionManager1.send(msg1),
|
|
240
|
-
connectionManager2.send(msg2)
|
|
241
|
-
])
|
|
242
|
-
|
|
243
|
-
await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wsPeerDescriptor2)))
|
|
244
|
-
await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wsPeerDescriptor1)))
|
|
245
|
-
})
|
|
246
|
-
})
|
|
247
|
-
|
|
248
|
-
describe('WebRTC', () => {
|
|
249
|
-
|
|
250
|
-
let simTransport1: SimulatorTransport
|
|
251
|
-
let simTransport2: SimulatorTransport
|
|
252
|
-
let connectionManager1: ConnectionManager
|
|
253
|
-
let connectionManager2: ConnectionManager
|
|
254
|
-
|
|
255
|
-
const wrtcPeerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
|
|
256
|
-
const wrtcPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
|
|
257
|
-
|
|
258
|
-
beforeEach(async () => {
|
|
259
|
-
simulator = new Simulator(LatencyType.REAL)
|
|
260
|
-
simTransport1 = new SimulatorTransport(wrtcPeerDescriptor1, simulator)
|
|
261
|
-
await simTransport1.start()
|
|
262
|
-
simTransport2 = new SimulatorTransport(wrtcPeerDescriptor2, simulator)
|
|
263
|
-
await simTransport2.start()
|
|
264
|
-
connectionManager1 = createConnectionManager(wrtcPeerDescriptor1, {
|
|
265
|
-
transport: simTransport1,
|
|
266
|
-
})
|
|
267
|
-
connectionManager2 = createConnectionManager(wrtcPeerDescriptor2, {
|
|
268
|
-
transport: simTransport2,
|
|
269
|
-
})
|
|
270
|
-
await connectionManager1.start()
|
|
271
|
-
await connectionManager2.start()
|
|
272
|
-
})
|
|
273
|
-
|
|
274
|
-
afterEach(async () => {
|
|
275
|
-
await connectionManager1.stop()
|
|
276
|
-
await connectionManager2.stop()
|
|
277
|
-
await simTransport1.stop()
|
|
278
|
-
await simTransport2.stop()
|
|
279
|
-
})
|
|
280
|
-
|
|
281
|
-
it('Simultaneous Connections', async () => {
|
|
282
|
-
const msg1: Message = {
|
|
283
|
-
...BASE_MESSAGE,
|
|
284
|
-
targetDescriptor: wrtcPeerDescriptor2
|
|
285
|
-
}
|
|
286
|
-
const msg2: Message = {
|
|
287
|
-
...BASE_MESSAGE,
|
|
288
|
-
targetDescriptor: wrtcPeerDescriptor1
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
292
|
-
connectionManager1.on('message', async (message: Message) => {
|
|
293
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
294
|
-
resolve()
|
|
295
|
-
})
|
|
296
|
-
})
|
|
297
|
-
const promise2 = new Promise<void>((resolve, _reject) => {
|
|
298
|
-
connectionManager2.on('message', async (message: Message) => {
|
|
299
|
-
expect(message.body.oneofKind).toBe('rpcMessage')
|
|
300
|
-
resolve()
|
|
301
|
-
})
|
|
302
|
-
})
|
|
303
|
-
|
|
304
|
-
await Promise.all([
|
|
305
|
-
promise1,
|
|
306
|
-
promise2,
|
|
307
|
-
connectionManager1.send(msg1),
|
|
308
|
-
connectionManager2.send(msg2)
|
|
309
|
-
])
|
|
310
|
-
|
|
311
|
-
await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wrtcPeerDescriptor2)))
|
|
312
|
-
await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wrtcPeerDescriptor1)))
|
|
313
|
-
})
|
|
314
|
-
})
|
|
315
|
-
|
|
316
|
-
})
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { toDhtAddress, toNodeId } from '../../src/identifiers'
|
|
4
|
-
import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
|
|
5
|
-
import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
|
|
6
|
-
import { createMockConnectionDhtNode, createMockPeerDescriptor, waitForStableTopology } from '../utils/utils'
|
|
7
|
-
|
|
8
|
-
const NUM_NODES = 100
|
|
9
|
-
const MAX_CONNECTIONS = 20
|
|
10
|
-
const K = 4
|
|
11
|
-
|
|
12
|
-
describe('Storing data in DHT', () => {
|
|
13
|
-
|
|
14
|
-
let entryPoint: DhtNode
|
|
15
|
-
let nodes: DhtNode[]
|
|
16
|
-
let entrypointDescriptor: PeerDescriptor
|
|
17
|
-
const simulator = new Simulator(LatencyType.REAL)
|
|
18
|
-
|
|
19
|
-
const getRandomNode = () => {
|
|
20
|
-
return nodes[Math.floor(Math.random() * nodes.length)]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
beforeEach(async () => {
|
|
24
|
-
nodes = []
|
|
25
|
-
entryPoint = await createMockConnectionDhtNode(simulator,
|
|
26
|
-
undefined, K, MAX_CONNECTIONS)
|
|
27
|
-
nodes.push(entryPoint)
|
|
28
|
-
entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
|
|
29
|
-
nodes.push(entryPoint)
|
|
30
|
-
for (let i = 1; i < NUM_NODES; i++) {
|
|
31
|
-
const node = await createMockConnectionDhtNode(simulator,
|
|
32
|
-
undefined, K, MAX_CONNECTIONS, 60000)
|
|
33
|
-
nodes.push(node)
|
|
34
|
-
}
|
|
35
|
-
await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
|
|
36
|
-
await waitForStableTopology(nodes, MAX_CONNECTIONS)
|
|
37
|
-
}, 90000)
|
|
38
|
-
|
|
39
|
-
afterEach(async () => {
|
|
40
|
-
await Promise.all(nodes.map((node) => node.stop()))
|
|
41
|
-
}, 15000)
|
|
42
|
-
|
|
43
|
-
it('Storing data works', async () => {
|
|
44
|
-
const storingNodeIndex = 34
|
|
45
|
-
const entry = createMockDataEntry()
|
|
46
|
-
const successfulStorers = await nodes[storingNodeIndex].storeDataToDht(
|
|
47
|
-
toDhtAddress(entry.key),
|
|
48
|
-
entry.data!
|
|
49
|
-
)
|
|
50
|
-
expect(successfulStorers.length).toBeGreaterThan(4)
|
|
51
|
-
}, 30000)
|
|
52
|
-
|
|
53
|
-
it('Storing and getting data works', async () => {
|
|
54
|
-
const storingNode = getRandomNode()
|
|
55
|
-
const entry = createMockDataEntry()
|
|
56
|
-
const successfulStorers = await storingNode.storeDataToDht(
|
|
57
|
-
toDhtAddress(entry.key),
|
|
58
|
-
entry.data!
|
|
59
|
-
)
|
|
60
|
-
expect(successfulStorers.length).toBeGreaterThan(4)
|
|
61
|
-
const fetchingNode = getRandomNode()
|
|
62
|
-
const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
|
|
63
|
-
results.forEach((result) => {
|
|
64
|
-
expectEqualData(result, entry)
|
|
65
|
-
})
|
|
66
|
-
}, 30000)
|
|
67
|
-
|
|
68
|
-
it('storing with explicit creator', async () => {
|
|
69
|
-
const storingNode = getRandomNode()
|
|
70
|
-
const entry = createMockDataEntry()
|
|
71
|
-
const requestor = createMockPeerDescriptor()
|
|
72
|
-
const successfulStorers = await storingNode.storeDataToDht(
|
|
73
|
-
toDhtAddress(entry.key),
|
|
74
|
-
entry.data!,
|
|
75
|
-
toDhtAddress(requestor.nodeId)
|
|
76
|
-
)
|
|
77
|
-
expect(successfulStorers.length).toBeGreaterThan(4)
|
|
78
|
-
const fetchingNode = getRandomNode()
|
|
79
|
-
const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
|
|
80
|
-
results.forEach((result) => {
|
|
81
|
-
expectEqualData(result, entry)
|
|
82
|
-
expect(toDhtAddress(result.creator)).toEqual(toNodeId(requestor))
|
|
83
|
-
})
|
|
84
|
-
}, 30000)
|
|
85
|
-
})
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { createMockConnectionDhtNode, waitForStableTopology } from '../utils/utils'
|
|
4
|
-
import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
|
|
5
|
-
import { randomDhtAddress, toDhtAddress } from '../../src/identifiers'
|
|
6
|
-
import { wait } from '@streamr/utils'
|
|
7
|
-
|
|
8
|
-
const NUM_NODES = 5
|
|
9
|
-
const MAX_CONNECTIONS = 5
|
|
10
|
-
const K = 4
|
|
11
|
-
|
|
12
|
-
describe('Storing data in DHT', () => {
|
|
13
|
-
|
|
14
|
-
let nodes: DhtNode[]
|
|
15
|
-
const simulator = new Simulator(LatencyType.REAL)
|
|
16
|
-
|
|
17
|
-
const getRandomNode = () => {
|
|
18
|
-
return nodes[Math.floor(Math.random() * nodes.length)]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
beforeEach(async () => {
|
|
22
|
-
nodes = []
|
|
23
|
-
const entryPoint = await createMockConnectionDhtNode(simulator,
|
|
24
|
-
randomDhtAddress(), K, MAX_CONNECTIONS)
|
|
25
|
-
nodes.push(entryPoint)
|
|
26
|
-
for (let i = 1; i < NUM_NODES; i++) {
|
|
27
|
-
const node = await createMockConnectionDhtNode(simulator,
|
|
28
|
-
undefined, K, MAX_CONNECTIONS, 60000)
|
|
29
|
-
nodes.push(node)
|
|
30
|
-
}
|
|
31
|
-
await Promise.all(nodes.map((node) => node.joinDht([entryPoint.getLocalPeerDescriptor()])))
|
|
32
|
-
await waitForStableTopology(nodes, MAX_CONNECTIONS)
|
|
33
|
-
}, 90000)
|
|
34
|
-
|
|
35
|
-
afterEach(async () => {
|
|
36
|
-
await Promise.all(nodes.map((node) => node.stop()))
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('Data can be deleted', async () => {
|
|
40
|
-
const storingNode = getRandomNode()
|
|
41
|
-
const entry = createMockDataEntry()
|
|
42
|
-
const successfulStorers = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
|
|
43
|
-
expect(successfulStorers.length).toBeGreaterThan(4)
|
|
44
|
-
await storingNode.deleteDataFromDht(toDhtAddress(entry.key), true)
|
|
45
|
-
// Wait for the delete operation to propagate
|
|
46
|
-
await wait(500)
|
|
47
|
-
const fetchingNode = getRandomNode()
|
|
48
|
-
const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
|
|
49
|
-
results.forEach((result) => {
|
|
50
|
-
expect(result.deleted).toBeTrue()
|
|
51
|
-
expectEqualData(result, entry)
|
|
52
|
-
})
|
|
53
|
-
}, 90000)
|
|
54
|
-
|
|
55
|
-
it('Data can be deleted and re-stored', async () => {
|
|
56
|
-
const storingNode = getRandomNode()
|
|
57
|
-
const entry = createMockDataEntry()
|
|
58
|
-
const successfulStorers1 = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
|
|
59
|
-
expect(successfulStorers1.length).toBeGreaterThan(4)
|
|
60
|
-
await storingNode.deleteDataFromDht(toDhtAddress(entry.key), true)
|
|
61
|
-
// Wait for the delete operation to propagate
|
|
62
|
-
await wait(500)
|
|
63
|
-
const fetchingNode = getRandomNode()
|
|
64
|
-
const results1 = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
|
|
65
|
-
results1.forEach((result) => {
|
|
66
|
-
expect(result.deleted).toBeTrue()
|
|
67
|
-
expectEqualData(result, entry)
|
|
68
|
-
})
|
|
69
|
-
const successfulStorers2 = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
|
|
70
|
-
expect(successfulStorers2.length).toBeGreaterThan(4)
|
|
71
|
-
const results2 = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
|
|
72
|
-
results2.forEach((result) => {
|
|
73
|
-
expect(result.deleted).toBeFalse()
|
|
74
|
-
expectEqualData(result, entry)
|
|
75
|
-
})
|
|
76
|
-
}, 90000)
|
|
77
|
-
})
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { createMockConnectionDhtNode } from '../utils/utils'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
4
|
-
import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
|
|
5
|
-
import { toDhtAddress } from '../../src/identifiers'
|
|
6
|
-
|
|
7
|
-
describe('Storing data in DHT with two peers', () => {
|
|
8
|
-
|
|
9
|
-
let entryPoint: DhtNode
|
|
10
|
-
let node1: DhtNode
|
|
11
|
-
let node2: DhtNode
|
|
12
|
-
let simulator: Simulator | undefined
|
|
13
|
-
|
|
14
|
-
beforeEach(async () => {
|
|
15
|
-
simulator = new Simulator()
|
|
16
|
-
entryPoint = await createMockConnectionDhtNode(simulator)
|
|
17
|
-
node1 = await createMockConnectionDhtNode(simulator)
|
|
18
|
-
node2 = await createMockConnectionDhtNode(simulator)
|
|
19
|
-
|
|
20
|
-
await entryPoint.start()
|
|
21
|
-
await node1.start()
|
|
22
|
-
await node2.start()
|
|
23
|
-
|
|
24
|
-
await entryPoint.joinDht([entryPoint.getLocalPeerDescriptor()])
|
|
25
|
-
node1.joinDht([entryPoint.getLocalPeerDescriptor()]).catch(() => {})
|
|
26
|
-
node2.joinDht([entryPoint.getLocalPeerDescriptor()]).catch(() => {})
|
|
27
|
-
await Promise.all([
|
|
28
|
-
node1.waitForNetworkConnectivity(),
|
|
29
|
-
node2.waitForNetworkConnectivity()
|
|
30
|
-
])
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
afterEach(async () => {
|
|
34
|
-
await entryPoint.stop()
|
|
35
|
-
await node1.stop()
|
|
36
|
-
await node2.stop()
|
|
37
|
-
simulator?.stop()
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('Node can store on three peer DHT', async () => {
|
|
41
|
-
const storedData1 = createMockDataEntry()
|
|
42
|
-
const storedData2 = createMockDataEntry()
|
|
43
|
-
// Here we effectively test that fetching "null" data doesn't take too long. A test timeout here indicates an issue.
|
|
44
|
-
await node1.fetchDataFromDht(toDhtAddress(storedData1.key))
|
|
45
|
-
await node2.fetchDataFromDht(toDhtAddress(storedData1.key))
|
|
46
|
-
|
|
47
|
-
await node1.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
|
|
48
|
-
await node2.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
|
|
49
|
-
await entryPoint.storeDataToDht(toDhtAddress(storedData2.key), storedData2.data!)
|
|
50
|
-
const foundData1 = await node1.fetchDataFromDht(toDhtAddress(storedData1.key))
|
|
51
|
-
const foundData2 = await node2.fetchDataFromDht(toDhtAddress(storedData1.key))
|
|
52
|
-
const foundData3 = await entryPoint.fetchDataFromDht(toDhtAddress(storedData2.key))
|
|
53
|
-
expectEqualData(foundData1[0], storedData1)
|
|
54
|
-
expectEqualData(foundData1[1], storedData1)
|
|
55
|
-
expectEqualData(foundData2[0], storedData1)
|
|
56
|
-
expectEqualData(foundData2[1], storedData1)
|
|
57
|
-
expectEqualData(foundData3[0], storedData2)
|
|
58
|
-
}, 30000)
|
|
59
|
-
})
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { createMockConnectionDhtNode } from '../utils/utils'
|
|
2
|
-
import { DhtNode } from '../../src/dht/DhtNode'
|
|
3
|
-
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
4
|
-
import { waitForCondition } from '@streamr/utils'
|
|
5
|
-
import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
|
|
6
|
-
import { toDhtAddress } from '../../src/identifiers'
|
|
7
|
-
|
|
8
|
-
describe('Storing data in DHT with two peers', () => {
|
|
9
|
-
|
|
10
|
-
let entryPoint: DhtNode
|
|
11
|
-
let otherNode: DhtNode
|
|
12
|
-
let simulator: Simulator | undefined
|
|
13
|
-
|
|
14
|
-
beforeEach(async () => {
|
|
15
|
-
simulator = new Simulator()
|
|
16
|
-
entryPoint = await createMockConnectionDhtNode(simulator)
|
|
17
|
-
otherNode = await createMockConnectionDhtNode(simulator)
|
|
18
|
-
|
|
19
|
-
await entryPoint.start()
|
|
20
|
-
await otherNode.start()
|
|
21
|
-
|
|
22
|
-
await entryPoint.joinDht([entryPoint.getLocalPeerDescriptor()])
|
|
23
|
-
await otherNode.joinDht([entryPoint.getLocalPeerDescriptor()])
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
afterEach(async () => {
|
|
27
|
-
await entryPoint.stop()
|
|
28
|
-
await otherNode.stop()
|
|
29
|
-
simulator?.stop()
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('Node can store on two peer DHT', async () => {
|
|
33
|
-
const storedData1 = createMockDataEntry()
|
|
34
|
-
const storedData2 = createMockDataEntry()
|
|
35
|
-
await otherNode.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
|
|
36
|
-
await entryPoint.storeDataToDht(toDhtAddress(storedData2.key), storedData2.data!)
|
|
37
|
-
const foundData1 = await otherNode.fetchDataFromDht(toDhtAddress(storedData1.key))
|
|
38
|
-
const foundData2 = await entryPoint.fetchDataFromDht(toDhtAddress(storedData2.key))
|
|
39
|
-
expectEqualData(foundData1[0], storedData1)
|
|
40
|
-
expectEqualData(foundData2[0], storedData2)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('Can store on one peer DHT', async () => {
|
|
44
|
-
await otherNode.stop()
|
|
45
|
-
await waitForCondition(() => entryPoint.getNeighborCount() === 0)
|
|
46
|
-
const storedData = createMockDataEntry()
|
|
47
|
-
await entryPoint.storeDataToDht(toDhtAddress(storedData.key), storedData.data!)
|
|
48
|
-
const foundData = await entryPoint.fetchDataFromDht(toDhtAddress(storedData.key))
|
|
49
|
-
expectEqualData(foundData[0], storedData)
|
|
50
|
-
}, 60000)
|
|
51
|
-
})
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { RpcCommunicator } from '@streamr/proto-rpc'
|
|
2
|
-
import {
|
|
3
|
-
StoreDataRequest,
|
|
4
|
-
StoreDataResponse
|
|
5
|
-
} from '../../generated/packages/dht/protos/DhtRpc'
|
|
6
|
-
import { createMockPeerDescriptor, mockStoreRpc } from '../utils/utils'
|
|
7
|
-
import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
|
|
8
|
-
import { StoreRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
|
|
9
|
-
import { StoreRpcRemote } from '../../src/dht/store/StoreRpcRemote'
|
|
10
|
-
import { createMockDataEntry } from '../utils/mock/mockDataEntry'
|
|
11
|
-
import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
|
|
12
|
-
import { randomDhtAddress, toNodeId, toDhtAddressRaw } from '../../src/identifiers'
|
|
13
|
-
|
|
14
|
-
describe('StoreRpcRemote', () => {
|
|
15
|
-
|
|
16
|
-
let rpcRemote: StoreRpcRemote
|
|
17
|
-
let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
|
|
18
|
-
let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
|
|
19
|
-
const clientPeerDescriptor = createMockPeerDescriptor()
|
|
20
|
-
const serverPeerDescriptor = createMockPeerDescriptor()
|
|
21
|
-
const data = createMockDataEntry()
|
|
22
|
-
const request: StoreDataRequest = {
|
|
23
|
-
key: data.key,
|
|
24
|
-
data: data.data,
|
|
25
|
-
creator: toDhtAddressRaw(randomDhtAddress()),
|
|
26
|
-
ttl: 10
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
clientRpcCommunicator = new RpcCommunicator()
|
|
31
|
-
serverRpcCommunicator = new RpcCommunicator()
|
|
32
|
-
serverRpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData', mockStoreRpc.storeData)
|
|
33
|
-
clientRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
|
|
34
|
-
serverRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
|
|
35
|
-
})
|
|
36
|
-
serverRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
|
|
37
|
-
clientRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
|
|
38
|
-
})
|
|
39
|
-
rpcRemote = new StoreRpcRemote(clientPeerDescriptor, serverPeerDescriptor, clientRpcCommunicator, StoreRpcClient)
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('storeData happy path', async () => {
|
|
43
|
-
await expect(rpcRemote.storeData(request)).toResolve()
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
it('storeData rejects', async () => {
|
|
47
|
-
serverRpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData', mockStoreRpc.throwStoreDataError)
|
|
48
|
-
await expect(rpcRemote.storeData(request)).rejects.toThrowError(
|
|
49
|
-
'Could not store data to'
|
|
50
|
-
+ ` ${toNodeId(serverPeerDescriptor)} from ${toNodeId(clientPeerDescriptor)}`
|
|
51
|
-
+ ' Error: Mock'
|
|
52
|
-
)
|
|
53
|
-
})
|
|
54
|
-
})
|