net.shibboleth.idp.cas.flow.AbstractProfileActionTest.java Source code

Java tutorial

Introduction

Here is the source code for net.shibboleth.idp.cas.flow.AbstractProfileActionTest.java

Source

/*
 * See LICENSE for licensing and NOTICE for copyright.
 */

package net.shibboleth.idp.cas.flow;

import net.shibboleth.idp.cas.ticket.Ticket;
import net.shibboleth.idp.cas.ticket.TicketContext;
import net.shibboleth.idp.profile.AbstractProfileAction;
import net.shibboleth.idp.session.IdPSession;
import net.shibboleth.idp.session.SessionException;
import net.shibboleth.idp.session.context.SessionContext;
import net.shibboleth.idp.spring.IdPPropertiesApplicationContextInitializer;
import org.opensaml.profile.context.ProfileRequestContext;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.webflow.test.MockExternalContext;
import org.springframework.webflow.test.MockRequestContext;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
 * Abstract base class for all tests that of actions that extend {@link AbstractProfileAction}.
 *
 * @author Marvin S. Addison
 */
@ContextConfiguration(locations = { "/system/conf/global-system.xml", "/system/conf/mvc-beans.xml",
        "/system/conf/relying-party-system.xml", "/test/test-service-registry.xml", "/test/test-webflow-config.xml",
        "/flows/cas/login/login-beans.xml", "/flows/cas/serviceValidate/serviceValidate-beans.xml",
        "/flows/cas/proxyValidate/proxyValidate-beans.xml" }, initializers = IdPPropertiesApplicationContextInitializer.class)
@WebAppConfiguration
public abstract class AbstractProfileActionTest extends AbstractTestNGSpringContextTests {

    protected static final String TEST_SESSION_ID = "+TkSGIRofZyue/p8F4M7TA==";

    protected static final String TEST_PRINCIPAL_NAME = "omega";

    protected static RequestContext createProfileContext() {
        final MockRequestContext requestContext = new MockRequestContext();
        final MockExternalContext externalContext = new MockExternalContext();
        externalContext.setNativeRequest(new MockHttpServletRequest());
        externalContext.setNativeResponse(new MockHttpServletResponse());
        requestContext.setExternalContext(externalContext);
        final ProfileRequestContext profileRequestContext = new ProfileRequestContext();
        requestContext.getConversationScope().put(ProfileRequestContext.BINDING_KEY, profileRequestContext);
        return requestContext;
    }

    protected static ProfileRequestContext getProfileContext(final RequestContext context) {
        return (ProfileRequestContext) context.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
    }

    protected static RequestContext createSessionContext(final String sessionId) {
        return createSessionContext(sessionId, true);
    }

    protected static RequestContext createSessionContext(final String sessionId, final boolean expiredFlag) {
        final RequestContext requestContext = createProfileContext();
        final ProfileRequestContext profileRequestContext = (ProfileRequestContext) requestContext
                .getConversationScope().get(ProfileRequestContext.BINDING_KEY);
        final SessionContext sessionContext = new SessionContext();
        sessionContext.setIdPSession(createSession(sessionId, expiredFlag));
        profileRequestContext.addSubcontext(sessionContext);
        return requestContext;
    }

    protected static IdPSession createSession(final String sessionId, final boolean expiredFlag) {
        final IdPSession mockSession = mock(IdPSession.class);
        when(mockSession.getId()).thenReturn(sessionId);
        when(mockSession.getPrincipalName()).thenReturn(TEST_PRINCIPAL_NAME);
        try {
            when(mockSession.checkTimeout()).thenReturn(expiredFlag);
        } catch (SessionException e) {
            throw new RuntimeException("Session exception", e);
        }
        return mockSession;
    }

    protected static RequestContext createTicketContext(final Ticket ticket) {
        final RequestContext requestContext = createProfileContext();
        final ProfileRequestContext profileRequestContext = (ProfileRequestContext) requestContext
                .getConversationScope().get(ProfileRequestContext.BINDING_KEY);
        profileRequestContext.addSubcontext(new TicketContext(ticket));
        return requestContext;
    }
}