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

80 lines
2.7 KiB
Java
Raw Normal View History

// 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;
2022-03-17 15:27:28 +01:00
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
2022-03-21 12:33:59 +01:00
import pgp.wkd.cli.PGPainlessCertificateParser;
import pgp.wkd.cli.WKDCLI;
2022-04-11 13:47:41 +02:00
import pgp.wkd.cli.command.GetCmd;
2022-03-21 12:33:59 +01:00
import pgp.wkd.discovery.CertificateDiscoverer;
2022-04-05 16:11:06 +02:00
import pgp.wkd.discovery.ValidatingCertificateDiscoverer;
2022-03-19 14:08:35 +01:00
import pgp.wkd.discovery.DiscoveryMethod;
import pgp.wkd.test_suite.TestCase;
import pgp.wkd.test_suite.TestSuite;
import pgp.wkd.test_suite.TestSuiteGenerator;
2022-03-13 16:23:42 +01:00
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
2022-03-17 15:27:28 +01:00
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 {
2022-03-13 16:23:42 +01:00
// Temporary, directory based WKD
Path tempPath = Files.createTempDirectory("wkd-test");
File tempFile = tempPath.toFile();
tempFile.deleteOnExit();
2022-03-13 16:23:42 +01:00
// Generate test certificates inside the temp wkd
String domain = "example.com";
TestSuiteGenerator generator = new TestSuiteGenerator(domain);
2022-03-19 14:08:35 +01:00
suite = generator.generateTestSuiteInDirectory(tempFile, DiscoveryMethod.direct);
2022-03-13 16:23:42 +01:00
// Fetch certificates from a local directory instead of the internetzzz.
2022-04-05 16:11:06 +02:00
CertificateDiscoverer discoverer = new ValidatingCertificateDiscoverer(
2022-03-21 12:33:59 +01:00
new PGPainlessCertificateParser(), new DirectoryBasedCertificateFetcher(tempPath));
2022-04-11 13:47:41 +02:00
GetCmd.setCertificateDiscoverer(discoverer);
}
2022-03-17 15:27:28 +01:00
@TestFactory
public Iterable<DynamicTest> testsFromTestSuite() {
return suite.getTestCases()
.stream()
2022-03-17 15:31:39 +01:00
.map(TestSuiteTestRunner::toDynamicTest)
.collect(Collectors.toList());
}
2022-03-17 15:27:28 +01:00
2022-03-17 15:31:39 +01:00
public static DynamicTest toDynamicTest(TestCase testCase) {
return DynamicTest.dynamicTest(testCase.getTestTitle(), () -> {
2022-03-17 15:27:28 +01:00
2022-03-17 15:31:39 +01:00
String mail = testCase.getLookupMailAddress();
int exitCode = WKDCLI.execute(new String[] {
2022-04-11 13:47:41 +02:00
"get", "--armor", mail
2022-03-17 15:31:39 +01:00
});
if (testCase.isExpectSuccess()) {
assertEquals(0, exitCode, testCase.getTestDescription());
} else if (testCase.isExpectFailure()) {
2022-03-17 15:31:39 +01:00
assertNotEquals(0, exitCode, testCase.getTestDescription());
}
});
}
@AfterAll
public static void reset() {
2022-04-11 13:47:41 +02:00
GetCmd.setCertificateDiscoverer(GetCmd.DEFAULT_DISCOVERER);
}
}