فهرست منبع

Updated to use new Sprig test classes and to remove data dependencies between tests.

Luke Taylor 16 سال پیش
والد
کامیت
6003291a68
1فایلهای تغییر یافته به همراه91 افزوده شده و 70 حذف شده
  1. 91 70
      acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java

+ 91 - 70
acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java

@@ -14,13 +14,22 @@
  */
 package org.springframework.security.acls.jdbc;
 
+import static org.junit.Assert.*;
+
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
+import javax.sql.DataSource;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.security.Authentication;
-import org.springframework.security.GrantedAuthority;
-import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.acls.AccessControlEntry;
 import org.springframework.security.acls.Acl;
 import org.springframework.security.acls.AlreadyExistsException;
@@ -35,7 +44,10 @@ import org.springframework.security.acls.sid.PrincipalSid;
 import org.springframework.security.acls.sid.Sid;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.providers.TestingAuthenticationToken;
-import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * Integration tests the ACL system using an in-memory database.
@@ -44,67 +56,58 @@ import org.springframework.test.AbstractTransactionalDataSourceSpringContextTest
  * @author Andrei Stefan
  * @version $Id:JdbcAclServiceTests.java 1754 2006-11-17 02:01:21Z benalex $
  */
-public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringContextTests {
+@ContextConfiguration(locations={"/org/springframework/security/acls/jdbc/applicationContext-test.xml"})
+public class JdbcAclServiceTests extends AbstractTransactionalJUnit4SpringContextTests {
     //~ Constant fields ================================================================================================
 
-    public static final String SELECT_ALL_CLASSES = "SELECT * FROM acl_class WHERE class = ?";
-
-    public static final String SELECT_ALL_OBJECT_IDENTITIES = "SELECT * FROM acl_object_identity";
-
-    public static final String SELECT_OBJECT_IDENTITY = "SELECT * FROM acl_object_identity WHERE object_id_identity = ?";
+    private final Authentication auth = new TestingAuthenticationToken("ben", "ignored","ROLE_ADMINISTRATOR");
 
-    public static final String SELECT_ACL_ENTRY = "SELECT * FROM acl_entry, acl_object_identity WHERE " +
-            "acl_object_identity.id = acl_entry.acl_object_identity " +
-            "AND acl_object_identity.object_id_identity <= ?";
+    public static final String SELECT_ALL_CLASSES = "SELECT * FROM acl_class WHERE class = ?";
 
     //~ Instance fields ================================================================================================
 
-    private JdbcMutableAclService jdbcMutableAclService;
+    private final ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
+    private final ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
+    private final ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102));
 
+    @Autowired
+    private JdbcMutableAclService jdbcMutableAclService;
+    @Autowired
     private AclCache aclCache;
-
+    @Autowired
     private LookupStrategy lookupStrategy;
+    @Autowired
+    private DataSource dataSource;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
 
     //~ Methods ========================================================================================================
 
