|  | @@ -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
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |