aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src/test/java
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2026-05-12 15:33:19 +0200
committerGitHub <noreply@github.com>2026-05-12 15:33:19 +0200
commitc8abbd8bef5349ab892a2853a4e5e3d5ed16b670 (patch)
tree04e86de8b547ac2685165cdf652b6c16355ae3c3 /pdf-as-web/src/test/java
parente2bfdc313c0b6395d272624688b4ed1cba7ce967 (diff)
downloadpdf-as-4-c8abbd8bef5349ab892a2853a4e5e3d5ed16b670.tar.gz
pdf-as-4-c8abbd8bef5349ab892a2853a4e5e3d5ed16b670.tar.bz2
pdf-as-4-c8abbd8bef5349ab892a2853a4e5e3d5ed16b670.zip
Update docs & various fixes discovered in the process (#86)
- update documentation for pdf-as 5 - document the v2 json api - fix a number of documentation quirks - document `keyId` parameter - px (pixels) -> pt (pdf page units) - document --verify_level - remove a number of documented features that were never implemented: - `adobeSignFieldValue` and `sigLogoAltText` from signature profiles - `UNDERLINE` and `STRIKETHRU` from fonts - `num-bytes` parameter - `verify_only`/`sign_only` enable states for profiles - update mobile BKU base URL - update pdfbox backend default to 3 in sample configurations - consistently made boolean parsing from configuration files case permissive - add moa verification timeout - add support for BOLDITALIC to all base fonts, and for ITALIC to helvetica and courier - fix a number of small quirks - hibernate properties are now reloaded properly - fix the signature block parameter key regex - v1 json api now correctly checks for onlinebku/mobilebku being enabled - pdfbox 2 module correctly compares for integer equality regardless of cached boxed ints - test operationcountwatcher no longer sometimes breaks due to spring context differences
Diffstat (limited to 'pdf-as-web/src/test/java')
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java4
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java9
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java6
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java207
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java73
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java9
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java8
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java24
8 files changed, 261 insertions, 79 deletions
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java
index da735c8c..a311429d 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java
@@ -3,10 +3,7 @@ package at.gv.egiz.pdfas.web.servlets;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration;
-import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.SneakyThrows;
@@ -26,7 +23,6 @@ import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation;
import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source;
import org.springframework.mock.web.MockServletConfig;
import org.springframework.mock.web.MockServletContext;
-import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
//@Ignore
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java
index 3b5d223c..b9d7c152 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java
@@ -9,9 +9,6 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
-import jakarta.servlet.ServletConfig;
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -22,18 +19,12 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.BlockJUnit4ClassRunner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
-import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
-import at.gv.egiz.pdfas.common.settings.ISettings;
-import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
-import at.gv.egiz.pdfas.web.config.WebConfiguration;
import at.gv.egiz.pdfas.web.filter.UserAgentFilter;
-import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
import at.gv.egiz.pdfas.web.stats.StatisticEvent;
import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation;
import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source;
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
index 71761e1d..cfb0a375 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
@@ -32,7 +32,7 @@ import java.util.UUID;
"management.endpoints.web.exposure.include=metrics"
})
@AutoConfigureMockMvc
-public class JsonApiTest {
+public class JsonApiTest extends TestUtils.CanWatchOperationCount {
@Autowired MockMvc mvc;
@Autowired ObjectMapper om;
@@ -48,7 +48,7 @@ public class JsonApiTest {
@Test
@SneakyThrows
public void sign_single_jks() {
- try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:sign", "status:ok")) {
+ try (val watcher = OperationCountWatcher("operation:sign", "status:ok")) {
final String pdf = Base64.getEncoder().encodeToString(
IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf")));
@@ -86,7 +86,7 @@ public class JsonApiTest {
@Test
@SneakyThrows
public void verify_single() {
- try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:verify", "status:ok")) {
+ try (val watcher = OperationCountWatcher("operation:verify", "status:ok")) {
final String pdf = Base64.getEncoder().encodeToString(
IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/dummy-pdf-signed.pdf")));
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java
new file mode 100644
index 00000000..cd775eda
--- /dev/null
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java
@@ -0,0 +1,207 @@
+package at.gv.egiz.pdfas.web.test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import at.gv.egiz.pdfas.api.ws.PDFASSignParameters;
+import at.gv.egiz.pdfas.api.ws.PDFASSignRequest;
+import at.gv.egiz.pdfas.api.ws.PDFASVerifyRequest;
+import at.gv.egiz.pdfas.api.ws.PdfasSignMultipleRequest;
+import at.gv.egiz.pdfas.api.ws.PdfasSignMultipleResponse;
+import at.gv.egiz.pdfas.api.ws.PdfasSignedDocument;
+import at.gv.egiz.pdfas.api.ws.VerificationLevel;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.List;
+import lombok.Lombok;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Verifies that the JSON API wire names match the SOAP/JAXB wire names.
+ *
+ * <p>The web documentation says that the JSON API parameters are identical to the SOAP parameters. These
+ * tests lock that down for fields where the Java bean property name differs from the JAXB name, such as
+ * {@code invoke-url}, {@code preprocessorArguments}, {@code configurationOverrides}, and {@code documents}.
+ *
+ * <p>Expected current-state behavior: this test fails until the SOAP DTOs either carry explicit Jackson
+ * annotations or the web ObjectMapper is configured to honor JAXB annotations for JSON naming. Keep old JSON
+ * names as aliases when implementing the fix so existing clients remain compatible.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(properties = {
+ "management.endpoint.metrics.enabled=true",
+ "management.endpoints.web.exposure.include=metrics"
+})
+public class JsonSoapParameterNamingTest {
+ @Autowired ObjectMapper om;
+
+ static {
+ try {
+ System.setProperty("pdf-as-web.conf",
+ (new File(".").getCanonicalPath()) + "/src/test/resources/config/pdfas/pdf-as-web.properties");
+ } catch (Throwable t) {
+ throw Lombok.sneakyThrow(t);
+ }
+ }
+
+ @Test
+ public void signSingleUsesSoapParameterNamesForInputAndOutput() throws Exception {
+ final byte[] input = "pdf".getBytes(StandardCharsets.UTF_8);
+ final String json = "{"
+ + "\"requestID\":\"req-1\","
+ + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\","
+ + "\"verificationLevel\":\"intOnly\","
+ + "\"parameters\":{"
+ + "\"connector\":\"jks\","
+ + "\"position\":\"x:auto;y:auto;w:auto;p:auto;f:0\","
+ + "\"profile\":\"SIGNATURBLOCK_DE\","
+ + "\"invoke-url\":\"https://example.invalid/success\","
+ + "\"invoke-target\":\"_self\","
+ + "\"invoke-error-url\":\"https://example.invalid/error\","
+ + "\"transactionId\":\"tx-1\","
+ + "\"keyIdentifier\":\"key-1\","
+ + "\"qrCodeContent\":\"QR-CONTENT\","
+ + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]},"
+ + "\"configurationOverrides\":{\"propertyEntries\":[{\"key\":\"cfg\",\"value\":\"two\"}]}"
+ + "},"
+ + "\"signatureBlockParameter\":{\"subject\":\"Test User\"}"
+ + "}";
+
+ final PDFASSignRequest request = om.readValue(json, PDFASSignRequest.class);
+
+ assertEquals("req-1", request.getRequestID());
+ assertArrayEquals(input, request.getInputData());
+ assertEquals(VerificationLevel.INTEGRITY_ONLY, request.getVerificationLevel());
+ assertEquals("Test User", request.getSignatureBlockParameters().get("subject"));
+
+ final PDFASSignParameters parameters = request.getParameters();
+ assertNotNull(parameters);
+ assertEquals(PDFASSignParameters.Connector.JKS, parameters.getConnector());
+ assertEquals("https://example.invalid/success", parameters.getInvokeURL());
+ assertEquals("_self", parameters.getInvokeTarget());
+ assertEquals("https://example.invalid/error", parameters.getInvokeErrorURL());
+ assertEquals("tx-1", parameters.getTransactionId());
+ assertEquals("key-1", parameters.getKeyIdentifier());
+ assertEquals("QR-CONTENT", parameters.getQRCodeContent());
+ assertEquals("one", parameters.getPreprocessor().getMap().get("pre"));
+ assertEquals("two", parameters.getOverrides().getMap().get("cfg"));
+
+ final JsonNode serialized = om.valueToTree(request);
+ assertTrue(serialized.has("signatureBlockParameter"));
+ assertFalse(serialized.has("signatureBlockParameters"));
+
+ final JsonNode serializedParameters = serialized.get("parameters");
+ assertJsonHasOnlySoapName(serializedParameters, "invoke-url", "invokeURL", "invokeUrl");
+ assertJsonHasOnlySoapName(serializedParameters, "invoke-target", "invokeTarget");
+ assertJsonHasOnlySoapName(serializedParameters, "invoke-error-url", "invokeErrorURL", "invokeErrorUrl");
+ assertJsonHasOnlySoapName(serializedParameters, "preprocessorArguments", "preprocessor");
+ assertJsonHasOnlySoapName(serializedParameters, "configurationOverrides", "overrides");
+ assertJsonHasOnlySoapName(serializedParameters, "qrCodeContent", "QRCodeContent", "qrcodecontent");
+ assertEquals("jks", serializedParameters.get("connector").asText());
+ }
+
+ @Test
+ public void signMultipleUsesSoapDocumentsNameForInputAndOutput() throws Exception {
+ final byte[] input = "pdf-1".getBytes(StandardCharsets.UTF_8);
+ final String json = "{"
+ + "\"requestID\":\"multi-1\","
+ + "\"transactionId\":\"tx-multi\","
+ + "\"connector\":\"mobilebku\","
+ + "\"invoke-url\":\"https://example.invalid/success\","
+ + "\"invoke-target\":\"_top\","
+ + "\"invoke-error-url\":\"https://example.invalid/error\","
+ + "\"keyIdentifier\":\"kid\","
+ + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]},"
+ + "\"configurationOverrides\":{\"propertyEntries\":[{\"key\":\"cfg\",\"value\":\"two\"}]},"
+ + "\"signatureBlockParameter\":{\"subject\":\"Test User\"},"
+ + "\"verificationLevel\":\"full\","
+ + "\"documents\":[{"
+ + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\","
+ + "\"fileName\":\"one.pdf\","
+ + "\"position\":\"x:auto;y:auto\","
+ + "\"qrCodeContent\":\"QR\","
+ + "\"profile\":\"SIGNATURBLOCK_DE\""
+ + "}]"
+ + "}";
+
+ final PdfasSignMultipleRequest request = om.readValue(json, PdfasSignMultipleRequest.class);
+
+ assertEquals("multi-1", request.getRequestID());
+ assertEquals("tx-multi", request.getTransactionId());
+ assertEquals(PDFASSignParameters.Connector.MOBILEBKU, request.getConnector());
+ assertEquals("https://example.invalid/success", request.getInvokeUrl());
+ assertEquals("_top", request.getInvokeTarget());
+ assertEquals("https://example.invalid/error", request.getInvokeErrorUrl());
+ assertEquals("kid", request.getKeyIdentifier());
+ assertEquals("one", request.getPreprocessor().getMap().get("pre"));
+ assertEquals("two", request.getOverrides().getMap().get("cfg"));
+ assertEquals("Test User", request.getSignatureBlockParameters().get("subject"));
+ assertEquals(VerificationLevel.FULL_CERT_PATH, request.getVerificationLevel());
+ assertEquals(1, request.getInput().size());
+ assertArrayEquals(input, request.getInput().get(0).getInputData());
+ assertEquals("one.pdf", request.getInput().get(0).getFileName());
+
+ final JsonNode serialized = om.valueToTree(request);
+ assertJsonHasOnlySoapName(serialized, "invoke-url", "invokeUrl");
+ assertJsonHasOnlySoapName(serialized, "invoke-target", "invokeTarget");
+ assertJsonHasOnlySoapName(serialized, "invoke-error-url", "invokeErrorUrl");
+ assertJsonHasOnlySoapName(serialized, "preprocessorArguments", "preprocessor");
+ assertJsonHasOnlySoapName(serialized, "configurationOverrides", "overrides");
+ assertJsonHasOnlySoapName(serialized, "signatureBlockParameter", "signatureBlockParameters");
+ assertJsonHasOnlySoapName(serialized, "documents", "input");
+ assertEquals("mobilebku", serialized.get("connector").asText());
+
+ final PdfasSignedDocument signedDocument = new PdfasSignedDocument();
+ signedDocument.setFileName("one.pdf");
+ signedDocument.setOutputData("signed".getBytes(StandardCharsets.UTF_8));
+
+ final PdfasSignMultipleResponse response = new PdfasSignMultipleResponse();
+ response.setRequestID("multi-1");
+ response.setOutput(List.of(signedDocument));
+
+ final JsonNode serializedResponse = om.valueToTree(response);
+ assertJsonHasOnlySoapName(serializedResponse, "documents", "output");
+ assertEquals("one.pdf", serializedResponse.get("documents").get(0).get("fileName").asText());
+ }
+
+ @Test
+ public void verifyUsesSoapPreprocessorArgumentsNameForInputAndOutput() throws Exception {
+ final byte[] input = "signed-pdf".getBytes(StandardCharsets.UTF_8);
+ final String json = "{"
+ + "\"requestID\":\"verify-1\","
+ + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\","
+ + "\"verificationLevel\":\"intOnly\","
+ + "\"signatureIndex\":0,"
+ + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]}"
+ + "}";
+
+ final PDFASVerifyRequest request = om.readValue(json, PDFASVerifyRequest.class);
+
+ assertEquals("verify-1", request.getRequestID());
+ assertArrayEquals(input, request.getInputData());
+ assertEquals(VerificationLevel.INTEGRITY_ONLY, request.getVerificationLevel());
+ assertEquals(Integer.valueOf(0), request.getSignatureIndex());
+ assertEquals("one", request.getPreprocessor().getMap().get("pre"));
+
+ final JsonNode serialized = om.valueToTree(request);
+ assertJsonHasOnlySoapName(serialized, "preprocessorArguments", "preprocessor");
+ }
+
+ private static void assertJsonHasOnlySoapName(JsonNode node, String soapName, String... oldJsonNames) {
+ assertTrue("Expected SOAP/JAXB JSON property " + soapName + " in " + node, node.has(soapName));
+ for (String oldJsonName : oldJsonNames) {
+ assertFalse("Did not expect legacy Java-bean JSON property " + oldJsonName + " in " + node,
+ node.has(oldJsonName));
+ }
+ }
+}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java
index 10e87af6..46b0e405 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java
@@ -2,17 +2,11 @@ package at.gv.egiz.pdfas.web.test;
import at.gv.e_government.reference.namespace.moa._20020822_.*;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
-import at.gv.egiz.pdfas.lib.api.Configuration;
-import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;
-import at.gv.egiz.pdfas.lib.impl.configuration.ConfigurationImpl;
-import at.gv.egiz.pdfas.moa.MOAConnector;
import at.gv.egiz.pdfas.sigs.pades.PAdESSignerKeystore;
-import at.gv.egiz.pdfas.sigs.pkcs7detached.PKCS7DetachedSigner;
import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration;
import at.gv.egiz.pdfas.web.config.WebConfiguration;
import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
-import at.gv.egiz.pdfas.web.servlets.ExternSignServlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.JsonPath;
import iaik.x509.X509Certificate;
@@ -25,14 +19,11 @@ import org.apache.commons.io.IOUtils;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.parallel.Execution;
-import org.junit.jupiter.api.parallel.ExecutionMode;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
-import org.springframework.test.context.event.annotation.BeforeTestClass;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@@ -52,7 +43,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
"management.endpoints.web.exposure.include=metrics"
})
@AutoConfigureMockMvc
-public class MockMoaSigningTest {
+public class MockMoaSigningTest extends TestUtils.CanWatchOperationCount {
@Autowired MockMvc mvc;
@Autowired ObjectMapper om;
@Autowired PdfAsWebSpringConfiguration config;
@@ -184,42 +175,40 @@ public class MockMoaSigningTest {
@Test
@SneakyThrows
public void signWithMockMOA() {
- try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:sign", "status:ok")) {
- try (MockMoa moa = new MockMoa()) {
+ try (MockMoa moa = new MockMoa(); val watcher = OperationCountWatcher("operation:sign", "status:ok")) {
- final String pdf = Base64.getEncoder().encodeToString(
- IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf")));
+ final String pdf = Base64.getEncoder().encodeToString(
+ IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf")));
- final String signRequestID = UUID.randomUUID().toString();
- final String signRequest = om.writeValueAsString(
- Map.of(
- "requestID", signRequestID,
- "inputData", pdf,
- "parameters", Map.of(
- "connector", "moa",
- "keyIdentifier", moa.keyIdentifier,
- "transactionId", UUID.randomUUID().toString()
- )
- )
- );
+ final String signRequestID = UUID.randomUUID().toString();
+ final String signRequest = om.writeValueAsString(
+ Map.of(
+ "requestID", signRequestID,
+ "inputData", pdf,
+ "parameters", Map.of(
+ "connector", "moa",
+ "keyIdentifier", moa.keyIdentifier,
+ "transactionId", UUID.randomUUID().toString()
+ )
+ )
+ );
- final String signResponse = mvc.perform(
- post("/api/v2/sign/single")
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON)
- .content(signRequest)
- )
- .andExpect(status().isOk())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(jsonPath("$.requestID").value(signRequestID))
- .andExpect(jsonPath("$.signedPDF").isNotEmpty())
- .andExpect(jsonPath("$.verificationResponse").exists())
- .andReturn().getResponse().getContentAsString();
+ final String signResponse = mvc.perform(
+ post("/api/v2/sign/single")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content(signRequest)
+ )
+ .andExpect(status().isOk())
+ .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$.requestID").value(signRequestID))
+ .andExpect(jsonPath("$.signedPDF").isNotEmpty())
+ .andExpect(jsonPath("$.verificationResponse").exists())
+ .andReturn().getResponse().getContentAsString();
- final byte[] signedPDF = Base64.getDecoder().decode(JsonPath.<String>read(signResponse, "$.signedPDF"));
- assertArrayEquals("Signed data looks PDF-ish (%PDF- header)",
- new byte[]{'%', 'P', 'D', 'F', '-'}, Arrays.copyOfRange(signedPDF, 0, 5));
- }
+ final byte[] signedPDF = Base64.getDecoder().decode(JsonPath.<String>read(signResponse, "$.signedPDF"));
+ assertArrayEquals("Signed data looks PDF-ish (%PDF- header)",
+ new byte[]{'%', 'P', 'D', 'F', '-'}, Arrays.copyOfRange(signedPDF, 0, 5));
}
}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java
index 7d81465a..9c65fe0d 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java
@@ -8,7 +8,6 @@ import java.net.URL;
import java.util.UUID;
import at.gv.egiz.pdfas.api.ws.PDFASSigning;
-import at.gv.egiz.pdfas.web.servlets.ExternSignServlet;
import at.gv.egiz.pdfas.web.servlets.SimpleVerifyServletTest;
import jakarta.xml.ws.Service;
import lombok.val;
@@ -16,20 +15,12 @@ import org.apache.commons.io.IOUtils;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.BlockJUnit4ClassRunner;
import at.gv.egiz.pdfas.api.ws.PDFASSignParameters;
import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector;
import at.gv.egiz.pdfas.api.ws.PDFASSignRequest;
import at.gv.egiz.pdfas.api.ws.PDFASSignResponse;
-import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
-import at.gv.egiz.pdfas.common.settings.ISettings;
-import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
-import at.gv.egiz.pdfas.web.config.WebConfiguration;
-import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
-import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl;
import lombok.SneakyThrows;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.junit4.SpringRunner;
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java
index 7954415b..cd2ba077 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java
@@ -15,22 +15,14 @@ import org.apache.commons.io.IOUtils;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.BlockJUnit4ClassRunner;
import at.gv.egiz.pdfas.api.ws.PDFASSignParameters;
import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector;
import at.gv.egiz.pdfas.api.ws.PDFASSignRequest;
import at.gv.egiz.pdfas.api.ws.PDFASSignResponse;
-import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
-import at.gv.egiz.pdfas.common.settings.ISettings;
-import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
-import at.gv.egiz.pdfas.web.config.WebConfiguration;
-import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
-import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl;
import lombok.SneakyThrows;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
-import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import javax.xml.namespace.QName;
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java
index 4ee606bb..f6196ca9 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java
@@ -1,8 +1,14 @@
package at.gv.egiz.pdfas.web.test;
+import at.gv.egiz.pdfas.web.stats.impl.StatisticMicrometerBackend;
import com.jayway.jsonpath.JsonPath;
+import io.micrometer.core.instrument.MeterRegistry;
import lombok.val;
import org.junit.Assert;
+import org.junit.Before;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@@ -10,7 +16,7 @@ import java.util.Arrays;
import java.util.List;
public class TestUtils {
- public static double getOperationCount(MockMvc mvc, String... tags) throws Exception {
+ private static double getOperationCount(MockMvc mvc, String... tags) throws Exception {
val builder = MockMvcRequestBuilders.get("/actuator/metrics/pdfas_requests");
Arrays.stream(tags).forEach(tag -> builder.param("tag", tag));
val result =
@@ -23,8 +29,18 @@ public class TestUtils {
.get(0);
}
- public static AutoCloseable OperationCountWatcher(MockMvc mvc, String... tags) throws Exception {
- val initialCount = TestUtils.getOperationCount(mvc, tags);
- return () -> Assert.assertEquals(initialCount+1.0, TestUtils.getOperationCount(mvc, tags), 0.0001);
+ @SpringBootTest
+ @AutoConfigureMockMvc
+ public static abstract class CanWatchOperationCount {
+ @Autowired MockMvc mvc;
+ @Autowired private MeterRegistry meterRegistry;
+ @Before
+ public void rebindStatisticsBackend() {
+ StatisticMicrometerBackend.SpringContextProxy.meterRegistry = meterRegistry;
+ }
+ protected AutoCloseable OperationCountWatcher(String... tags) throws Exception {
+ val initialCount = TestUtils.getOperationCount(mvc, tags);
+ return () -> Assert.assertEquals(initialCount+1.0, TestUtils.getOperationCount(mvc, tags), 0.0001);
+ }
}
}