1 package edu.internet2.middleware.shibboleth.serviceprovider;
4 import com.mockrunner.mock.web.MockFilterConfig;
5 import com.mockrunner.mock.web.MockHttpServletRequest;
6 import com.mockrunner.mock.web.MockHttpServletResponse;
7 import com.mockrunner.mock.web.MockServletContext;
8 import com.mockrunner.mock.web.WebMockObjectFactory;
9 import com.mockrunner.servlet.ServletTestModule;
11 import edu.internet2.middleware.shibboleth.resource.AuthenticationFilter;
12 import edu.internet2.middleware.shibboleth.resource.FilterSupport;
13 import edu.internet2.middleware.shibboleth.resource.FilterSupport.RMAppInfo;
16 * Use Mockrunner to test the Shib Filter
18 public class AuthenticationFilterTest extends SPTestCase {
20 // The Factory creates the Request, Response, Session, etc.
21 WebMockObjectFactory factory = new WebMockObjectFactory();
23 // The TestModule runs the Servlet and Filter methods in the simulated container
24 ServletTestModule testModule = new ServletTestModule(factory);
26 // Now simulated Servlet API objects
27 MockServletContext servletContext= new MockServletContext();
28 MockFilterConfig filterConfig= factory.getMockFilterConfig();
29 MockHttpServletResponse response = factory.getMockResponse();
30 MockHttpServletRequest request = factory.getMockRequest();
33 private AuthenticationFilter filter;
35 // SP configuration objects
36 private FilterSupport service;
37 private RMAppInfo rmAppInfo;
39 protected void setUp() throws Exception {
42 // ServletContext (argument to Filters and Servlets)
43 servletContext.setServletContextName("dummy Servlet Context");
44 servletContext.setInitParameter("requireId", ".+/test.+");
46 // The FilterConfig (argument to Filter init)
47 filterConfig.setupServletContext(servletContext);
48 filterConfig.setFilterName("Test Filter under JUnit");
50 // Create instance of Filter class, add to chain, call its init()
51 filter = (AuthenticationFilter) testModule.createFilter(AuthenticationFilter.class);
53 // Initialize an SP Context and Confg
54 String configFileName = new File("data/spconfig.xml").toURI().toString();
55 initServiceProvider(configFileName);
57 // Plug an instance of FilterSupportImpl into the Filter
58 service = new FilterSupportImpl();
59 AuthenticationFilter.setFilterSupport(service);
61 // Get our own copy of SP Config info for Assert statements
62 rmAppInfo = service.getRMAppInfo("default");
64 request.setRemoteAddr("127.0.0.1");
65 request.setContextPath("/secure");
66 request.setProtocol("HTTP/1.1");
67 request.setScheme("https");
68 request.setServerName("sp.example.org");
69 request.setServerPort(9443);
72 void setRequestUrls(String suffix) {
73 request.setMethod("GET");
74 request.setRequestURI("http://sp.example.org:9443/secure/"+suffix);
75 request.setRequestURL("http://sp.example.org:9443/secure/"+suffix);
76 request.setServletPath("/secure/"+suffix);
80 public void testInitialGET() {
82 setRequestUrls("test.txt");
84 // Run the Filter against the request
85 testModule.doFilter();
87 // It should generate a Redirect to the WAYF, with added parameters
88 assertTrue(response.wasRedirectSent());
89 String wayfurl = response.getHeader("Location");
90 assertEquals(rmAppInfo.wayfUrl,wayfurl.substring(0,wayfurl.indexOf('?')));