Przeglądaj źródła

Expand test coverage.

Ben Alex 21 lat temu
rodzic
commit
f7a82c29b3

+ 73 - 23
core/src/test/java/org/acegisecurity/adapters/AuthByAdapterTests.java

@@ -18,13 +18,11 @@ package net.sf.acegisecurity.adapters;
 import junit.framework.TestCase;
 
 import net.sf.acegisecurity.Authentication;
-import net.sf.acegisecurity.AuthenticationManager;
-import net.sf.acegisecurity.adapters.jetty.JettyAcegiUserToken;
-import net.sf.acegisecurity.providers.ProviderNotFoundException;
+import net.sf.acegisecurity.BadCredentialsException;
+import net.sf.acegisecurity.GrantedAuthority;
+import net.sf.acegisecurity.GrantedAuthorityImpl;
 import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken;
 
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
 
 /**
  * Tests {@link AuthByAdapterProvider}
@@ -33,10 +31,6 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
  * @version $Id$
  */
 public class AuthByAdapterTests extends TestCase {
-    //~ Instance fields ========================================================
-
-    private ClassPathXmlApplicationContext ctx;
-
     //~ Constructors ===========================================================
 
     public AuthByAdapterTests() {
@@ -51,33 +45,89 @@ public class AuthByAdapterTests extends TestCase {
 
     public final void setUp() throws Exception {
         super.setUp();
-        ctx = new ClassPathXmlApplicationContext(
-                "/net/sf/acegisecurity/adapters/applicationContext.xml");
     }
 
     public static void main(String[] args) {
         junit.textui.TestRunner.run(AuthByAdapterTests.class);
     }
 
-    public void testAdapterProvider() throws Exception {
-        AuthenticationManager authMgr = (AuthenticationManager) ctx.getBean(
-                "providerManager");
+    public void testAuthByAdapterProviderCorrectAuthenticationOperation()
+        throws Exception {
+        AuthByAdapterProvider provider = new AuthByAdapterProvider();
+        provider.setKey("my_password");
 
-        // Should authenticate as JettySpringUser is interface of AuthByAdapter
-        JettyAcegiUserToken jetty = new JettyAcegiUserToken("my_password",
-                "Test", "Password", null);
-        Authentication response = authMgr.authenticate(jetty);
-        jetty = null;
+        PrincipalAcegiUserToken token = new PrincipalAcegiUserToken("my_password",
+                "Test", "Password",
+                new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
+                        "ROLE_TWO")});
+        assertTrue(provider.supports(token.getClass()));
+
+        Authentication response = provider.authenticate(token);
         assertTrue(true);
 
+        assertEquals(token.getCredentials(), response.getCredentials());
+        assertEquals(token.getPrincipal(), response.getPrincipal());
+        assertEquals(token.getAuthorities(), response.getAuthorities());
+
+        if (!response.getClass().equals(token.getClass())) {
+            fail("Should have returned same type of object it was given");
+        }
+
+        PrincipalAcegiUserToken castResponse = (PrincipalAcegiUserToken) response;
+        assertEquals(token.getName(), castResponse.getName());
+    }
+
+    public void testAuthByAdapterProviderNonAuthenticationMethods()
+        throws Exception {
+        AuthByAdapterProvider provider = new AuthByAdapterProvider();
+
+        try {
+            provider.afterPropertiesSet();
+            fail("Should have thrown IllegalArgumentException as key not set");
+        } catch (IllegalArgumentException expected) {
+            assertTrue(true);
+        }
+
+        provider.setKey("my_password");
+        provider.afterPropertiesSet();
+        assertTrue(true);
+
+        assertEquals("my_password", provider.getKey());
+    }
+
+    public void testAuthByAdapterProviderOnlyAcceptsAuthByAdapterImplementations()
+        throws Exception {
+        AuthByAdapterProvider provider = new AuthByAdapterProvider();
+        provider.setKey("my_password");
+
         // Should fail as UsernamePassword is not interface of AuthByAdapter
-        UsernamePasswordAuthenticationToken user = new UsernamePasswordAuthenticationToken("Test",
+        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("Test",
                 "Password");
 
+        assertTrue(!provider.supports(token.getClass()));
+
+        try {
+            provider.authenticate(token);
+            fail(
+                "Should have thrown ClassCastException (supports() false response was ignored)");
+        } catch (ClassCastException expected) {
+            assertTrue(true);
+        }
+    }
+
+    public void testAuthByAdapterProviderRequiresCorrectKey()
+        throws Exception {
+        AuthByAdapterProvider provider = new AuthByAdapterProvider();
+        provider.setKey("my_password");
+
+        // Should fail as PrincipalAcegiUserToken has different key
+        PrincipalAcegiUserToken token = new PrincipalAcegiUserToken("wrong_password",
+                "Test", "Password", null);
+
         try {
-            Authentication response2 = authMgr.authenticate(user);
-            fail("Should have thrown ProviderNotFoundException");
-        } catch (ProviderNotFoundException expected) {
+            provider.authenticate(token);
+            fail("Should have thrown BadCredentialsException");
+        } catch (BadCredentialsException expected) {
             assertTrue(true);
         }
     }