Moved over some of the security stuff from Photos.
[utils] / security / src / test / java / org / wamblee / security / authorization / hibernate / PersistentAuthorizationServiceTest.java
diff --git a/security/src/test/java/org/wamblee/security/authorization/hibernate/PersistentAuthorizationServiceTest.java b/security/src/test/java/org/wamblee/security/authorization/hibernate/PersistentAuthorizationServiceTest.java
new file mode 100644 (file)
index 0000000..93758b1
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 the original author or authors.
+ * 
+ * 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.wamblee.security.authorization.hibernate;
+
+import java.sql.SQLException;
+
+import org.apache.log4j.Logger;
+import org.springframework.orm.hibernate3.HibernateTemplate;
+import org.wamblee.general.BeanKernel;
+import org.wamblee.security.authorization.AuthorizationService;
+import org.wamblee.security.authorization.AuthorizationServiceTest;
+
+/**
+ * Unit test for the persistent authorization service. 
+ */
+public class PersistentAuthorizationServiceTest extends AuthorizationServiceTest {
+    
+    private static final Logger LOGGER = Logger.getLogger(PersistentAuthorizationServiceTest.class);
+   
+    private static final String SERVICE_TABLE = "AUTHORIZATION_SERVICE";
+    private static final String RULES_TABLE = "AUTHORIZATION_RULES"; 
+    private static final String SERVICE_RULES_TABLE = "AUTHORIZATION_SERVICE_RULES";
+    private static final String OPERATIONCOND_TABLE = "OPERATION_CONDITIONS";
+    private static final String PATHCOND_TABLE = "PATH_CONDITIONS";
+    private static final String USERCOND_TABLE = "USER_CONDITIONS";
+   
+
+    public PersistentAuthorizationServiceTest() { 
+        super(AuthorizationSpringConfigFiles.class, AuthorizationMappingFiles.class);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.wamblee.security.authorization.AuthorizationServiceTest#createService()
+     */
+    @Override
+    protected AuthorizationService createService() {
+        PersistentAuthorizationService service = new PersistentAuthorizationService("DEFAULT", 
+                BeanKernel.getBeanFactory().find(HibernateTemplate.class), createUserAccessor(), 10000);
+        return service; 
+    }
+    
+    /* (non-Javadoc)
+     * @see org.wamblee.security.authorization.AuthorizationServiceTest#checkRuleCount(int)
+     */
+    @Override
+    protected void checkRuleCount(int aCount) {
+        try { 
+            assertEquals(1, getTableSize(SERVICE_TABLE)); 
+            assertEquals(aCount, getTableSize(RULES_TABLE));
+            assertEquals(aCount, getTableSize(SERVICE_RULES_TABLE));
+            assertEquals(aCount, getTableSize(USERCOND_TABLE));
+            assertEquals(aCount, getTableSize(PATHCOND_TABLE));
+            assertEquals(aCount, getTableSize(OPERATIONCOND_TABLE));
+        } catch (SQLException e) {  
+            throw new RuntimeException(e);
+        }
+       
+    }
+    
+    public void testPerformance() { 
+       
+        PersistentAuthorizationService service = (PersistentAuthorizationService)getService(); 
+        
+        int n = 1000; 
+        long time = System.currentTimeMillis();
+        for (int i = 0; i < n; i++) { 
+            testFirstRuleGrants(); 
+            resetTestRules();
+            testSecondRuleDenies();
+            resetTestRules();
+            testThirdRuleGrants();
+            resetTestRules(); 
+            testNoRulesSupportResource();
+        }
+        LOGGER.info("Executed " + 4*n + " authorization checks in " + (float)(System.currentTimeMillis()-time)/(float)1000 + " seconds.");
+    }
+}