Introduktion

For at udføre integrationstest (og nogle gange unittest) af en NSP komponent kræver det at man kalder denne i forhold til DGWS eller IDWS standarden, dvs der skal først skaffes et id-kort eller en borger IDWS billet fra STS'en hvilket igen kræver (P/M/V/F)OCES certifikater. Sådanne certifikater skal genudstedes med faste mellemrum hvilket betyder at gamle versioner af en komponent ikke længere kan bygges. Hver enkelt komponent skal også implementere klient siden af DGWS/IDWS standarderne hvilket øger kompleksiteten af koden uden nogen reel merværdi. For at undgå disse problemstillinger i fremtiden har NSP fået udviklet et fælles kode-bibliotek der tager sig af alle aspekter af de komplekse standarder og lader komponent-udvikleren fokusere på at skrive tests af den forretningslogik der er udviklet. Biblioteket hedder "NSP Test Identity Provider" og anvendes i komponenterne ved hjælp af følgende Maven opsætning

<dependency>
	<groupId>dk.nsp.idp</groupId>
	<artifactId>nsp-test-idp</artifactId>
	<version>1.0.0</version>
	<scope>test</scope>
</dependency>

Anvendelse

NSP Test Identity Provider indeholder en SOAP klient der pakker den komplekse IdP og DGWS/IDWS logik ind i en simpel snitflade og derudover et større antal identiteter på både borgere, medarbejdere og organisationer.

Klient

Den primære klasse i NSP Test Identity Provider er NspSoapClient som kan bygge og udføre et request mod enhver NSP service der udstiller DGWS/IDWS endpoints. Klassen anvendes med try-with-resource strukturen og indeholder en enkelt metode der identificerer den service man ønsker at kalde (endpoint og action). Herefter angiver man den identitet som skal anvendes, hvilket afgør om klienten bruger DGWS eller IDWS billetomveksling. Til sidst kan man vælge om man ønsker at få requestet udført mod servicen eller bygget og returneret som en streng til brug med andet http-transport framework.

Eksempel på brug af NspSoapClient
import static dk.nsp.test.idp.EmployeeIdentities.jordemoderAdaLovelace;

private static final URI NTS_ENDPOINT = URI.create("http://test1-cnsp.ekstern-test.nspop.dk:8080/nts/service");

private static final String NTS_ACTION = "http://sundhedsdatastyrelsen.dk/soap/2022/10/21/actions#SomeSoapAction";

private static final String NTS_REQUEST_BODY = "<Request/>";

public void employeeExample() throws Exception {
	try (NspSoapClient client = new NspSoapClient(System.out::println)) {
		try (NspSoapResponse response = client.request(NTS_ENDPOINT, NTS_ACTION).as(jordemoderAdaLovelace()).execute(NTS_REQUEST_BODY)) {
			assertNotNull(response);
			assertFalse(response.isFault());
			String xml = IOUtils.toString(response.getResponse(), "utf-8");
			assertTrue(xml.contains("OK"));
		}
	}
}

Ovenstående eksempel viser hvordan man kan anvende NSP Test Identity Provider til at kalde en service på NSP. I det følgende gennemgåes hver linie af eksemplet:

LinieForklaring
1Import den medarbejder identitet der anvendes
3Definer den NSP service der skal kaldes.
5Definer hvilken specifik operation der skal udføres
7Definer den SOAP Body der skal sendes.
10Opret en ny NspSoapClient der logger requests og response til standard out.
11Udfører et request mod NTS servicen som den indbyggede identitet Ada Lovelace der er en autoriseret jordemoder.
12-15Tjekker om servicen svarede forventet.

Når et request bygges angives den SOAP Body (og de eventuelle ekstra SOAP headers) enten som strenge eller som W3C Element objekter. En instance af NspSoapClient kan gives en Consumer<String> lambda funktion som klienten vil kalde med alle request og response strenge således at man f.eks. kan logge disse.

Identiteter

NSP Test Identity Provider indeholder et større antal identiteter der alle er oprettet i DTG. Disse 16 personer kan anvendes både som private borgere og som medarbejdere med autorisationer og/eller Nationale Roller. Det er også muligt at definere sine egne identiteter hvis man har et helt særligt behov. Det anbefales dog at anvende de identiteter der er med i biblioteket så vidt det er muligt.

For at definere f.eks. en ny medarbejder identitet skal man enten implementere interfacet EmployeeIdentity eller EmployeeIdentityBuilder.

Eksempel

Kildekoden til NSP Test Identity Provider biblioteket findes i NSP's Git Repository hvor man kan finde klassen NspSoapClientExample der indeholder eksempler på brug af biblioteket.


  • No labels