/* * Copyright 2010-2017 Norwegian Agency for Public Management and eGovernment (Difi) * * Licensed under the EUPL, Version 1.1 or – as soon they * will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * * You may not use this work except in compliance with the Licence. * * You may obtain a copy of the Licence at: * * https://joinup.ec.europa.eu/community/eupl/og_page/eupl * * Unless required by applicable law or agreed to in * writing, software distributed under the Licence is * distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the Licence for the specific language governing * permissions and limitations under the Licence. */ package no.difi.oxalis.outbound.transmission; import com.google.inject.Inject; import com.google.inject.name.Named; import no.difi.oxalis.test.identifier.PeppolDocumentTypeIdAcronym; import no.difi.oxalis.test.identifier.PeppolProcessTypeIdAcronym; import no.difi.oxalis.test.identifier.WellKnownParticipant; import no.difi.oxalis.api.lang.OxalisException; import no.difi.oxalis.api.model.TransmissionIdentifier; import no.difi.oxalis.api.outbound.TransmissionRequest; import no.difi.oxalis.commons.guice.GuiceModuleLoader; import no.difi.oxalis.sniffer.PeppolStandardBusinessHeader; import no.difi.oxalis.sniffer.identifier.ParticipantId; import no.difi.oxalis.test.lookup.MockLookupModule; import no.difi.vefa.peppol.common.model.Endpoint; import no.difi.vefa.peppol.common.model.Header; import no.difi.vefa.peppol.common.model.ParticipantIdentifier; import no.difi.vefa.peppol.common.model.TransportProfile; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Guice; import org.testng.annotations.Test; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.security.cert.X509Certificate; import java.util.Map; import static org.testng.Assert.*; /** * These tests needs TransmissionRequestBuilder to run in TEST-mode to be able to override values * * @author steinar * @author thore */ @Guice(modules = GuiceModuleLoader.class) public class TransmissionRequestBuilderTest { @Inject @Named("test-files-with-identification") public Map<String, PeppolStandardBusinessHeader> testFilesForIdentification; @Inject @Named("test-non-ubl-documents") public Map<String, PeppolStandardBusinessHeader> testNonUBLFiles; @Inject @Named("sample-xml-with-sbdh") InputStream inputStreamWithSBDH; @Inject @Named("sample-xml-no-sbdh") InputStream noSbdhInputStream; @Inject @Named("sample-xml-missing-metadata") InputStream missingMetadataInputStream; @Inject TransmissionRequestBuilder transmissionRequestBuilder; @Inject private X509Certificate certificate; @BeforeMethod public void setUp() { MockLookupModule.resetService(); // Request overriding transmissionRequestBuilder.setTransmissionBuilderOverride(true); inputStreamWithSBDH.mark(Integer.MAX_VALUE); noSbdhInputStream.mark(Integer.MAX_VALUE); } @AfterMethod public void tearDown() throws IOException { inputStreamWithSBDH.reset(); noSbdhInputStream.reset(); } @Test public void makeSureWeAllowOverrides() { assertNotNull(transmissionRequestBuilder); assertTrue(transmissionRequestBuilder.isOverrideAllowed(), "Overriding transmission request parameters is not permitted!"); } @Test public void createTransmissionRequestBuilderWithOnlyTheMessageDocument() throws Exception { assertNotNull(transmissionRequestBuilder); assertNotNull(inputStreamWithSBDH); transmissionRequestBuilder.payLoad(inputStreamWithSBDH); // Builds the actual transmission request TransmissionRequest transmissionRequest = transmissionRequestBuilder.build(); PeppolStandardBusinessHeader sbdh = transmissionRequestBuilder.getEffectiveStandardBusinessHeader(); assertNotNull(sbdh); assertEquals(sbdh.getRecipientId(), WellKnownParticipant.DIFI_TEST); assertNotNull(transmissionRequest.getEndpoint()); assertNotNull(transmissionRequest.getHeader()); assertEquals(transmissionRequest.getHeader().getReceiver(), WellKnownParticipant.DIFI_TEST); assertEquals(transmissionRequest.getEndpoint().getTransportProfile(), TransportProfile.of("busdox-transport-as2-ver1p0")); assertNotNull(transmissionRequest.getHeader().getIdentifier()); } @Test public void xmlWithNoSBDH() throws Exception { TransmissionRequestBuilder builder = transmissionRequestBuilder.payLoad(noSbdhInputStream) .receiver(WellKnownParticipant.DIFI_TEST); TransmissionRequest request = builder.build(); assertNotNull(builder); assertNotNull(builder.getEffectiveStandardBusinessHeader(), "Effective SBDH is null"); assertEquals(builder.getEffectiveStandardBusinessHeader().getRecipientId(), WellKnownParticipant.DIFI_TEST, "Receiver has not been overridden"); assertEquals(request.getHeader().getReceiver(), WellKnownParticipant.DIFI_TEST); } @Test public void overrideFields() throws Exception { TransmissionRequestBuilder builder = transmissionRequestBuilder.payLoad(noSbdhInputStream) .sender(WellKnownParticipant.DIFI_TEST) .receiver(WellKnownParticipant.U4_TEST) .documentType(PeppolDocumentTypeIdAcronym.ORDER.toVefa()); TransmissionRequest request = builder.build(); assertEquals(request.getEndpoint().getTransportProfile(), TransportProfile.of("busdox-transport-as2-ver1p0")); assertEquals(request.getHeader().getReceiver(), WellKnownParticipant.U4_TEST); assertEquals(request.getHeader().getSender(), WellKnownParticipant.DIFI_TEST); assertEquals(request.getHeader().getDocumentType(), PeppolDocumentTypeIdAcronym.ORDER.toVefa()); } @Test public void testOverrideEndPoint() throws Exception { assertNotNull(inputStreamWithSBDH); URI url = URI.create("http://localhost:8080/oxalis/as2"); TransmissionRequest request = transmissionRequestBuilder .payLoad(inputStreamWithSBDH) .overrideAs2Endpoint(Endpoint.of(TransportProfile.AS2_1_0, url, certificate)) .build(); assertEquals(request.getEndpoint().getTransportProfile(), TransportProfile.AS2_1_0); assertEquals(request.getEndpoint().getAddress(), url); } @Test public void testOverrideOfAllValues() throws Exception { TransmissionIdentifier transmissionIdentifier = TransmissionIdentifier.of("messageid"); TransmissionRequest request = transmissionRequestBuilder .payLoad(inputStreamWithSBDH) .sender(WellKnownParticipant.DIFI_TEST) .receiver(WellKnownParticipant.U4_TEST) .documentType(PeppolDocumentTypeIdAcronym.ORDER.toVefa()) .processType(PeppolProcessTypeIdAcronym.ORDER_ONLY.toVefa()) .build(); Header header = request.getHeader(); assertEquals(header.getSender(), WellKnownParticipant.DIFI_TEST); assertEquals(header.getReceiver(), WellKnownParticipant.U4_TEST); assertEquals(header.getDocumentType(), PeppolDocumentTypeIdAcronym.ORDER.toVefa()); assertEquals(header.getProcess(), PeppolProcessTypeIdAcronym.ORDER_ONLY.toVefa()); assertNotEquals(header.getIdentifier().getIdentifier(), transmissionIdentifier.getIdentifier(), "The SBDH instanceId should not be equal to the AS2 transmission identifier"); } /** * If a messageId is not provided a default one is created before sending. */ @Test public void testMessageIdSuppliedByBuilder() throws OxalisException { TransmissionRequest request = transmissionRequestBuilder .payLoad(inputStreamWithSBDH) .sender(WellKnownParticipant.DIFI_TEST) .receiver(WellKnownParticipant.U4_TEST) .documentType(PeppolDocumentTypeIdAcronym.ORDER.toVefa()) .processType(PeppolProcessTypeIdAcronym.ORDER_ONLY.toVefa()) .build(); assertNotNull(request.getHeader().getIdentifier()); transmissionRequestBuilder.reset(); TransmissionRequest request2 = transmissionRequestBuilder.payLoad(noSbdhInputStream) .sender(WellKnownParticipant.DIFI_TEST) .receiver(WellKnownParticipant.U4_TEST) .documentType(PeppolDocumentTypeIdAcronym.ORDER.toVefa()) .processType(PeppolProcessTypeIdAcronym.ORDER_ONLY.toVefa()) .build(); assertNotNull(request2.getHeader().getIdentifier()); } @Test public void makeSureWeDetectMissingProperties() { try { transmissionRequestBuilder .payLoad(missingMetadataInputStream) .build(); fail("The build() should have failed indicating missing properties"); } catch (Exception ex) { assertEquals(ex.getMessage(), "TransmissionRequest can not be built, missing [recipientId, senderId] metadata."); } } @Test public void testIssue250() throws Exception { InputStream resourceAsStream = getClass().getResourceAsStream("/Issue250-sample-invoice.xml"); assertNotNull(resourceAsStream); transmissionRequestBuilder.reset(); TransmissionRequest transmissionRequest = transmissionRequestBuilder.payLoad(resourceAsStream).build(); ParticipantIdentifier recipientId = transmissionRequest.getHeader().getReceiver(); assertEquals(recipientId, new ParticipantId("9954:111111111").toVefa()); assertNotNull(transmissionRequest.getHeader().getIdentifier()); } }