    1   /* Copyright 2004 Acegi Technology Pty Limited
    2    *
    3    * Licensed under the Apache License, Version 2.0 (the "License");
    4    * you may not use this file except in compliance with the License.
    5    * You may obtain a copy of the License at
    6    *
    7    *     http://www.apache.org/licenses/LICENSE-2.0
    8    *
    9    * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15
    16  package org.acegisecurity.adapters;
    17
    18  import junit.framework.TestCase;
    19
    20  import org.acegisecurity.GrantedAuthority;
    21  import org.acegisecurity.GrantedAuthorityImpl;
    22
    23
    24  /***
    25   * Tests {@link AbstractAdapterAuthenticationToken}.
    26   *
    27   * @author Ben Alex
    28   * @version $Id: AbstractAdapterAuthenticationTokenTests.java,v 1.2 2005/11/17 00:55:50 benalex Exp $
    29   */
    30  public class AbstractAdapterAuthenticationTokenTests extends TestCase {
    31      //~ Constructors ===========================================================
    32
    33      public AbstractAdapterAuthenticationTokenTests() {
    34          super();
    35      }
    36
    37      public AbstractAdapterAuthenticationTokenTests(String arg0) {
    38          super(arg0);
    39      }
    40
    41      //~ Methods ================================================================
    42
    43      public final void setUp() throws Exception {
    44          super.setUp();
    45      }
    46
    47      public static void main(String[] args) {
    48          junit.textui.TestRunner.run(AbstractAdapterAuthenticationTokenTests.class);
    49      }
    50
    51      public void testGetters() throws Exception {
    52          MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password",
    53                  "Test", "Password",
    54                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    55                          "ROLE_TWO")});
    56          assertEquals("Test", token.getPrincipal());
    57          assertEquals("Password", token.getCredentials());
    58          assertEquals("my_password".hashCode(), token.getKeyHash());
    59      }
    60
    61      public void testIsUserInRole() throws Exception {
    62          MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password",
    63                  "Test", "Password",
    64                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    65                          "ROLE_TWO")});
    66          assertTrue(token.isUserInRole("ROLE_ONE"));
    67          assertTrue(token.isUserInRole("ROLE_TWO"));
    68          assertTrue(!token.isUserInRole(""));
    69          assertTrue(!token.isUserInRole("ROLE_ONE "));
    70          assertTrue(!token.isUserInRole("role_one"));
    71          assertTrue(!token.isUserInRole("ROLE_XXXX"));
    72      }
    73
    74      public void testNoArgsConstructor() {
    75          try {
    76              new MockDecisionManagerImpl();
    77              fail("Should have thrown IllegalArgumentException");
    78          } catch (IllegalArgumentException expected) {
    79              assertTrue(true);
    80          }
    81      }
    82
    83      public void testObjectsEquals() throws Exception {
    84          MockDecisionManagerImpl token1 = new MockDecisionManagerImpl("my_password",
    85                  "Test", "Password",
    86                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    87                          "ROLE_TWO")});
    88          MockDecisionManagerImpl token2 = new MockDecisionManagerImpl("my_password",
    89                  "Test", "Password",
    90                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    91                          "ROLE_TWO")});
    92          assertEquals(token1, token2);
    93
    94          MockDecisionManagerImpl token3 = new MockDecisionManagerImpl("my_password",
    95                  "Test", "Password_Changed",
    96                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    97                          "ROLE_TWO")});
    98          assertTrue(!token1.equals(token3));
    99
    100         MockDecisionManagerImpl token4 = new MockDecisionManagerImpl("my_password",
    101                 "Test_Changed", "Password",
    102                 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    103                         "ROLE_TWO")});
    104         assertTrue(!token1.equals(token4));
    105
    106         MockDecisionManagerImpl token5 = new MockDecisionManagerImpl("password_changed",
    107                 "Test", "Password",
    108                 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    109                         "ROLE_TWO")});
    110         assertTrue(!token1.equals(token5));
    111
    112         MockDecisionManagerImpl token6 = new MockDecisionManagerImpl("my_password",
    113                 "Test", "Password",
    114                 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    115                         "ROLE_TWO_CHANGED")});
    116         assertTrue(!token1.equals(token6));
    117
    118         MockDecisionManagerImpl token7 = new MockDecisionManagerImpl("my_password",
    119                 "Test", "Password",
    120                 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE")});
    121         assertTrue(!token1.equals(token7));
    122
    123         assertTrue(!token1.equals(new Integer(100)));
    124     }
    125
    126     public void testSetAuthenticatedAlwaysReturnsTrue()
    127         throws Exception {
    128         MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password",
    129                 "Test", "Password",
    130                 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
    131                         "ROLE_TWO")});
    132         assertTrue(token.isAuthenticated());
    133         token.setAuthenticated(false);
    134         assertTrue(token.isAuthenticated());
    135     }
    136
    137     //~ Inner Classes ==========================================================
    138
    139     private class MockDecisionManagerImpl
    140         extends AbstractAdapterAuthenticationToken {
    141         private String password;
    142         private String username;
    143
    144         public MockDecisionManagerImpl(String key, String username,
    145             String password, GrantedAuthority[] authorities) {
    146             super(key, authorities);
    147             this.username = username;
    148             this.password = password;
    149         }
    150
    151         private MockDecisionManagerImpl() {
    152             throw new IllegalArgumentException();
    153         }
    154
    155         public Object getCredentials() {
    156             return this.password;
    157         }
    158
    159         public Object getPrincipal() {
    160             return this.username;
    161         }
    162     }
    163 }