From 603da3eeffd2cb73c62e8a9d3d7b58b5071c5179 Mon Sep 17 00:00:00 2001 From: josecoll Date: Fri, 7 Jun 2019 08:55:19 +0100 Subject: [PATCH] =?UTF-8?q?CORDA-2984=20Re-instate=20CordaCaplet=20tests?= =?UTF-8?q?=20and=20move=20CordaCaplet=20code=20into=20:node:cap=E2=80=A6?= =?UTF-8?q?=20(#5197)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Re-instate CordaCaplet tests and move CordaCaplet code into :node:capsule module. * Clean-up verbose IntelliJ refactoring. * Updated buildCordaJAR task references to resolve CordaCaplet from :node:capsule project. * Incorporating feedback from PR review. --- node/build.gradle | 5 --- node/capsule/build.gradle | 21 +++++----- .../src/main/java/CordaCaplet.java | 0 ...CapletBaseDirectoryParsingFailureTest.java | 38 ++++++++++++++++++ .../CordaCapletBaseDirectoryParsingTest.java | 39 ++++++++++++++++++ ...rdaCapletConfigFileParsingFailureTest.java | 39 ++++++++++++++++++ .../CordaCapletConfigFileParsingTest.java | 40 +++++++++++++++++++ .../src/test/java/CordaCapletTestUtils.java | 16 ++++++++ 8 files changed, 183 insertions(+), 15 deletions(-) rename node/{ => capsule}/src/main/java/CordaCaplet.java (100%) create mode 100644 node/capsule/src/test/java/CordaCapletBaseDirectoryParsingFailureTest.java create mode 100644 node/capsule/src/test/java/CordaCapletBaseDirectoryParsingTest.java create mode 100644 node/capsule/src/test/java/CordaCapletConfigFileParsingFailureTest.java create mode 100644 node/capsule/src/test/java/CordaCapletConfigFileParsingTest.java create mode 100644 node/capsule/src/test/java/CordaCapletTestUtils.java diff --git a/node/build.gradle b/node/build.gradle index 523778f07f..a4faedec08 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -158,11 +158,6 @@ dependencies { compile "org.hibernate:hibernate-core:$hibernate_version" compile "org.hibernate:hibernate-java8:$hibernate_version" - // Capsule is a library for building independently executable fat JARs. - // We only need this dependency to compile our Caplet against. - compileOnly "co.paralleluniverse:capsule:$capsule_version" - testCompile "co.paralleluniverse:capsule:$capsule_version" - // OkHTTP: Simple HTTP library. compile "com.squareup.okhttp3:okhttp:$okhttp_version" diff --git a/node/capsule/build.gradle b/node/capsule/build.gradle index 1c4601043b..840ae5285f 100644 --- a/node/capsule/build.gradle +++ b/node/capsule/build.gradle @@ -16,15 +16,17 @@ configurations { dependencies { // TypeSafe Config: for simple and human friendly config files. capsuleRuntime "com.typesafe:config:$typesafe_config_version" -} + compileOnly "com.typesafe:config:$typesafe_config_version" + testRuntimeOnly "com.typesafe:config:$typesafe_config_version" -// Force the Caplet to target Java 6. This ensures that running 'java -jar corda.jar' on any Java 6 VM upwards -// will get as far as the Capsule version checks, meaning that if your JVM is too old, you will at least get -// a sensible error message telling you what to do rather than a bytecode version exception that doesn't. -// If we introduce .java files into this module that need Java 8+ then we will have to push the caplet into -// its own module so its target can be controlled individually, but for now this suffices. -sourceCompatibility = 1.6 -targetCompatibility = 1.6 + // Capsule is a library for building independently executable fat JARs. + // We only need this dependency to compile our Caplet against. + compileOnly "co.paralleluniverse:capsule:$capsule_version" + testCompile "co.paralleluniverse:capsule:$capsule_version" + + testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" + testImplementation "junit:junit:$junit_version" +} jar.enabled = false @@ -38,13 +40,12 @@ task buildCordaJAR(type: FatCapsule, dependsOn: project(':node').tasks.jar) { applicationSource = files( project(':node').configurations.runtimeClasspath, project(':node').tasks.jar, - project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet.class', - project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet$1.class', project(':node').buildDir.toString() + '/resources/main/reference.conf', "$rootDir/config/dev/log4j2.xml", 'NOTICE' // Copy CDDL notice ) from configurations.capsuleRuntime.files.collect { zipTree(it) } + with jar capsuleManifest { applicationVersion = corda_release_version diff --git a/node/src/main/java/CordaCaplet.java b/node/capsule/src/main/java/CordaCaplet.java similarity index 100% rename from node/src/main/java/CordaCaplet.java rename to node/capsule/src/main/java/CordaCaplet.java diff --git a/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingFailureTest.java b/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingFailureTest.java new file mode 100644 index 0000000000..7d221a4aad --- /dev/null +++ b/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingFailureTest.java @@ -0,0 +1,38 @@ +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collection; + +@RunWith(Parameterized.class) +public class CordaCapletBaseDirectoryParsingFailureTest { + @Parameterized.Parameters + public static Collection CombinationsToTest() { + return Arrays.asList( + new Object[][]{ + {new String[]{"--base-directory", "--another-option"}}, + {new String[]{"--base-directory=", "-a"}}, + {new String[]{"-b", "--another-option"}}, + {new String[]{"-b=", "-a"}} + } + ); + } + + private String[] cmdLineArguments; + + public CordaCapletBaseDirectoryParsingFailureTest(String[] baseOption) { + this.cmdLineArguments = baseOption; + } + + @Test + public void testThatBaseDirectoryFallsBackToCurrentWhenBaseDirectoryIsNotSupplied() { + final CordaCaplet caplet = CordaCapletTestUtils.getCaplet(); + final String returnPath = caplet.getBaseDirectory(Arrays.asList(cmdLineArguments)); + final String expected = Paths.get(".").toAbsolutePath().normalize().toString(); + Assert.assertEquals(expected, returnPath); + } +} + diff --git a/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingTest.java b/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingTest.java new file mode 100644 index 0000000000..489e59f3e5 --- /dev/null +++ b/node/capsule/src/test/java/CordaCapletBaseDirectoryParsingTest.java @@ -0,0 +1,39 @@ + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class CordaCapletBaseDirectoryParsingTest { + @Parameterized.Parameters + public static Collection CombinationsToTest() { + return Arrays.asList( + new Object[][]{ + {new String[]{"--base-directory", "blah"}}, + {new String[]{"--base-directory=blah"}}, + {new String[]{"-b", "blah"}}, + {new String[]{"-b=blah"}} + }); + } + + private String[] cmdLineArguments; + + public CordaCapletBaseDirectoryParsingTest(String[] arr) { + this.cmdLineArguments = arr; + } + + @Test + public void testThatBaseDirectoryParameterIsRecognised() { + final CordaCaplet caplet = CordaCapletTestUtils.getCaplet(); + final String returnPath = caplet.getBaseDirectory(Arrays.asList(cmdLineArguments)); + final String expected = Paths.get(".").resolve("blah").toAbsolutePath().normalize().toString(); + assertEquals(expected, returnPath); + } +} + diff --git a/node/capsule/src/test/java/CordaCapletConfigFileParsingFailureTest.java b/node/capsule/src/test/java/CordaCapletConfigFileParsingFailureTest.java new file mode 100644 index 0000000000..5e20531858 --- /dev/null +++ b/node/capsule/src/test/java/CordaCapletConfigFileParsingFailureTest.java @@ -0,0 +1,39 @@ +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.File; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collection; + +@RunWith(Parameterized.class) +public class CordaCapletConfigFileParsingFailureTest { + @Parameterized.Parameters + public static Collection CombinationsToTest() { + return Arrays.asList( + new Object[][]{ + {new String[]{"--config-file", "--another-option"}}, + {new String[]{"--config-file=", "-a"}}, + {new String[]{"-f", "--another-option"}}, + {new String[]{"-f=", "-a"}} + } + ); + } + + private String[] cmdLineArguments; + + public CordaCapletConfigFileParsingFailureTest(String[] baseOption) { + this.cmdLineArguments = baseOption; + } + + @Test + public void testThatBaseDirectoryFallsBackToDefaultWhenConfigFileIsNotSupplied() { + final CordaCaplet caplet = CordaCapletTestUtils.getCaplet(); + final File returnPath = caplet.getConfigFile(Arrays.asList(cmdLineArguments), CordaCapletTestUtils.getBaseDir()); + final File expected = Paths.get(".").resolve("node.conf").toAbsolutePath().normalize().toFile(); + Assert.assertEquals(expected, returnPath); + } +} + diff --git a/node/capsule/src/test/java/CordaCapletConfigFileParsingTest.java b/node/capsule/src/test/java/CordaCapletConfigFileParsingTest.java new file mode 100644 index 0000000000..48ddf1766d --- /dev/null +++ b/node/capsule/src/test/java/CordaCapletConfigFileParsingTest.java @@ -0,0 +1,40 @@ + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.File; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class CordaCapletConfigFileParsingTest { + @Parameterized.Parameters + public static Collection CombinationsToTest() { + return Arrays.asList( + new Object[][]{ + {new String[]{"--config-file", "blah.conf"}}, + {new String[]{"--config-file=blah.conf"}}, + {new String[]{"-f", "blah.conf"}}, + {new String[]{"-f=blah.conf"}} + }); + } + + private String[] cmdLineArguments; + + public CordaCapletConfigFileParsingTest(String[] arr) { + this.cmdLineArguments = arr; + } + + @Test + public void testThatConfigFileParameterIsRecognised() { + final CordaCaplet caplet = CordaCapletTestUtils.getCaplet(); + final File returnPath = caplet.getConfigFile(Arrays.asList(cmdLineArguments), CordaCapletTestUtils.getBaseDir()); + final File expected = Paths.get(".").resolve("blah.conf").toAbsolutePath().normalize().toFile(); + assertEquals(expected, returnPath.getAbsoluteFile()); + } +} + diff --git a/node/capsule/src/test/java/CordaCapletTestUtils.java b/node/capsule/src/test/java/CordaCapletTestUtils.java new file mode 100644 index 0000000000..1ff5d71823 --- /dev/null +++ b/node/capsule/src/test/java/CordaCapletTestUtils.java @@ -0,0 +1,16 @@ +import java.io.File; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Objects; + +class CordaCapletTestUtils { + static CordaCaplet getCaplet() { + final String path = System.getProperty("user.dir") + File.separator + ".." + File.separator + "build" + File.separator + "libs" + File.separator; + final File jar = Arrays.stream(Objects.requireNonNull(new File(path).listFiles())).filter(x -> x.getName().startsWith("corda-node") && x.getName().endsWith(".jar")).findFirst().get(); + return new CordaCaplet(new Capsule(jar.toPath())); + } + + static String getBaseDir() { + return Paths.get(".").toAbsolutePath().normalize().toString(); + } +}