package at.gv.egovernment.moa.id.auth.modules.ehvd.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.io.IOException; import java.security.PublicKey; import java.util.HashMap; import java.util.Map; import javax.xml.transform.TransformerException; import org.apache.commons.lang3.RandomStringUtils; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.Assert; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.w3c.dom.Element; import at.gv.egiz.eaaf.core.api.IRequest; import at.gv.egiz.eaaf.core.api.IRequestStorage; import at.gv.egiz.eaaf.core.api.data.EAAFConfigConstants; import at.gv.egiz.eaaf.core.api.data.EAAFConstants; import at.gv.egiz.eaaf.core.api.idp.ISPConfiguration; import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.EAAFException; import at.gv.egiz.eaaf.core.exceptions.EAAFParserException; import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser; import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySPConfiguration; import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; import at.gv.egovernment.moa.id.auth.data.AuthenticationSessionWrapper; import at.gv.egovernment.moa.id.auth.exception.AuthenticationException; import at.gv.egovernment.moa.id.auth.modules.ehvd.task.InjectEhvdInformationTask; import at.gv.egovernment.moa.id.auth.modules.ehvd.test.dummy.DummyAuthConfigMap; import at.gv.egovernment.moa.id.auth.modules.ehvd.test.dummy.TestUtils; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/test_ehvd_service_auth.beans.xml" }) public class InjectEhvdIdentityInformationTaskTest { @Autowired InjectEhvdInformationTask task; @Autowired DummyAuthConfigMap config; @Autowired IRequestStorage storage; protected MockHttpServletRequest httpReq; protected MockHttpServletResponse httpResp; private ExecutionContext context; private TestRequestImpl pendingReq; private Map spConfigMap; @Before public void initialize() throws EAAFParserException { httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler"); httpResp = new MockHttpServletResponse(); RequestContextHolder.resetRequestAttributes(); RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); context = new ExecutionContextImpl(); spConfigMap = new HashMap<>(); spConfigMap.put(EAAFConfigConstants.SERVICE_UNIQUEIDENTIFIER, RandomStringUtils.randomAlphanumeric(10)); ISPConfiguration spConfig = new DummySPConfiguration(spConfigMap, config); pendingReq = new TestRequestImpl(); pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); pendingReq.setSpConfig(spConfig); // re-set config config.putConfigValue("modules.dummyauth.enabled", String.valueOf(true)); //inject identityLink final AuthenticationSessionWrapper moaSession = pendingReq.getSessionData( AuthenticationSessionWrapper.class); moaSession.setIdentityLink(TestUtils.generateDummyIdl( RandomStringUtils.randomAlphanumeric(10), EAAFConstants.URN_PREFIX_BASEID)); } @Test public void noIdentityLinkInSession() { final AuthenticationSessionWrapper moaSession = pendingReq.getSessionData( AuthenticationSessionWrapper.class); moaSession.setIdentityLink(null); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "process.04", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void validateState() throws TaskExecutionException, PendingReqIdValidationException { task.execute(pendingReq, context); // validate state IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId()); assertNotNull("pendingReq not stored", storedReq); final AuthenticationSessionWrapper moaSession = storedReq.getSessionData( AuthenticationSessionWrapper.class); assertFalse("foreign", moaSession.isForeigner()); assertFalse("mandate", moaSession.isMandateUsed()); assertEquals("missing attributes", 1, moaSession.getGenericSessionDataStorage().size()); } }