From 5cb5e4803e315bb717c9db882f60c848da8e660c Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Mon, 9 Dec 2019 09:36:48 +0100 Subject: Add "Forward-Response-to-Service" Test Cases - Refactor: Move genTimestamp from ITMzsServiceTest to TestUtils (because needed in multiple test cases). - application.yaml: Complete app-client config in config profile. --- pom.xml | 8 ++ src/test/java/at/gv/egiz/moazs/ITEndToEndTest.java | 14 +-- .../at/gv/egiz/moazs/ITForwardResponseTest.java | 121 +++++++++++++++++++++ .../java/at/gv/egiz/moazs/ITMzsServiceTest.java | 12 +- src/test/java/at/gv/egiz/moazs/TestUtils.java | 13 +++ src/test/resources/config/application.yaml | 6 +- 6 files changed, 148 insertions(+), 26 deletions(-) create mode 100644 src/test/java/at/gv/egiz/moazs/ITForwardResponseTest.java diff --git a/pom.xml b/pom.xml index 0351b0a..d905da2 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ 2.0.7-snapshot 1.0.9 2.22.1 + 1.0.5 http://reference.e-government.gv.at/namespace/zustellung/mzs/app2mzs# http://reference.e-government.gv.at/namespace/zustellung/mzs/persondata# @@ -172,6 +173,13 @@ 3.1.6 test + + + com.github.skjolber + mockito-soap-cxf + ${mockito-soap-cxf.version} + test + moa-zs diff --git a/src/test/java/at/gv/egiz/moazs/ITEndToEndTest.java b/src/test/java/at/gv/egiz/moazs/ITEndToEndTest.java index 5baddfc..eb761ec 100644 --- a/src/test/java/at/gv/egiz/moazs/ITEndToEndTest.java +++ b/src/test/java/at/gv/egiz/moazs/ITEndToEndTest.java @@ -34,7 +34,6 @@ import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; import at.gv.zustellung.msg.xsd.DeliveryRequestType; import at.gv.zustellung.tnvz.xsd.TNVZServicePort; import org.apache.commons.io.FileUtils; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; @@ -50,25 +49,16 @@ import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; -import java.nio.file.Paths; import java.util.Collection; import java.util.List; import java.util.function.Consumer; -import static at.gv.egiz.moazs.TestUtils.formatFile; -import static at.gv.egiz.moazs.TestUtils.sendSOAP; +import static at.gv.egiz.moazs.TestUtils.*; import static at.gv.zustellung.app2mzs.xsd.DeliveryNotificationACKType.deliveryNotificationACKTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.persondata.IdentificationType.Value.valueBuilder; import static at.gv.zustellung.app2mzs.xsd.persondata.IdentificationType.identificationTypeBuilder; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.PartialSuccess.partialSuccessBuilder; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; -import static java.net.http.HttpResponse.BodyHandlers.ofString; -import static org.apache.commons.io.FileUtils.readFileToString; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.mockito.Mockito.*; @@ -188,7 +178,7 @@ public class ITEndToEndTest { //prepare var appDeliveryID = "delivery-request-id"; var zsDeliveryID = "ZSDID-" + appDeliveryID; - var timestamp = ITMzsServiceTest.genTimeStamp().toXMLFormat(); + var timestamp = genTimeStamp().toXMLFormat(); var saveSinkFolder = "target/tmp/ITEndToEndTestOut"; delete(saveSinkFolder); diff --git a/src/test/java/at/gv/egiz/moazs/ITForwardResponseTest.java b/src/test/java/at/gv/egiz/moazs/ITForwardResponseTest.java new file mode 100644 index 0000000..34935ee --- /dev/null +++ b/src/test/java/at/gv/egiz/moazs/ITForwardResponseTest.java @@ -0,0 +1,121 @@ +package at.gv.egiz.moazs; + + +import at.gv.zustellung.app2mzs.xsd.ConfigType; +import at.gv.zustellung.app2mzs.xsd.DeliveryNotificationACKType; +import at.gv.zustellung.app2mzs.xsd.DeliveryNotificationType; +import at.gv.zustellung.app2mzs.xsd.Mzs2AppPortType; +import com.skjolberg.mockito.soap.SoapServiceRule; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.Map; + +import static at.gv.egiz.moazs.TestUtils.*; +import static at.gv.egiz.moazs.preprocess.ConfigProfileGenerator.DEFAULT_CONFIG_KEY; +import static at.gv.zustellung.app2mzs.xsd.DeliveryNotificationACKType.deliveryNotificationACKTypeBuilder; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = {MoaZS.class}) +@TestPropertySource(locations = {"/config/application.yaml"}, properties = { + "delivery-request-configuration-profiles.default.msg-response-sinks.forward-response-to-service.active:true" +}) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class ITForwardResponseTest { + + @Autowired + private Map deliveryRequestConfigs; + + @LocalServerPort + public int port; + + @Rule + public SoapServiceRule soap = SoapServiceRule.newInstance(); + + private Mzs2AppPortType mzs2appPort; + private final String notificationPath = "src/test/resources/at/gv/egiz/moazs/ITEndToEndTest/msg-delivery-notification.xml"; + private String frontendURI; + + @PostConstruct + void init() { + frontendURI = "http://localhost:" + port + "/services/msg/"; + } + + @Before + public void setup() { + var clientParameters = deliveryRequestConfigs.get(DEFAULT_CONFIG_KEY) + .getMsgResponseSinks() + .getForwardResponseToService() + .getAppClient(); + + mzs2appPort = soap.mock(Mzs2AppPortType.class, clientParameters.getURL()); + } + + @Test + public void ackSuccessfulReceipt() throws IOException, InterruptedException { + + when(mzs2appPort.forwardNotification(any())).thenAnswer(acknowledge()); + + var appDeliveryID = "ack-successful-receipt"; + var zsDeliveryID = "ZSDID-" + appDeliveryID; + var timestamp = genTimeStamp().toXMLFormat(); + var notification = formatFile(notificationPath, new String[] { + "any-system", zsDeliveryID, appDeliveryID, "any-watermark", timestamp, timestamp}); + + var response = sendSOAP(frontendURI, notification); + assertThat(response.body()).contains("DeliveryNotificationACK", appDeliveryID); + + } + + private Answer acknowledge() { + return i -> { + var notification = (DeliveryNotificationType) i.getArgument(0); + var appDeliveryID = notification.getSuccess().getAppDeliveryID(); + return deliveryNotificationACKTypeBuilder() + .withAppDeliveryID(appDeliveryID) + .build(); + }; + } + + @Test + public void nackFaultyReceipt() throws IOException, InterruptedException { + + when(mzs2appPort.forwardNotification(any())).thenAnswer(fault()); + + var appDeliveryID = "nack-faulty-receipt"; + var zsDeliveryID = "ZSDID-" + appDeliveryID; + var timestamp = genTimeStamp().toXMLFormat(); + var notification = formatFile(notificationPath, new String[] { + "any-system", zsDeliveryID, appDeliveryID, "any-watermark", timestamp, timestamp}); + + var response = sendSOAP(frontendURI, notification); + assertThat(response.body()).contains("soap:Fault"); + + } + + private Answer fault() { + return i -> { + throw new RuntimeException("Service offline"); + }; + } + + + + + + +} diff --git a/src/test/java/at/gv/egiz/moazs/ITMzsServiceTest.java b/src/test/java/at/gv/egiz/moazs/ITMzsServiceTest.java index e33a9cd..5719814 100644 --- a/src/test/java/at/gv/egiz/moazs/ITMzsServiceTest.java +++ b/src/test/java/at/gv/egiz/moazs/ITMzsServiceTest.java @@ -35,18 +35,15 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.test.context.junit4.SpringRunner; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Paths; -import java.util.GregorianCalendar; import java.util.function.Consumer; +import static at.gv.egiz.moazs.TestUtils.genTimeStamp; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.Success.successBuilder; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; import static java.net.http.HttpClient.Version; @@ -153,13 +150,6 @@ public class ITMzsServiceTest { } - public static XMLGregorianCalendar genTimeStamp() { - try { - return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()); - } catch (DatatypeConfigurationException e) { - throw new RuntimeException("ups"); - } - } } diff --git a/src/test/java/at/gv/egiz/moazs/TestUtils.java b/src/test/java/at/gv/egiz/moazs/TestUtils.java index 96d3a22..8120af1 100644 --- a/src/test/java/at/gv/egiz/moazs/TestUtils.java +++ b/src/test/java/at/gv/egiz/moazs/TestUtils.java @@ -2,6 +2,9 @@ package at.gv.egiz.moazs; import org.apache.commons.io.FileUtils; +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; import java.io.File; import java.io.IOException; import java.net.URI; @@ -9,6 +12,7 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; +import java.util.GregorianCalendar; import static java.net.http.HttpResponse.BodyHandlers.ofString; @@ -33,4 +37,13 @@ public class TestUtils { return client.send(request, ofString()); } + + public static XMLGregorianCalendar genTimeStamp() { + try { + return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()); + } catch (DatatypeConfigurationException e) { + throw new RuntimeException("ups"); + } + + } } diff --git a/src/test/resources/config/application.yaml b/src/test/resources/config/application.yaml index b6f8ef8..73f1ed9 100644 --- a/src/test/resources/config/application.yaml +++ b/src/test/resources/config/application.yaml @@ -132,9 +132,9 @@ delivery-request-configuration-profiles: active: false # Mandatory if activated app-client: - url: http://service.which.implements.mzs2app.wsdl/services/ - # connection-timeout - # receive-timeout + url: http://localhost:2526/ + connection-timeout: 30000 + receive-timeout: 30000 # ssl... # Optional -- cgit v1.2.3