From e6ed3bbba873b6a92dade1185aae6182641a778d Mon Sep 17 00:00:00 2001 From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu> Date: Sun, 16 Jul 2023 06:46:03 +0200 Subject: [PATCH] Add resource extension SPI unit tests --- .../def/DomiSMPJsonResourceExample.java | 2 +- .../def/DomiSMPPropertyResourceExample.java | 2 +- .../ec/smp/spi/def/OasisCppaCppDocument.java | 2 +- .../ec/smp/spi/OasisCPPA3ExtensionTest.java | 54 +++++++++ .../smp/spi/def/OasisCppaCppDocumentTest.java | 76 ++++++++++++ .../smp/spi/handler/AbstractHandlerTest.java | 112 ++++++++++++++++++ .../spi/handler/OasisCppa3CppHandlerTest.java | 78 +++++++----- .../examples/signed-cpp-With-DOCTYPE.xml | 75 ++++++++++++ .../smp/spi/def/OasisSMPServiceGroup10.java | 2 +- .../smp/spi/def/OasisSMPServiceGroup20.java | 2 +- .../spi/def/OasisSMPServiceMetadata20.java | 2 +- .../spi/def/OasisSMPServiceGroup10Test.java | 79 ++++++++++++ .../spi/def/OasisSMPServiceGroup20Test.java | 79 ++++++++++++ .../def/OasisSMPServiceMetadata10Test.java | 65 ++++++++++ .../def/OasisSMPServiceMetadata20Test.java | 65 ++++++++++ .../config/init/SMPExtensionInitializer.java | 2 +- .../resource/AbstractResourceHandler.java | 4 +- .../spi/resource/ResourceDefinitionSpi.java | 2 +- 18 files changed, 666 insertions(+), 37 deletions(-) create mode 100644 smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java create mode 100644 smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java create mode 100644 smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java create mode 100644 smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java diff --git a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java index 8b801b5ec..440e23089 100644 --- a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java +++ b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java @@ -52,7 +52,7 @@ public class DomiSMPJsonResourceExample implements ResourceDefinitionSpi { } @Override - public List<SubresourceDefinitionSpi> getSuresourceSpiList() { + public List<SubresourceDefinitionSpi> getSubresourceSpiList() { return Collections.emptyList(); } diff --git a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java index 61f0d29a1..d98bea295 100644 --- a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java +++ b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java @@ -52,7 +52,7 @@ public class DomiSMPPropertyResourceExample implements ResourceDefinitionSpi { } @Override - public List<SubresourceDefinitionSpi> getSuresourceSpiList() { + public List<SubresourceDefinitionSpi> getSubresourceSpiList() { return Collections.emptyList(); } diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java b/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java index f919d7818..abcf6f400 100644 --- a/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java +++ b/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java @@ -52,7 +52,7 @@ public class OasisCppaCppDocument implements ResourceDefinitionSpi { } @Override - public List<SubresourceDefinitionSpi> getSuresourceSpiList() { + public List<SubresourceDefinitionSpi> getSubresourceSpiList() { return Collections.emptyList(); } diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java new file mode 100644 index 000000000..216c5792b --- /dev/null +++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java @@ -0,0 +1,54 @@ +package eu.europa.ec.smp.spi; + +import eu.europa.ec.smp.spi.def.OasisCppaCppDocument; +import eu.europa.ec.smp.spi.resource.ResourceDefinitionSpi; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class OasisCPPA3ExtensionTest { + OasisCppaCppDocument mockOasisCppaCppDocument = Mockito.mock(OasisCppaCppDocument.class); + + OasisCPPA3Extension testInstance = new OasisCPPA3Extension(mockOasisCppaCppDocument); + @Test + void testIdentifier() { + + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-cppa3-extension", result); + } + + @Test + void testName() { + String result = testInstance.name(); + assertEquals("Oasis CPPA 3.0", result); + } + + @Test + void testDescription() { + String result = testInstance.description(); + assertEquals("The extension implements Oasis CPPA-CPP document handlers", result); + } + + @Test + void testVersion() { + String result = testInstance.version(); + assertEquals("1.0", result); + } + + @Test + void testResourceTypes() { + List<ResourceDefinitionSpi> result = testInstance.resourceTypes(); + assertEquals(1, result.size()); + assertEquals(mockOasisCppaCppDocument, result.get(0)); + } + + @Test + void testPayloadValidators() { + List<PayloadValidatorSpi> result = testInstance.payloadValidators(); + assertEquals(0, result.size()); + } +} diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java new file mode 100644 index 000000000..ad2430b6f --- /dev/null +++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java @@ -0,0 +1,76 @@ +package eu.europa.ec.smp.spi.def; + +import eu.europa.ec.smp.spi.OasisCPPA3Extension; +import eu.europa.ec.smp.spi.handler.OasisCppa3CppHandler; +import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi; +import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class OasisCppaCppDocumentTest { + + OasisCppa3CppHandler mockOasisCppa3CppHandler = Mockito.mock(OasisCppa3CppHandler.class); + OasisCppaCppDocument testInstance = new OasisCppaCppDocument(mockOasisCppa3CppHandler); + + @Test + void identifier() { + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-cppa-3.0-cpp", result); + } + + @Test + void defaultUrlSegment() { + String result = testInstance.defaultUrlSegment(); + + assertEquals("cpp", result); + } + + @Test + void name() { + String result = testInstance.name(); + + assertEquals("Oasis CPPA3 CPP document", result); + } + + @Test + void description() { + String result = testInstance.description(); + + assertEquals("Oasis CPPA-CPP document", result); + } + + @Test + void mimeType() { + String result = testInstance.mimeType(); + + assertEquals("text/xml", result); + } + + @Test + void getSubresourceSpiList() { + List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList(); + + assertTrue(result.isEmpty()); + } + + @Test + void getResourceHandler() { + ResourceHandlerSpi result = testInstance.getResourceHandler(); + + assertEquals(mockOasisCppa3CppHandler, result); + } + + @Test + void testToString() { + String result = testInstance.toString(); + + MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-cppa-3.0-cpp")); + } +} diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java new file mode 100644 index 000000000..fb26f7f5a --- /dev/null +++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java @@ -0,0 +1,112 @@ +package eu.europa.ec.smp.spi.handler; + +import eu.europa.ec.smp.spi.api.SmpDataServiceApi; +import eu.europa.ec.smp.spi.api.SmpIdentifierServiceApi; +import eu.europa.ec.smp.spi.api.SmpXmlSignatureApi; +import eu.europa.ec.smp.spi.api.model.RequestData; +import eu.europa.ec.smp.spi.api.model.ResourceIdentifier; +import eu.europa.ec.smp.spi.api.model.ResponseData; +import eu.europa.ec.smp.spi.exceptions.ResourceException; +import org.mockito.Mockito; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.util.Collections; + +import static org.junit.Assert.assertTrue; + +abstract class AbstractHandlerTest { + protected SmpDataServiceApi mockSmpDataApi = Mockito.mock(SmpDataServiceApi.class); + protected SmpIdentifierServiceApi mockSmpIdentifierServiceApi = Mockito.mock(SmpIdentifierServiceApi.class); + protected SmpXmlSignatureApi mockSignatureApi = Mockito.mock(SmpXmlSignatureApi.class); + + + protected RequestData requestData = Mockito.mock(RequestData.class); + protected ResponseData responseData = Mockito.mock(ResponseData.class); + + void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException { + readResourceAction(resourceName, resourceIdentifier, null); + } + + void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Mockito.doReturn(baos).when(responseData).getOutputStream(); + Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream(); + Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); + if (subresourceIdentifier != null) { + Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier(); + } + + Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + getTestInstance().readResource(requestData, responseData); + + assertTrue(baos.size() > 0); + } + + void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException { + storeResourceAction(resourceName, resourceIdentifier, null); + } + + void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Mockito.doReturn(baos).when(responseData).getOutputStream(); + Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream(); + Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); + if (subresourceIdentifier != null) { + Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier(); + Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + } + Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + + getTestInstance().storeResource(requestData, responseData); + } + + void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException { + validateResourceAction(resourceName, resourceIdentifier, null); + } + + void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException { + // validate + if (subresourceIdentifier != null) { + Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier(); + Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + } + Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream(); + Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); + Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + + + + getTestInstance().validateResource(requestData); + } + + + void generateResourceAction(ResourceIdentifier resourceIdentifier) throws ResourceException { + generateResourceAction(resourceIdentifier, null); + } + + void generateResourceAction(ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); + if (subresourceIdentifier != null) { + Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier(); + Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1])); + + } + Mockito.doReturn(baos).when(responseData).getOutputStream(); + + getTestInstance().generateResource(requestData, responseData, Collections.emptyList()); + assertTrue(baos.size() > 0); + + // The generated resource should be valid + ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray()); + Mockito.doReturn(bios).when(requestData).getResourceInputStream(); + Mockito.doReturn(resourceIdentifier).when(mockSmpIdentifierServiceApi).normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString()); + + getTestInstance().validateResource(requestData); + } + + abstract AbstractHandler getTestInstance(); +} diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java index 7c07518fc..2b0799338 100644 --- a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java +++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java @@ -6,8 +6,10 @@ import eu.europa.ec.smp.spi.api.SmpXmlSignatureApi; import eu.europa.ec.smp.spi.api.model.RequestData; import eu.europa.ec.smp.spi.api.model.ResourceIdentifier; import eu.europa.ec.smp.spi.api.model.ResponseData; +import eu.europa.ec.smp.spi.exceptions.CPPARuntimeException; import eu.europa.ec.smp.spi.exceptions.ResourceException; -import org.junit.Test; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.xml.sax.SAXParseException; @@ -18,48 +20,70 @@ import java.util.Collections; import static org.junit.Assert.*; -public class OasisCppa3CppHandlerTest { +public class OasisCppa3CppHandlerTest extends AbstractHandlerTest{ - SmpDataServiceApi smpDataApi = Mockito.mock(SmpDataServiceApi.class); - SmpIdentifierServiceApi smpIdentifierServiceApi = Mockito.mock(SmpIdentifierServiceApi.class); - SmpXmlSignatureApi smpXmlSignatureApi = Mockito.mock(SmpXmlSignatureApi.class); - OasisCppa3CppHandler testInstance = new OasisCppa3CppHandler(smpDataApi, smpIdentifierServiceApi, smpXmlSignatureApi); + @Override + AbstractHandler getTestInstance() { + return new OasisCppa3CppHandler(mockSmpDataApi, mockSmpIdentifierServiceApi, mockSignatureApi); + } + @Test + void testGenerateResource() throws ResourceException { - RequestData requestData = Mockito.mock(RequestData.class); - ResponseData responseData = Mockito.mock(ResponseData.class); + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test"); + generateResourceAction(resourceIdentifier); + } @Test - public void generateAndValidateResource() throws ResourceException { - ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test"); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); - Mockito.doReturn(baos).when(responseData).getOutputStream(); - - testInstance.generateResource(requestData, responseData, Collections.emptyList()); + void validateResourceOK() throws ResourceException { + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa"); + // validate + validateResourceAction("/examples/signed-cpp.xml", resourceIdentifier); + } - Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier(); - Mockito.doReturn(baos).when(responseData).getOutputStream(); - assertTrue(baos.size()>0); + @Test + void validateResourceDisallowedDocType() { + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa"); + // validate + CPPARuntimeException result = assertThrows(CPPARuntimeException.class, + () -> validateResourceAction("/examples/signed-cpp-With-DOCTYPE.xml", resourceIdentifier)); + MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("DOCTYPE is disallowed")); + } + @Test + void validateResourceInvalidIdentifier() { + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb:utestt", "ehealth-actorid-qns"); // validate - ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray()); - Mockito.doReturn(bios).when(requestData).getResourceInputStream(); - Mockito.doReturn(resourceIdentifier).when(smpIdentifierServiceApi).normalizeResourceIdentifier(Mockito.anyString(),Mockito.anyString()); + ResourceException result = assertThrows(ResourceException.class, + () -> validateResourceAction("/examples/signed-cpp.xml", resourceIdentifier)); + MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Non of participant identifiers match to URL parameter ")); + } - testInstance.validateResource(requestData); + @Test + void validateResourceInvalidScheme() { + + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa"); + // validate + ResourceException result = assertThrows(ResourceException.class, + () -> validateResourceAction("/examples/signed-cpp-invalid.xml", resourceIdentifier)); + MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException")); } @Test - public void validateOasisCPPASchema() throws ResourceException { - OasisCppa3CppHandler.validateOasisCPPASchema(OasisCppa3CppHandlerTest.class.getResourceAsStream("/examples/signed-cpp.xml")); + void readResourceOK() throws ResourceException { + String resourceName = "/examples/signed-cpp.xml"; + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa"); + + readResourceAction(resourceName, resourceIdentifier); } + @Test - public void validateOasisCPPASchemaInvalid() { + void storeResourceOK() throws ResourceException { + String resourceName = "/examples/signed-cpp.xml"; + ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa"); - ResourceException exception = assertThrows(ResourceException.class, ()-> OasisCppa3CppHandler.validateOasisCPPASchema(OasisCppa3CppHandlerTest.class.getResourceAsStream("/examples/signed-cpp-invalid.xml"))); - assertEquals(SAXParseException.class, exception.getCause().getClass()); + storeResourceAction(resourceName, resourceIdentifier); } } diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml b/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml new file mode 100644 index 000000000..5f2a3e952 --- /dev/null +++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE testingxxe [<!ENTITY value "SAMPLE VALUE" >]> +<CPP xmlns="http://docs.oasis-open.org/ebcore/ns/cppa/v3.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.w3.org/2002/03/xkms#" xmlns:ns4="http://www.w3.org/2001/04/xmlenc#"> + <ProfileInfo> + <ProfileIdentifier>TestProfileId</ProfileIdentifier> + <Description>Test profile</Description> + </ProfileInfo> + <PartyInfo> + <PartyName>cppa</PartyName> + <PartyId type="aa-aa-aa">cppa</PartyId> + <Certificate id="sing-cert-001"> + <ns2:KeyInfo Id="sing-keyInfo-001"> + <ns2:KeyName>cn=sing-keyInfo-001</ns2:KeyName> + <ns2:X509Data> + <ns2:X509Certificate>UmVwbGFjZSBzaW5nLWtleUluZm8tMDAxIHRoaXMgd2l0aCByZWFsIGNlcnRpZmljYXRlIQ==</ns2:X509Certificate> + </ns2:X509Data> + </ns2:KeyInfo> + </Certificate> + <Certificate id="enc-cert-001"> + <ns2:KeyInfo Id="enc-keyInfo-001"> + <ns2:KeyName>cn=enc-keyInfo-001</ns2:KeyName> + <ns2:X509Data> + <ns2:X509Certificate>UmVwbGFjZSBlbmMta2V5SW5mby0wMDEgdGhpcyB3aXRoIHJlYWwgY2VydGlmaWNhdGUh</ns2:X509Certificate> + </ns2:X509Data> + </ns2:KeyInfo> + </Certificate> + <CertificateDefaults> + <SigningCertificateRef certId="enc-cert-001"/> + <EncryptionCertificateRef certId="enc-cert-001"/> + </CertificateDefaults> + </PartyInfo> + <ServiceSpecification name="MailService"> + <PartyRole name="MailSender"/> + <CounterPartyRole name="MailReceiver"/> + <ServiceBinding> + <Service>SubmitMail</Service> + <ActionBinding action="SubmitMail" id="SubmitMailId" sendOrReceive="send"> + <ChannelId>eDeliverAS4ChannelId</ChannelId> + <PayloadProfileId>mailProfileId</PayloadProfileId> + </ActionBinding> + </ServiceBinding> + </ServiceSpecification> + <ebMS3Channel id="eDeliverAS4ChannelId" transport="eDeliverAS4EndpointId"> + <ChannelProfile>bdxr-transport-ebms3-as4-v1p0</ChannelProfile> + </ebMS3Channel> + <HTTPTransport id="eDeliverAS4EndpointId"> + <Endpoint>http://localhost:8080/domibus/msh</Endpoint> + <ChunkedTransferCoding>true</ChunkedTransferCoding> + </HTTPTransport> + <PayloadProfile id="mailProfileId"> + <Description>Example mail profile</Description> + <PayloadPart maxOccurs="100" minOccurs="1"> + <PartName>MailPart</PartName> + <MIMEContentType>text/plain</MIMEContentType> + </PayloadPart> + </PayloadProfile> + <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>GLti4rdP0gxEtQ5cd3sahiLpELAnxOZUAA01TLHAmnA=</DigestValue></Reference></SignedInfo><SignatureValue>XS9mKQaOxDcD98rAdexLl0/UAHp+V0PmXZeAcw85ma2h12LWbQ0kdi0jdC6yci6RCg8RA1AvAoLY + zVdhaIhlg/wbWzi7cGOZHtG0xyF0DXPk7GnIekeqn8urtVswixe27cUUZrvwzn5z56qTtj1uhJ11 + eNi0x1p3W0kIgCkTGvyCS1gaAUouXO+L+s5i7Svs207s4V63xnwHJoGH1DRuRAr5p/7sSxUqGfyf + rig8UIZM65mC2dZsWXehzHZylaebdn64MMSy97tgLuwYWPvjNO+uEjhisoT28a5Ut3JskzaqvnMd + bKJMUNPDPUZ742UqawcXMVkJc1bzi8WQ9xTF/Q==</SignatureValue><KeyInfo><X509Data><X509SubjectName>C=BE,O=DIGITAL,OU=eDelivery,CN=SMP_TEST-PRE-SET-EXAMPLE</X509SubjectName><X509Certificate>MIIDQjCCAiqgAwIBAgIBCjANBgkqhkiG9w0BAQsFADBfMRMwEQYDVQQDDApyb290Q05UZXN0MQsw + CQYDVQQLDAJCNDEOMAwGA1UECgwFRElHSVQxETAPBgNVBAcMCEJydXNzZWxzMQswCQYDVQQIDAJC + RTELMAkGA1UEBhMCQkUwHhcNMjMwNDA2MTgzMDM1WhcNMjgwNDA3MTgzMDM1WjBWMSEwHwYDVQQD + DBhTTVBfVEVTVC1QUkUtU0VULUVYQU1QTEUxEjAQBgNVBAsMCWVEZWxpdmVyeTEQMA4GA1UECgwH + RElHSVRBTDELMAkGA1UEBhMCQkUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSZvO3 + izuDjKDrKIuY2lJpLybb5u9DIQ0545YQjpNaZ6c2+KGWnzvT30WFKYKij/7y1+asf/b94Rjtb+hP + Bw4yhazToemv9RxBg66DqBh0JDPfXbPavJMnzlqE9FroUtu6ylbPG6xAj2Zo4G/sBJ8nXfvCKvT3 + gz5/fA4Zb3ezsPk8//duQdeun0ZiKXo6xHoIEhjuG28Av4T9Y4QK2OEYPp51wGZMWujRglUBuOcS + fCEWEDFkl7ygxTFyazwvnEbGdMPPQahmoNagwN7vR3JEpbZYPMAykSptWkLEKa7VD889fGE+G/5I + FRMhDgCWKv3S7HZXTN8vQJumJXJ+NjuNAgMBAAGjEjAQMA4GA1UdDwEB/wQEAwIC9DANBgkqhkiG + 9w0BAQsFAAOCAQEAhkCt7zSXPPqoOqtganfw7mlOnDFaL2BZMZGtHzfnuLkZ7MJKfuxvAbKP2Hs6 + PNFwIJg8MnRUT1gLYjrow3o97uAfSWuOANUDwtyUMQf2jie6AmXNLzn4I4HwGCx1Kka/4gAHxjrT + GePO9GD8edtvX1l+osHUGv/0/cgoY4LZkJoddVRI8nkCw4Fxh2hnDOKKW7/HMm/Og5jCp6GJkTQh + oLowOc7inm0c9J/2WmhMYoLBpADul8xpWhkfB/d5cLxzh6OVGzJCnAEnjOu5JMLNOdutojBZSfFQ + IbocwAz3mTbPuo+tb7rA+GofflA+TiHU3sBTtwftVZIHF6jj6wPL+Q==</X509Certificate></X509Data></KeyInfo></Signature></CPP> diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java index 15a1c9e8b..47ed80237 100644 --- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java +++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java @@ -54,7 +54,7 @@ public class OasisSMPServiceGroup10 implements ResourceDefinitionSpi { } @Override - public List<SubresourceDefinitionSpi> getSuresourceSpiList() { + public List<SubresourceDefinitionSpi> getSubresourceSpiList() { return Collections.singletonList(oasisSMPServiceMetadata10); } diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java index 1f52a5f8a..5a0cf1294 100644 --- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java +++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java @@ -54,7 +54,7 @@ public class OasisSMPServiceGroup20 implements ResourceDefinitionSpi { } @Override - public List<SubresourceDefinitionSpi> getSuresourceSpiList() { + public List<SubresourceDefinitionSpi> getSubresourceSpiList() { return Collections.singletonList(oasisSMPServiceMetadata20); } diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java index 12390650c..5bde0bc27 100644 --- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java +++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java @@ -35,7 +35,7 @@ public class OasisSMPServiceMetadata20 implements SubresourceDefinitionSpi { @Override public String name() { - return "Oasis SMP 2.0 ServiceGroup"; + return "Oasis SMP 2.0 ServiceMetadata"; } @Override diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java new file mode 100644 index 000000000..60b7b7f69 --- /dev/null +++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java @@ -0,0 +1,79 @@ +package eu.europa.ec.smp.spi.def; + +import eu.europa.ec.smp.spi.handler.OasisSMPServiceGroup10Handler; +import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi; +import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class OasisSMPServiceGroup10Test { + + OasisSMPServiceGroup10Handler mockOasisSMPServiceGroup10Handler = Mockito.mock(OasisSMPServiceGroup10Handler.class);; + OasisSMPServiceMetadata10 mockOasisSMPServiceMetadata10 = Mockito.mock(OasisSMPServiceMetadata10.class); + + OasisSMPServiceGroup10 testInstance = new OasisSMPServiceGroup10(mockOasisSMPServiceGroup10Handler,mockOasisSMPServiceMetadata10 ); + + + @Test + void identifier() { + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-smp-1.0-servicegroup", result); + } + + @Test + void defaultUrlSegment() { + String result = testInstance.defaultUrlSegment(); + + assertEquals("smp-1", result); + } + + @Test + void name() { + String result = testInstance.name(); + + assertEquals("Oasis SMP 1.0 ServiceGroup", result); + } + + @Test + void description() { + String result = testInstance.description(); + + assertEquals("Oasis SMP 1.0 Service group resource handler", result); + } + + @Test + void mimeType() { + String result = testInstance.mimeType(); + + assertEquals("text/xml", result); + } + + @Test + void getSubresourceSpiList() { + List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList(); + + assertEquals(1, result.size()); + assertEquals(mockOasisSMPServiceMetadata10, result.get(0)); + } + + @Test + void getResourceHandler() { + ResourceHandlerSpi result = testInstance.getResourceHandler(); + + assertEquals(mockOasisSMPServiceGroup10Handler, result); + } + + @Test + void testToString() { + String result = testInstance.toString(); + + MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-1.0-servicegroup")); + } +} diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java new file mode 100644 index 000000000..95981d128 --- /dev/null +++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java @@ -0,0 +1,79 @@ +package eu.europa.ec.smp.spi.def; + +import eu.europa.ec.smp.spi.handler.OasisSMPServiceGroup20Handler; +import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi; +import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class OasisSMPServiceGroup20Test { + OasisSMPServiceGroup20Handler mockOasisSMPServiceGroup20Handler = Mockito.mock(OasisSMPServiceGroup20Handler.class); + ; + OasisSMPServiceMetadata20 mockOasisSMPServiceMetadata20 = Mockito.mock(OasisSMPServiceMetadata20.class); + + OasisSMPServiceGroup20 testInstance = new OasisSMPServiceGroup20(mockOasisSMPServiceGroup20Handler, mockOasisSMPServiceMetadata20); + + + @Test + void identifier() { + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-smp-2.0-servicegroup", result); + } + + @Test + void defaultUrlSegment() { + String result = testInstance.defaultUrlSegment(); + + assertEquals("oasis-bdxr-smp-2", result); + } + + @Test + void name() { + String result = testInstance.name(); + + assertEquals("Oasis SMP 2.0 ServiceGroup", result); + } + + @Test + void description() { + String result = testInstance.description(); + + assertEquals("Oasis SMP 2.0 Service group resource handler", result); + } + + @Test + void mimeType() { + String result = testInstance.mimeType(); + + assertEquals("text/xml", result); + } + + @Test + void getSubresourceSpiList() { + List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList(); + + assertEquals(1, result.size()); + assertEquals(mockOasisSMPServiceMetadata20, result.get(0)); + } + + @Test + void getResourceHandler() { + ResourceHandlerSpi result = testInstance.getResourceHandler(); + + assertEquals(mockOasisSMPServiceGroup20Handler, result); + } + + @Test + void testToString() { + String result = testInstance.toString(); + + MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-2.0-servicegroup")); + } +} diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java new file mode 100644 index 000000000..63a85ce03 --- /dev/null +++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java @@ -0,0 +1,65 @@ +package eu.europa.ec.smp.spi.def; + +import eu.europa.ec.smp.spi.handler.OasisSMPServiceMetadata10Handler; +import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import static org.junit.jupiter.api.Assertions.*; + +class OasisSMPServiceMetadata10Test { + + OasisSMPServiceMetadata10Handler mockOasisSMPServiceMetadata10Handler = Mockito.mock(OasisSMPServiceMetadata10Handler.class); + OasisSMPServiceMetadata10 testInstance = new OasisSMPServiceMetadata10(mockOasisSMPServiceMetadata10Handler); + + @Test + void identifier() { + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-smp-1.0-servicemetadata", result); + } + + @Test + void urlSegment() { + String result = testInstance.urlSegment(); + + assertEquals("services", result); + } + + @Test + void name() { + String result = testInstance.name(); + + assertEquals("Oasis SMP 1.0 ServiceMetadata", result); + } + + @Test + void description() { + String result = testInstance.description(); + + assertEquals("Oasis SMP 1.0 Service Metadata resource handler", result); + } + + @Test + void mimeType() { + String result = testInstance.mimeType(); + + assertEquals("text/xml", result); + } + + @Test + void getResourceHandler() { + ResourceHandlerSpi result = testInstance.getResourceHandler(); + + assertEquals(mockOasisSMPServiceMetadata10Handler, result); + } + + @Test + void testToString() { + String result = testInstance.toString(); + + MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-1.0-servicemetadata")); + } +} diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java new file mode 100644 index 000000000..948cd6076 --- /dev/null +++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java @@ -0,0 +1,65 @@ +package eu.europa.ec.smp.spi.def; + +import eu.europa.ec.smp.spi.handler.OasisSMPServiceMetadata20Handler; +import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class OasisSMPServiceMetadata20Test { + + OasisSMPServiceMetadata20Handler mockOasisSMPServiceMetadata20Handler = Mockito.mock(OasisSMPServiceMetadata20Handler.class); + OasisSMPServiceMetadata20 testInstance = new OasisSMPServiceMetadata20(mockOasisSMPServiceMetadata20Handler); + + @Test + void identifier() { + String result = testInstance.identifier(); + + assertEquals("edelivery-oasis-smp-2.0-servicemetadata", result); + } + + @Test + void urlSegment() { + String result = testInstance.urlSegment(); + + assertEquals("services", result); + } + + @Test + void name() { + String result = testInstance.name(); + + assertEquals("Oasis SMP 2.0 ServiceMetadata", result); + } + + @Test + void description() { + String result = testInstance.description(); + + assertEquals("Oasis SMP 2.0 Service Metadata resource handler", result); + } + + @Test + void mimeType() { + String result = testInstance.mimeType(); + + assertEquals("text/xml", result); + } + + @Test + void getResourceHandler() { + ResourceHandlerSpi result = testInstance.getResourceHandler(); + + assertEquals(mockOasisSMPServiceMetadata20Handler, result); + } + + @Test + void testToString() { + String result = testInstance.toString(); + + MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-2.0-servicemetadata")); + } +} diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java index 28d5cc1ee..90dbf3ee8 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java @@ -164,7 +164,7 @@ public class SMPExtensionInitializer implements InitializingBean { resourceDef.setMimeType(resourceDefinitionSpi.mimeType()); resourceDef.setUrlSegment(resourceDefinitionSpi.defaultUrlSegment()); resourceDef.setHandlerImplementationName(getHandlerSPIName(resourceDefinitionSpi.getResourceHandler())); - resourceDefinitionSpi.getSuresourceSpiList().forEach( + resourceDefinitionSpi.getSubresourceSpiList().forEach( subresourceDefinitionSpi -> validateSubresourceDefinition(subresourceDefinitionSpi, resourceDef) ); } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java index 551820bc3..e6710ab21 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java @@ -62,13 +62,13 @@ public class AbstractResourceHandler { ResourceDefinitionSpi resourceDefinitionSpi = getResourceDefinition(resourceDef); String subResourceId = subresourceDef.getIdentifier(); // get subresource implementation by identifier - Optional<SubresourceDefinitionSpi> optSubresourceDefinitionSpi = resourceDefinitionSpi.getSuresourceSpiList().stream() + Optional<SubresourceDefinitionSpi> optSubresourceDefinitionSpi = resourceDefinitionSpi.getSubresourceSpiList().stream() .filter(def -> StringUtils.equals(def.identifier(), subResourceId)).findFirst(); return optSubresourceDefinitionSpi.orElseThrow( () -> new SMPRuntimeException(ErrorCode.INTERNAL_ERROR, subResourceId, "Can not find subresource definition: [" + subResourceId + "]. Registered subresource IDs [" - + resourceDefinitionSpi.getSuresourceSpiList().stream() + + resourceDefinitionSpi.getSubresourceSpiList().stream() .map(rd -> rd.identifier()) .collect(Collectors.joining(",")) + "]")); diff --git a/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java b/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java index 6b77c4812..5ea398108 100644 --- a/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java +++ b/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java @@ -42,7 +42,7 @@ public interface ResourceDefinitionSpi { * @return */ - List<SubresourceDefinitionSpi> getSuresourceSpiList(); + List<SubresourceDefinitionSpi> getSubresourceSpiList(); // resource handle for validating, reading and storing the resource ResourceHandlerSpi getResourceHandler(); -- GitLab