package eu.stork.peps.test.simple; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.junit.Ignore; import org.junit.Test; import org.opensaml.xml.parse.BasicParserPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.stork.peps.auth.commons.IPersonalAttributeList; import eu.stork.peps.auth.commons.PEPSUtil; import eu.stork.peps.auth.commons.PersonalAttribute; import eu.stork.peps.auth.commons.PersonalAttributeList; import eu.stork.peps.auth.commons.STORKAttrQueryRequest; import eu.stork.peps.auth.commons.STORKAttrQueryResponse; import eu.stork.peps.auth.commons.STORKAuthnRequest; import eu.stork.peps.auth.commons.STORKAuthnResponse; import eu.stork.peps.auth.commons.STORKStatusCode; import eu.stork.peps.auth.commons.STORKSubStatusCode; import eu.stork.peps.auth.engine.STORKSAMLEngine; import eu.stork.peps.exceptions.STORKSAMLEngineException; public class StorkAttrQueryResponseTest { /** The engine. */ private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1"); /** * Gets the engine. * * @return the engine */ public static STORKSAMLEngine getEngine() { return engine; } /** * Sets the engine. * * @param newEngine * the new engine */ public static void setEngine(final STORKSAMLEngine newEngine) { StorkAttrQueryResponseTest.engine = newEngine; } /** The destination. */ private static String destination; /** The service provider sector. */ private static String spSector; /** The service provider institution. */ private static String spInstitution; /** The service provider application. */ private static String spApplication; /** The service provider country. */ private static String spCountry; /** The service provider id. */ private static String spId; /** The quality authentication assurance level. */ private static final int QAAL = 3; /** The state. */ private static String state = "IS"; /** The town. */ private static String town = "Reykjavik"; /** The postal code. */ private static String postalCode = "105"; /** The street name. */ private static String streetName = "Gudrunartun"; /** The street number. */ private static String streetNumber = "10"; /** The List of Personal Attributes. */ private static IPersonalAttributeList pal; /** The assertion consumer URL. */ private static String assertConsumerUrl; /** The attribute query request. */ private static byte[] attrQueryRequest; /** The attribute query response. */ private static byte[] attrQueryResponse; /** The attribute query request. */ private static STORKAttrQueryRequest attrQueryenRequest; /** The attribute query response. */ private static STORKAttrQueryResponse attrQeuryenResponse; /** The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(StorkAttrQueryResponseTest.class.getName()); /** * Instantiates a new stork response test. */ public StorkAttrQueryResponseTest() { super(); } /** The IP address. */ private static String ipAddress; /** The destination URL. */ private static String destinationUrl; /** The is hashing. */ private final boolean isHashing = Boolean.TRUE; /** The is not hashing. */ private final boolean isNotHashing = Boolean.FALSE; /** The ERROR text. */ private static final String ERROR_TXT = "generateAttrQueryResponse(...) should've thrown an STORKSAMLEngineException!"; /** Parser manager used to parse XML. */ private static BasicParserPool parser; static { parser = new BasicParserPool(); parser.setNamespaceAware(true); pal = new PersonalAttributeList(); PersonalAttribute isAgeOver = new PersonalAttribute(); isAgeOver.setName("isAgeOver"); isAgeOver.setIsRequired(false); ArrayList ages = new ArrayList(); ages.add("16"); ages.add("18"); isAgeOver.setValue(ages); pal.add(isAgeOver); PersonalAttribute dateOfBirth = new PersonalAttribute(); dateOfBirth.setName("dateOfBirth"); dateOfBirth.setIsRequired(false); pal.add(dateOfBirth); PersonalAttribute eIDNumber = new PersonalAttribute(); eIDNumber.setName("eIdentifier"); List eid = Arrays.asList("IS/IS/1234567890"); eIDNumber.setValue(eid); eIDNumber.setIsRequired(true); pal.add(eIDNumber); final PersonalAttribute givenName = new PersonalAttribute(); givenName.setName("givenName"); givenName.setIsRequired(true); pal.add(givenName); PersonalAttribute canRessAddress = new PersonalAttribute(); canRessAddress.setName("canonicalResidenceAddress"); canRessAddress.setIsRequired(true); pal.add(canRessAddress); PersonalAttribute newAttribute = new PersonalAttribute(); newAttribute.setName("newAttribute2"); newAttribute.setIsRequired(true); pal.add(newAttribute); destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest"; assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse"; spSector = "EDU001"; spInstitution = "OXF001"; spApplication = "APP001"; spCountry = "EN"; spId = "EDU001-APP001-APP001"; final STORKAttrQueryRequest request = new STORKAttrQueryRequest(); request.setDestination(destination); // request.setProviderName(spName); request.setQaa(QAAL); request.setPersonalAttributeList(pal); request.setAssertionConsumerServiceURL(assertConsumerUrl); // new parameters request.setSpSector(spSector); request.setSpInstitution(spInstitution); request.setSpApplication(spApplication); request.setSpCountry(spCountry); request.setSPID(spId); request.setCitizenCountryCode("IS"); try { attrQueryRequest = getEngine().generateSTORKAttrQueryRequest(request).getTokenSaml(); attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest); } catch (STORKSAMLEngineException e) { fail("Error create STORKAuthnRequest"); } ipAddress = "111.222.333.444"; destinationUrl = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest"; pal = new PersonalAttributeList(); isAgeOver = new PersonalAttribute(); isAgeOver.setName("isAgeOver"); isAgeOver.setIsRequired(true); ages = new ArrayList(); ages.add("16"); ages.add("18"); isAgeOver.setValue(ages); isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); pal.add(isAgeOver); dateOfBirth = new PersonalAttribute(); dateOfBirth.setName("dateOfBirth"); dateOfBirth.setIsRequired(false); final ArrayList date = new ArrayList(); date.add("16/12/2008"); dateOfBirth.setValue(date); dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); pal.add(dateOfBirth); eIDNumber = new PersonalAttribute(); eIDNumber.setName("eIdentifier"); eIDNumber.setIsRequired(true); final ArrayList idNumber = new ArrayList(); idNumber.add("123456789IS"); eIDNumber.setValue(idNumber); eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); pal.add(eIDNumber); canRessAddress = new PersonalAttribute(); canRessAddress.setName("canonicalResidenceAddress"); canRessAddress.setIsRequired(true); canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); final HashMap address = new HashMap(); address.put("state", state); address.put("town", town); address.put("postalCode", postalCode); address.put("streetName", streetName); address.put("streetNumber", streetNumber); canRessAddress.setComplexValue(address); pal.add(canRessAddress); newAttribute = new PersonalAttribute(); newAttribute.setName("newAttribute2"); newAttribute.setIsRequired(true); newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); final HashMap values = new HashMap(); values.put("value1", "value1"); values.put("value2", "value2"); values.put("value3", "value3"); values.put("value4", "value4"); newAttribute.setComplexValue(values); pal.add(newAttribute); } /** * Test generate attribute query request without errors. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test public final void testGenerateAttrQueryResponse() throws STORKSAMLEngineException { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(pal); final STORKAttrQueryResponse storkResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing); attrQueryResponse = storkResponse.getTokenSaml(); FileOutputStream output = null; try { output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { output.write(attrQueryResponse); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse)); } /** * Test validation id parameter mandatory. */ @Test public final void testResponseMandatoryId() { final String identifier = attrQueryenRequest.getSamlId(); attrQueryenRequest.setSamlId(null); final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(pal); try { getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isHashing); fail(ERROR_TXT); } catch (STORKSAMLEngineException e) { attrQueryenRequest.setSamlId(identifier); LOG.error("Error"); } } /** * Test generate attribute query response in response to err1. */ @Test public final void testResponseMandatoryIssuer() { final String issuer = attrQueryenRequest.getIssuer(); attrQueryenRequest.setIssuer(null); final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(pal); try { getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isHashing); fail(ERROR_TXT); } catch (STORKSAMLEngineException e) { attrQueryenRequest.setIssuer(issuer); LOG.error("Error"); } } /** * Test generate attribute query response assertion consumer null. */ /* * @Test public final void testResponseMandatoryAssertionConsumerServiceURL() { final String asserConsumerUrl = attrQueryenRequest .getAssertionConsumerServiceURL(); * attrQueryenRequest.setAssertionConsumerServiceURL(null); * * final STORKAuthnResponse response = new STORKAuthnResponse(); response.setPersonalAttributeList(pal); try { getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, * isHashing); fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { * attrQueryenRequest.setAssertionConsumerServiceURL(asserConsumerUrl); LOG.error("Error"); } } * * /** Test generate attribute query response IP address null. */ @Test public final void testResponseValidationIP() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(pal); try { getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, null, destinationUrl, isHashing); fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test generate attribute query response with personal attribute list null. */ @Test public final void testResponseMandatoryPersonalAttributeList() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(null); try { getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isHashing); fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response token null. */ @Test public final void testResponseInvalidParametersToken() { try { getEngine().validateSTORKAttrQueryResponse(null, ipAddress); fail(ERROR_TXT); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response IP null. */ @Test public final void STORKAttrQueryResponse() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(pal); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response parameter name wrong. */ @Test public final void testResponseInvalidParametersAttr() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); final IPersonalAttributeList wrongList = new PersonalAttributeList(); final PersonalAttribute worngAttr = new PersonalAttribute(); worngAttr.setName("AttrWrong"); wrongList.add(worngAttr); response.setPersonalAttributeList(wrongList); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response set null value into attribute. */ @Test public final void testResponseInvalidParametersAttrSimpleValue() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); final IPersonalAttributeList wrongList = new PersonalAttributeList(); final PersonalAttribute worngAttr = new PersonalAttribute(); worngAttr.setName("isAgeOver"); worngAttr.setValue(null); wrongList.add(worngAttr); response.setPersonalAttributeList(wrongList); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response set null value into attribute. */ @Test public final void testResponseInvalidParametersAttrNoValue() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); final IPersonalAttributeList wrongList = new PersonalAttributeList(); final PersonalAttribute worngAttr = new PersonalAttribute(); worngAttr.setName("isAgeOver"); wrongList.add(worngAttr); response.setPersonalAttributeList(wrongList); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response set null value into attribute. */ @Test public final void testResponseInvalidParametersAttrNoName() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); final IPersonalAttributeList wrongList = new PersonalAttributeList(); final PersonalAttribute worngAttr = new PersonalAttribute(); wrongList.add(worngAttr); response.setPersonalAttributeList(wrongList); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response set null complex value into attribute. */ @Test public final void testResponseInvalidParametersAttrComplexValue() { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); final IPersonalAttributeList wrongList = new PersonalAttributeList(); final PersonalAttribute worngAttr = new PersonalAttribute(); worngAttr.setName("isAgeOver"); worngAttr.setComplexValue(null); wrongList.add(worngAttr); response.setPersonalAttributeList(wrongList); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); // In Conf1 ipValidate is false getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response IP distinct and disabled validation IP. */ @Test public final void testResponseInvalidParametersIPDistinct() { try { // ipAddress origin "111.222.333.444" // ipAddrValidation = false // Subject Confirmation Bearer. getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, "127.0.0.1"); } catch (STORKSAMLEngineException e) { fail("validateAttributeQueryResponse(...) should've thrown an STORKSAMLEngineException!"); LOG.error("Error"); } } /** * Test response invalid parameters invalid token. */ @Test public final void testResponseInvalidParametersTokenMsg() { try { // ipAddress origin "111.222.333.444" // Subject Confirmation Bearer. getEngine().validateSTORKAttrQueryResponse("errorMessage".getBytes(), ipAddress); fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test validate attribute query response is fail. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ /* * @Test public final void testValidateAuthenticationResponseIsFail() throws STORKSAMLEngineException { attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, * ipAddress); * * assertFalse("Generate incorrect response: ", attrQeuryenResponse.isFail()); } * * /** Test validate attribute query response destination. * * @throws STORKSAMLEngineException the STORKSAML engine exception */ @Test public final void testValidateAuthenticationResponseDestination() throws STORKSAMLEngineException { attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); assertEquals("Destination incorrect: ", attrQeuryenResponse.getInResponseTo(), attrQueryenRequest.getSamlId()); } /** * Test validate attribute query response values. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test public final void testValidateAuthenticationResponseValuesComplex() throws STORKSAMLEngineException { attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); assertEquals("Country incorrect:", attrQeuryenResponse.getCountry(), "ES"); final Iterator iterator = attrQeuryenResponse.getPersonalAttributeList().iterator(); while (iterator.hasNext()) { final PersonalAttribute attribute = iterator.next(); if (attribute.getName().equalsIgnoreCase("canonicalResidenceAddress")) { assertEquals("State incorrect: ", state, attribute.getComplexValue().get("state")); assertEquals("Town incorrect: ", town, attribute.getComplexValue().get("town")); assertEquals("Postal code incorrect: ", postalCode, attribute.getComplexValue().get("postalCode")); assertEquals("Street name incorrect: ", streetName, attribute.getComplexValue().get("streetName")); assertEquals("Street number incorrect: ", streetNumber, attribute.getComplexValue().get("streetNumber")); } } } /** * Test generate attribute query response fail in response to it's null. * * @throws STORKSAMLEngineException * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test // ( expected=STORKSAMLEngineException.class) public final void testGenerateAttrQueryResponseFailInResponseToNull() throws STORKSAMLEngineException { final String identifier = attrQueryenRequest.getSamlId(); attrQueryenRequest.setSamlId(null); final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString()); response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString()); response.setMessage(""); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); fail(ERROR_TXT); } catch (STORKSAMLEngineException e) { attrQueryenRequest.setSamlId(identifier); LOG.error("Error"); // throw new STORKSAMLEngineException(e); } } /** * Test generate attribute query response fail assertion consumer URL err1. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ /* * @Test public final void testGenerateAuthnResponseFailAssertionConsumerUrlNull() throws STORKSAMLEngineException { * * final String assertConsumerUrl = attrQueryenRequest .getAssertionConsumerServiceURL(); attrQueryenRequest.setAssertionConsumerServiceURL(null); * * final STORKAuthnResponse response = new STORKAuthnResponse(); response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString()); * response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString()); response.setMessage(""); * * try { attrQueryResponse = getEngine().generateSTORKAuthnResponseFail(attrQueryenRequest, response, ipAddress, isNotHashing).getTokenSaml(); * fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { * attrQueryenRequest.setAssertionConsumerServiceURL(assertConsumerUrl); LOG.error("Error"); } } * * /** Test generate attribute query response fail code error err1. * * @throws STORKSAMLEngineException the STORKSAML engine exception */ @Test public final void testGenerateAttrQueryResponseFailCodeErrorNull() throws STORKSAMLEngineException { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setStatusCode(null); response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString()); response.setMessage(""); try { attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); fail("generateAttrQueryResponseFail(...) should've thrown an STORKSAMLEngineException!"); } catch (STORKSAMLEngineException e) { LOG.error("Error"); } } /** * Test generate attribute query request without errors. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test public final void testValidateAttrQueryResponse() throws STORKSAMLEngineException { IPersonalAttributeList palist = new PersonalAttributeList(); PersonalAttribute isAgeOver = new PersonalAttribute(); isAgeOver.setName("isAgeOver"); isAgeOver.setIsRequired(true); ArrayList ages = new ArrayList(); ages.add("16"); ages.add("18"); isAgeOver.setValue(ages); isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); palist.add(isAgeOver); PersonalAttribute dateOfBirth = new PersonalAttribute(); dateOfBirth.setName("dateOfBirth"); dateOfBirth.setIsRequired(false); final ArrayList date = new ArrayList(); date.add("16/12/2008"); dateOfBirth.setValue(date); dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); palist.add(dateOfBirth); PersonalAttribute eIDNumber = new PersonalAttribute(); eIDNumber.setName("eIdentifier"); eIDNumber.setIsRequired(true); final ArrayList idNumber = new ArrayList(); idNumber.add("123456789PÑ"); final HashMap complex = new HashMap(); complex.put("one", "two"); // eIDNumber.setValue(null); // eIDNumber.setValue(idNumber); // eIDNumber.setComplexValue(complex); eIDNumber.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.toString()); palist.add(eIDNumber); PersonalAttribute canRessAddress = new PersonalAttribute(); canRessAddress.setName("canonicalResidenceAddress"); canRessAddress.setIsRequired(true); canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString()); final HashMap address = new HashMap(); address.put("state", state); address.put("town", town); address.put("postalCode", postalCode); address.put("streetName", streetName); address.put("streetNumber", streetNumber); canRessAddress.setComplexValue(address); palist.add(canRessAddress); final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(palist); final STORKAttrQueryResponse storkResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing); attrQueryResponse = storkResponse.getTokenSaml(); LOG.info("Request id: " + attrQueryenRequest.getSamlId()); LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse)); attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); LOG.info("RESPONSE ID: " + attrQeuryenResponse.getSamlId()); LOG.info("RESPONSE IN_RESPONSE_TO: " + attrQeuryenResponse.getInResponseTo()); LOG.info("RESPONSE COUNTRY: " + attrQeuryenResponse.getCountry()); } /** * Test validate attribute query response fail is fail. * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test public final void testValidateAttrQueryResponseFailIsFail() throws STORKSAMLEngineException { final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString()); response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString()); response.setMessage("message"); attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing).getTokenSaml(); LOG.error("ERROR_FAIL: " + PEPSUtil.encodeSAMLToken(attrQueryResponse)); attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); LOG.info("COUNTRY: " + attrQeuryenResponse.getCountry()); assertTrue("Generate incorrect response: ", attrQeuryenResponse.isFail()); } /** * Test generate/validate response with signedDoc * * @throws STORKSAMLEngineException * the STORKSAML engine exception */ @Test public final void testGenerateAttrQueryResponseWithSignedDoc() throws STORKSAMLEngineException { String signedDocResponse = " urn:oasis:names:tc:dss:1.0:resultmajor:Success PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+PGRzOlJlZmVyZW5jZSBJZD0iUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyIgVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI09iamVjdCIgVVJJPSIjT2JqZWN0LTk4NzMzY2RlLThiY2MtNDhhMC05Yjc3LTBlOTk5N2JkZDA1OCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNiYXNlNjQiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPkNrMVZxTmQ0NVFJdnEzQVpkOFhZUUx2RWh0QT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVHlwZT0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMyNTaWduZWRQcm9wZXJ0aWVzIiBVUkk9IiNTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5BNVk5MW40cXBMZ3l0VFc3ZnhqWENVZVJ2NTQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI1NpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItS2V5SW5mbyI+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPlZQWDRuS0Z5UzZyRitGNmNSUjBQck5aZHc2Zz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9IlNpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItU2lnbmF0dXJlVmFsdWUiPkxiS04vL0M3WGt5eFR0WVRpQ1VScjhuWnp4QW1zdGNNZDBDZ0VBQ3JLMWR5Z1JIcUdjSzR4dHMrV0NVOFB5RXFXclJJVFl6SXV3LzcNClY0Wno5VFQ2MHA0S1RNZXd1UUw2NHNrRVN4MllnMkVkaWtTTyt0S3hXa2hyYVVzbVZiR2JQbW1jbUR2OTd0SER3ODg3NDdlRnE1RjUNCnYrYVZTeUF6MDNpVUttdVNlSDg9PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1LZXlJbmZvIj48ZHM6S2V5VmFsdWU+PGRzOlJTQUtleVZhbHVlPjxkczpNb2R1bHVzPnd1Y21qOXRJV3J2d2JTVFVEZndLbCtKdERNTUVSMGNMZDZEa0JTcjc5MHQrckdOakVTcVlqUndFSWVCbktvUUhQeDVIb1JlRjg4L3QNCnFZOStDaEVYcExITHM5cDVhWDdTREp1YnBRTWZwMXRERlgzNHl3Z3hTUXZjZWVKUVdCWGppZXVJbWZDMjFzNGJPY2dKYlYxaGJpZ1MNCnpPS1RRS3IxVHpkR1IrdVJ5MDA9PC9kczpNb2R1bHVzPjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD48L2RzOlJTQUtleVZhbHVlPjwvZHM6S2V5VmFsdWU+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJSW1UQ0NCNEdnQXdJQkFnSURBWFVVTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUlCT3pFTE1Ba0dBMVVFQmhNQ1JWTXhPekE1QmdOVg0KQkFvVE1rRm5aVzVqYVdFZ1EyRjBZV3hoYm1FZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUNoT1NVWWdVUzB3T0RBeE1UYzJMVWtwTVRRdw0KTWdZRFZRUUhFeXRRWVhOellYUm5aU0JrWlNCc1lTQkRiMjVqWlhCamFXOGdNVEVnTURnd01EZ2dRbUZ5WTJWc2IyNWhNUzR3TEFZRA0KVlFRTEV5VlRaWEoyWldseklGQjFZbXhwWTNNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVWRFZpMHlNVFV3TXdZRFZRUUxFeXhXWldkbA0KZFNCb2RIUndjem92TDNkM2R5NWpZWFJqWlhKMExtNWxkQzkyWlhKRFNVTXRNaUFvWXlrd016RTFNRE1HQTFVRUN4TXNSVzUwYVhSaA0KZENCd2RXSnNhV05oSUdSbElHTmxjblJwWm1sallXTnBieUJrWlNCamFYVjBZV1JoYm5NeEd6QVpCZ05WQkFNVEVsQlNSVkJTVDBSVg0KUTBOSlR5QkpSRU5oZERBZUZ3MHhNREF5TVRFeE9ESXlNRFJhRncweE5EQXlNVEF4T0RJeU1EUmFNSUd3TVFzd0NRWURWUVFHRXdKRg0KVXpFMU1ETUdBMVVFQ3hNc1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5U1VSRFlYUWdLR01wTURNeA0KRmpBVUJnTlZCQVFURFVKRlVreEJUa2RCSUZOUFZFOHhGekFWQmdOVkJDb1REazFCVWtsQklFVk9SMUpCUTBsQk1SSXdFQVlEVlFRRg0KRXdreE1EQXdNRGswTkZNeEpUQWpCZ05WQkFNVEhFMUJVa2xCSUVWT1IxSkJRMGxCSUVKRlVreEJUa2RCSUZOUFZFOHdnWjh3RFFZSg0KS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTG5Kby9iU0ZxNzhHMGsxQTM4Q3BmaWJRekRCRWRIQzNlZzVBVXErL2RMZnF4ag0KWXhFcW1JMGNCQ0hnWnlxRUJ6OGVSNkVYaGZQUDdhbVBmZ29SRjZTeHk3UGFlV2wrMGd5Ym02VURINmRiUXhWOStNc0lNVWtMM0huaQ0KVUZnVjQ0bnJpSm53dHRiT0d6bklDVzFkWVc0b0VzemlrMENxOVU4M1JrZnJrY3ROQWdNQkFBR2pnZ1N3TUlJRXJEQU1CZ05WSFJNQg0KQWY4RUFqQUFNQTRHQTFVZER3RUIvd1FFQXdJRm9EQ0J6QVlEVlIwUkJJSEVNSUhCZ1E5aWMyOTBiMEJuYldGcGJDNWpiMjJrZ1lVdw0KZ1lJeEN6QUpCZ05WQkFZVEFrVlRNU3N3S1FZRFZRUUtGQ0pCWjhPb2JtTnBZU0JEWVhSaGJHRnVZU0JrWlNCRFpYSjBhV1pwWTJGag0KYWNPek1RNHdEQVlEVlFRTEV3VkpSRU5CVkRFUE1BMEdBMVVFQlJNR01ERTNOVEUwTVNVd0l3WURWUVFERXh4TlFWSkpRU0JGVGtkUw0KUVVOSlFTQkNSVkpNUVU1SFFTQlRUMVJQb0JBR0Npc0dBUVFCOVhnQkFRR2dBZ3dBb0JRR0RsWUVBQUVEQmdFRUFmVjRBUUVDb0FJTQ0KQURBZkJnTlZIUklFR0RBV2dSUmxZMTlwWkdOaGRFQmpZWFJqWlhKMExtNWxkREFkQmdOVkhRNEVGZ1FVQUZYanVOc2tCMk1seXZVQg0KaDdwOFRKMHVKMHd3Z2dGSUJnTlZIU01FZ2dFL01JSUJPNEFVUkt2Y2tVaE4xNGg0Q24vZ2RPRG42NzIzS1Z5aGdnRVBwSUlCQ3pDQw0KQVFjeEN6QUpCZ05WQkFZVEFrVlRNVHN3T1FZRFZRUUtFekpCWjJWdVkybGhJRU5oZEdGc1lXNWhJR1JsSUVObGNuUnBabWxqWVdOcA0KYnlBb1RrbEdJRkV0TURnd01URTNOaTFKS1RFb01DWUdBMVVFQ3hNZlUyVnlkbVZwY3lCUWRXSnNhV056SUdSbElFTmxjblJwWm1sag0KWVdOcGJ6RThNRG9HQTFVRUN4TXpWbVZuWlhVZ2FIUjBjSE02THk5M2QzY3VZMkYwWTJWeWRDNXVaWFF2ZG1WeWNISmxjSEp2WkhWag0KWTJsdklDaGpLVEF6TVRVd013WURWUVFMRXl4S1pYSmhjbkYxYVdFZ1JXNTBhWFJoZEhNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVOaA0KZEdGc1lXNWxjekVjTUJvR0ExVUVBeE1UVUZKRlVGSlBSRlZEUTBsUElFVkRMVUZEUTRJUWR3S1R0TTFFRVU5RkVQWFVZSGdnaERBZA0KQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdRd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdXZ01EUUdDQ3NHQVFVRg0KQndFQkJDZ3dKakFrQmdnckJnRUZCUWN3QVlZWWFIUjBjSE02THk5dlkzTndMbU5oZEdObGNuUXVibVYwTUJnR0NDc0dBUVVGQndFRA0KQkF3d0NqQUlCZ1lFQUk1R0FRRXdnWVlHQTFVZEh3Ui9NSDB3UEtBNm9EaUdObWgwZEhBNkx5OWxjSE5qWkM1allYUmpaWEowTG01bA0KZEM5amNtd3ZjSEpsY0hKdlpIVmpZMmx2WDJWakxXbGtZMkYwTG1OeWJEQTlvRHVnT1lZM2FIUjBjRG92TDJWd2MyTmtNaTVqWVhSag0KWlhKMExtNWxkQzlqY213dmNISmxjSEp2WkhWalkybHZYMlZqTFdsa1kyRjBMbU55YkRDQjlnWURWUjBnQklIdU1JSHJNSUhvQmd3cg0KQmdFRUFmVjRBUU1CVmdFd2dkY3dMQVlJS3dZQkJRVUhBZ0VXSUdoMGRIQnpPaTh2ZDNkM0xtTmhkR05sY25RdWJtVjBMM1psY2tsRQ0KUTJGME1JR21CZ2dyQmdFRkJRY0NBakNCbVJxQmxrRnhkV1Z6ZENEdnY3MXpJSFZ1SUdObGNuUnBabWxqWVhRZ2NHVnljMjl1WVd3Zw0KU1VSRFFWUXNJSEpsWTI5dVpXZDFkQ0JrSjJsa1pXNTBhV1pwWTJGajc3KzlMQ0J6YVdkdVlYUjFjbUVnYVNCNGFXWnlZWFFnWkdVZw0KWTJ4aGMzTmxJRElnYVc1a2FYWnBaSFZoYkM0Z1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5UkVOaA0KZERBdEJnTlZIUWtFSmpBa01CQUdDQ3NHQVFVRkJ3a0VNUVFUQWtWVE1CQUdDQ3NHQVFVRkJ3a0ZNUVFUQWtWVE1BMEdDU3FHU0liMw0KRFFFQkJRVUFBNElCQVFDcTc3ODBSR1FNTEIxZ2tkTk1mTFhuZ3FNb1JIR0taYnZ6a3JxSUFtVDhXQWQxRThyQXBoUjkveExKVXRwNQ0KbGJnMmZScjVibDJqOE9WREJLMlltRzQxaDhBRG40U1RJL0FwZU5JTlNmalpzNk5Sc25XekZ5ZlhYbVBDSFlGQi9YV3p5aW1DRXhndg0KdnR1SCszUUF3Y3dobjUwUExFdWh3NUM1dmxYN0x5NUs2ckxMTUZOVVVNYldWeTFoWmVsSy9DQlRjQWpJTzM4TlkrdllSQU1LU2Y0TQ0KL2daUXo0cUJlRlZKYTUyUjdOY0FxQ2ZyZkxmYVhwYkRTZzk4eG9CZU5zMmluR3p4OFVTZ0VyTFpqS0pzZG4vS2pURDlnUy9zVGRRNg0KUTdpZHFsZDJMRlZsTzIvYjk0Wk5aQmNTLzc4RU9EWGdkV2ZreVBDN1J3OHJlOW5JMy9qVDwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjxkczpPYmplY3QgRW5jb2Rpbmc9ImJhc2U2NCIgSWQ9Ik9iamVjdC05ODczM2NkZS04YmNjLTQ4YTAtOWI3Ny0wZTk5OTdiZGQwNTgiIE1pbWVUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPlNHVnNiRzhnVjI5eWJHUT08L2RzOk9iamVjdD48ZHM6T2JqZWN0Pjx4YWRlczpRdWFsaWZ5aW5nUHJvcGVydGllcyB4bWxuczp4YWRlcz0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMy92MS4zLjIjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1RdWFsaWZ5aW5nUHJvcGVydGllcyIgVGFyZ2V0PSIjU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjx4YWRlczpTaWduZWRTaWduYXR1cmVQcm9wZXJ0aWVzPjx4YWRlczpTaWduaW5nVGltZT4yMDExLTAzLTIxVDExOjQ0OjQyKzAxOjAwPC94YWRlczpTaWduaW5nVGltZT48eGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjx4YWRlczpDZXJ0Pjx4YWRlczpDZXJ0RGlnZXN0PjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT4zbTZ3OTlUb3lTZDlKcEJsMWdCazhEei9iYlU9PC9kczpEaWdlc3RWYWx1ZT48L3hhZGVzOkNlcnREaWdlc3Q+PHhhZGVzOklzc3VlclNlcmlhbD48ZHM6WDUwOUlzc3Vlck5hbWU+Q049UFJFUFJPRFVDQ0lPIElEQ2F0LCBPVT1FbnRpdGF0IHB1YmxpY2EgZGUgY2VydGlmaWNhY2lvIGRlIGNpdXRhZGFucywgT1U9VmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMsIE9VPVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTIsIEw9UGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYSwgTz1BZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKSwgQz1FUzwvZHM6WDUwOUlzc3Vlck5hbWU+PGRzOlg1MDlTZXJpYWxOdW1iZXI+OTU1MDg8L2RzOlg1MDlTZXJpYWxOdW1iZXI+PC94YWRlczpJc3N1ZXJTZXJpYWw+PC94YWRlczpDZXJ0PjwveGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz48eGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PHhhZGVzOkRhdGFPYmplY3RGb3JtYXQgT2JqZWN0UmVmZXJlbmNlPSIjUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyI+PHhhZGVzOk1pbWVUeXBlPmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTwveGFkZXM6TWltZVR5cGU+PHhhZGVzOkVuY29kaW5nPmJhc2U2NDwveGFkZXM6RW5jb2Rpbmc+PC94YWRlczpEYXRhT2JqZWN0Rm9ybWF0PjwveGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PC94YWRlczpTaWduZWRQcm9wZXJ0aWVzPjwveGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXM+PC9kczpPYmplY3Q+PC9kczpTaWduYXR1cmU+ "; IPersonalAttributeList palist = new PersonalAttributeList(); PersonalAttribute signedDoc = new PersonalAttribute(); signedDoc.setName("signedDoc"); signedDoc.setIsRequired(false); ArrayList signed = new ArrayList(); signed.add(signedDocResponse); signedDoc.setValue(signed); palist.add(signedDoc); PersonalAttribute isAgeOver = new PersonalAttribute(); isAgeOver.setName("isAgeOver"); isAgeOver.setIsRequired(false); ArrayList ages = new ArrayList(); ages.add("16"); ages.add("18"); isAgeOver.setValue(ages); palist.add(isAgeOver); attrQueryenRequest.setPersonalAttributeList(palist); final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(palist); final STORKAttrQueryResponse storkResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, destinationUrl, isNotHashing); attrQueryResponse = storkResponse.getTokenSaml(); attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); assertTrue("SignedDoc response should be the same: ", attrQeuryenResponse.getPersonalAttributeList().get("signedDoc").getValue().get(0).equals(signedDocResponse)); } @Test public final void testEncodeDecode() { STORKAttrQueryRequest attrRequest = new STORKAttrQueryRequest(); STORKAttrQueryRequest request; IPersonalAttributeList list = null; boolean outcome = false; try { // STEP 1: Create the STORKAttrQueryRequest and get the SAML bytes attrRequest.setSpSector("NOT AVAILABLE"); attrRequest.setSpInstitution("NOT AVAILABLE"); attrRequest.setSpApplication("NOT AVAILABLE"); attrRequest.setSpCountry("NOT AVAILABLE"); attrRequest.setIssuer("123"); attrRequest.setDestination("456"); attrRequest.setAssertionConsumerServiceURL("789"); attrRequest.setQaa(2); attrRequest.setPersonalAttributeList(pal); System.out.println("Original PAL:"); System.out.println(pal.toString()); attrRequest = engine.generateSTORKAttrQueryRequest(attrRequest); byte[] saml = attrRequest.getTokenSaml(); // STEP 2: RE-Create the STORKAttrQueryRequest from the SAML bytes request = engine.validateSTORKAttrQueryRequest(saml); System.out.println("STORKAttrQueryRequest Issuer: " + request.getIssuer()); System.out.println("STORKAttrQueryRequest Destination: " + request.getDestination()); System.out.println("STORKAttrQueryRequest ServiceURL: " + request.getAssertionConsumerServiceURL()); System.out.println("STORKAttrQueryRequest Attributes: " + request.getPersonalAttributeList().toString()); System.out.println("STORKAttrQueryRequest QAA: " + request.getQaa()); // ------------------------------ list = request.getPersonalAttributeList(); List values = new ArrayList(); values.add("test1"); values.add("test2"); values.add("test3"); list.get("newAttribute2").setValue(values); System.out.println("Values added in newAttribute2 PAL:"); System.out.println(list.toString()); // //////////////////////////////////////////////////////////////////////// final STORKAttrQueryResponse response = new STORKAttrQueryResponse(); response.setPersonalAttributeList(list); final STORKAttrQueryResponse storkResponse = engine.generateSTORKAttrQueryResponse(request, response, "127.0.0.1", request.getAssertionConsumerServiceURL(), false); byte[] samlBytes = storkResponse.getTokenSaml(); // STEP 3: RE-Create the STORKAttrQueryResponse from the SAML bytes STORKAttrQueryResponse attrResponse = null; attrResponse = engine.validateSTORKAttrQueryResponse(samlBytes, "127.0.0.1"); System.out.println("Response decoded PAL:"); System.out.println(attrResponse.getPersonalAttributeList().toString()); values = attrResponse.getPersonalAttributeList().get("newAttribute2").getValue(); if (values.contains("test1") && values.contains("test2") && values.contains("test3")) outcome = true; } catch (final STORKSAMLEngineException e) { LOG.error("Errror genereating SAML Token for Authentication Request", e); } assertTrue(outcome); } @Test public final void testGenerateAttrRequestWithMultipleAssertions() throws STORKSAMLEngineException { STORKAttrQueryRequest req = null; STORKAttrQueryResponse res0 = null; STORKAttrQueryResponse res1 = null; STORKAttrQueryResponse res2 = null; STORKAttrQueryResponse res = null; STORKAttrQueryResponse restotal = null; try { req = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest); attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest); } catch (STORKSAMLEngineException e) { fail("Error validating STORKAuthnRequest"); } IPersonalAttributeList pList = req.getPersonalAttributeList(); for (int i = 0; i < pList.size(); i++) { PersonalAttribute attr = pList.get("dateOfBirth"); attr.setValue(Arrays.asList("19820919")); pList.remove("dateOfBirth"); pList.add(attr); PersonalAttribute attr1 = pList.get("givenName"); attr1.setValue(Arrays.asList("Sveinborn Oskarsson")); pList.remove("givenName"); pList.add(attr1); PersonalAttribute attr2 = pList.get("isAgeOver"); attr2.setValue(Arrays.asList("true")); pList.remove("isAgeOver"); pList.add(attr2); } res = new STORKAttrQueryResponse(); res.setPersonalAttributeList(pList); STORKAttrQueryResponse storkResponse = getEngine().generateSTORKAttrQueryResponse(req, res, ipAddress, destinationUrl, isNotHashing); res0 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress); storkResponse = getEngine().generateSTORKAttrQueryResponse(req, res, ipAddress, destinationUrl, isNotHashing); res1 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress); storkResponse = getEngine().generateSTORKAttrQueryResponse(req, res, ipAddress, destinationUrl, isNotHashing); res2 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress); List responses = new ArrayList(); responses.add(res0); responses.add(res1); responses.add(res2); STORKAttrQueryResponse resfinal = new STORKAttrQueryResponse(); storkResponse = getEngine().generateSTORKAttrQueryResponseWithAssertions(req, resfinal, responses, ipAddress, destinationUrl, isNotHashing); attrQueryResponse = storkResponse.getTokenSaml(); FileOutputStream output = null; try { output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryMultiAssertResponse.xml")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { output.write(attrQueryResponse); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } res = null; res = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress); System.out.println(res.getTotalPersonalAttributeList().toString()); assertNotNull(res); } }