diff options
2 files changed, 87 insertions, 58 deletions
| diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java index d2ce2f5d..69b993a4 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java @@ -234,7 +234,7 @@ public class SzrClient {        throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);      } -    if (resp == null || StringUtils.isEmpty(resp)) { +    if (StringUtils.isEmpty(resp)) {        throw new SzrCommunicationException("ernb.01", new Object[]{"Stammzahl response empty"}); // TODO error handling      } @@ -277,9 +277,9 @@ public class SzrClient {        final SignContentResponseType resp = szr.signContent(req.isAppendCert(), req.getJWSHeaderParam(), req.getIn());        log.trace("Receive SZR response on bcBind siging operation "); -      if (resp == null +      if (resp == null || resp.getOut() == null            || resp.getOut().isEmpty() -          || resp.getOut().get(0).getValue() == null) { +          || StringUtils.isEmpty(resp.getOut().get(0).getValue())) {          throw new SzrCommunicationException("ernb.01", new Object[]{"BcBind response empty"});        } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java index d6bce8eb..9709aeb9 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java @@ -105,10 +105,10 @@ public class SzrClientTest {    private SZR szrMock = null; -   +    @Rule    public SoapServiceRule soap = SoapServiceRule.newInstance(); -   +    /**     * jUnit class initializer.     * @@ -123,28 +123,38 @@ public class SzrClientTest {    /**     * Initialize jUnit test. -   *      */    @Before    public void initializer() {      if (szrMock == null) {        szrMock = soap.mock(SZR.class, "http://localhost:1234/demoszr"); -       -    }         + +    }    } -       -   + +    @Test -  public void getStammzahlenEcryptedTest() throws JAXBException, SZRException_Exception { +  public void getStammzahlenEcryptedTest() throws JAXBException, SZRException_Exception, SzrCommunicationException {      final GetBPKFromStammzahlEncryptedResponse szrResponse = new GetBPKFromStammzahlEncryptedResponse();      final GetBPKFromStammzahlEncryptedResponseType result1 = new GetBPKFromStammzahlEncryptedResponseType();      szrResponse.getOut().add(result1); -    when(szrMock.getBPKFromStammzahlEncrypted(anyList())) -        .thenReturn(Arrays.asList(result1)); +    result1.setKey(RandomStringUtils.randomAlphanumeric(20)); + +    //    when(szrMock.getBPKFromStammzahlEncrypted(anyList())) +    //        .thenReturn(Arrays.asList(result1)); +    when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(result1.getKey()); -    String stammzahlEncrypted = szrMock.getStammzahlEncrypted(new PersonInfoType(), false); +    String stammzahlEncrypted = szrClient.getEncryptedStammzahl(new PersonInfoType()); +    Assert.assertEquals("bcBind not match", result1.getKey(), stammzahlEncrypted); + +    when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(null); +    try { +      stammzahlEncrypted = szrClient.getEncryptedStammzahl(new PersonInfoType()); +    } catch (SzrCommunicationException e) { +      Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01")); +    }    }    @Test @@ -160,32 +170,61 @@ public class SzrClientTest {      when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content); -    final String bcBind = szrClient.getBcBind( -        RandomStringUtils.randomAlphabetic(10), -        RandomStringUtils.randomAlphabetic(10), -        RandomStringUtils.randomAlphabetic(10)); +    final String bcBind = szrClient +        .getBcBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10), +                   RandomStringUtils.randomAlphabetic(10));      Assert.assertNotNull("bcBind is null", bcBind);      Assert.assertEquals("bcBind not match", result1.getValue(), bcBind); +    when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(null); +    try { +      szrClient +          .getBcBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10), +                     RandomStringUtils.randomAlphabetic(10)); +    } catch (SzrCommunicationException e) { +      Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01")); +    } + +    final SignContentEntry result2 = new SignContentEntry(); +    final SignContentResponseType content1 = new SignContentResponseType(); +    content1.getOut().add(result2); +    when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content1); +    try { +      szrClient +          .getBcBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10), +                     RandomStringUtils.randomAlphabetic(10)); +    } catch (SzrCommunicationException e) { +      Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01")); +    } + +    result2.setKey("bcBindReq"); +    result2.setValue(""); +    when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content1); +    try { +      szrClient +          .getBcBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10), +                     RandomStringUtils.randomAlphabetic(10)); +    } catch (SzrCommunicationException e) { +      Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01")); +    }    }    @Test -  public void getIdentityLinkRawModeValidResponse() throws SZRException_Exception, EaafParserException, -      NoSuchProviderException, IOException, InvalidKeyException, EidasSAuthenticationException, -      JAXBException { +  public void getIdentityLinkRawModeValidResponse() +      throws SZRException_Exception, EaafParserException, NoSuchProviderException, IOException, InvalidKeyException, +      EidasSAuthenticationException, JAXBException {      setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");      try {        log.debug("Starting connecting SZR Gateway"); -      final IdentityLinkType result = szrClient.getIdentityLinkInRawMode( -          getPersonInfo()); +      final IdentityLinkType result = szrClient.getIdentityLinkInRawMode(getPersonInfo());        Assert.assertNotNull(result);        Assert.assertNotNull(result.getAssertion()); -      final IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser((Element) result -          .getAssertion()).parseIdentityLink(); +      final IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser((Element) result.getAssertion()) +          .parseIdentityLink();        Assert.assertNotNull(identityLink);        System.out.println(identityLink.getSerializedSamlAssertion()); @@ -206,15 +245,14 @@ public class SzrClientTest {    }    @Test -  public void getIdentityLinkRawModeErrorTravelerDocExists() throws SZRException_Exception, -      EaafParserException, NoSuchProviderException, IOException, InvalidKeyException, +  public void getIdentityLinkRawModeErrorTravelerDocExists() +      throws SZRException_Exception, EaafParserException, NoSuchProviderException, IOException, InvalidKeyException,        EidasSAuthenticationException, JAXBException, ParserConfigurationException, SAXException {      setSzrExceptionIdentityLink("/data/szr/szr_resp_error_travelerdocexists.xml");      try {        log.debug("Starting connecting SZR Gateway"); -      szrClient.getIdentityLinkInRawMode( -          getPersonInfo()); +      szrClient.getIdentityLinkInRawMode(getPersonInfo());        Assert.fail();      } catch (final SzrCommunicationException e) { @@ -224,8 +262,7 @@ public class SzrClientTest {        Assert.assertNotNull(((SOAPFaultException) e.getCause()).getFault());        checkElement("p344:F455", ((SOAPFaultException) e.getCause()).getFault().getFaultCode());        checkElement( -          "The travel document you sent to insert a person already exists for another person. " -              + "Either check the document or have the person altered accordingly", +          "The travel document you sent to insert a person already exists for another person. " + "Either check the document or have the person altered accordingly",            ((SOAPFaultException) e.getCause()).getFault().getFaultString());      } @@ -235,17 +272,15 @@ public class SzrClientTest {    @Ignore    @Test    public void getBpkTest() throws SZRException_Exception, EidasSAuthenticationException { -    final List<String> bPK = szrClient.getBpk(getPersonInfo(), DUMMY_TARGET, -        basicConfig.getBasicConfiguration( -            Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, -            "no VKZ defined")); +    final List<String> bPK = szrClient.getBpk(getPersonInfo(), DUMMY_TARGET, basicConfig +        .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, "no VKZ defined"));      if (bPK.isEmpty()) { -      throw new SzrCommunicationException("ernb.01", new Object[] { "bPK list is empty" }); +      throw new SzrCommunicationException("ernb.01", new Object[]{"bPK list is empty"});      }      for (final String b : bPK) {        if (StringUtils.isEmpty(b)) { -        throw new SzrCommunicationException("ernb.01", new Object[] { "bPK is null or empty" }); +        throw new SzrCommunicationException("ernb.01", new Object[]{"bPK is null or empty"});        }      } @@ -257,29 +292,24 @@ public class SzrClientTest {    } -  private void setSzrResponseIdentityLink(String responseXmlPath) throws JAXBException, -      SZRException_Exception { -    final JAXBContext jaxbContext = JAXBContext.newInstance( -        szrservices.ObjectFactory.class, -        org.w3._2001._04.xmldsig_more.ObjectFactory.class, -        org.w3._2000._09.xmldsig.ObjectFactory.class, -        at.gv.e_government.reference.namespace.persondata._20020228.ObjectFactory.class); +  private void setSzrResponseIdentityLink(String responseXmlPath) throws JAXBException, SZRException_Exception { +    final JAXBContext jaxbContext = JAXBContext +        .newInstance(szrservices.ObjectFactory.class, org.w3._2001._04.xmldsig_more.ObjectFactory.class, +                     org.w3._2000._09.xmldsig.ObjectFactory.class, +                     at.gv.e_government.reference.namespace.persondata._20020228.ObjectFactory.class);      final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();      final GetIdentityLinkEidasResponse szrResponse = (GetIdentityLinkEidasResponse) jaxbUnmarshaller          .unmarshal(this.getClass().getResourceAsStream(responseXmlPath)); -    when(szrMock.getIdentityLinkEidas(any(PersonInfoType.class))).thenReturn(szrResponse -        .getGetIdentityLinkReturn()); +    when(szrMock.getIdentityLinkEidas(any(PersonInfoType.class))).thenReturn(szrResponse.getGetIdentityLinkReturn());    } -  private void setSzrExceptionIdentityLink(String responseXmlPath) throws JAXBException, -      ParserConfigurationException, SAXException, IOException, SZRException_Exception { -    final Element detailerror = DomUtils.parseXmlNonValidating(this.getClass().getResourceAsStream( -        responseXmlPath)); +  private void setSzrExceptionIdentityLink(String responseXmlPath) +      throws JAXBException, ParserConfigurationException, SAXException, IOException, SZRException_Exception { +    final Element detailerror = DomUtils.parseXmlNonValidating(this.getClass().getResourceAsStream(responseXmlPath));      final javax.xml.namespace.QName qName = new javax.xml.namespace.QName("urn:SZRServices", "F455", "p344");      final SoapFault fault = new SoapFault( -        "The travel document you sent to insert a person already exists for another person. " -            + "Either check the document or have the person altered accordingly", +        "The travel document you sent to insert a person already exists for another person. " + "Either check the document or have the person altered accordingly",          qName);      fault.setRole("urn:SZRServices");      fault.setDetail(detailerror); @@ -295,7 +325,7 @@ public class SzrClientTest {        return hashBase64;      } catch (final Exception ex) { -      throw new EidasSAuthenticationException("internal.03", new Object[] {}, ex); +      throw new EidasSAuthenticationException("internal.03", new Object[]{}, ex);      }    } @@ -311,8 +341,7 @@ public class SzrClientTest {      personInfo.setTravelDocument(eDocument);      // parse some eID attributes -    final Triple<String, String, String> eIdentifier = -        EidasResponseUtils.parseEidasPersonalIdentifier(eIDASeID); +    final Triple<String, String, String> eIdentifier = EidasResponseUtils.parseEidasPersonalIdentifier(eIDASeID);      final String uniqueId = createHashFromUniqueId(eIdentifier.getThird());      final String citizenCountry = eIdentifier.getFirst(); @@ -324,9 +353,9 @@ public class SzrClientTest {      eDocument.setDocumentNumber(uniqueId);      // eID document information -    eDocument.setDocumentType(basicConfig.getBasicConfiguration( -        Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE, -        Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE)); +    eDocument.setDocumentType(basicConfig +                                  .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE, +                                                         Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE));      return personInfo;    } | 
