wkd-java/wkd-java-cli/src/test/java/pgp/wkd/cli/test_suite/TestSuiteTestRunner.java

80 lines
2.7 KiB
Java

// SPDX-FileCopyrightText: 2022 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
package pgp.wkd.cli.test_suite;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import pgp.wkd.cli.PGPainlessCertificateParser;
import pgp.wkd.cli.WKDCLI;
import pgp.wkd.cli.command.GetCmd;
import pgp.wkd.discovery.CertificateDiscoverer;
import pgp.wkd.discovery.ValidatingCertificateDiscoverer;
import pgp.wkd.discovery.DiscoveryMethod;
import pgp.wkd.test_suite.TestCase;
import pgp.wkd.test_suite.TestSuite;
import pgp.wkd.test_suite.TestSuiteGenerator;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
public class TestSuiteTestRunner {
private static TestSuite suite;
@BeforeAll
public static void setup() throws Exception {
// Temporary, directory based WKD
Path tempPath = Files.createTempDirectory("wkd-test");
File tempFile = tempPath.toFile();
tempFile.deleteOnExit();
// Generate test certificates inside the temp wkd
String domain = "example.com";
TestSuiteGenerator generator = new TestSuiteGenerator(domain);
suite = generator.generateTestSuiteInDirectory(tempFile, DiscoveryMethod.direct);
// Fetch certificates from a local directory instead of the internetzzz.
CertificateDiscoverer discoverer = new ValidatingCertificateDiscoverer(
new PGPainlessCertificateParser(), new DirectoryBasedCertificateFetcher(tempPath));
GetCmd.setCertificateDiscoverer(discoverer);
}
@TestFactory
public Iterable<DynamicTest> testsFromTestSuite() {
return suite.getTestCases()
.stream()
.map(TestSuiteTestRunner::toDynamicTest)
.collect(Collectors.toList());
}
public static DynamicTest toDynamicTest(TestCase testCase) {
return DynamicTest.dynamicTest(testCase.getTestTitle(), () -> {
String mail = testCase.getLookupMailAddress();
int exitCode = WKDCLI.execute(new String[] {
"get", "--armor", mail
});
if (testCase.isExpectSuccess()) {
assertEquals(0, exitCode, testCase.getTestDescription());
} else if (testCase.isExpectFailure()) {
assertNotEquals(0, exitCode, testCase.getTestDescription());
}
});
}
@AfterAll
public static void reset() {
GetCmd.setCertificateDiscoverer(GetCmd.DEFAULT_DISCOVERER);
}
}