1   package org.acegisecurity.ui.webapp;
2   
3   import junit.framework.TestCase;
4   import org.acegisecurity.Authentication;
5   import org.acegisecurity.MockAuthenticationManager;
6   import org.acegisecurity.ui.WebAuthenticationDetails;
7   
8   import org.springframework.mock.web.MockHttpServletRequest;
9   
10  /***
11   * Tests SiteminderAuthenticationProcessingFilter.
12   * 
13   * @author Ben Alex
14   * @author <a href="mailto:scott@mccrory.us">Scott McCrory</a>
15   * @version CVS $Id: SiteminderAuthenticationProcessingFilterTests.java,v 1.1
16   *          2005/09/25 22:48:33 smccrory Exp $
17   */
18  public class SiteminderAuthenticationProcessingFilterTests extends TestCase {
19  
20  	/***
21  	 * Basic constructor.
22  	 */
23  	public SiteminderAuthenticationProcessingFilterTests() {
24  		super();
25  	}
26  
27  	/***
28  	 * Argument constructor.
29  	 * 
30  	 * @param arg0
31  	 */
32  	public SiteminderAuthenticationProcessingFilterTests(String arg0) {
33  		super(arg0);
34  	}
35  
36  	/***
37  	 * @see junit.framework.TestCase#setUp()
38  	 */
39  	public final void setUp() throws Exception {
40  		super.setUp();
41  	}
42  
43  	/***
44  	 * Runs the tests as a command-line program.
45  	 * 
46  	 * @param args
47  	 */
48  	public static void main(String[] args) {
49  		junit.textui.TestRunner
50  				.run(SiteminderAuthenticationProcessingFilterTests.class);
51  	}
52  
53  	/***
54  	 * Tests the class' getters.
55  	 */
56  	public void testAccessors() {
57  
58  		SiteminderAuthenticationProcessingFilter filter = new SiteminderAuthenticationProcessingFilter();
59  		
60  		filter.setAlwaysUseDefaultTargetUrl(true);
61  		assertTrue(filter.isAlwaysUseDefaultTargetUrl());
62  		
63  		filter.setAuthenticationFailureUrl("foo");
64  		assertEquals("foo", filter.getAuthenticationFailureUrl());
65  		
66  		filter.setContinueChainBeforeSuccessfulAuthentication(true);
67  		assertTrue(filter.isContinueChainBeforeSuccessfulAuthentication());
68  		
69  		filter.setDefaultTargetUrl("bar");
70  		assertEquals("bar", filter.getDefaultTargetUrl());
71  		
72  		filter.setFilterProcessesUrl("foobar");
73  		assertEquals("foobar", filter.getFilterProcessesUrl());
74  		
75  		filter.setFormPasswordParameterKey("passwordParamKey");
76  		assertEquals("passwordParamKey", filter.getFormPasswordParameterKey());
77  		
78  		filter.setFormUsernameParameterKey("usernameParamKey");
79  		assertEquals("usernameParamKey", filter.getFormUsernameParameterKey());
80  		
81  		filter.setSiteminderPasswordHeaderKey("passwordHeaderKey");
82  		assertEquals("passwordHeaderKey", filter.getSiteminderPasswordHeaderKey());
83  		
84  		filter.setSiteminderUsernameHeaderKey("usernameHeaderKey");
85  		assertEquals("usernameHeaderKey", filter.getSiteminderUsernameHeaderKey());
86  
87  	}
88  
89  	/***
90  	 * Tests normal form processing.
91  	 * 
92  	 * @throws Exception
93  	 */
94  	public void testFormNormalOperation() throws Exception {
95  
96  		MockHttpServletRequest request = new MockHttpServletRequest();
97  		request
98  				.addParameter(
99  						SiteminderAuthenticationProcessingFilter.ACEGI_SECURITY_FORM_USERNAME_KEY,
100 						"marissa");
101 		request
102 				.addParameter(
103 						SiteminderAuthenticationProcessingFilter.ACEGI_SECURITY_FORM_PASSWORD_KEY,
104 						"koala");
105 
106 		MockAuthenticationManager authMgr = new MockAuthenticationManager(true);
107 
108 		SiteminderAuthenticationProcessingFilter filter = new SiteminderAuthenticationProcessingFilter();
109 		filter.setAuthenticationManager(authMgr);
110 		filter.init(null);
111 
112 		Authentication result = filter.attemptAuthentication(request);
113 		assertTrue(result != null);
114 		assertEquals("127.0.0.1", ((WebAuthenticationDetails) result
115 				.getDetails()).getRemoteAddress());
116 
117 	}
118 
119 	/***
120 	 * Tests form null password handling.
121 	 * 
122 	 * @throws Exception
123 	 */
124 	public void testFormNullPasswordHandledGracefully() throws Exception {
125 
126 		MockHttpServletRequest request = new MockHttpServletRequest();
127 		request
128 				.addParameter(
129 						SiteminderAuthenticationProcessingFilter.ACEGI_SECURITY_FORM_USERNAME_KEY,
130 						"marissa");
131 
132 		MockAuthenticationManager authMgr = new MockAuthenticationManager(true);
133 
134 		SiteminderAuthenticationProcessingFilter filter = new SiteminderAuthenticationProcessingFilter();
135 		filter.setAuthenticationManager(authMgr);
136 		filter.init(null);
137 
138 		Authentication result = filter.attemptAuthentication(request);
139 		assertTrue(result != null);
140 
141 	}
142 
143 	/***
144 	 * Tests form null username handling.
145 	 * 
146 	 * @throws Exception
147 	 */
148 	public void testFormNullUsernameHandledGracefully() throws Exception {
149 
150 		MockHttpServletRequest request = new MockHttpServletRequest();
151 		request
152 				.addParameter(
153 						SiteminderAuthenticationProcessingFilter.ACEGI_SECURITY_FORM_PASSWORD_KEY,
154 						"koala");
155 
156 		MockAuthenticationManager authMgr = new MockAuthenticationManager(true);
157 
158 		SiteminderAuthenticationProcessingFilter filter = new SiteminderAuthenticationProcessingFilter();
159 		filter.setAuthenticationManager(authMgr);
160 		filter.init(null);
161 
162 		Authentication result = filter.attemptAuthentication(request);
163 		assertTrue(result != null);
164 
165 	}
166 
167 	/***
168 	 * Tests normal Siteminder header processing.
169 	 * 
170 	 * @throws Exception
171 	 */
172 	public void testSiteminderNormalOperation() throws Exception {
173 
174 		MockHttpServletRequest request = new MockHttpServletRequest();
175 		request.addHeader("SM_USER", "E099544");
176 
177 		MockAuthenticationManager authMgr = new MockAuthenticationManager(true);
178 
179 		SiteminderAuthenticationProcessingFilter filter = new SiteminderAuthenticationProcessingFilter();
180 		filter.setAuthenticationManager(authMgr);
181 		filter.setSiteminderUsernameHeaderKey("SM_USER");
182 		filter.setSiteminderPasswordHeaderKey("SM_USER");
183 		filter.init(null);
184 
185 		Authentication result = filter.attemptAuthentication(request);
186 		assertTrue(result != null);
187 		assertEquals("127.0.0.1", ((WebAuthenticationDetails) result
188 				.getDetails()).getRemoteAddress());
189 
190 	}
191 
192 }