Repository: incubator-ranger
Updated Branches:
  refs/heads/master 3fae96ce8 -> 0d5844ae8


RANGER-323: test code for LRU cache used in policy engine

Signed-off-by: Madhan Neethiraj <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/0d5844ae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/0d5844ae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/0d5844ae

Branch: refs/heads/master
Commit: 0d5844ae8f4da7d91aa8d8d6524f154b293aee99
Parents: 3fae96c
Author: Abhay Kulkarni <[email protected]>
Authored: Thu Apr 2 16:12:32 2015 -0700
Committer: Madhan Neethiraj <[email protected]>
Committed: Thu Apr 2 16:12:49 2015 -0700

----------------------------------------------------------------------
 .../ranger/plugin/policyengine/CacheMap.java    |  22 +++-
 .../plugin/policyengine/TestCacheMap.java       | 123 +++++++++++++++++++
 2 files changed, 140 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d5844ae/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/CacheMap.java
----------------------------------------------------------------------
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/CacheMap.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/CacheMap.java
index c5f2fc0..42370cc 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/CacheMap.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/CacheMap.java
@@ -18,24 +18,36 @@
  */
 package org.apache.ranger.plugin.policyengine;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.jackson.map.ser.StdSerializers;
+
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class CacheMap<K, V> extends LinkedHashMap<K, V> {
     private static final long serialVersionUID = 1L;
+    private static final Log LOG = LogFactory.getLog(CacheMap.class);
+
 
     private static final float RANGER_CACHE_DEFAULT_LOAD_FACTOR = 0.75f;
 
-    protected int maxCapacity;
+    protected int initialCapacity;
 
-    public CacheMap(int maxCapacity) {
-        super(maxCapacity, CacheMap.RANGER_CACHE_DEFAULT_LOAD_FACTOR, true); 
// true for access-order
+    public CacheMap(int initialCapacity) {
+        super(initialCapacity, CacheMap.RANGER_CACHE_DEFAULT_LOAD_FACTOR, 
true); // true for access-order
 
-        this.maxCapacity = maxCapacity;
+        this.initialCapacity = initialCapacity;
     }
 
     @Override
     protected boolean removeEldestEntry(Map.Entry eldest) {
-        return size() > maxCapacity;
+        boolean result = size() > initialCapacity;
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("CacheMap.removeEldestEntry(), result:"+ result);
+        }
+
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d5844ae/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestCacheMap.java
----------------------------------------------------------------------
diff --git 
a/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestCacheMap.java
 
b/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestCacheMap.java
new file mode 100644
index 0000000..19362f2
--- /dev/null
+++ 
b/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestCacheMap.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.ranger.plugin.policyengine;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.Iterator;
+import java.util.Set;
+
+public class TestCacheMap {
+       private static final Log LOG = LogFactory.getLog(TestCacheMap.class);
+       private static CacheMap<String, String> testCacheMap = null;
+       private static int initialCapacity = 16;
+
+
+       @BeforeClass
+       public static void setUpBeforeClass() throws Exception {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> TestCacheMap.setUpBeforeClass(), 
initialCapacity:" + initialCapacity);
+               }
+
+               testCacheMap = new CacheMap<String, String>(initialCapacity);
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== TestCacheMap.setUpBeforeClass(), 
initialCapacity:" + initialCapacity);
+               }
+       }
+       @AfterClass
+       public static void tearDownAfterClass() throws Exception {
+       }
+
+       @Test
+       public void runTests() {
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> TestCacheMap.runTests(), First batch of 
" + initialCapacity + " inserts starting from 0");
+               }
+               for (int i = 0; i < initialCapacity; i++) {
+                       String key = String.valueOf(i);
+                       String value = key;
+
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), Inserting 
into Cache, key:" + key + ", value:" + value);
+                       }
+                       testCacheMap.put(key, value);
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), Cache Size 
after insert(): " + testCacheMap.size());
+                       }
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("TestCacheMap.runTests(), First batch of " + 
initialCapacity/2 + " retrieves counting down from " + (initialCapacity/2-1));
+               }
+
+               for (int i = initialCapacity/2 - 1; i >= 0; i--) {
+                       String key = String.valueOf(i);
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), Searching 
Cache, key:" + key);
+                       }
+                       String value = testCacheMap.get(key);
+                       if (value == null || !value.equals(key)) {
+                               LOG.error("TestCacheMap.runTests(), Did not get 
correct value for key, key:" + key + ", value:" + value);
+                       }
+               }
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("TestCacheMap.runTests(), Second batch of " + 
initialCapacity/2 + " inserts starting from " + initialCapacity);
+               }
+               for (int i = initialCapacity; i < 
initialCapacity+initialCapacity/2; i++) {
+                       String key = String.valueOf(i);
+                       String value = key;
+
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), Inserting 
into Cache, key:" + key + ", value:" + value);
+                       }
+                       testCacheMap.put(key, value);
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), Cache Size 
after insert(): " + testCacheMap.size());
+                       }
+               }
+
+               Set<String> keySet = testCacheMap.keySet();
+
+               int i = 0;
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("TestCacheMap.runTests(), KeySet Size:" + 
keySet.size());
+                       LOG.debug("TestCacheMap.runTests(), printing keys..");
+               }
+
+               for (Iterator<String> iterator = keySet.iterator(); 
iterator.hasNext();) {
+                       String key = iterator.next();
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("TestCacheMap.runTests(), index:" + 
i++ + ", key:" + key);
+                       }
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== TestCacheMap.runTests()");
+               }
+
+       }
+}

Reply via email to