diff options
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus')
2 files changed, 285 insertions, 0 deletions
| diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java new file mode 100644 index 00000000..6ebe4c8a --- /dev/null +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java @@ -0,0 +1,87 @@ +package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.IfProfileValue; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException; +import lombok.SneakyThrows; + +@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment") +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { +    "/SpringTest-context_tasks_test.xml", +    "/SpringTest-context_basic_realConfig.xml"}) +@TestPropertySource(locations = { +    //"classpath:/application.properties", +    "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties", +    }) +public class ErnpRestClientProductionTest { + +  @Autowired IErnpClient client; +   +  @Test +  @SneakyThrows +  public void searchWithPersonalIdentifierServerError() { +    final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"; +    final String cc = "DE"; +    final SimpleEidasData eidasDataFirst = SimpleEidasData.builder() +        .citizenCountryCode(cc) +        .familyName("XXXvon Brandenburg") +        .givenName("XXXClaus - Maria") +        .dateOfBirth("1994-12-31") +        .personalIdentifier(cc + "/AT/" + personalIdentifierFirst) +        .pseudonym(personalIdentifierFirst) +        .build(); +         +    // execute operation +    EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class, +        () -> client.searchWithPersonIdentifier( +            eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode())); +     +    assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());    +         +  } +   +  @Test +  @SneakyThrows +  public void searchWithPersonalIdentifierSuccess() { +    final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"; +    final String cc = "DE"; +    final SimpleEidasData eidasDataFirst = SimpleEidasData.builder() +        .citizenCountryCode(cc) +        .familyName("XXXvon Brandenburg") +        .givenName("XXXClaus - Maria") +        .dateOfBirth("1994-12-31") +        .personalIdentifier(cc + "/AT/" + personalIdentifierFirst) +        .pseudonym(personalIdentifierFirst) +        .build(); +    +    // execute operation +    ErnpRegisterResult resp = client.searchWithPersonIdentifier( +        eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode()); +         +    // validate state +    assertNotNull("no ERnP response", resp); +    assertEquals("wrong resp size", 1, resp.getPersonResult().size()); + +    RegisterResult persInfo = resp.getPersonResult().get(0); +    assertEquals("wrong familyname", "XXXSZR", persInfo.getFamilyName());     +     +     +  } +   +   +} diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java new file mode 100644 index 00000000..985a5e14 --- /dev/null +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java @@ -0,0 +1,198 @@ +package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; + +import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.lang3.RandomStringUtils; +import org.jetbrains.annotations.NotNull; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +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 at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils; +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; +import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; +import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; +import lombok.SneakyThrows; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { +    "/SpringTest-context_tasks_test.xml", +    "/SpringTest-context_basic_mapConfig.xml" +}) +@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) +public class CreateNewErnpEntryTaskTest { + +  CreateNewErnpEntryTask task;  +   +  @Mock ErnpRestClient ernpClient; +   +  final ExecutionContext executionContext = new ExecutionContextImpl(); +  private TestRequestImpl pendingReq; +   +  /** +   * jUnit test set-up. +   */ +  @Before +  public void setUp() throws URISyntaxException, EaafStorageException {     +    task = new CreateNewErnpEntryTask(ernpClient); +     +    MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler"); +    MockHttpServletResponse httpResp = new MockHttpServletResponse(); +    RequestContextHolder.resetRequestAttributes(); +    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); + +    pendingReq = new TestRequestImpl(); +    pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); +     +  } +   +   +  @Test +  @SneakyThrows +  public void missingEidasData() {     +    Mockito.when(ernpClient.add(any())) +        .thenThrow(new IllegalStateException("add ERnP entry should not be neccessary")); +             +    TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,  +        () -> task.execute(pendingReq, executionContext));  +     +    assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID()); +    assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException)); +    assertTrue("Wrong flag 'manualFixNeeded'", +        ((WorkflowException) error.getOriginalException()).isRequiresManualFix()); +     +  } +   +  @Test +  @SneakyThrows +  public void noErnpResponse() {       +    SimpleEidasData input = buildInputData();             +    Mockito.when(ernpClient.add(input)) +        .thenReturn(ernpRegisterResult(Arrays.asList())); +             +    TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,  +        () -> task.execute(pendingReq, executionContext));  +     +    assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID()); +    assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException)); +    assertTrue("Wrong flag 'manualFixNeeded'", +        ((WorkflowException) error.getOriginalException()).isRequiresManualFix()); +     +  } +    +  @Test +  @SneakyThrows +  public void moreThanOneErnpResponse() {      +    String bpk = RandomStringUtils.randomAlphabetic(5);   +    SimpleEidasData input = buildInputData();             +    Mockito.when(ernpClient.add(input)) +        .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk), buildRandomResultEntry()))); +             +    TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,  +        () -> task.execute(pendingReq, executionContext));  +     +    assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID()); +    assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException)); +    assertTrue("Wrong flag 'manualFixNeeded'", +        ((WorkflowException) error.getOriginalException()).isRequiresManualFix()); +     +  } +   +  @Test +  @SneakyThrows +  public void insertErnpSuccess() { +    String bpk = RandomStringUtils.randomAlphabetic(5);   +    SimpleEidasData input = buildInputData();             +    Mockito.when(ernpClient.add(input)) +        .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk)))); +         +    // perform test +    task.execute(pendingReq, executionContext); +         +    // validate state +    MatchedPersonResult result = MatchingTaskUtils.getFinalMatchingResult(pendingReq); +    assertNotNull("no matching result", result); +    assertEquals("familyname", input.getFamilyName(), result.getFamilyName()); +    assertEquals("givenyname", input.getGivenName(), result.getGivenName()); +    assertEquals("dateOfBirth", input.getDateOfBirth(), result.getDateOfBirth()); +    assertEquals("bpk", bpk, result.getBpk()); +    assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode()); +     +  } + + +  @NotNull +  private ErnpRegisterResult ernpRegisterResult(List<RegisterResult> registerResult) { +    return new ErnpRegisterResult(registerResult); +     +  } + +  private RegisterResult buildErnpResultEntry(SimpleEidasData input, String bpk) { +    return buildErnpResultEntry(input.getFamilyName(), input.getGivenName(), input.getDateOfBirth(), bpk); +     +  } +   +  private RegisterResult buildRandomResultEntry() { +    return buildErnpResultEntry(RandomStringUtils.randomAlphabetic(5), RandomStringUtils.randomAlphabetic(5),  +        RandomStringUtils.randomAlphabetic(5), RandomStringUtils.randomAlphabetic(5)); +     +  } +   +  private RegisterResult buildErnpResultEntry(String familyName, String givenName, String birthday, String bpk) { +    return RegisterResult.builder() +        .bpk(bpk) +        .dateOfBirth(birthday) +        .givenName(givenName) +        .familyName(familyName) +        .build(); +     +  } +   +  private SimpleEidasData buildInputData() throws EaafStorageException { +    String cc = RandomStringUtils.randomAlphabetic(5).toUpperCase(); +    String pseudonym = RandomStringUtils.randomAlphabetic(5); +    String familyName = RandomStringUtils.randomAlphabetic(5);     +    String givenName = RandomStringUtils.randomAlphabetic(5); +    String birthday = RandomStringUtils.randomNumeric(4) + "-"  +        + RandomStringUtils.randomNumeric(2) + "-" + RandomStringUtils.randomNumeric(2); +               +    SimpleEidasData input = SimpleEidasData.builder()         +        .familyName(familyName) +        .givenName(givenName) +        .dateOfBirth(birthday) +        .personalIdentifier(cc + "/AT/" + pseudonym) +        .pseudonym(pseudonym) +        .citizenCountryCode(cc) +        .build();     +    MatchingTaskUtils.storeInitialEidasData(pendingReq, input); +    return input; +     +  } +} | 
