From 7bd12fe5d423b8bf4c7d5388870bd06a14829b99 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 5 Mar 2021 14:43:13 +0100 Subject: [PATCH] Improve error handling in sop tests --- .../java/org/pgpainless/sop/DummyTest.java | 3 +- .../pgpainless/sop/EncryptDecryptTest.java | 17 +++++---- .../org/pgpainless/sop/ExitException.java | 29 --------------- .../org/pgpainless/sop/ExtractCertTest.java | 3 +- .../org/pgpainless/sop/GenerateCertTest.java | 5 ++- .../pgpainless/sop/NoExitSecurityManager.java | 37 ------------------- 6 files changed, 16 insertions(+), 78 deletions(-) delete mode 100644 pgpainless-sop/src/test/java/org/pgpainless/sop/ExitException.java delete mode 100644 pgpainless-sop/src/test/java/org/pgpainless/sop/NoExitSecurityManager.java diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/DummyTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/DummyTest.java index 145440ea..e73fba3f 100644 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/DummyTest.java +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/DummyTest.java @@ -16,11 +16,12 @@ package org.pgpainless.sop; import org.junit.jupiter.api.Test; +import picocli.CommandLine; public class DummyTest { @Test public void dummyTest() { - PGPainlessCLI.main(new String[] {"generate-key", "Ed Snowden "}); + new CommandLine(new PGPainlessCLI()).execute("generate-key", "Ed Snowden "); } } diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/EncryptDecryptTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/EncryptDecryptTest.java index 8a023dd9..13d7bf29 100644 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/EncryptDecryptTest.java +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/EncryptDecryptTest.java @@ -31,6 +31,7 @@ import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import picocli.CommandLine; public class EncryptDecryptTest { @@ -62,27 +63,27 @@ public class EncryptDecryptTest { OutputStream julietKeyOut = new FileOutputStream(julietKeyFile); System.setOut(new PrintStream(julietKeyOut)); - PGPainlessCLI.main(new String[] {"generate-key", "Juliet Capulet "}); + new CommandLine(new PGPainlessCLI()).execute("generate-key", "Juliet Capulet "); julietKeyOut.close(); FileInputStream julietKeyIn = new FileInputStream(julietKeyFile); System.setIn(julietKeyIn); OutputStream julietCertOut = new FileOutputStream(julietCertFile); System.setOut(new PrintStream(julietCertOut)); - PGPainlessCLI.main(new String[] {"extract-cert"}); + new CommandLine(new PGPainlessCLI()).execute("extract-cert"); julietKeyIn.close(); julietCertOut.close(); OutputStream romeoKeyOut = new FileOutputStream(romeoKeyFile); System.setOut(new PrintStream(romeoKeyOut)); - PGPainlessCLI.main(new String[] {"generate-key", "Romeo Montague "}); + new CommandLine(new PGPainlessCLI()).execute("generate-key", "Romeo Montague "); romeoKeyOut.close(); FileInputStream romeoKeyIn = new FileInputStream(romeoKeyFile); System.setIn(romeoKeyIn); OutputStream romeoCertOut = new FileOutputStream(romeoCertFile); System.setOut(new PrintStream(romeoCertOut)); - PGPainlessCLI.main(new String[] {"extract-cert"}); + new CommandLine(new PGPainlessCLI()).execute("extract-cert"); romeoKeyIn.close(); romeoCertOut.close(); @@ -91,9 +92,9 @@ public class EncryptDecryptTest { System.setIn(msgIn); OutputStream msgAscOut = new FileOutputStream(msgAscFile); System.setOut(new PrintStream(msgAscOut)); - PGPainlessCLI.main(new String[] {"encrypt", + new CommandLine(new PGPainlessCLI()).execute("encrypt", "--sign-with", romeoKeyFile.getAbsolutePath(), - julietCertFile.getAbsolutePath()}); + julietCertFile.getAbsolutePath()); msgAscOut.close(); File verifyFile = new File(tempDir, "verify.txt"); @@ -103,10 +104,10 @@ public class EncryptDecryptTest { System.setIn(msgAscIn); ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); - PGPainlessCLI.main(new String[] {"decrypt", + new CommandLine(new PGPainlessCLI()).execute("decrypt", "--verify-out", verifyFile.getAbsolutePath(), "--verify-with", romeoCertFile.getAbsolutePath(), - julietKeyFile.getAbsolutePath()}); + julietKeyFile.getAbsolutePath()); msgAscIn.close(); assertEquals(msg, out.toString()); diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/ExitException.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/ExitException.java deleted file mode 100644 index 64d85042..00000000 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/ExitException.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2021 Paul Schaub. - * - * 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. - */ -package org.pgpainless.sop; - -public class ExitException extends SecurityException { - - private final int status; - - public ExitException(int status) { - this.status = status; - } - - public int getStatus() { - return status; - } -} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/ExtractCertTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/ExtractCertTest.java index a2035a86..41bef399 100644 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/ExtractCertTest.java +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/ExtractCertTest.java @@ -31,6 +31,7 @@ import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.junit.jupiter.api.Test; import org.pgpainless.PGPainless; import org.pgpainless.key.info.KeyRingInfo; +import picocli.CommandLine; public class ExtractCertTest { @@ -44,7 +45,7 @@ public class ExtractCertTest { ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); - PGPainlessCLI.main(new String[] {"extract-cert"}); + new CommandLine(new PGPainlessCLI()).execute("extract-cert"); PGPPublicKeyRing publicKeys = PGPainless.readKeyRing().publicKeyRing(out.toByteArray()); KeyRingInfo info = PGPainless.inspectKeyRing(publicKeys); assertFalse(info.isSecretKey()); diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateCertTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateCertTest.java index 22cae771..e51d39a0 100644 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateCertTest.java +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateCertTest.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.pgpainless.PGPainless; import org.pgpainless.key.info.KeyRingInfo; +import picocli.CommandLine; public class GenerateCertTest { @@ -47,7 +48,7 @@ public class GenerateCertTest { public void testKeyGeneration() throws IOException, PGPException { ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); - PGPainlessCLI.main(new String[] {"generate-key", "--armor", "Juliet Capulet "}); + new CommandLine(new PGPainlessCLI()).execute("generate-key", "--armor", "Juliet Capulet "); PGPSecretKeyRing secretKeys = PGPainless.readKeyRing().secretKeyRing(out.toByteArray()); KeyRingInfo info = PGPainless.inspectKeyRing(secretKeys); @@ -62,7 +63,7 @@ public class GenerateCertTest { public void testNoArmor() { ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); - PGPainlessCLI.main(new String[] {"generate-key", "--no-armor", "Test "}); + new CommandLine(new PGPainlessCLI()).execute("generate-key", "--no-armor", "Test "); byte[] outBegin = new byte[37]; System.arraycopy(out.toByteArray(), 0, outBegin, 0, 37); diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/NoExitSecurityManager.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/NoExitSecurityManager.java deleted file mode 100644 index f582e653..00000000 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/NoExitSecurityManager.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2021 Paul Schaub. - * - * 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. - */ -package org.pgpainless.sop; - -import java.security.Permission; - -public class NoExitSecurityManager extends SecurityManager { - - @Override - public void checkPermission(Permission perm) { - // allow anything - } - - @Override - public void checkPermission(Permission perm, Object context) { - // allow anything - } - - @Override - public void checkExit(int status) { - super.checkExit(status); - throw new ExitException(status); - } -}