@Test public void whenAddNodesInputHasExistingNodeShouldReturnAddErrorExistingEntry() { controller.addNode(DefaultPeer.fromURI(enode1)); NodesWhitelistResult expected = new NodesWhitelistResult(NodesWhitelistResultType.ERROR_EXISTING_ENTRY); NodesWhitelistResult actualResult = controller.addNodes( Lists.newArrayList(DefaultPeer.fromURI(enode1), DefaultPeer.fromURI(enode2))); assertThat(actualResult).isEqualToComparingOnlyGivenFields(expected, "result"); }
@Test public void whenRemoveNodesInputHasDuplicateNodesShouldReturnErrorDuplicatedEntry() { NodesWhitelistResult expected = new NodesWhitelistResult(NodesWhitelistResultType.ERROR_DUPLICATED_ENTRY); NodesWhitelistResult actualResult = controller.removeNodes( Lists.newArrayList(DefaultPeer.fromURI(enode1), DefaultPeer.fromURI(enode1))); assertThat(actualResult).isEqualToComparingOnlyGivenFields(expected, "result"); } }
@Test public void whenAddNodesInputHasDuplicatedNodesShouldReturnDuplicatedEntryError() { NodesWhitelistResult expected = new NodesWhitelistResult(NodesWhitelistResultType.ERROR_DUPLICATED_ENTRY); NodesWhitelistResult actualResult = controller.addNodes( Arrays.asList(DefaultPeer.fromURI(enode1), DefaultPeer.fromURI(enode1))); assertThat(actualResult).isEqualToComparingOnlyGivenFields(expected, "result"); }
@Before public void setUp() { controller = new NodeWhitelistController(new PermissioningConfiguration()); }
@Test public void shouldReturnSuccessResponseWhenListSetAndEmpty() { final JsonRpcRequest request = buildRequest(); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), Lists.emptyList()); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.nodeWhitelistSet()).thenReturn(true); when(nodeWhitelistController.getNodesWhitelist()).thenReturn(buildNodesList()); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).nodeWhitelistSet(); verify(nodeWhitelistController, times(1)).getNodesWhitelist(); verifyNoMoreInteractions(nodeWhitelistController); }
@Test public void shouldReturnFailResponseWhenListNotSet() { final JsonRpcRequest request = buildRequest(); final JsonRpcResponse expected = new JsonRpcErrorResponse(request.getId(), JsonRpcError.NODE_WHITELIST_NOT_SET); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.nodeWhitelistSet()).thenReturn(false); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).nodeWhitelistSet(); verifyNoMoreInteractions(nodeWhitelistController); }
@Test public void whenRemoveNodesInputHasAbsentNodeShouldReturnRemoveErrorAbsentEntry() { NodesWhitelistResult expected = new NodesWhitelistResult(NodesWhitelistResultType.ERROR_ABSENT_ENTRY); NodesWhitelistResult actualResult = controller.removeNodes( Lists.newArrayList(DefaultPeer.fromURI(enode1), DefaultPeer.fromURI(enode2))); assertThat(actualResult).isEqualToComparingOnlyGivenFields(expected, "result"); }
@Test public void shouldAddSingleValidNode() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1)); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), JSON_SUCCESS); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.addNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.SUCCESS)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).addNodes(any()); verifyNoMoreInteractions(nodeWhitelistController); }
@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 shouldReturnSuccessResponseWhenListPopulated() { final JsonRpcRequest request = buildRequest(); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), Lists.newArrayList(enode1, enode2, enode3)); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.nodeWhitelistSet()).thenReturn(true); when(nodeWhitelistController.getNodesWhitelist()) .thenReturn(buildNodesList(enode1, enode2, enode3)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).nodeWhitelistSet(); verify(nodeWhitelistController, times(1)).getNodesWhitelist(); verifyNoMoreInteractions(nodeWhitelistController); }
@Test public void shouldRemoveSingleValidNode() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1)); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), SUCCESS_RESULT); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.removeNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.SUCCESS)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).removeNodes(any()); verifyNoMoreInteractions(nodeWhitelistController); }
@Test public void shouldAddMultipleValidNodes() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode2, enode3)); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), JSON_SUCCESS); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.addNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.SUCCESS)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).addNodes(any()); verifyNoMoreInteractions(nodeWhitelistController); }
@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 public void shouldRemoveMultipleValidNodes() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode2, enode3)); final JsonRpcResponse expected = new JsonRpcSuccessResponse(request.getId(), SUCCESS_RESULT); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.removeNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.SUCCESS)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); verify(nodeWhitelistController, times(1)).removeNodes(any()); verifyNoMoreInteractions(nodeWhitelistController); }
@Test public void whenRequestContainsDuplicatedNodesShouldReturnDuplicatedEntryError() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode1)); final JsonRpcResponse expected = new JsonRpcErrorResponse(request.getId(), JsonRpcError.NODE_WHITELIST_DUPLICATED_ENTRY); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.addNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.ERROR_DUPLICATED_ENTRY)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); }
@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 whenRequestContainsDuplicatedNodesShouldReturnDuplicatedEntryError() { final JsonRpcRequest request = buildRequest(Lists.newArrayList(enode1, enode1)); final JsonRpcResponse expected = new JsonRpcErrorResponse(request.getId(), JsonRpcError.NODE_WHITELIST_DUPLICATED_ENTRY); when(p2pNetwork.getNodeWhitelistController()).thenReturn(nodeWhitelistController); when(nodeWhitelistController.removeNodes(any())) .thenReturn(new NodesWhitelistResult(NodesWhitelistResultType.ERROR_DUPLICATED_ENTRY)); final JsonRpcResponse actual = method.response(request); assertThat(actual).isEqualToComparingFieldByFieldRecursively(expected); }
@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 shouldNotRespondToPingFromNonWhitelistedDiscoveryPeer() { final List<DiscoveryPeer> peers = createPeersInLastBucket(localPeer, 3); final DiscoveryPeer discoPeer = peers.get(0); final PeerBlacklist blacklist = new PeerBlacklist(); // don't add disco peer to whitelist PermissioningConfiguration config = PermissioningConfiguration.createDefault(); config.setNodeWhitelist(new ArrayList<>()); NodeWhitelistController nodeWhitelistController = new NodeWhitelistController(config); controller = getControllerBuilder() .peers(discoPeer) .blacklist(blacklist) .whitelist(nodeWhitelistController) .build(); final Packet pingPacket = mockPingPacket(peers.get(0), localPeer); controller.onMessage(pingPacket, peers.get(0)); assertThat(controller.getPeers()).doesNotContain(peers.get(0)); }
@Test(expected = IllegalArgumentException.class) public void createPeerDiscoveryAgent_NullHost() throws IOException { final SECP256K1.KeyPair keyPair = SECP256K1.KeyPair.generate(); final NetworkingConfiguration config = NetworkingConfiguration.create() .setDiscovery(DiscoveryConfiguration.create().setBindHost(null)); try (final P2PNetwork broken = new NettyP2PNetwork( vertx, keyPair, config, emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { Assertions.fail("Expected Exception"); } }