| 
					
				 | 
			
			
				@@ -0,0 +1,194 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Licensed under the Apache License, Version 2.0 (the "License");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * you may not use this file except in compliance with the License.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * You may obtain a copy of the License at
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *     http://www.apache.org/licenses/LICENSE-2.0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Unless required by applicable law or agreed to in writing, software
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * distributed under the License is distributed on an "AS IS" BASIS,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * See the License for the specific language governing permissions and
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * limitations under the License.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package org.acegisecurity.providers.openid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import junit.framework.TestCase;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.Authentication;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.AuthenticationServiceException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.BadCredentialsException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Tests {@link OpenIDAuthenticationProvider}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author Robin Bramley, Opsera Ltd
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class OpenIDAuthenticationProviderTests extends TestCase {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //~ Static fields/initializers =====================================================================================
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final String USERNAME = "user.acegiopenid.com";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //~ Methods ========================================================================================================
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testAuthenticateCancel() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication preAuth = new OpenIDAuthenticationToken(OpenIDAuthenticationStatus.CANCELLED, USERNAME, "");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(preAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.authenticate(preAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("Should throw an AuthenticationException");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (AuthenticationCancelledException expected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals("Log in cancelled", expected.getMessage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testAuthenticateError() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication preAuth = new OpenIDAuthenticationToken(OpenIDAuthenticationStatus.ERROR, USERNAME, "");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(preAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.authenticate(preAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("Should throw an AuthenticationException");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (AuthenticationServiceException expected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals("Error message from server: ", expected.getMessage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testAuthenticateFailure() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication preAuth = new OpenIDAuthenticationToken(OpenIDAuthenticationStatus.FAILURE, USERNAME, "");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(preAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.authenticate(preAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("Should throw an AuthenticationException");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (BadCredentialsException expected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals("Log in failed - identity could not be verified", expected.getMessage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testAuthenticateSetupNeeded() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication preAuth = new OpenIDAuthenticationToken(OpenIDAuthenticationStatus.SETUP_NEEDED, USERNAME, "");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(preAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.authenticate(preAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("Should throw an AuthenticationException");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (AuthenticationServiceException expected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals("The server responded setup was needed, which shouldn't happen", expected.getMessage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testAuthenticateSuccess() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication preAuth = new OpenIDAuthenticationToken(OpenIDAuthenticationStatus.SUCCESS, USERNAME, "");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(preAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication postAuth = provider.authenticate(preAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertNotNull(postAuth);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(postAuth instanceof OpenIDAuthenticationToken);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(postAuth.isAuthenticated());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertNotNull(postAuth.getPrincipal());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(preAuth.getPrincipal(), postAuth.getPrincipal());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertNotNull(postAuth.getAuthorities());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(postAuth.getAuthorities().length > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(((OpenIDAuthenticationToken) postAuth).getStatus() == OpenIDAuthenticationStatus.SUCCESS);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(((OpenIDAuthenticationToken) postAuth).getMessage() == null);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testDetectsMissingAuthoritiesPopulator() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.afterPropertiesSet();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("Should have thrown Exception");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception expected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals("The ssoAuthoritiesPopulator must be set", expected.getMessage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.supports(Class)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testDoesntSupport() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertFalse(provider.supports(UsernamePasswordAuthenticationToken.class));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.authenticate(Authentication)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testIgnoresUserPassAuthToken() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(USERNAME, "password");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(null, provider.authenticate(token));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Test method for 'org.acegisecurity.providers.openid.OpenIDAuthenticationProvider.supports(Class)'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testSupports() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertTrue(provider.supports(OpenIDAuthenticationToken.class));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testValidation() throws Exception {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(new MockAuthoritiesPopulator());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.afterPropertiesSet();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.setSsoAuthoritiesPopulator(null);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            provider.afterPropertiesSet();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("IllegalArgumentException expected, ssoAuthoritiesPopulator is null");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (IllegalArgumentException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //expected
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 |