Skip to content

Commit

Permalink
Tessera Orion-mode privacy ATs (hyperledger#2166)
Browse files Browse the repository at this point in the history
* Refactored privacy ATs to use both Orion and Tessera.

Signed-off-by: Mark Terry <mark.terry@consensys.net>
  • Loading branch information
mark-terry authored Jun 2, 2021
1 parent 82dcdf2 commit 3e86423
Show file tree
Hide file tree
Showing 55 changed files with 1,131 additions and 236 deletions.
8 changes: 4 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ executors:
machine:
image: ubuntu-2004:202010-01

goquorum_executor:
xl_machine_executor:
machine:
image: ubuntu-2004:202101-01
resource_class: xlarge
Expand Down Expand Up @@ -175,14 +175,14 @@ jobs:

acceptanceTests:
parallelism: 6
executor: besu_executor_xl
executor: xl_machine_executor
steps:
- prepare
- attach_workspace:
at: ~/project
- run:
name: AcceptanceTests
no_output_timeout: 40m
no_output_timeout: 30m
command: |
CLASSNAMES=$(circleci tests glob "acceptance-tests/tests/src/test/java/**/*.java" \
| sed 's@.*/src/test/java/@@' \
Expand All @@ -197,7 +197,7 @@ jobs:

acceptanceTestsQuorum:
parallelism: 1
executor: goquorum_executor
executor: xl_machine_executor
steps:
- prepare
- attach_workspace:
Expand Down
2 changes: 2 additions & 0 deletions acceptance-tests/dsl/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,6 @@ dependencies {
implementation 'tech.pegasys.ethsigner.internal:ethsigner-core'
implementation 'tech.pegasys.signers.internal:signing-secp256k1-api'
implementation 'tech.pegasys.signers.internal:signing-secp256k1-impl'

implementation 'org.testcontainers:testcontainers'
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,33 @@
package org.hyperledger.besu.tests.acceptance.dsl.node.configuration.privacy;

import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.BesuNodeConfiguration;
import org.hyperledger.orion.testutil.OrionKeyConfiguration;
import org.hyperledger.enclave.testutil.EnclaveKeyConfiguration;

public class PrivacyNodeConfiguration {

private final int privacyAddress;
private final boolean isOnchainPrivacyGroupEnabled;
private final BesuNodeConfiguration besuConfig;
private final OrionKeyConfiguration orionConfig;
private final EnclaveKeyConfiguration keyConfig;
private final boolean isMultitenancyEnabled;

PrivacyNodeConfiguration(
final int privacyAddress,
final BesuNodeConfiguration besuConfig,
final OrionKeyConfiguration orionConfig) {
this(privacyAddress, false, false, besuConfig, orionConfig);
final EnclaveKeyConfiguration keyConfig) {
this(privacyAddress, false, false, besuConfig, keyConfig);
}

PrivacyNodeConfiguration(
final int privacyAddress,
final boolean isOnchainPrivacyGroupEnabled,
final boolean isMultitenancyEnabled,
final BesuNodeConfiguration besuConfig,
final OrionKeyConfiguration orionConfig) {
final EnclaveKeyConfiguration keyConfig) {
this.privacyAddress = privacyAddress;
this.isOnchainPrivacyGroupEnabled = isOnchainPrivacyGroupEnabled;
this.besuConfig = besuConfig;
this.orionConfig = orionConfig;
this.keyConfig = keyConfig;
this.isMultitenancyEnabled = isMultitenancyEnabled;
}

Expand All @@ -61,7 +61,7 @@ public BesuNodeConfiguration getBesuConfig() {
return besuConfig;
}

public OrionKeyConfiguration getOrionKeyConfig() {
return orionConfig;
public EnclaveKeyConfiguration getKeyConfig() {
return keyConfig;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationFactory;
import org.hyperledger.besu.tests.acceptance.dsl.privacy.PrivacyNode;
import org.hyperledger.besu.tests.acceptance.dsl.privacy.account.PrivacyAccount;
import org.hyperledger.orion.testutil.OrionKeyConfiguration;
import org.hyperledger.enclave.testutil.EnclaveKeyConfiguration;
import org.hyperledger.enclave.testutil.EnclaveType;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Optional;

import io.vertx.core.Vertx;
import org.testcontainers.containers.Network;

public class PrivacyNodeFactory {

Expand All @@ -37,17 +40,30 @@ public PrivacyNodeFactory(final Vertx vertx) {
this.vertx = vertx;
}

private PrivacyNode create(final PrivacyNodeConfiguration privacyNodeConfig) throws IOException {
return new PrivacyNode(privacyNodeConfig, vertx);
private PrivacyNode create(
final PrivacyNodeConfiguration privacyNodeConfig,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return new PrivacyNode(privacyNodeConfig, vertx, enclaveType, containerNetwork);
}

public PrivacyNode createPrivateTransactionEnabledMinerNode(
final String name, final PrivacyAccount privacyAccount) throws IOException {
return createPrivateTransactionEnabledMinerNode(name, privacyAccount, Address.PRIVACY);
final String name,
final PrivacyAccount privacyAccount,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return createPrivateTransactionEnabledMinerNode(
name, privacyAccount, Address.PRIVACY, enclaveType, containerNetwork);
}

public PrivacyNode createPrivateTransactionEnabledMinerNode(
final String name, final PrivacyAccount privacyAccount, final int privacyAddress)
final String name,
final PrivacyAccount privacyAccount,
final int privacyAddress,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return create(
new PrivacyNodeConfiguration(
Expand All @@ -60,17 +76,28 @@ public PrivacyNode createPrivateTransactionEnabledMinerNode(
.enablePrivateTransactions()
.keyFilePath(privacyAccount.getPrivateKeyPath())
.build(),
new OrionKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())));
new EnclaveKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())),
enclaveType,
containerNetwork);
}

public PrivacyNode createPrivateTransactionEnabledNode(
final String name, final PrivacyAccount privacyAccount) throws IOException {
return createPrivateTransactionEnabledNode(name, privacyAccount, Address.PRIVACY);
final String name,
final PrivacyAccount privacyAccount,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return createPrivateTransactionEnabledNode(
name, privacyAccount, Address.PRIVACY, enclaveType, containerNetwork);
}

public PrivacyNode createPrivateTransactionEnabledNode(
final String name, final PrivacyAccount privacyAccount, final int privacyAddress)
final String name,
final PrivacyAccount privacyAccount,
final int privacyAddress,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return create(
new PrivacyNodeConfiguration(
Expand All @@ -82,25 +109,39 @@ public PrivacyNode createPrivateTransactionEnabledNode(
.enablePrivateTransactions()
.webSocketEnabled()
.build(),
new OrionKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())));
new EnclaveKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())),
enclaveType,
containerNetwork);
}

