Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
[PAN-2577] Integration Integration test(s) on p2p of 'net_services' (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
smatthewenglish authored May 17, 2019
1 parent 1037eb5 commit 8b26d3a
Show file tree
Hide file tree
Showing 10 changed files with 281 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2019 ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;

import static org.assertj.core.api.Assertions.assertThat;

import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import tech.pegasys.pantheon.util.NetworkUtility;

import java.util.Arrays;
import java.util.Map;

import com.google.common.net.InetAddresses;

public class ExpectNetServicesReturnsAllServicesAsActive implements Condition {

private final NetServicesTransaction transaction;

public ExpectNetServicesReturnsAllServicesAsActive(final NetServicesTransaction transaction) {
this.transaction = transaction;
}

@Override
public void verify(final Node node) {
final Map<String, Map<String, String>> result = node.execute(transaction);
assertThat(result.keySet())
.containsExactlyInAnyOrderElementsOf(Arrays.asList("p2p", "jsonrpc", "ws"));

assertThat(InetAddresses.isUriInetAddress(result.get("p2p").get("host"))).isTrue();
final int p2pPort = Integer.valueOf(result.get("p2p").get("port"));
assertThat(NetworkUtility.isValidPort(p2pPort)).isTrue();

assertThat(InetAddresses.isUriInetAddress(result.get("ws").get("host"))).isTrue();
final int wsPort = Integer.valueOf(result.get("ws").get("port"));
// TODO: Port should not be 0-valued. Refer to PAN-2703
assertThat(NetworkUtility.isValidPort(p2pPort) || wsPort == 0).isTrue();

assertThat(InetAddresses.isUriInetAddress(result.get("jsonrpc").get("host"))).isTrue();
final int jsonRpcPort = Integer.valueOf(result.get("jsonrpc").get("port"));
// TODO: Port should not be 0-valued. Refer to PAN-2703
assertThat(NetworkUtility.isValidPort(p2pPort) || jsonRpcPort == 0).isTrue();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2019 ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;

import static org.assertj.core.api.Assertions.assertThat;

import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import tech.pegasys.pantheon.util.NetworkUtility;

import java.util.Collections;
import java.util.Map;

import com.google.common.net.InetAddresses;

public class ExpectNetServicesReturnsOnlyJsonRpcActive implements Condition {

private final NetServicesTransaction transaction;

public ExpectNetServicesReturnsOnlyJsonRpcActive(final NetServicesTransaction transaction) {
this.transaction = transaction;
}

@Override
public void verify(final Node node) {
final Map<String, Map<String, String>> result = node.execute(transaction);
assertThat(result.keySet())
.containsExactlyInAnyOrderElementsOf(Collections.singletonList("jsonrpc"));

assertThat(InetAddresses.isUriInetAddress(result.get("jsonrpc").get("host"))).isTrue();
final int jsonrpcPort = Integer.valueOf(result.get("jsonrpc").get("port"));
// TODO: Port should not be 0-valued. Refer to PAN-2703
assertThat(NetworkUtility.isValidPort(jsonrpcPort) || jsonrpcPort == 0).isTrue();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.AwaitNetPeerCount;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.AwaitNetPeerCountException;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.ExpectNetServicesReturnsAllServicesAsActive;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.ExpectNetServicesReturnsOnlyJsonRpcActive;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.ExpectNetVersionConnectionException;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.ExpectNetVersionConnectionExceptionWithCause;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.ExpectNetVersionIsNotBlank;
Expand All @@ -32,6 +34,14 @@ public Net(final NetTransactions transactions) {
this.transactions = transactions;
}

public Condition netServicesAllActive() {
return new ExpectNetServicesReturnsAllServicesAsActive(transactions.netServices());
}

public Condition netServicesOnlyJsonRpcEnabled() {
return new ExpectNetServicesReturnsOnlyJsonRpcActive(transactions.netServices());
}

public Condition netVersion() {
return new ExpectNetVersionIsNotBlank(transactions.netVersion());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import tech.pegasys.pantheon.tests.acceptance.dsl.httptransaction.HttpTransaction;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.AdminJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.CliqueJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.CustomNetJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.EeaJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.IbftJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.JsonRequestFactories;
Expand Down Expand Up @@ -282,6 +283,7 @@ private JsonRequestFactories jsonRequestFactories() {
new PermissioningJsonRpcRequestFactory(web3jService),
new AdminJsonRpcRequestFactory(web3jService),
new EeaJsonRpcRequestFactory(web3jService),
new CustomNetJsonRpcRequestFactory(web3jService),
websocketService);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,30 @@ public PantheonNode createArchiveNodeWithDiscoveryDisabledAndAdmin(final String
.build());
}

public PantheonNode createArchiveNodeNetServicesEnabled(final String name) throws IOException {
// TODO: Enable metrics coverage in the acceptance tests. See PIE-1606
// final MetricsConfiguration metricsConfiguration = MetricsConfiguration.createDefault();
// metricsConfiguration.setEnabled(true);
// metricsConfiguration.setPort(0);
return create(
new PantheonFactoryConfigurationBuilder()
.name(name)
// .setMetricsConfiguration(metricsConfiguration)
.jsonRpcConfiguration(jsonRpcConfigWithAdmin())
.webSocketEnabled()
.p2pEnabled(true)
.build());
}

public PantheonNode createArchiveNodeNetServicesDisabled(final String name) throws IOException {
return create(
new PantheonFactoryConfigurationBuilder()
.name(name)
.jsonRpcConfiguration(jsonRpcConfigWithAdmin())
.p2pEnabled(false)
.build());
}

public PantheonNode createArchiveNodeWithAuthentication(final String name)
throws IOException, URISyntaxException {
return create(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright 2019 ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.transaction;

import java.util.Collections;
import java.util.Map;

import org.web3j.protocol.Web3jService;
import org.web3j.protocol.core.Request;
import org.web3j.protocol.core.Response;

public class CustomNetJsonRpcRequestFactory {

public static class NetServicesResponse extends Response<Map<String, Map<String, String>>> {}

private final Web3jService web3jService;

public CustomNetJsonRpcRequestFactory(final Web3jService web3jService) {
this.web3jService = web3jService;
}

public Request<?, NetServicesResponse> netServices() {
return new Request<>(
"net_services", Collections.emptyList(), web3jService, NetServicesResponse.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class JsonRequestFactories {
private final PermissioningJsonRpcRequestFactory perm;
private final AdminJsonRpcRequestFactory admin;
private final EeaJsonRpcRequestFactory eea;
private final CustomNetJsonRpcRequestFactory customNet;
private final Optional<WebSocketService> websocketService;

public JsonRequestFactories(
Expand All @@ -34,13 +35,15 @@ public JsonRequestFactories(
final PermissioningJsonRpcRequestFactory perm,
final AdminJsonRpcRequestFactory admin,
final EeaJsonRpcRequestFactory eea,
final CustomNetJsonRpcRequestFactory customNet,
final Optional<WebSocketService> websocketService) {
this.netEth = netEth;
this.clique = clique;
this.ibft = ibft;
this.perm = perm;
this.admin = admin;
this.eea = eea;
this.customNet = customNet;
this.websocketService = websocketService;
}

Expand Down Expand Up @@ -68,6 +71,10 @@ public AdminJsonRpcRequestFactory admin() {
return admin;
}

public CustomNetJsonRpcRequestFactory customNet() {
return customNet;
}

public EeaJsonRpcRequestFactory eea() {
return eea;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright 2019 ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net;

import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.CustomNetJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.JsonRequestFactories;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;

import java.util.Map;

import org.web3j.protocol.core.Request;

public class NetServicesTransaction implements Transaction<Map<String, Map<String, String>>> {

NetServicesTransaction() {}

@Override
public Map<String, Map<String, String>> execute(final JsonRequestFactories requestFactories) {
CustomNetJsonRpcRequestFactory.NetServicesResponse netServicesResponse = null;
try {
final CustomNetJsonRpcRequestFactory netServicesJsonRpcRequestFactory =
requestFactories.customNet();
final Request<?, CustomNetJsonRpcRequestFactory.NetServicesResponse> request =
netServicesJsonRpcRequestFactory.netServices();

netServicesResponse = request.send();
} catch (final Exception e) {
throw new RuntimeException(e);
}
return netServicesResponse.getResult();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ public NetVersionTransaction netVersion() {
return new NetVersionTransaction();
}

public NetServicesTransaction netServices() {
return new NetServicesTransaction();
}

public NetPeerCountTransaction peerCount() {
return new NetPeerCountTransaction();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2019 ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.jsonrpc;

import tech.pegasys.pantheon.tests.acceptance.dsl.AcceptanceTestBase;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster.Cluster;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster.ClusterConfiguration;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster.ClusterConfigurationBuilder;

import org.junit.Test;

public class NetServicesAcceptanceTest extends AcceptanceTestBase {

private Cluster noDiscoveryCluster;

private Node nodeA;
private Node nodeB;

@Test
public void shouldIndicateNetServicesEnabled() throws Exception {
final ClusterConfiguration clusterConfiguration =
new ClusterConfigurationBuilder().awaitPeerDiscovery(false).build();
noDiscoveryCluster = new Cluster(clusterConfiguration, net);
nodeA = pantheon.createArchiveNodeNetServicesEnabled("nodeA");
nodeB = pantheon.createArchiveNodeNetServicesEnabled("nodeB");
noDiscoveryCluster.start(nodeA, nodeB);

nodeA.verify(net.netServicesAllActive());
nodeB.verify(net.netServicesAllActive());
}

@Test
public void shouldNotDisplayDisabledServices() throws Exception {
final ClusterConfiguration clusterConfiguration =
new ClusterConfigurationBuilder().awaitPeerDiscovery(false).build();
noDiscoveryCluster = new Cluster(clusterConfiguration, net);
nodeA = pantheon.createArchiveNodeNetServicesDisabled("nodeA");
nodeB = pantheon.createArchiveNodeNetServicesDisabled("nodeB");
noDiscoveryCluster.start(nodeA, nodeB);

nodeA.verify(net.netServicesOnlyJsonRpcEnabled());
nodeB.verify(net.netServicesOnlyJsonRpcEnabled());
}
}

0 comments on commit 8b26d3a

Please sign in to comment.