You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2012/04/26 16:39:32 UTC

svn commit: r1330879 - in /jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test: AbstractMicroKernelIT.java MicroKernelIT.java

Author: stefan
Date: Thu Apr 26 14:39:32 2012
New Revision: 1330879

URL: http://svn.apache.org/viewvc?rev=1330879&view=rev
Log:
OAK-12: Implement a test suite for the MicroKernel (WIP)

Modified:
    jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/AbstractMicroKernelIT.java
    jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java

Modified: jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/AbstractMicroKernelIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/AbstractMicroKernelIT.java?rev=1330879&r1=1330878&r2=1330879&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/AbstractMicroKernelIT.java (original)
+++ jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/AbstractMicroKernelIT.java Thu Apr 26 14:39:32 2012
@@ -179,6 +179,20 @@ public abstract class AbstractMicroKerne
         }
     }
 
+    protected void assertPropertyExists(JSONObject obj, String relPath)
+            throws AssertionError {
+        Object val = resolveValue(obj, relPath);
+        assertNotNull("not found: " + relPath, val);
+    }
+
+    protected void assertPropertyExists(JSONObject obj, String relPath, Class type)
+            throws AssertionError {
+        Object val = resolveValue(obj, relPath);
+        assertNotNull("not found: " + relPath, val);
+
+        assertTrue(type.isInstance(val));
+    }
+
     protected void assertPropertyValue(JSONObject obj, String relPath, Double expected)
             throws AssertionError {
         Object val = resolveValue(obj, relPath);
@@ -244,6 +258,15 @@ public abstract class AbstractMicroKerne
         throw new AssertionError("failed to resolve JSONObject value at " + relPath + ": " + val);
     }
 
+    protected JSONObject getObjectArrayEntry(JSONArray array, int pos) {
+        assertTrue(pos >= 0 && pos < array.size());
+        Object entry = array.get(pos);
+        if (entry instanceof JSONObject) {
+            return (JSONObject) entry;
+        }
+        throw new AssertionError("failed to resolve JSONObject array entry at pos " + pos + ": " + entry);
+    }
+
     protected JSONArray resolveArrayValue(JSONObject obj, String relPath) {
         Object val = resolveValue(obj, relPath);
         if (val instanceof JSONArray) {

Modified: jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java?rev=1330879&r1=1330878&r2=1330879&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (original)
+++ jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java Thu Apr 26 14:39:32 2012
@@ -25,6 +25,7 @@ import org.junit.runners.Parameterized;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -47,6 +48,56 @@ public class MicroKernelIT extends Abstr
     }
 
     @Test
+    public void revisionOps() {
+        String head = mk.getHeadRevision();
+        assertNotNull(head);
+
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException ignore) {
+        }
+
+        long now = System.currentTimeMillis();
+
+        // get history since 'now'
+        JSONArray array = parseJSONArray(mk.getRevisionHistory(now, -1));
+        // history should be empty since there was no commit since 'now'
+        assertEquals(0, array.size());
+
+        // get oldest available revision
+        array = parseJSONArray(mk.getRevisionHistory(0, 1));
+        // there should be exactly 1 revision
+        assertEquals(array.size(), 1);
+
+        long ts0 = System.currentTimeMillis();
+
+        // perform 10 commits
+        for (int i = 0; i < 10; i++) {
+            mk.commit("/test", "+\"child" + i + "\":{}", null, "commit#" + i);
+        }
+
+        // get oldest available revision
+        array = parseJSONArray(mk.getRevisionHistory(ts0, -1));
+        // there should be exactly 10 revisions
+        assertEquals(array.size(), 10);
+        long previousTS = ts0;
+        for (int i = 0; i < 10; i++) {
+            JSONObject rev = getObjectArrayEntry(array, i);
+            assertPropertyExists(rev, "id", String.class);
+            assertPropertyExists(rev, "ts", Long.class);
+            // verify commit msg
+            assertPropertyValue(rev, "msg", "commit#" + i);
+            // verify chronological order
+            long ts = (Long) resolveValue(rev, "ts");
+            assertTrue(previousTS <= ts);
+            previousTS = ts;
+        }
+
+        // last revision should be the current head revision
+        assertPropertyValue(getObjectArrayEntry(array, array.size() - 1), "id", mk.getHeadRevision());
+    }
+
+    @Test
     public void addAndMove() {
         String head = mk.getHeadRevision();
         head = mk.commit("",
@@ -64,7 +115,6 @@ public class MicroKernelIT extends Abstr
         assertFalse(mk.nodeExists("/root/a", head));
     }
 
-
     @Test
     public void getNodes() {
         String head = mk.getHeadRevision();
@@ -75,7 +125,7 @@ public class MicroKernelIT extends Abstr
         assertPropertyValue(obj, "test/intProp", 42L);
         assertPropertyValue(obj, "test/floatProp", 42.2);
         assertPropertyValue(obj, "test/booleanProp", true);
-        assertPropertyValue(obj, "test/multiIntProp", new Object[]{1,2,3});
+        assertPropertyValue(obj, "test/multiIntProp", new Object[]{1, 2, 3});
     }
 
     @Test
@@ -196,7 +246,6 @@ public class MicroKernelIT extends Abstr
                         "^\"" + node + "/child1/grandchild11/prop3\" : 43",
                 head, "");
 
-        String json = mk.getNodes('/' + node, head, 3, 0, -1, null);
         JSONObject obj = parseJSONObject(mk.getNodes('/' + node, head, 3, 0, -1, null));
         assertPropertyValue(obj, "prop1", 41L);
         assertPropertyValue(obj, ":childNodeCount", 2L);