From 4f19f7626956831d5d2f2de7368ab629ab4e342c Mon Sep 17 00:00:00 2001 From: Ben Alex Date: Tue, 30 Mar 2004 04:46:12 +0000 Subject: [PATCH] Initial commit. --- .../resin/ResinAcegiAuthenticatorTests.java | 280 ++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 adapters/resin/src/test/java/org/acegisecurity/adapters/resin/ResinAcegiAuthenticatorTests.java diff --git a/adapters/resin/src/test/java/org/acegisecurity/adapters/resin/ResinAcegiAuthenticatorTests.java b/adapters/resin/src/test/java/org/acegisecurity/adapters/resin/ResinAcegiAuthenticatorTests.java new file mode 100644 index 0000000000..81fe306aff --- /dev/null +++ b/adapters/resin/src/test/java/org/acegisecurity/adapters/resin/ResinAcegiAuthenticatorTests.java @@ -0,0 +1,280 @@ +/* Copyright 2004 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 net.sf.acegisecurity.adapters.resin; + +import junit.framework.TestCase; + +import net.sf.acegisecurity.GrantedAuthority; +import net.sf.acegisecurity.GrantedAuthorityImpl; +import net.sf.acegisecurity.adapters.MockPrincipal; +import net.sf.acegisecurity.adapters.PrincipalAcegiUserToken; + +import java.security.Principal; + +import javax.servlet.ServletException; + + +/** + * Tests {@link ResinAcegiAuthenticator}. + * + * @author Ben Alex + * @version $Id$ + */ +public class ResinAcegiAuthenticatorTests extends TestCase { + //~ Instance fields ======================================================== + + private final String ADAPTER_KEY = "my_key"; + + //~ Constructors =========================================================== + + public ResinAcegiAuthenticatorTests() { + super(); + } + + public ResinAcegiAuthenticatorTests(String arg0) { + super(arg0); + } + + //~ Methods ================================================================ + + public final void setUp() throws Exception { + super.setUp(); + } + + public static void main(String[] args) { + junit.textui.TestRunner.run(ResinAcegiAuthenticatorTests.class); + } + + public void testAdapterAbortsIfAppContextDoesNotContainAnAuthenticationBean() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-invalid.xml"); + adapter.setKey(ADAPTER_KEY); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertEquals("Bean context must contain at least one bean of type AuthenticationManager", + expected.getMessage()); + } + } + + public void testAdapterAbortsIfNoAppContextSpecified() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setKey(ADAPTER_KEY); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertEquals("appContextLocation must be defined", + expected.getMessage()); + } + + adapter.setAppContextLocation(""); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertEquals("appContextLocation must be defined", + expected.getMessage()); + } + } + + public void testAdapterAbortsIfNoKeySpecified() throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertEquals("key must be defined", expected.getMessage()); + } + + adapter.setKey(""); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertEquals("key must be defined", expected.getMessage()); + } + } + + public void testAdapterAbortsWithIncorrectApplicationContextLocation() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation("FILE_DOES_NOT_EXIST"); + adapter.setKey(ADAPTER_KEY); + + try { + adapter.init(); + fail("Should have thrown ServletException"); + } catch (ServletException expected) { + assertTrue(expected.getMessage().startsWith("Cannot locate")); + } + } + + public void testAdapterStartsUpSuccess() throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertTrue(true); + } + + public void testAuthenticationFailsForIncorrectPassword() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertEquals(null, adapter.loginImpl("marissa", "kangaroo")); + } + + public void testAuthenticationFailsForIncorrectUserName() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertEquals(null, adapter.loginImpl("melissa", "koala")); + } + + public void testAuthenticationSuccess() throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + + Principal result = adapter.loginImpl("marissa", "koala"); + + if (!(result instanceof PrincipalAcegiUserToken)) { + fail("Should have returned PrincipalAcegiUserToken"); + } + + PrincipalAcegiUserToken castResult = (PrincipalAcegiUserToken) result; + assertEquals("marissa", castResult.getPrincipal()); + assertEquals("koala", castResult.getCredentials()); + assertEquals("ROLE_TELLER", + castResult.getAuthorities()[0].getAuthority()); + assertEquals("ROLE_SUPERVISOR", + castResult.getAuthorities()[1].getAuthority()); + assertEquals(ADAPTER_KEY.hashCode(), castResult.getKeyHash()); + } + + public void testAuthenticationSuccessUsingAlternateMethod() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + + Principal result = adapter.loginImpl(null, null, null, "marissa", + "koala"); + + if (!(result instanceof PrincipalAcegiUserToken)) { + fail("Should have returned PrincipalAcegiUserToken"); + } + + PrincipalAcegiUserToken castResult = (PrincipalAcegiUserToken) result; + assertEquals("marissa", castResult.getPrincipal()); + assertEquals("koala", castResult.getCredentials()); + assertEquals("ROLE_TELLER", + castResult.getAuthorities()[0].getAuthority()); + assertEquals("ROLE_SUPERVISOR", + castResult.getAuthorities()[1].getAuthority()); + assertEquals(ADAPTER_KEY.hashCode(), castResult.getKeyHash()); + } + + public void testAuthenticationWithNullPasswordHandledGracefully() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertEquals(null, adapter.loginImpl("marissa", null)); + } + + public void testAuthenticationWithNullUserNameHandledGracefully() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertEquals(null, adapter.loginImpl(null, "koala")); + } + + public void testGetters() throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + assertEquals(ADAPTER_KEY, adapter.getKey()); + assertEquals("net/sf/acegisecurity/adapters/adaptertest-valid.xml", + adapter.getAppContextLocation()); + } + + public void testHasRoleWithANullPrincipalFails() throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertTrue(!adapter.isUserInRole(null, null, null, null, "ROLE_ONE")); + } + + public void testHasRoleWithAPrincipalTheAdapterDidNotCreateFails() + throws Exception { + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertTrue(!adapter.isUserInRole(null, null, null, new MockPrincipal(), + "ROLE_ONE")); + } + + public void testHasRoleWithPrincipalAcegiUserToken() + throws Exception { + PrincipalAcegiUserToken token = new PrincipalAcegiUserToken("KEY", + "Test", "Password", + new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( + "ROLE_TWO")}); + ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator(); + adapter.setAppContextLocation( + "net/sf/acegisecurity/adapters/adaptertest-valid.xml"); + adapter.setKey(ADAPTER_KEY); + adapter.init(); + assertTrue(adapter.isUserInRole(null, null, null, token, "ROLE_ONE")); + assertTrue(adapter.isUserInRole(null, null, null, token, "ROLE_ONE")); + assertTrue(!adapter.isUserInRole(null, null, null, token, + "ROLE_WE_DO_NOT_HAVE")); + } +}