From ab282c2c77269df51c041c0e0f6f962d754e0b66 Mon Sep 17 00:00:00 2001 From: ghubstan <36207203+ghubstan@users.noreply.github.com> Date: Sat, 19 Sep 2020 15:41:12 -0300 Subject: [PATCH] Reduce apitest harness' dependency on string matching - Pass list of supporting app names as enum vararg to scaffold setup. - Use dispute agent type constants in RegisterDisputeAgentsTest case. --- apitest/src/main/java/bisq/apitest/Scaffold.java | 7 ++++++- .../src/test/java/bisq/apitest/ApiTestCase.java | 12 ++++++++++-- .../java/bisq/apitest/method/GetBalanceTest.java | 4 +++- .../java/bisq/apitest/method/GetVersionTest.java | 2 +- .../method/RegisterDisputeAgentsTest.java | 16 +++++++++++----- .../apitest/method/WalletProtectionTest.java | 2 +- .../apitest/scenario/FundWalletScenarioTest.java | 4 +++- 7 files changed, 35 insertions(+), 12 deletions(-) diff --git a/apitest/src/main/java/bisq/apitest/Scaffold.java b/apitest/src/main/java/bisq/apitest/Scaffold.java index d195b787015..333f59285a3 100644 --- a/apitest/src/main/java/bisq/apitest/Scaffold.java +++ b/apitest/src/main/java/bisq/apitest/Scaffold.java @@ -41,6 +41,7 @@ import javax.annotation.Nullable; +import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind; import static bisq.apitest.config.BisqAppConfig.*; import static java.lang.String.format; import static java.lang.System.exit; @@ -64,6 +65,10 @@ public class Scaffold { public static final int EXIT_SUCCESS = 0; public static final int EXIT_FAILURE = 1; + public enum BitcoinCoreApp { + bitcoind + } + public final ApiTestConfig config; @Nullable @@ -295,7 +300,7 @@ private void startBackgroundProcesses(ExecutorService executor, log.info("Starting supporting apps {}", config.supportingApps.toString()); - if (config.hasSupportingApp("bitcoind")) { + if (config.hasSupportingApp(bitcoind.name())) { BitcoinDaemon bitcoinDaemon = new BitcoinDaemon(config); bitcoinDaemon.verifyBitcoinPathsExist(true); bitcoindTask = new SetupTask(bitcoinDaemon, countdownLatch); diff --git a/apitest/src/test/java/bisq/apitest/ApiTestCase.java b/apitest/src/test/java/bisq/apitest/ApiTestCase.java index 30e7472e2ac..a8422d9f4a9 100644 --- a/apitest/src/test/java/bisq/apitest/ApiTestCase.java +++ b/apitest/src/test/java/bisq/apitest/ApiTestCase.java @@ -24,7 +24,9 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; +import static java.util.Arrays.stream; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -68,15 +70,21 @@ public class ApiTestCase { // gRPC service stubs are used by method & scenario tests, but not e2e tests. private static final Map grpcStubsCache = new HashMap<>(); - public static void setUpScaffold(String supportingApps) + public static void setUpScaffold(Enum... supportingApps) throws InterruptedException, ExecutionException, IOException { - scaffold = new Scaffold(supportingApps).setUp(); + scaffold = new Scaffold(stream(supportingApps).map(Enum::name) + .collect(Collectors.joining(","))) + .setUp(); config = scaffold.config; bitcoinCli = new BitcoinCliHelper((config)); } public static void setUpScaffold(String[] params) throws InterruptedException, ExecutionException, IOException { + // Test cases needing to pass more than just an ApiTestConfig + // --supportingApps option will use this setup method, but the + // --supportingApps option will need to be passed too, with its comma + // delimited app list value, e.g., "bitcoind,seednode,arbdaemon". scaffold = new Scaffold(params).setUp(); config = scaffold.config; } diff --git a/apitest/src/test/java/bisq/apitest/method/GetBalanceTest.java b/apitest/src/test/java/bisq/apitest/method/GetBalanceTest.java index a77fe633ea6..abce9a78a66 100644 --- a/apitest/src/test/java/bisq/apitest/method/GetBalanceTest.java +++ b/apitest/src/test/java/bisq/apitest/method/GetBalanceTest.java @@ -27,7 +27,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind; import static bisq.apitest.config.BisqAppConfig.alicedaemon; +import static bisq.apitest.config.BisqAppConfig.seednode; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -41,7 +43,7 @@ public class GetBalanceTest extends MethodTest { @BeforeAll public static void setUp() { try { - setUpScaffold("bitcoind,seednode,alicedaemon"); + setUpScaffold(bitcoind, seednode, alicedaemon); // Have to generate 1 regtest block for alice's wallet to show 10 BTC balance. bitcoinCli.generateBlocks(1); diff --git a/apitest/src/test/java/bisq/apitest/method/GetVersionTest.java b/apitest/src/test/java/bisq/apitest/method/GetVersionTest.java index ed6083c8d3d..82780340ee8 100644 --- a/apitest/src/test/java/bisq/apitest/method/GetVersionTest.java +++ b/apitest/src/test/java/bisq/apitest/method/GetVersionTest.java @@ -41,7 +41,7 @@ public class GetVersionTest extends MethodTest { @BeforeAll public static void setUp() { try { - setUpScaffold(alicedaemon.name()); + setUpScaffold(alicedaemon); } catch (Exception ex) { fail(ex); } diff --git a/apitest/src/test/java/bisq/apitest/method/RegisterDisputeAgentsTest.java b/apitest/src/test/java/bisq/apitest/method/RegisterDisputeAgentsTest.java index 1ad3a36f16a..e09de2b061e 100644 --- a/apitest/src/test/java/bisq/apitest/method/RegisterDisputeAgentsTest.java +++ b/apitest/src/test/java/bisq/apitest/method/RegisterDisputeAgentsTest.java @@ -29,7 +29,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind; import static bisq.apitest.config.BisqAppConfig.arbdaemon; +import static bisq.apitest.config.BisqAppConfig.seednode; import static bisq.common.app.DevEnv.DEV_PRIVILEGE_PRIV_KEY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -42,10 +44,14 @@ @TestMethodOrder(OrderAnnotation.class) public class RegisterDisputeAgentsTest extends MethodTest { + private static final String ARBITRATOR = "arbitrator"; + private static final String MEDIATOR = "mediator"; + private static final String REFUNDAGENT = "refundagent"; + @BeforeAll public static void setUp() { try { - setUpScaffold("bitcoind,seednode,arbdaemon"); + setUpScaffold(bitcoind, seednode, arbdaemon); } catch (Exception ex) { fail(ex); } @@ -55,7 +61,7 @@ public static void setUp() { @Order(1) public void testRegisterArbitratorShouldThrowException() { var req = - createRegisterDisputeAgentRequest("arbitrator"); + createRegisterDisputeAgentRequest(ARBITRATOR); Throwable exception = assertThrows(StatusRuntimeException.class, () -> grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req)); assertEquals("INVALID_ARGUMENT: arbitrators must be registered in a Bisq UI", @@ -77,7 +83,7 @@ public void testInvalidDisputeAgentTypeArgShouldThrowException() { @Order(3) public void testInvalidRegistrationKeyArgShouldThrowException() { var req = RegisterDisputeAgentRequest.newBuilder() - .setDisputeAgentType("refundagent") + .setDisputeAgentType(REFUNDAGENT) .setRegistrationKey("invalid" + DEV_PRIVILEGE_PRIV_KEY).build(); Throwable exception = assertThrows(StatusRuntimeException.class, () -> grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req)); @@ -89,7 +95,7 @@ public void testInvalidRegistrationKeyArgShouldThrowException() { @Order(4) public void testRegisterMediator() { var req = - createRegisterDisputeAgentRequest("mediator"); + createRegisterDisputeAgentRequest(MEDIATOR); grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req); } @@ -97,7 +103,7 @@ public void testRegisterMediator() { @Order(5) public void testRegisterRefundAgent() { var req = - createRegisterDisputeAgentRequest("refundagent"); + createRegisterDisputeAgentRequest(REFUNDAGENT); grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req); } diff --git a/apitest/src/test/java/bisq/apitest/method/WalletProtectionTest.java b/apitest/src/test/java/bisq/apitest/method/WalletProtectionTest.java index f74c8e705c3..61f3c27e4a1 100644 --- a/apitest/src/test/java/bisq/apitest/method/WalletProtectionTest.java +++ b/apitest/src/test/java/bisq/apitest/method/WalletProtectionTest.java @@ -25,7 +25,7 @@ public class WalletProtectionTest extends MethodTest { @BeforeAll public static void setUp() { try { - setUpScaffold(alicedaemon.name()); + setUpScaffold(alicedaemon); MILLISECONDS.sleep(2000); } catch (Exception ex) { fail(ex); diff --git a/apitest/src/test/java/bisq/apitest/scenario/FundWalletScenarioTest.java b/apitest/src/test/java/bisq/apitest/scenario/FundWalletScenarioTest.java index 0b30d72c1cf..75977949c33 100644 --- a/apitest/src/test/java/bisq/apitest/scenario/FundWalletScenarioTest.java +++ b/apitest/src/test/java/bisq/apitest/scenario/FundWalletScenarioTest.java @@ -26,7 +26,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind; import static bisq.apitest.config.BisqAppConfig.alicedaemon; +import static bisq.apitest.config.BisqAppConfig.seednode; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -38,7 +40,7 @@ public class FundWalletScenarioTest extends ScenarioTest { @BeforeAll public static void setUp() { try { - setUpScaffold("bitcoind,seednode,alicedaemon"); + setUpScaffold(bitcoind, seednode, alicedaemon); bitcoinCli.generateBlocks(1); MILLISECONDS.sleep(1500); } catch (Exception ex) {