-    protected String[] getConfigLocations() {
-        return new String[] {"classpath:org/springframework/security/acls/jdbc/applicationContext-test.xml"};
-    }
-
-    public void setJdbcMutableAclService(JdbcMutableAclService jdbcAclService) {
-        this.jdbcMutableAclService = jdbcAclService;
-    }
-
-    public void setAclCache(AclCache aclCache) {
-        this.aclCache = aclCache;
-    }
-
-    public void setLookupStrategy(LookupStrategy lookupStrategy) {
-        this.lookupStrategy = lookupStrategy;
+    @Before
+    public void createTables() throws IOException {
+        new DatabaseSeeder(dataSource, new ClassPathResource("org/springframework/security/acls/jdbc/testData.sql"));
     }
 
-    protected void onTearDown() throws Exception {
-        super.onTearDown();
+    @After
+    public void clearContextAndData() throws Exception {
         SecurityContextHolder.clearContext();
+        jdbcTemplate.execute("drop table acl_entry");
+        jdbcTemplate.execute("drop table acl_object_identity");
+        jdbcTemplate.execute("drop table acl_class");
+        jdbcTemplate.execute("drop table acl_sid");
     }
 
+    @Test
+    @Transactional
+    @Rollback
     public void testLifecycle() {
-        setComplete();
-
-        Authentication auth = new TestingAuthenticationToken("ben", "ignored",
-                new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ADMINISTRATOR")});
-        auth.setAuthenticated(true);
         SecurityContextHolder.getContext().setAuthentication(auth);
 
-        ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
-        ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
-        ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Integer(102));
-
         MutableAcl topParent = jdbcMutableAclService.createAcl(topParentOid);
         MutableAcl middleParent = jdbcMutableAclService.createAcl(middleParentOid);
         MutableAcl child = jdbcMutableAclService.createAcl(childOid);
 
-        // Specify the inheritence hierarchy
+        // Specify the inheritance hierarchy
         middleParent.setParent(topParent);
         child.setParent(middleParent);
 
@@ -114,13 +117,13 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
         middleParent.insertAce(0, BasePermission.DELETE, new PrincipalSid(auth), true);
         child.insertAce(0, BasePermission.DELETE, new PrincipalSid(auth), false);
 
-        // Explictly save the changed ACL
+        // Explicitly save the changed ACL
         jdbcMutableAclService.updateAcl(topParent);
         jdbcMutableAclService.updateAcl(middleParent);
         jdbcMutableAclService.updateAcl(child);
 
         // Let's check if we can read them back correctly
-        Map map = jdbcMutableAclService.readAclsById(Arrays.asList(topParentOid, middleParentOid, childOid));
+        Map<ObjectIdentity, Acl> map = jdbcMutableAclService.readAclsById(Arrays.asList(topParentOid, middleParentOid, childOid));
         assertEquals(3, map.size());
 
         // Replace our current objects with their retrieved versions
@@ -231,27 +234,35 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
     /**
      * Test method that demonstrates eviction failure from cache - SEC-676
      */
+    @Test
+    @Transactional
+    @Rollback
     public void testDeleteAclAlsoDeletesChildren() throws Exception {
-        ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
-        ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
-        ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102));
+        SecurityContextHolder.getContext().setAuthentication(auth);
 
+        jdbcMutableAclService.createAcl(topParentOid);
+        MutableAcl middleParent = jdbcMutableAclService.createAcl(middleParentOid);
+        MutableAcl child = jdbcMutableAclService.createAcl(childOid);
+        child.setParent(middleParent);
+        jdbcMutableAclService.updateAcl(middleParent);
+        jdbcMutableAclService.updateAcl(child);
         // Check the childOid really is a child of middleParentOid
         Acl childAcl = jdbcMutableAclService.readAclById(childOid);
+
         assertEquals(middleParentOid, childAcl.getParentAcl().getObjectIdentity());
 
         // Delete the mid-parent and test if the child was deleted, as well
         jdbcMutableAclService.deleteAcl(middleParentOid, true);
 
         try {
-            Acl acl = jdbcMutableAclService.readAclById(middleParentOid);
+            jdbcMutableAclService.readAclById(middleParentOid);
             fail("It should have thrown NotFoundException");
         }
         catch (NotFoundException expected) {
             assertTrue(true);
         }
         try {
-            Acl acl = jdbcMutableAclService.readAclById(childOid);
+            jdbcMutableAclService.readAclById(childOid);
             fail("It should have thrown NotFoundException");
         }
         catch (NotFoundException expected) {
@@ -263,95 +274,105 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
         assertEquals(((MutableAcl) acl).getObjectIdentity(), topParentOid);
     }
 
+    @Test
     public void testConstructorRejectsNullParameters() throws Exception {
         try {
-            JdbcAclService service = new JdbcMutableAclService(null, lookupStrategy, aclCache);
+            new JdbcMutableAclService(null, lookupStrategy, aclCache);
             fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
-            assertTrue(true);
         }
 
         try {
-            JdbcAclService service = new JdbcMutableAclService(this.getJdbcTemplate().getDataSource(), null, aclCache);
+            new JdbcMutableAclService(dataSource, null, aclCache);
             fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
-            assertTrue(true);
         }
 
         try {
-            JdbcAclService service = new JdbcMutableAclService(this.getJdbcTemplate().getDataSource(), lookupStrategy, null);
+            new JdbcMutableAclService(dataSource, lookupStrategy, null);
             fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
-            assertTrue(true);
         }
     }
 
+    @Test
     public void testCreateAclRejectsNullParameter() throws Exception {
         try {
             jdbcMutableAclService.createAcl(null);
             fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
-            assertTrue(true);
         }
     }
 
+    @Test
+    @Transactional
+    @Rollback
     public void testCreateAclForADuplicateDomainObject() throws Exception {
+        SecurityContextHolder.getContext().setAuthentication(auth);
         ObjectIdentity duplicateOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
-
+        jdbcMutableAclService.createAcl(duplicateOid);
         // Try to add the same object second time
         try {
             jdbcMutableAclService.createAcl(duplicateOid);
             fail("It should have thrown AlreadyExistsException");
         }
         catch (AlreadyExistsException expected) {
-            assertTrue(true);
         }
     }
 
+    @Test
+    @Transactional
+    @Rollback
     public void testDeleteAclRejectsNullParameters() throws Exception {
         try {
             jdbcMutableAclService.deleteAcl(null, true);
             fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
-            assertTrue(true);
         }
     }
 
+    @Test
+    @Transactional
+    @Rollback
     public void testDeleteAclWithChildrenThrowsException() throws Exception {
+        SecurityContextHolder.getContext().setAuthentication(auth);
+        MutableAcl parent = jdbcMutableAclService.createAcl(topParentOid);
+        MutableAcl child = jdbcMutableAclService.createAcl(middleParentOid);
+
+        // Specify the inheritance hierarchy
+        child.setParent(parent);
+        jdbcMutableAclService.updateAcl(child);
+
         try {
-            ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
             jdbcMutableAclService.setForeignKeysInDatabase(false); // switch on FK checking in the class, not database
             jdbcMutableAclService.deleteAcl(topParentOid, false);
             fail("It should have thrown ChildrenExistException");
         }
         catch (ChildrenExistException expected) {
-            assertTrue(true);
         } finally {
             jdbcMutableAclService.setForeignKeysInDatabase(true); // restore to the default
         }
     }
 
+    @Test
+    @Transactional
+    @Rollback
     public void testDeleteAclRemovesRowsFromDatabase() throws Exception {
-        Authentication auth = new TestingAuthenticationToken("ben", "ignored",
-                new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ADMINISTRATOR")});
-        auth.setAuthenticated(true);
         SecurityContextHolder.getContext().setAuthentication(auth);
-
-        ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
-        ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
-        ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Integer(102));
+        MutableAcl child = jdbcMutableAclService.createAcl(childOid);
+        child.insertAce(0, BasePermission.DELETE, new PrincipalSid(auth), false);
+        jdbcMutableAclService.updateAcl(child);
 
         // Remove the child and check all related database rows were removed accordingly
         jdbcMutableAclService.deleteAcl(childOid, false);
-        assertEquals(1, getJdbcTemplate().queryForList(SELECT_ALL_CLASSES, new Object[] {"org.springframework.security.TargetObject"} ).size());
-        assertEquals(0, getJdbcTemplate().queryForList(SELECT_OBJECT_IDENTITY, new Object[] {new Long(102)}).size());
-        assertEquals(2, getJdbcTemplate().queryForList(SELECT_ALL_OBJECT_IDENTITIES).size());
-        assertEquals(3, getJdbcTemplate().queryForList(SELECT_ACL_ENTRY, new Object[] {new Long(103)} ).size());
+        assertEquals(1, jdbcTemplate.queryForList(SELECT_ALL_CLASSES, new Object[] {"org.springframework.security.TargetObject"} ).size());
+        assertEquals(0, jdbcTemplate.queryForList("select * from acl_object_identity").size());
+        assertEquals(0, jdbcTemplate.queryForList("select * from acl_entry").size());
 
         // Check the cache
         assertNull(aclCache.getFromCache(childOid));