Compare commits

...

4 Commits

6 changed files with 30 additions and 34 deletions

View File

@ -42,11 +42,14 @@ public class PGPCertDCli {
static PGPainlessCertD certificateDirectory; static PGPainlessCertD certificateDirectory;
// https://www.cyberciti.biz/faq/linux-bash-exit-status-set-exit-statusin-bash/
public static final int EXIT_CODE_NOT_A_STORE = 30;
private int executionStrategy(CommandLine.ParseResult parseResult) { private int executionStrategy(CommandLine.ParseResult parseResult) {
try { try {
initStore(); initStore();
} catch (NotAStoreException | SQLException e) { } catch (NotAStoreException | SQLException e) {
return -1; return EXIT_CODE_NOT_A_STORE;
} }
return new CommandLine.RunLast().execute(parseResult); return new CommandLine.RunLast().execute(parseResult);
} }

View File

@ -19,6 +19,7 @@ import pgp.certificate_store.exception.BadNameException;
import picocli.CommandLine; import picocli.CommandLine;
import java.io.IOException; import java.io.IOException;
import java.util.NoSuchElementException;
@CommandLine.Command(name = "get", @CommandLine.Command(name = "get",
resourceBundle = "msg_get") resourceBundle = "msg_get")
@ -26,6 +27,10 @@ public class Get implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(Get.class); private static final Logger LOGGER = LoggerFactory.getLogger(Get.class);
// https://www.cyberciti.biz/faq/linux-bash-exit-status-set-exit-statusin-bash/
public static final int EXIT_CODE_NO_SUCH_ELEMENT = 2;
public static final int EXIT_CODE_IO_ERROR = 5;
@CommandLine.Option(names = {"-a", "--armor"}) @CommandLine.Option(names = {"-a", "--armor"})
boolean armor = false; boolean armor = false;
@ -33,16 +38,16 @@ public class Get implements Runnable {
paramLabel = "IDENTIFIER", paramLabel = "IDENTIFIER",
arity = "1" arity = "1"
) )
String identifer; String identifier;
@Override @Override
public void run() { public void run() {
try { try {
KeyMaterial record; KeyMaterial record;
if (SpecialNames.lookupSpecialName(identifer) != null) { if (SpecialNames.lookupSpecialName(identifier) != null) {
record = PGPCertDCli.getCertificateDirectory().getBySpecialName(identifer); record = PGPCertDCli.getCertificateDirectory().getBySpecialName(identifier);
} else { } else {
record = PGPCertDCli.getCertificateDirectory().getByFingerprint(identifer.toLowerCase()); record = PGPCertDCli.getCertificateDirectory().getByFingerprint(identifier.toLowerCase());
} }
if (record == null) { if (record == null) {
return; return;
@ -57,9 +62,12 @@ public class Get implements Runnable {
Streams.pipeAll(record.getInputStream(), System.out); Streams.pipeAll(record.getInputStream(), System.out);
} }
} catch (NoSuchElementException e) {
LOGGER.debug("Certificate not found.", e);
System.exit(EXIT_CODE_NO_SUCH_ELEMENT);
} catch (IOException e) { } catch (IOException e) {
LOGGER.error("IO Error", e); LOGGER.error("IO Error", e);
System.exit(-1); System.exit(EXIT_CODE_IO_ERROR);
} catch (BadDataException e) { } catch (BadDataException e) {
LOGGER.error("Certificate file contains bad data.", e); LOGGER.error("Certificate file contains bad data.", e);
System.exit(-1); System.exit(-1);

View File

@ -1,17 +0,0 @@
// SPDX-FileCopyrightText: 2022 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
package pgp.cert_d.cli;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class DummyTest {
@Test
public void test() {
assertTrue(true);
}
}

View File

@ -27,11 +27,12 @@ import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.security.InvalidAlgorithmParameterException; import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.NoSuchElementException;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class SetupTest { public class SetupTest {
@ -53,7 +54,7 @@ public class SetupTest {
@Test @Test
public void testSetupGeneratesTrustRoot() public void testSetupGeneratesTrustRoot()
throws BadDataException, IOException { throws BadDataException, IOException {
assertNull(store.getTrustRoot()); assertThrows(NoSuchElementException.class, () -> store.getTrustRoot());
PGPCertDCli.main(new String[] {"setup"}); PGPCertDCli.main(new String[] {"setup"});
KeyMaterial trustRoot = store.getTrustRoot(); KeyMaterial trustRoot = store.getTrustRoot();
@ -68,7 +69,7 @@ public class SetupTest {
@Test @Test
public void testSetupWithPassword() public void testSetupWithPassword()
throws BadDataException, IOException, PGPException { throws BadDataException, IOException, PGPException {
assertNull(store.getTrustRoot()); assertThrows(NoSuchElementException.class, () -> store.getTrustRoot());
PGPCertDCli.main(new String[] {"setup", "--with-password", "sw0rdf1sh"}); PGPCertDCli.main(new String[] {"setup", "--with-password", "sw0rdf1sh"});
KeyMaterial trustRoot = store.getTrustRoot(); KeyMaterial trustRoot = store.getTrustRoot();
@ -87,7 +88,7 @@ public class SetupTest {
public void testSetupImportFromStdin() public void testSetupImportFromStdin()
throws PGPException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, throws PGPException, InvalidAlgorithmParameterException, NoSuchAlgorithmException,
BadDataException, IOException { BadDataException, IOException {
assertNull(store.getTrustRoot()); assertThrows(NoSuchElementException.class, () -> store.getTrustRoot());
PGPSecretKeyRing trustRoot = PGPainless.generateKeyRing() PGPSecretKeyRing trustRoot = PGPainless.generateKeyRing()
.modernKeyRing("trust-root"); .modernKeyRing("trust-root");
@ -108,7 +109,7 @@ public class SetupTest {
@Test @Test
public void testSetupOverridesExistingTrustRoot() public void testSetupOverridesExistingTrustRoot()
throws BadDataException, IOException { throws BadDataException, IOException {
assertNull(store.getTrustRoot()); assertThrows(NoSuchElementException.class, () -> store.getTrustRoot());
PGPCertDCli.main(new String[] {"setup"}); PGPCertDCli.main(new String[] {"setup"});
KeyMaterial trustRoot = store.getTrustRoot(); KeyMaterial trustRoot = store.getTrustRoot();

View File

@ -7,7 +7,7 @@ package org.pgpainless.cert_d;
import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -74,8 +75,8 @@ public class SharedPGPCertificateDirectoryTest {
OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(cert); OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(cert);
ByteArrayInputStream certIn = new ByteArrayInputStream(cert.getEncoded()); ByteArrayInputStream certIn = new ByteArrayInputStream(cert.getEncoded());
// standard case: get() is null // standard case: no cert found
assertNull(directory.getByFingerprint(fingerprint.toString().toLowerCase())); assertThrows(NoSuchElementException.class, () -> directory.getByFingerprint(fingerprint.toString().toLowerCase()));
// insert and check returned certs fingerprint // insert and check returned certs fingerprint
Certificate certificate = directory.insert(certIn, dummyMerge); Certificate certificate = directory.insert(certIn, dummyMerge);
@ -99,8 +100,8 @@ public class SharedPGPCertificateDirectoryTest {
OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(trustRoot); OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(trustRoot);
ByteArrayInputStream certIn = new ByteArrayInputStream(trustRoot.getEncoded()); ByteArrayInputStream certIn = new ByteArrayInputStream(trustRoot.getEncoded());
// standard case: get() is null // standard case: no cert found
assertNull(directory.getBySpecialName("trust-root")); assertThrows(NoSuchElementException.class, () -> directory.getBySpecialName("trust-root"));
// insert and check returned certs fingerprint // insert and check returned certs fingerprint
Certificate certificate = directory.insertWithSpecialName("trust-root", certIn, dummyMerge); Certificate certificate = directory.insertWithSpecialName("trust-root", certIn, dummyMerge);

View File

@ -13,7 +13,7 @@ allprojects {
junitVersion = '5.8.2' junitVersion = '5.8.2'
mockitoVersion = '4.5.1' mockitoVersion = '4.5.1'
pgpainlessVersion = '1.3.5' pgpainlessVersion = '1.3.5'
pgpCertDJavaVersion = '0.2.0' pgpCertDJavaVersion = '0.2.1'
picocliVersion = '4.6.3' picocliVersion = '4.6.3'
} }
} }