diff options
| author | Alexander Marsalek <amarsalek@iaik.tugraz.at> | 2020-12-11 17:16:50 +0100 | 
|---|---|---|
| committer | Alexander Marsalek <amarsalek@iaik.tugraz.at> | 2021-01-04 14:15:40 +0100 | 
| commit | f31d767bf6b8a92f7b05e030c26e43ad71cc0f20 (patch) | |
| tree | 75bbc9a2e2d1327d506e00e7375f99058131191d /eidas_modules/authmodule-eIDAS-v2 | |
| parent | d1c4bc0619b95564f6f7db5798479449e88e4793 (diff) | |
| download | National_eIDAS_Gateway-f31d767bf6b8a92f7b05e030c26e43ad71cc0f20.tar.gz National_eIDAS_Gateway-f31d767bf6b8a92f7b05e030c26e43ad71cc0f20.tar.bz2 National_eIDAS_Gateway-f31d767bf6b8a92f7b05e030c26e43ad71cc0f20.zip | |
added two tests
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2')
4 files changed, 121 insertions, 39 deletions
| 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 @@ -23,6 +23,20 @@ import lombok.Data;     * @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 +   * @param givenName The givenName +   * @param familyName The familyName +   * @param dateOfBirth The dateOfBirth     * @param placeOfBirth The placeOfBirth     */    public RegisterResult(String pseudonym, String givenName, String familyName, String dateOfBirth, 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<RegisterResult> 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<RegisterResult> 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<RegisterResult> zmrResult = new ArrayList<>(); +    zmrClient = Mockito.mock(DummyZmrClient.class); +    Mockito.when(zmrClient.searchWithPersonIdentifer("max123")).thenReturn(zmrResult);//"de/st/max123"??? +    task.setZmrClient(zmrClient); + +    //Mock ernb +    ArrayList<RegisterResult> 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();    }  } | 
