public int getP2pTcpPort() { return networkRunner.getNetwork().getLocalPeerInfo().getPort(); } }
public int getP2pUdpPort() { return networkRunner.getNetwork().getDiscoverySocketAddress().getPort(); }
private PeerConnection mockPeerConnection() { return mockPeerConnection(BytesValue.fromHexString("0x00")); }
@Test public void startStopPeerDiscoveryAgent() { final SECP256K1.KeyPair keyPair = SECP256K1.KeyPair.generate(); try (final NettyP2PNetwork service = new NettyP2PNetwork( vertx, keyPair, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { service.run(); service.stop(); service.run(); } }
@Test public void createPeerDiscoveryAgent_NoActivePeers() { final SECP256K1.KeyPair keyPair = SECP256K1.KeyPair.generate(); try (final NettyP2PNetwork agent = new NettyP2PNetwork( vertx, keyPair, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { assertTrue(agent.getDiscoveryPeers().isEmpty()); assertEquals(0, agent.getPeers().size()); } } }
@Test(expected = IllegalArgumentException.class) public void createPeerDiscoveryAgent_NullKeyPair() throws IOException { try (final P2PNetwork broken = new NettyP2PNetwork( vertx, null, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { Assertions.fail("Expected Exception"); } }
@Test public void checkMaintainedConnectionPeersDoesntReconnectConnectedPeers() { final NettyP2PNetwork network = spy(mockNettyP2PNetwork()); final Peer peer = mockPeer(); verify(network, never()).connect(peer); assertThat(network.addMaintainConnectionPeer(peer)).isTrue(); verify(network, times(1)).connect(peer); { final CompletableFuture<PeerConnection> connection; connection = network.pendingConnections.remove(peer); assertThat(connection).isNotNull(); assertThat(connection.cancel(true)).isTrue(); } { final PeerConnection peerConnection = mockPeerConnection(peer.getId()); network.connections.registerConnection(peerConnection); network.checkMaintainedConnectionPeers(); verify(network, times(1)).connect(peer); } }
@Test public void shouldSendClientQuittingWhenNetworkStops() { final NettyP2PNetwork nettyP2PNetwork = mockNettyP2PNetwork(); final Peer peer = mockPeer(); final PeerConnection peerConnection = mockPeerConnection(); nettyP2PNetwork.connect(peer).complete(peerConnection); nettyP2PNetwork.stop(); verify(peerConnection).disconnect(eq(DisconnectReason.CLIENT_QUITTING)); }
@Test public void checkMaintainedConnectionPeersTriesToConnect() { final NettyP2PNetwork network = spy(mockNettyP2PNetwork()); final Peer peer = mockPeer(); network.peerMaintainConnectionList.add(peer); network.checkMaintainedConnectionPeers(); verify(network, times(1)).connect(peer); }
@Test public void addingMaintainedNetworkPeerStartsConnection() { final NettyP2PNetwork network = spy(mockNettyP2PNetwork()); final Peer peer = mockPeer(); assertThat(network.addMaintainConnectionPeer(peer)).isTrue(); assertThat(network.peerMaintainConnectionList).contains(peer); verify(network, times(1)).connect(peer); }
private void writePantheonPortsToFile() { final Properties properties = new Properties(); if (networkRunner.getNetwork().isListening()) { properties.setProperty("discovery", String.valueOf(getP2pUdpPort())); properties.setProperty("p2p", String.valueOf(getP2pTcpPort())); } if (getJsonRpcPort().isPresent()) { properties.setProperty("json-rpc", String.valueOf(getJsonRpcPort().get())); } if (getWebsocketPort().isPresent()) { properties.setProperty("ws-rpc", String.valueOf(getWebsocketPort().get())); } if (getMetricsPort().isPresent()) { properties.setProperty("metrics", String.valueOf(getMetricsPort().get())); } final File portsFile = new File(dataDir.toFile(), "pantheon.ports"); portsFile.deleteOnExit(); try (final FileOutputStream fileOutputStream = new FileOutputStream(portsFile)) { properties.store( fileOutputStream, "This file contains the ports used by the running instance of Pantheon. This file will be deleted after the node is shutdown."); } catch (final Exception e) { LOG.warn("Error writing ports file", e); } }
@Test public void shouldFailIfP2pDisabled() { when(p2pNetwork.getPeers()).thenThrow(new P2pDisabledException("P2P disabled.")); final JsonRpcRequest request = adminPeers(); final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), JsonRpcError.P2P_DISABLED); assertThat(adminPeers.response(request)).isEqualToComparingFieldByField(expectedResponse); }
@Test public void shouldFailWhenP2pDisabled() { when(p2pNetwork.getNodeWhitelistController()) .thenThrow(new P2pDisabledException("P2P disabled.")); final JsonRpcRequest request = buildRequest(); final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), JsonRpcError.P2P_DISABLED); assertThat(method.response(request)).isEqualToComparingFieldByField(expectedResponse); }
@Test public void shouldntAttemptNewConnectionToPendingPeer() { final NettyP2PNetwork nettyP2PNetwork = mockNettyP2PNetwork(); final Peer peer = mockPeer(); final CompletableFuture<PeerConnection> connectingFuture = nettyP2PNetwork.connect(peer); assertThat(nettyP2PNetwork.connect(peer)).isEqualTo(connectingFuture); }
@Test public void addingRepeatMaintainedPeersReturnsFalse() { final NettyP2PNetwork network = mockNettyP2PNetwork(); final Peer peer = mockPeer(); assertThat(network.addMaintainConnectionPeer(peer)).isTrue(); assertThat(network.addMaintainConnectionPeer(peer)).isFalse(); }
@Override public void close() throws Exception { networkRunner.stop(); networkRunner.awaitStop(); exec.shutdown(); try { jsonRpc.ifPresent(service -> service.stop().join()); websocketRpc.ifPresent(service -> service.stop().join()); metrics.ifPresent(service -> service.stop().join()); } finally { try { exec.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); } finally { try { vertx.close(); } finally { pantheonController.close(); } } } }
@Test public void startDiscoveryAgentBackToBack() { final SECP256K1.KeyPair keyPair = SECP256K1.KeyPair.generate(); try (final NettyP2PNetwork service1 = new NettyP2PNetwork( vertx, keyPair, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault())); final NettyP2PNetwork service2 = new NettyP2PNetwork( vertx, keyPair, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { service1.run(); service1.stop(); service2.run(); service2.stop(); } }
@Test public void checkMaintainedConnectionPeersDoesntReconnectPendingPeers() { final NettyP2PNetwork network = spy(mockNettyP2PNetwork()); final Peer peer = mockPeer(); network.pendingConnections.put(peer, new CompletableFuture<>()); network.checkMaintainedConnectionPeers(); verify(network, times(0)).connect(peer); }
@Test public void shouldFailWhenP2pDisabled() { when(p2pNetwork.getNodeWhitelistController()) .thenThrow(new P2pDisabledException("P2P disabled.")); final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode2, enode3)); ; final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), JsonRpcError.P2P_DISABLED); assertThat(method.response(request)).isEqualToComparingFieldByField(expectedResponse); }
@Test public void shouldFailWhenP2pDisabled() { when(p2pNetwork.getNodeWhitelistController()) .thenThrow(new P2pDisabledException("P2P disabled.")); final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode2, enode3)); final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), JsonRpcError.P2P_DISABLED); assertThat(method.response(request)).isEqualToComparingFieldByField(expectedResponse); }