diff --git a/binary-sop/build.gradle b/external-sop/build.gradle similarity index 78% rename from binary-sop/build.gradle rename to external-sop/build.gradle index 85b6bc2..0989747 100644 --- a/binary-sop/build.gradle +++ b/external-sop/build.gradle @@ -17,6 +17,9 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" api project(":sop-java") + + api "org.slf4j:slf4j-api:$slf4jVersion" + testImplementation "ch.qos.logback:logback-classic:$logbackVersion" } test { diff --git a/binary-sop/src/main/java/sop/binary/BinarySop.java b/external-sop/src/main/java/sop/external/ExternalSOP.java similarity index 78% rename from binary-sop/src/main/java/sop/binary/BinarySop.java rename to external-sop/src/main/java/sop/external/ExternalSOP.java index c048480..ff27d7c 100644 --- a/binary-sop/src/main/java/sop/binary/BinarySop.java +++ b/external-sop/src/main/java/sop/external/ExternalSOP.java @@ -2,12 +2,12 @@ // // SPDX-License-Identifier: Apache-2.0 -package sop.binary; +package sop.external; import sop.SOP; -import sop.binary.operation.BinaryExtractCert; -import sop.binary.operation.BinaryGenerateKey; -import sop.binary.operation.BinaryVersion; +import sop.external.operation.ExtractCertExternal; +import sop.external.operation.GenerateKeyExternal; +import sop.external.operation.VersionExternal; import sop.operation.Armor; import sop.operation.Dearmor; import sop.operation.Decrypt; @@ -21,27 +21,27 @@ import sop.operation.InlineSign; import sop.operation.InlineVerify; import sop.operation.Version; -public class BinarySop implements SOP { +public class ExternalSOP implements SOP { private final String binaryName; - public BinarySop(String binaryName) { + public ExternalSOP(String binaryName) { this.binaryName = binaryName; } @Override public Version version() { - return new BinaryVersion(binaryName); + return new VersionExternal(binaryName); } @Override public GenerateKey generateKey() { - return new BinaryGenerateKey(binaryName); + return new GenerateKeyExternal(binaryName); } @Override public ExtractCert extractCert() { - return new BinaryExtractCert(binaryName); + return new ExtractCertExternal(binaryName); } @Override diff --git a/binary-sop/src/main/java/sop/binary/operation/BinaryExtractCert.java b/external-sop/src/main/java/sop/external/operation/ExtractCertExternal.java similarity index 92% rename from binary-sop/src/main/java/sop/binary/operation/BinaryExtractCert.java rename to external-sop/src/main/java/sop/external/operation/ExtractCertExternal.java index 7814e2f..9349d4e 100644 --- a/binary-sop/src/main/java/sop/binary/operation/BinaryExtractCert.java +++ b/external-sop/src/main/java/sop/external/operation/ExtractCertExternal.java @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 -package sop.binary.operation; +package sop.external.operation; import sop.Ready; import sop.exception.SOPGPException; @@ -14,14 +14,14 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -public class BinaryExtractCert implements ExtractCert { +public class ExtractCertExternal implements ExtractCert { private final String binary; private final Runtime runtime = Runtime.getRuntime(); private boolean noArmor; - public BinaryExtractCert(String binary) { + public ExtractCertExternal(String binary) { this.binary = binary; } diff --git a/binary-sop/src/main/java/sop/binary/operation/BinaryGenerateKey.java b/external-sop/src/main/java/sop/external/operation/GenerateKeyExternal.java similarity index 94% rename from binary-sop/src/main/java/sop/binary/operation/BinaryGenerateKey.java rename to external-sop/src/main/java/sop/external/operation/GenerateKeyExternal.java index 11ed378..c91ce06 100644 --- a/binary-sop/src/main/java/sop/binary/operation/BinaryGenerateKey.java +++ b/external-sop/src/main/java/sop/external/operation/GenerateKeyExternal.java @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 -package sop.binary.operation; +package sop.external.operation; import sop.Ready; import sop.exception.SOPGPException; @@ -14,7 +14,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -public class BinaryGenerateKey implements GenerateKey { +public class GenerateKeyExternal implements GenerateKey { private final String binary; private boolean noArmor = false; @@ -23,7 +23,7 @@ public class BinaryGenerateKey implements GenerateKey { private final Runtime runtime = Runtime.getRuntime(); - public BinaryGenerateKey(String binary) { + public GenerateKeyExternal(String binary) { this.binary = binary; } diff --git a/binary-sop/src/main/java/sop/binary/operation/BinaryVersion.java b/external-sop/src/main/java/sop/external/operation/VersionExternal.java similarity index 95% rename from binary-sop/src/main/java/sop/binary/operation/BinaryVersion.java rename to external-sop/src/main/java/sop/external/operation/VersionExternal.java index 4ca55d4..b40ed30 100644 --- a/binary-sop/src/main/java/sop/binary/operation/BinaryVersion.java +++ b/external-sop/src/main/java/sop/external/operation/VersionExternal.java @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 -package sop.binary.operation; +package sop.external.operation; import sop.operation.Version; @@ -10,12 +10,12 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -public class BinaryVersion implements Version { +public class VersionExternal implements Version { private final Runtime runtime = Runtime.getRuntime(); private final String binary; - public BinaryVersion(String binaryName) { + public VersionExternal(String binaryName) { this.binary = binaryName; } diff --git a/binary-sop/src/main/java/sop/binary/operation/package-info.java b/external-sop/src/main/java/sop/external/operation/package-info.java similarity index 84% rename from binary-sop/src/main/java/sop/binary/operation/package-info.java rename to external-sop/src/main/java/sop/external/operation/package-info.java index 362fa8a..9c7dd29 100644 --- a/binary-sop/src/main/java/sop/binary/operation/package-info.java +++ b/external-sop/src/main/java/sop/external/operation/package-info.java @@ -5,4 +5,4 @@ /** * Bindings for SOP subcommands to a SOP binary. */ -package sop.binary.operation; +package sop.external.operation; diff --git a/binary-sop/src/main/java/sop/binary/package-info.java b/external-sop/src/main/java/sop/external/package-info.java similarity index 91% rename from binary-sop/src/main/java/sop/binary/package-info.java rename to external-sop/src/main/java/sop/external/package-info.java index d6c44e1..208985e 100644 --- a/binary-sop/src/main/java/sop/binary/package-info.java +++ b/external-sop/src/main/java/sop/external/package-info.java @@ -5,4 +5,4 @@ /** * Implementation of sop-java which delegates execution to a binary implementing the SOP command line interface. */ -package sop.binary; +package sop.external; diff --git a/external-sop/src/main/resources/sop/external/.gitignore b/external-sop/src/main/resources/sop/external/.gitignore new file mode 100644 index 0000000..4c2e2f3 --- /dev/null +++ b/external-sop/src/main/resources/sop/external/.gitignore @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2023 Paul Schaub +# +# SPDX-License-Identifier: CC0-1.0 + +backend.local.properties \ No newline at end of file diff --git a/external-sop/src/main/resources/sop/external/backend.properties b/external-sop/src/main/resources/sop/external/backend.properties new file mode 100644 index 0000000..0cf721f --- /dev/null +++ b/external-sop/src/main/resources/sop/external/backend.properties @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: 2023 Paul Schaub +# +# SPDX-License-Identifier: CC0-1.0 + +## Do not change this file. To overwrite the SOP backend used during testing, +## simply create a file 'backend.local.properties' in this directory and override sop.backend in there. +sop.backend=/path/to/backend \ No newline at end of file diff --git a/binary-sop/src/test/java/sop/binary/BinarySopTest.java b/external-sop/src/test/java/sop/external/ExternalSOPTest.java similarity index 52% rename from binary-sop/src/test/java/sop/binary/BinarySopTest.java rename to external-sop/src/test/java/sop/external/ExternalSOPTest.java index f095622..fa12246 100644 --- a/binary-sop/src/test/java/sop/binary/BinarySopTest.java +++ b/external-sop/src/test/java/sop/external/ExternalSOPTest.java @@ -2,30 +2,63 @@ // // SPDX-License-Identifier: Apache-2.0 -package sop.binary; +package sop.external; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIf; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import sop.SOP; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.Properties; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -@EnabledIf("sop.binary.BinarySopTest#sopBinaryInstalled") -public class BinarySopTest { +@EnabledIf("sop.external.ExternalSOPTest#externalSopInstalled") +public class ExternalSOPTest { - private static final String BINARY = "/usr/bin/sqop"; + private static final Logger LOGGER = LoggerFactory.getLogger(ExternalSOPTest.class); - private final SOP sop = new BinarySop(BINARY); + private final SOP sop; - public static boolean sopBinaryInstalled() { - return new File(BINARY).exists(); + public ExternalSOPTest() { + String backend = readSopBackendFromProperties(); + sop = new ExternalSOP(backend); + } + + private static String readSopBackendFromProperties() { + Properties properties = new Properties(); + try { + InputStream resourceIn = ExternalSOPTest.class.getResourceAsStream("backend.local.properties"); + if (resourceIn == null) { + LOGGER.info("Could not find backend.local.properties file. Try backend.properties instead."); + resourceIn = ExternalSOPTest.class.getResourceAsStream("backend.properties"); + } + if (resourceIn == null) { + throw new FileNotFoundException("Could not find backend.properties file."); + } + + properties.load(resourceIn); + String backend = properties.getProperty("sop.backend"); + return backend; + } catch (IOException e) { + return null; + } + } + + public static boolean externalSopInstalled() { + String binary = readSopBackendFromProperties(); + if (binary == null) { + return false; + } + return new File(binary).exists(); } @Test diff --git a/settings.gradle b/settings.gradle index 1ac71bb..5dc6372 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,5 +6,5 @@ rootProject.name = 'SOP-Java' include 'sop-java', 'sop-java-picocli', - 'binary-sop' + 'external-sop' diff --git a/version.gradle b/version.gradle index 0cbaf74..a069baf 100644 --- a/version.gradle +++ b/version.gradle @@ -8,10 +8,12 @@ allprojects { isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 + jsrVersion = '3.0.2' junitVersion = '5.8.2' junitSysExitVersion = '1.1.2' - picocliVersion = '4.6.3' + logbackVersion = '1.2.11' mockitoVersion = '4.5.1' - jsrVersion = '3.0.2' + picocliVersion = '4.6.3' + slf4jVersion = '1.7.36' } }