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

[PAN-2577] Integration Integration test(s) on p2p of 'net_services' #1402

Merged
merged 38 commits into from
May 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
cc5a721
~
smatthewenglish May 13, 2019
39cdc41
hkl
smatthewenglish May 13, 2019
978f266
sean carter vol 2
smatthewenglish May 13, 2019
69b00a0
hkl II
smatthewenglish May 13, 2019
3d9dfca
hkl III
smatthewenglish May 13, 2019
d3e9ade
~
smatthewenglish May 13, 2019
f7425ae
!!
smatthewenglish May 13, 2019
8ceafb9
~
smatthewenglish May 13, 2019
07199b1
update
smatthewenglish May 13, 2019
3fef219
~
smatthewenglish May 14, 2019
c874431
~
smatthewenglish May 14, 2019
22092fe
x
smatthewenglish May 14, 2019
2ece452
Z
smatthewenglish May 14, 2019
046555f
InetAddresses
smatthewenglish May 14, 2019
7749958
~
smatthewenglish May 14, 2019
e7aad8b
update
smatthewenglish May 14, 2019
c886926
~
smatthewenglish May 14, 2019
bdf34a9
comment
smatthewenglish May 14, 2019
1339489
d
smatthewenglish May 14, 2019
6d70289
update
smatthewenglish May 14, 2019
c3857d7
ud
smatthewenglish May 15, 2019
370ca35
xd 1
smatthewenglish May 15, 2019
8c9c34b
shouldNotDisplayDisabledServices
smatthewenglish May 15, 2019
9098430
~
smatthewenglish May 15, 2019
674eeb0
netServicesOnlyJsonRpcEnabled
smatthewenglish May 15, 2019
04682b7
~
smatthewenglish May 15, 2019
aa0b78a
x
smatthewenglish May 15, 2019
1e1bdcc
setPushEnabled
smatthewenglish May 15, 2019
f51b1c2
PIE-1606
smatthewenglish May 16, 2019
00456aa
x
smatthewenglish May 16, 2019
6aecd20
x
smatthewenglish May 16, 2019
2327a71
c
smatthewenglish May 16, 2019
308f9df
bvb
smatthewenglish May 16, 2019
8369f3b
customNet
smatthewenglish May 16, 2019
22cb9f2
netServices
smatthewenglish May 16, 2019
9d203b9
customNet
smatthewenglish May 17, 2019
bfd2078
999
smatthewenglish May 17, 2019
048343f
Merge branch 'master' into net_services
smatthewenglish May 17, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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();
smatthewenglish marked this conversation as resolved.
Show resolved Hide resolved
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");
smatthewenglish marked this conversation as resolved.
Show resolved Hide resolved
nodeB = pantheon.createArchiveNodeNetServicesDisabled("nodeB");
noDiscoveryCluster.start(nodeA, nodeB);

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