From f31d767bf6b8a92f7b05e030c26e43ad71cc0f20 Mon Sep 17 00:00:00 2001 From: Alexander Marsalek Date: Fri, 11 Dec 2020 17:16:50 +0100 Subject: added two tests --- .../specific/modules/auth/eidas/v2/Constants.java | 1 + .../modules/auth/eidas/v2/dao/RegisterResult.java | 14 +++ .../auth/eidas/v2/tasks/InitialSearchTask.java | 10 ++ .../v2/test/tasks/InitialSearchTaskFirstTest.java | 135 +++++++++++++++------ 4 files changed, 121 insertions(+), 39 deletions(-) (limited to 'eidas_modules/authmodule-eIDAS-v2') diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java index 83a2afa6..7e07b5a3 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java @@ -32,6 +32,7 @@ public class Constants { public static final String DATA_REQUESTED_LOA_LIST = "req_requestedLoA"; public static final String DATA_REQUESTED_LOA_COMPERISON = "req_requestedLoAComperision"; public static final String DATA_FULL_EIDAS_RESPONSE = "resp_fulleIDASResponse"; + public static final String DATA_RESULT_MATCHING_BPK = "matching-result-bpk";//TODO? // templates for post-binding forwarding public static final String TEMPLATE_POST_FORWARD_NAME = "eidas_node_forward.html"; diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java index 9509e7de..f557ca69 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java @@ -17,6 +17,20 @@ import lombok.Data; private String taxNumber = null; private PostalAddressType address = null; + /** + * Register search result. + * @param pseudonym The pseudonym + * @param givenName The givenName + * @param familyName The familyName + * @param dateOfBirth The dateOfBirth + */ + public RegisterResult(String pseudonym, String givenName, String familyName, String dateOfBirth) { + this.pseudonym = pseudonym; + this.givenName = givenName; + this.familyName = familyName; + this.dateOfBirth = dateOfBirth; + } + /** * Register search result. * @param pseudonym The pseudonym diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java index 907ed443..dd430cf6 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java @@ -331,4 +331,14 @@ public class InitialSearchTask extends AbstractAuthServletTask { log.debug("Receive #" + result.size() + " attributes with names: " + result.keySet().toString()); return result; } + + //just for testing + //TODO is there a nicer solution? + public void setErnbClient(IErnbClient ernbClient) { + this.ernbClient = ernbClient; + } + + public void setZmrClient(IZmrClient zmrClient) { + this.zmrClient = zmrClient; + } } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskFirstTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskFirstTest.java index 30f88ec8..1b1bdeae 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskFirstTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskFirstTest.java @@ -1,10 +1,13 @@ package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernb.DummyErnbClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernb.IErnbClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ManualFixNecessaryException; import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.InitialSearchTask; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.zmr.DummyZmrClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.zmr.IZmrClient; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; @@ -23,12 +26,10 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; @@ -38,30 +39,29 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; - +import org.junit.Assert; import javax.xml.namespace.QName; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; - -import static org.mockito.Mockito.times; -import static org.powermock.api.mockito.PowerMockito.verifyPrivate; +import java.util.ArrayList; @RunWith(SpringJUnit4ClassRunner.class) -//@RunWith(PowerMockRunner.class) -//@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) + @ContextConfiguration("/SpringTest-context_tasks_test.xml") @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) -//@RunWith(PowerMockRunner.class) -//@PrepareForTest(InitialSearchTaskFirstTest.class) public class InitialSearchTaskFirstTest { @Autowired(required = true) @Mock + @InjectMocks private InitialSearchTask task; - @Autowired(required = true) - private IConfiguration basicConfig; + @Mock + private IZmrClient zmrClient; + + @Mock + private IErnbClient ernbClient; final ExecutionContext executionContext = new ExecutionContextImpl(); private MockHttpServletRequest httpReq; @@ -71,7 +71,7 @@ public class InitialSearchTaskFirstTest { /** * jUnit class initializer. - * + * * @throws IOException In case of an error */ @BeforeClass @@ -84,7 +84,6 @@ public class InitialSearchTaskFirstTest { /** * jUnit test set-up. - * */ @Before public void setUp() throws URISyntaxException, EaafStorageException { @@ -96,41 +95,97 @@ public class InitialSearchTaskFirstTest { RequestContextHolder.resetRequestAttributes(); RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); - final AuthenticationResponse response = buildDummyAuthResponse(); + final AuthenticationResponse response = buildDummyAuthResponseMaxMustermann(); pendingReq = new TestRequestImpl(); pendingReq.getSessionData(AuthProcessDataWrapper.class) .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response); } - + @Test @DirtiesContext - public void testInitialSearch() throws Exception { + /** + * Two matches found in ZMR + */ + public void testNode101a() throws Exception { + + //Mock ZMR + ArrayList zmrResult = new ArrayList<>(); + zmrResult.add(new RegisterResult("de/st/max123", "Max", "Mustermann", "1111-01-01")); + zmrResult.add(new RegisterResult("de/st/max123", "Maximilian", "Mustermann", "1111-01-01")); + zmrClient = Mockito.mock(DummyZmrClient.class); + Mockito.when(zmrClient.searchWithPersonIdentifer("max123")).thenReturn(zmrResult);//"de/st/max123"??? + task.setZmrClient(zmrClient); + + //Mock ernb + ArrayList ernbResult = new ArrayList<>(); + ernbClient = Mockito.mock(DummyErnbClient.class); + Mockito.when(ernbClient.searchWithPersonIdentifer("max123")).thenReturn(ernbResult);//"de/st/max123"??? + task.setErnbClient(ernbClient); try { task.execute(pendingReq, executionContext); + Assert.assertTrue("Wrong workflow, should not reach this point/ get a bpk", false); + String bPk = (String) + pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession(Constants.DATA_RESULT_MATCHING_BPK); } catch (final TaskExecutionException e) { - // forward URL is not set in example config - // org.springframework.util.Assert.isInstanceOf(EaafConfigurationException.class, e.getOriginalException(), - // "Wrong exception"); - // Assert.assertEquals("wrong errorCode", "config.08", ((EaafException) e.getOriginalException()) - // .getErrorId()); - // Assert.assertEquals("wrong parameter size", 1, ((EaafException) e.getOriginalException()) - // .getParams().length); - // Assert.assertEquals("wrong errorMsg", Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL, ((EaafException) e - // .getOriginalException()).getParams()[0]); - + Throwable origE = e.getOriginalException(); + Assert.assertTrue("Wrong exception", (origE.getCause() instanceof ManualFixNecessaryException)); } -// verifyPrivate(task, times(1)).invoke("step2", ArgumentMatchers.any(SimpleEidasData.class)); -// verifyPrivate(task, times(0)).invoke("step3", ArgumentMatchers.any()); -// verifyPrivate(task, times(0)).invoke("step4", ArgumentMatchers.any()); + } + + + @Test + @DirtiesContext + /** + * Two matches found in ErnB + */ + public void testNode101b() throws Exception { + + //Mock ZMR + ArrayList zmrResult = new ArrayList<>(); + zmrClient = Mockito.mock(DummyZmrClient.class); + Mockito.when(zmrClient.searchWithPersonIdentifer("max123")).thenReturn(zmrResult);//"de/st/max123"??? + task.setZmrClient(zmrClient); + + //Mock ernb + ArrayList ernbResult = new ArrayList<>(); + ernbResult.add(new RegisterResult("de/st/max123", "Max", "Mustermann", "1111-01-01")); + ernbResult.add(new RegisterResult("de/st/max123", "Maximilian", "Mustermann", "1111-01-01")); + + ernbClient = Mockito.mock(DummyErnbClient.class); + Mockito.when(ernbClient.searchWithPersonIdentifer("max123")).thenReturn(ernbResult);//"de/st/max123"??? + task.setErnbClient(ernbClient); + + try { + task.execute(pendingReq, executionContext); + Assert.assertTrue("Wrong workflow, should not reach this point/ get a bpk", false); + String bPk = (String) + pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession(Constants.DATA_RESULT_MATCHING_BPK); + } catch (final TaskExecutionException e) { + Throwable origE = e.getOriginalException(); + Assert.assertTrue("Wrong exception", (origE.getCause() instanceof ManualFixNecessaryException)); + } } @NotNull private AuthenticationResponse buildDummyAuthResponse() throws URISyntaxException { + return buildDummyAuthResponse(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10), + "de/st/" + RandomStringUtils.randomNumeric(64), "2001-01-01"); + } + + @NotNull + private AuthenticationResponse buildDummyAuthResponseMaxMustermann() throws URISyntaxException { + return buildDummyAuthResponse("Max", "Mustermann", + "de/st/max123", "1111-01-01"); + } + + @NotNull + private AuthenticationResponse buildDummyAuthResponse(String givenName, String familyName, String identifier, + String dateOfBirth) throws URISyntaxException { final AttributeDefinition attributeDef = AttributeDefinition.builder() .friendlyName(Constants.eIDAS_ATTR_PERSONALIDENTIFIER).nameUri(new URI("ad", "sd", "ff")) .personType(PersonType.LEGAL_PERSON).xmlType(new QName("http://saf", "as", "af")) @@ -149,12 +204,14 @@ public class InitialSearchTaskFirstTest { .attributeValueMarshaller("eu.eidas.auth.commons.attribute.impl.DateTimeAttributeValueMarshaller").build(); final ImmutableAttributeMap attributeMap = ImmutableAttributeMap.builder() - .put(attributeDef, "de/st/" + RandomStringUtils.randomNumeric(64)) - .put(attributeDef2, RandomStringUtils.randomAlphabetic(10)) - .put(attributeDef3, RandomStringUtils.randomAlphabetic(10)).put(attributeDef4, "2001-01-01").build(); + .put(attributeDef, identifier) + .put(attributeDef2, familyName) + .put(attributeDef3, givenName) + .put(attributeDef4, dateOfBirth).build(); val b = new AuthenticationResponse.Builder(); - return b.id("aasdf").issuer("asd").subject("asf").statusCode("200").inResponseTo("asdf").subjectNameIdFormat("afaf") + return b.id("aasdf").issuer("asd").subject("asf").statusCode("200").inResponseTo("asdf").subjectNameIdFormat( + "afaf") .attributes(attributeMap).build(); } } -- cgit v1.2.3