diff options
| author | Jakob Heher <jakob.heher@iaik.tugraz.at> | 2026-05-12 15:33:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-12 15:33:19 +0200 |
| commit | c8abbd8bef5349ab892a2853a4e5e3d5ed16b670 (patch) | |
| tree | 04e86de8b547ac2685165cdf652b6c16355ae3c3 /pdf-as-web/src/test/java/at/gv | |
| parent | e2bfdc313c0b6395d272624688b4ed1cba7ce967 (diff) | |
| download | pdf-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/at/gv')
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); + } } } |
