diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/permissioning/PermissionedNodeBuilder.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/permissioning/PermissionedNodeBuilder.java index 456a44a6603..3233f1f36a2 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/permissioning/PermissionedNodeBuilder.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/permissioning/PermissionedNodeBuilder.java @@ -17,7 +17,6 @@ import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toList; -import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration; import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApis; import org.hyperledger.besu.ethereum.p2p.peers.EnodeURLImpl; @@ -25,7 +24,6 @@ import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor.ALLOWLIST_TYPE; import org.hyperledger.besu.ethereum.permissioning.LocalPermissioningConfiguration; import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration; -import org.hyperledger.besu.ethereum.permissioning.SmartContractPermissioningConfiguration; import org.hyperledger.besu.plugin.data.EnodeURL; import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode; import org.hyperledger.besu.tests.acceptance.dsl.node.Node; @@ -62,13 +60,6 @@ public class PermissionedNodeBuilder { private Path localConfigAccountsPermissioningFile = null; private Collection localConfigPermittedAccounts = null; - private boolean nodeSmartContractPermissioningEnabled = false; - private String nodePermissioningSmartContractAddress = null; - private int nodePermissioningSmartContractInterfaceVersion = 1; - - private boolean accountSmartContractPermissioningEnabled = false; - private String accountPermissioningSmartContractAddress = null; - private List staticNodes = new ArrayList<>(); private boolean isDnsEnabled = false; private boolean mining = true; @@ -122,25 +113,6 @@ public PermissionedNodeBuilder accountsPermittedInConfig(final List acco return this; } - public PermissionedNodeBuilder nodesContractEnabled(final String address) { - this.nodeSmartContractPermissioningEnabled = true; - this.nodePermissioningSmartContractAddress = address; - return this; - } - - public PermissionedNodeBuilder nodesContractV2Enabled(final String address) { - this.nodeSmartContractPermissioningEnabled = true; - this.nodePermissioningSmartContractAddress = address; - this.nodePermissioningSmartContractInterfaceVersion = 2; - return this; - } - - public PermissionedNodeBuilder accountsContractEnabled(final String address) { - this.accountSmartContractPermissioningEnabled = true; - this.accountPermissioningSmartContractAddress = address; - return this; - } - public PermissionedNodeBuilder staticNodes(final List staticNodes) { this.staticNodes = staticNodes; return this; @@ -172,13 +144,8 @@ public BesuNode build() { localPermConfig = Optional.of(localConfigPermissioningConfiguration()); } - Optional smartContractPermConfig = Optional.empty(); - if (nodeSmartContractPermissioningEnabled || accountSmartContractPermissioningEnabled) { - smartContractPermConfig = Optional.of(smartContractPermissioningConfiguration()); - } - final PermissioningConfiguration permissioningConfiguration = - new PermissioningConfiguration(localPermConfig, smartContractPermConfig); + new PermissioningConfiguration(localPermConfig, Optional.empty()); final BesuNodeConfigurationBuilder builder = new BesuNodeConfigurationBuilder(); builder @@ -251,26 +218,6 @@ private LocalPermissioningConfiguration localConfigPermissioningConfiguration() return localPermissioningConfiguration; } - private SmartContractPermissioningConfiguration smartContractPermissioningConfiguration() { - SmartContractPermissioningConfiguration config = - SmartContractPermissioningConfiguration.createDefault(); - if (nodePermissioningSmartContractAddress != null) { - config.setNodeSmartContractAddress( - Address.fromHexString(nodePermissioningSmartContractAddress)); - config.setSmartContractNodeAllowlistEnabled(true); - } - - if (accountPermissioningSmartContractAddress != null) { - config.setAccountSmartContractAddress( - Address.fromHexString(accountPermissioningSmartContractAddress)); - config.setSmartContractAccountAllowlistEnabled(true); - } - - config.setNodeSmartContractInterfaceVersion(nodePermissioningSmartContractInterfaceVersion); - - return config; - } - private Path createTemporaryPermissionsFile() { final File tempFile; try { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/PermissionsOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/PermissionsOptionsTest.java index 59f2c1acd00..6d62b5693d9 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/PermissionsOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/PermissionsOptionsTest.java @@ -19,11 +19,9 @@ import static org.mockito.Mockito.verify; import org.hyperledger.besu.cli.CommandTestAbstract; -import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.p2p.peers.EnodeURLImpl; import org.hyperledger.besu.ethereum.permissioning.LocalPermissioningConfiguration; import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration; -import org.hyperledger.besu.ethereum.permissioning.SmartContractPermissioningConfiguration; import org.hyperledger.besu.plugin.data.EnodeURL; import java.io.IOException; @@ -83,218 +81,6 @@ public void errorIsRaisedIfStaticNodesAreNotAllowed(final @TempDir Path testFold .contains(staticNodeURI.toString(), "not in nodes-allowlist"); } - @Test - public void nodePermissionsSmartContractWithoutOptionMustError() { - parseCommand("--permissions-nodes-contract-address"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)) - .startsWith("Missing required parameter for option '--permissions-nodes-contract-address'"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsEnabledWithoutContractAddressMustError() { - parseCommand("--permissions-nodes-contract-enabled"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)) - .contains("No node permissioning contract address specified"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsEnabledWithInvalidContractAddressMustError() { - parseCommand( - "--permissions-nodes-contract-enabled", - "--permissions-nodes-contract-address", - "invalid-smart-contract-address"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)).contains("Invalid value"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsEnabledWithTooShortContractAddressMustError() { - parseCommand( - "--permissions-nodes-contract-enabled", "--permissions-nodes-contract-address", "0x1234"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)).contains("Invalid value"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsSmartContractMustUseOption() { - - final String smartContractAddress = "0x0000000000000000000000000000000000001234"; - - parseCommand( - "--permissions-nodes-contract-enabled", - "--permissions-nodes-contract-address", - smartContractAddress); - final SmartContractPermissioningConfiguration smartContractPermissioningConfiguration = - new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString(smartContractAddress)); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(true); - - verify(mockRunnerBuilder) - .permissioningConfiguration(permissioningConfigurationArgumentCaptor.capture()); - verify(mockRunnerBuilder).build(); - - final PermissioningConfiguration config = - permissioningConfigurationArgumentCaptor.getValue().get(); - assertThat(config.getSmartContractConfig().get()) - .usingRecursiveComparison() - .isEqualTo(smartContractPermissioningConfiguration); - - assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsContractVersionDefaultValue() { - final SmartContractPermissioningConfiguration expectedConfig = - new SmartContractPermissioningConfiguration(); - expectedConfig.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - expectedConfig.setSmartContractNodeAllowlistEnabled(true); - expectedConfig.setNodeSmartContractInterfaceVersion(1); - - parseCommand( - "--permissions-nodes-contract-enabled", - "--permissions-nodes-contract-address", - "0x0000000000000000000000000000000000001234"); - - verify(mockRunnerBuilder) - .permissioningConfiguration(permissioningConfigurationArgumentCaptor.capture()); - verify(mockRunnerBuilder).build(); - - final PermissioningConfiguration config = - permissioningConfigurationArgumentCaptor.getValue().get(); - assertThat(config.getSmartContractConfig().get()) - .usingRecursiveComparison() - .isEqualTo(expectedConfig); - - assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void nodePermissionsContractVersionSetsValue() { - final SmartContractPermissioningConfiguration expectedConfig = - new SmartContractPermissioningConfiguration(); - expectedConfig.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - expectedConfig.setSmartContractNodeAllowlistEnabled(true); - expectedConfig.setNodeSmartContractInterfaceVersion(2); - - parseCommand( - "--permissions-nodes-contract-enabled", - "--permissions-nodes-contract-address", - "0x0000000000000000000000000000000000001234", - "--permissions-nodes-contract-version", - "2"); - - verify(mockRunnerBuilder) - .permissioningConfiguration(permissioningConfigurationArgumentCaptor.capture()); - verify(mockRunnerBuilder).build(); - - final PermissioningConfiguration config = - permissioningConfigurationArgumentCaptor.getValue().get(); - assertThat(config.getSmartContractConfig().get()) - .usingRecursiveComparison() - .isEqualTo(expectedConfig); - - assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void accountPermissionsSmartContractWithoutOptionMustError() { - parseCommand("--permissions-accounts-contract-address"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)) - .startsWith( - "Missing required parameter for option '--permissions-accounts-contract-address'"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void accountPermissionsEnabledWithoutContractAddressMustError() { - parseCommand("--permissions-accounts-contract-enabled"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)) - .contains("No account permissioning contract address specified"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void accountPermissionsEnabledWithInvalidContractAddressMustError() { - parseCommand( - "--permissions-accounts-contract-enabled", - "--permissions-accounts-contract-address", - "invalid-smart-contract-address"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)).contains("Invalid value"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void accountPermissionsEnabledWithTooShortContractAddressMustError() { - parseCommand( - "--permissions-accounts-contract-enabled", - "--permissions-accounts-contract-address", - "0x1234"); - - Mockito.verifyNoInteractions(mockRunnerBuilder); - - assertThat(commandErrorOutput.toString(UTF_8)).contains("Invalid value"); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - - @Test - public void accountPermissionsSmartContractMustUseOption() { - final String smartContractAddress = "0x0000000000000000000000000000000000001234"; - - parseCommand( - "--permissions-accounts-contract-enabled", - "--permissions-accounts-contract-address", - smartContractAddress); - final SmartContractPermissioningConfiguration smartContractPermissioningConfiguration = - new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setAccountSmartContractAddress( - Address.fromHexString(smartContractAddress)); - smartContractPermissioningConfiguration.setSmartContractAccountAllowlistEnabled(true); - - verify(mockRunnerBuilder) - .permissioningConfiguration(permissioningConfigurationArgumentCaptor.capture()); - final PermissioningConfiguration permissioningConfiguration = - permissioningConfigurationArgumentCaptor.getValue().get(); - assertThat(permissioningConfiguration.getSmartContractConfig()).isPresent(); - - final SmartContractPermissioningConfiguration effectiveSmartContractConfig = - permissioningConfiguration.getSmartContractConfig().get(); - assertThat(effectiveSmartContractConfig.isSmartContractAccountAllowlistEnabled()).isTrue(); - assertThat(effectiveSmartContractConfig.getAccountSmartContractAddress()) - .isEqualTo(Address.fromHexString(smartContractAddress)); - - assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - } - @Test public void nodePermissioningTomlPathWithoutOptionMustDisplayUsage() { parseCommand("--permissions-nodes-config-file"); diff --git a/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/account/AccountPermissioningControllerFactoryTest.java b/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/account/AccountPermissioningControllerFactoryTest.java index 4d6f0d06825..6fd47f538a7 100644 --- a/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/account/AccountPermissioningControllerFactoryTest.java +++ b/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/account/AccountPermissioningControllerFactoryTest.java @@ -16,14 +16,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.fail; -import static org.assertj.core.api.ThrowableAssert.catchThrowable; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.permissioning.LocalPermissioningConfiguration; import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration; -import org.hyperledger.besu.ethereum.permissioning.SmartContractPermissioningConfiguration; import org.hyperledger.besu.ethereum.transaction.TransactionSimulator; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; import org.hyperledger.besu.plugin.services.MetricsSystem; @@ -94,92 +90,6 @@ public void createLocalConfigOnlyControllerShouldReturnExpectedController() { assertThat(controller.get().getTransactionSmartContractPermissioningController()).isEmpty(); } - @Test - public void createOnchainConfigWithAccountPermissioningDisabledShouldReturnEmpty() { - SmartContractPermissioningConfiguration onchainConfig = - SmartContractPermissioningConfiguration.createDefault(); - assertThat(onchainConfig.isSmartContractAccountAllowlistEnabled()).isFalse(); - - PermissioningConfiguration permissioningConfiguration = - new PermissioningConfiguration(Optional.empty(), Optional.of(onchainConfig)); - - Optional controller = - AccountPermissioningControllerFactory.create( - permissioningConfiguration, - transactionSimulator, - metricsSystem, - Collections.emptyList()); - - Assertions.assertThat(controller).isEmpty(); - } - - @Test - public void createOnchainConfigOnlyControllerShouldReturnExpectedController() { - SmartContractPermissioningConfiguration onchainConfig = onchainConfig(); - assertThat(onchainConfig.isSmartContractAccountAllowlistEnabled()).isTrue(); - - PermissioningConfiguration permissioningConfiguration = - new PermissioningConfiguration(Optional.empty(), Optional.of(onchainConfig)); - - Optional controller = - AccountPermissioningControllerFactory.create( - permissioningConfiguration, - transactionSimulator, - metricsSystem, - Collections.emptyList()); - - Assertions.assertThat(controller).isNotEmpty(); - assertThat(controller.get().getAccountLocalConfigPermissioningController()).isEmpty(); - assertThat(controller.get().getTransactionSmartContractPermissioningController()).isNotEmpty(); - } - - @Test - public void createOnchainShouldFailIfValidationFails() { - SmartContractPermissioningConfiguration onchainConfig = onchainConfig(); - assertThat(onchainConfig.isSmartContractAccountAllowlistEnabled()).isTrue(); - - PermissioningConfiguration permissioningConfiguration = - new PermissioningConfiguration(Optional.empty(), Optional.of(onchainConfig)); - - when(transactionSimulator.processAtHead(any())).thenThrow(new RuntimeException()); - - final Throwable thrown = - catchThrowable( - () -> - AccountPermissioningControllerFactory.create( - permissioningConfiguration, - transactionSimulator, - metricsSystem, - Collections.emptyList())); - - assertThat(thrown) - .isInstanceOf(IllegalStateException.class) - .hasMessage("Error validating onchain account permissioning smart contract configuration"); - } - - @Test - public void createLocalAndOnchainControllerShouldReturnExpectedControllers() { - LocalPermissioningConfiguration localConfig = localConfig(); - assertThat(localConfig.isAccountAllowlistEnabled()).isTrue(); - - SmartContractPermissioningConfiguration onchainConfig = onchainConfig(); - assertThat(onchainConfig.isSmartContractAccountAllowlistEnabled()).isTrue(); - - PermissioningConfiguration permissioningConfiguration = - new PermissioningConfiguration(Optional.of(localConfig), Optional.of(onchainConfig)); - - Optional controller = - AccountPermissioningControllerFactory.create( - permissioningConfiguration, - transactionSimulator, - metricsSystem, - Collections.emptyList()); - - Assertions.assertThat(controller).isNotEmpty(); - assertThat(controller.get().getAccountLocalConfigPermissioningController()).isNotEmpty(); - assertThat(controller.get().getTransactionSmartContractPermissioningController()).isNotEmpty(); - } - private LocalPermissioningConfiguration localConfig() { LocalPermissioningConfiguration localPermissioningConfiguration = LocalPermissioningConfiguration.createDefault(); @@ -190,15 +100,6 @@ private LocalPermissioningConfiguration localConfig() { return localPermissioningConfiguration; } - private SmartContractPermissioningConfiguration onchainConfig() { - SmartContractPermissioningConfiguration onchainPermissioningConfiguration = - SmartContractPermissioningConfiguration.createDefault(); - onchainPermissioningConfiguration.setAccountSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000008888")); - onchainPermissioningConfiguration.setSmartContractAccountAllowlistEnabled(true); - return onchainPermissioningConfiguration; - } - private File createTempFile() { try { File file = File.createTempFile("test", "test"); diff --git a/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/node/NodePermissioningControllerFactoryTest.java b/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/node/NodePermissioningControllerFactoryTest.java index b6b310ea324..b4ec6bcfb7b 100644 --- a/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/node/NodePermissioningControllerFactoryTest.java +++ b/ethereum/permissioning/src/test/java/org/hyperledger/besu/ethereum/permissioning/node/NodePermissioningControllerFactoryTest.java @@ -15,20 +15,16 @@ package org.hyperledger.besu.ethereum.permissioning.node; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.catchThrowable; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; -import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.chain.Blockchain; import org.hyperledger.besu.ethereum.core.Synchronizer; import org.hyperledger.besu.ethereum.p2p.peers.EnodeURLImpl; import org.hyperledger.besu.ethereum.permissioning.LocalPermissioningConfiguration; import org.hyperledger.besu.ethereum.permissioning.NodeLocalConfigPermissioningController; import org.hyperledger.besu.ethereum.permissioning.NodePermissioningControllerFactory; -import org.hyperledger.besu.ethereum.permissioning.NodeSmartContractPermissioningController; import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration; -import org.hyperledger.besu.ethereum.permissioning.SmartContractPermissioningConfiguration; import org.hyperledger.besu.ethereum.transaction.TransactionSimulator; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; import org.hyperledger.besu.plugin.data.EnodeURL; @@ -60,7 +56,6 @@ public class NodePermissioningControllerFactoryTest { Collection bootnodes = Collections.emptyList(); EnodeURL selfEnode = EnodeURLImpl.fromString(enode); LocalPermissioningConfiguration localPermissioningConfig; - SmartContractPermissioningConfiguration smartContractPermissioningConfiguration; PermissioningConfiguration config; @BeforeEach @@ -69,7 +64,7 @@ public void before() { } @Test - public void testCreateWithNeitherPermissioningEnabled() { + public void testCreateWithNoPermissioningEnabled() { config = new PermissioningConfiguration(Optional.empty(), Optional.empty()); NodePermissioningControllerFactory factory = new NodePermissioningControllerFactory(); NodePermissioningController controller = @@ -88,36 +83,6 @@ public void testCreateWithNeitherPermissioningEnabled() { assertThat(controller.getSyncStatusNodePermissioningProvider()).isNotPresent(); } - @Test - public void testCreateWithSmartContractNodePermissioningEnabledOnly() { - smartContractPermissioningConfiguration = new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(true); - config = - new PermissioningConfiguration( - Optional.empty(), Optional.of(smartContractPermissioningConfiguration)); - - NodePermissioningControllerFactory factory = new NodePermissioningControllerFactory(); - NodePermissioningController controller = - factory.create( - config, - synchronizer, - bootnodes, - selfEnode.getNodeId(), - transactionSimulator, - new NoOpMetricsSystem(), - blockchain, - Collections.emptyList()); - - List providers = controller.getProviders(); - assertThat(providers.size()).isEqualTo(1); - - NodeConnectionPermissioningProvider p1 = providers.get(0); - assertThat(p1).isInstanceOf(NodeSmartContractPermissioningController.class); - assertThat(controller.getSyncStatusNodePermissioningProvider()).isEmpty(); - } - @Test public void testCreateWithLocalNodePermissioningEnabledOnly() { localPermissioningConfig = LocalPermissioningConfiguration.createDefault(); @@ -147,20 +112,13 @@ public void testCreateWithLocalNodePermissioningEnabledOnly() { } @Test - public void - testCreateWithLocalNodePermissioningEnabledAndSmartContractPresentButDisabledAndBootnode() { - smartContractPermissioningConfiguration = new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(false); + public void testCreateWithLocalNodePermissioningEnabledAndBootnode() { final Collection fixedNodes = Collections.singleton(selfEnode); localPermissioningConfig = LocalPermissioningConfiguration.createDefault(); localPermissioningConfig.setNodeAllowlist(Collections.emptyList()); localPermissioningConfig.setNodePermissioningConfigFilePath("fake-file-path"); config = - new PermissioningConfiguration( - Optional.of(localPermissioningConfig), - Optional.of(smartContractPermissioningConfiguration)); + new PermissioningConfiguration(Optional.of(localPermissioningConfig), Optional.empty()); NodePermissioningControllerFactory factory = new NodePermissioningControllerFactory(); NodePermissioningController controller = @@ -181,104 +139,4 @@ public void testCreateWithLocalNodePermissioningEnabledOnly() { assertThat(p1).isInstanceOf(NodeLocalConfigPermissioningController.class); assertThat(controller.getSyncStatusNodePermissioningProvider()).isNotPresent(); } - - @Test - public void testCreateWithLocalNodeAndSmartContractPermissioningEnabled() { - localPermissioningConfig = LocalPermissioningConfiguration.createDefault(); - localPermissioningConfig.setNodeAllowlist(Collections.emptyList()); - localPermissioningConfig.setNodePermissioningConfigFilePath("fake-file-path"); - - smartContractPermissioningConfiguration = new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(true); - config = - new PermissioningConfiguration( - Optional.of(localPermissioningConfig), - Optional.of(smartContractPermissioningConfiguration)); - - NodePermissioningControllerFactory factory = new NodePermissioningControllerFactory(); - NodePermissioningController controller = - factory.create( - config, - synchronizer, - bootnodes, - selfEnode.getNodeId(), - transactionSimulator, - new NoOpMetricsSystem(), - blockchain, - Collections.emptyList()); - - List providers = controller.getProviders(); - assertThat(providers.size()).isEqualTo(2); - - NodeConnectionPermissioningProvider p1 = providers.get(0); - NodeConnectionPermissioningProvider p2 = providers.get(1); - if (p1.getClass() == NodeLocalConfigPermissioningController.class) { - assertThat(p2).isInstanceOf(NodeSmartContractPermissioningController.class); - } else { - assertThat(p2).isInstanceOf(NodeLocalConfigPermissioningController.class); - assertThat(p1).isInstanceOf(NodeSmartContractPermissioningController.class); - } - assertThat(controller.getSyncStatusNodePermissioningProvider()).isEmpty(); - } - - @Test - public void testCreateWithSmartContractNodePermissioningEnabledOnlyAndBootnode() { - final Collection fixedNodes = Collections.singleton(selfEnode); - - smartContractPermissioningConfiguration = new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(true); - config = - new PermissioningConfiguration( - Optional.empty(), Optional.of(smartContractPermissioningConfiguration)); - - NodePermissioningControllerFactory factory = new NodePermissioningControllerFactory(); - NodePermissioningController controller = - factory.create( - config, - synchronizer, - fixedNodes, - selfEnode.getNodeId(), - transactionSimulator, - new NoOpMetricsSystem(), - blockchain, - Collections.emptyList()); - - assertThat(controller.getSyncStatusNodePermissioningProvider()).isPresent(); - } - - @Test - public void createOnchainShouldFailIfValidationFails() { - smartContractPermissioningConfiguration = new SmartContractPermissioningConfiguration(); - smartContractPermissioningConfiguration.setNodeSmartContractAddress( - Address.fromHexString("0x0000000000000000000000000000000000001234")); - smartContractPermissioningConfiguration.setSmartContractNodeAllowlistEnabled(true); - config = - new PermissioningConfiguration( - Optional.empty(), Optional.of(smartContractPermissioningConfiguration)); - - when(transactionSimulator.processAtHead(any())).thenThrow(new RuntimeException()); - - final Throwable thrown = - catchThrowable( - () -> - new NodePermissioningControllerFactory() - .create( - config, - synchronizer, - bootnodes, - selfEnode.getNodeId(), - transactionSimulator, - new NoOpMetricsSystem(), - blockchain, - Collections.emptyList())); - - assertThat(thrown) - .isInstanceOf(IllegalStateException.class) - .hasMessage( - "Error: node permissioning contract at address 0x0000000000000000000000000000000000001234 does not match the expected interface version 1."); - } }