public PrivacyNode createIbft2NodePrivacyMiningEnabled(
final String name, final PrivacyAccount privacyAccount) throws IOException {
return createIbft2NodePrivacyEnabled(name, privacyAccount, Address.PRIVACY, true);
final String name,
final PrivacyAccount privacyAccount,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return createIbft2NodePrivacyEnabled(
name, privacyAccount, Address.PRIVACY, true, enclaveType, containerNetwork);
}

public PrivacyNode createIbft2NodePrivacyEnabled(
final String name, final PrivacyAccount privacyAccount) throws IOException {
return createIbft2NodePrivacyEnabled(name, privacyAccount, Address.PRIVACY, false);
final String name,
final PrivacyAccount privacyAccount,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return createIbft2NodePrivacyEnabled(
name, privacyAccount, Address.PRIVACY, false, enclaveType, containerNetwork);
}

public PrivacyNode createIbft2NodePrivacyEnabled(
final String name,
final PrivacyAccount privacyAccount,
final int privacyAddress,
final boolean minerEnabled)
final boolean minerEnabled,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return create(
new PrivacyNodeConfiguration(
Expand All @@ -115,15 +156,19 @@ public PrivacyNode createIbft2NodePrivacyEnabled(
.keyFilePath(privacyAccount.getPrivateKeyPath())
.enablePrivateTransactions()
.build(),
new OrionKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())));
new EnclaveKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())),
enclaveType,
containerNetwork);
}

public PrivacyNode createOnChainPrivacyGroupEnabledMinerNode(
final String name,
final PrivacyAccount privacyAccount,
final int privacyAddress,
final boolean multiTenancyEnabled)
final boolean multiTenancyEnabled,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException, URISyntaxException {
final BesuNodeConfigurationBuilder besuNodeConfigurationBuilder =
new BesuNodeConfigurationBuilder();
Expand All @@ -144,15 +189,19 @@ public PrivacyNode createOnChainPrivacyGroupEnabledMinerNode(
.enablePrivateTransactions()
.keyFilePath(privacyAccount.getPrivateKeyPath())
.build(),
new OrionKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())));
new EnclaveKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())),
enclaveType,
containerNetwork);
}

public PrivacyNode createOnChainPrivacyGroupEnabledNode(
final String name,
final PrivacyAccount privacyAccount,
final int privacyAddress,
final boolean multiTenancyEnabled)
final boolean multiTenancyEnabled,
final EnclaveType enclaveType,
final Optional<Network> containerNetwork)
throws IOException {
return create(
new PrivacyNodeConfiguration(
Expand All @@ -166,7 +215,9 @@ public PrivacyNode createOnChainPrivacyGroupEnabledNode(
.enablePrivateTransactions()
.webSocketEnabled()
.build(),
new OrionKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())));
new EnclaveKeyConfiguration(
privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())),
enclaveType,
containerNetwork);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright 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.
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.besu.tests.acceptance.dsl.privacy;

import org.hyperledger.enclave.testutil.EnclaveType;

import java.util.Arrays;
import java.util.Collection;

import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public abstract class ParameterizedEnclaveTestBase extends PrivacyAcceptanceTestBase {
protected final EnclaveType enclaveType;

protected ParameterizedEnclaveTestBase(final EnclaveType enclaveType) {
this.enclaveType = enclaveType;
}

@Parameterized.Parameters(name = "{0}")
public static Collection<EnclaveType> enclaveTypes() {
return Arrays.asList(EnclaveType.values());
}
}
Loading

0 comments on commit 3e86423

Please sign in to comment.