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 ju...@apache.org on 2012/04/06 10:39:01 UTC

svn commit: r1310228 - in /jackrabbit/oak/trunk: oak-core/src/test/java/org/apache/jackrabbit/mk/ oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/test/java/org/apache/jackrabbit/oak/query/ oak-core/src/test/java/org/apache/jackrab...

Author: jukka
Date: Fri Apr  6 08:39:00 2012
New Revision: 1310228

URL: http://svn.apache.org/viewvc?rev=1310228&view=rev
Log:
OAK-31: In-memory MicroKernel for testing

Simplify test setup in many places.
Remove assumptions about child node or query result ordering in test cases.

Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/ConcurrentWriteTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorFuzzTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java
    jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt
    jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/ConcurrentWriteTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/ConcurrentWriteTest.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/ConcurrentWriteTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/ConcurrentWriteTest.java Fri Apr  6 08:39:00 2012
@@ -19,32 +19,21 @@ package org.apache.jackrabbit.mk;
 import java.util.Random;
 import junit.framework.TestCase;
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 
 public class ConcurrentWriteTest extends TestCase {
 
     protected static final String TEST_PATH = "/" + ConcurrentWriteTest.class.getName();
 
-    private static final String URL = "fs:{homeDir}/target;clean";
-    // private static final String URL = "fs:{homeDir}/target";
-    // private static final String URL = "simple:";
-    //private static final String URL = "simple:fs:target/temp;clean";
-
     private static final int NUM_THREADS = 20;
     private static final int NUM_CHILDNODES = 1000;
 
-    MicroKernel mk;
+    final MicroKernel mk = new MicroKernelImpl();
 
     public void setUp() throws Exception {
-        mk = MicroKernelFactory.getInstance(URL);
         mk.commit("/", "+ \"" + TEST_PATH.substring(1) + "\": {\"jcr:primaryType\":\"nt:unstructured\"}", mk.getHeadRevision(), null);
     }
 
-    public void tearDown() throws InterruptedException {
-        String head = mk.commit("/", "- \"" + TEST_PATH.substring(1) + "\"", mk.getHeadRevision(), null);
-        //System.out.println("new HEAD: " + head);
-        mk.dispose();
-    }
-
     /**
      * Runs the test.
      */

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorFuzzTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorFuzzTest.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorFuzzTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorFuzzTest.java Fri Apr  6 08:39:00 2012
@@ -25,7 +25,6 @@ import org.apache.jackrabbit.mk.model.Sc
 import org.apache.jackrabbit.mk.model.ScalarImpl;
 import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
 import org.apache.jackrabbit.mk.util.PathUtils;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,8 +55,8 @@ public class KernelNodeStateEditorFuzzTe
 
     private final Random random;
 
-    private MicroKernel mk1;
-    private MicroKernel mk2;
+    private final MicroKernel mk1 = new SimpleKernelImpl("mem:");
+    private final MicroKernel mk2 = new SimpleKernelImpl("mem:");
 
     @Parameters
     public static List<Object[]> seeds() {
@@ -76,25 +75,16 @@ public class KernelNodeStateEditorFuzzTe
 
     @Before
     public void setup() {
-        mk1 = new SimpleKernelImpl("mem:mk1");
         mk1.commit("", "+\"/root\":{}", mk1.getHeadRevision(), "");
-
-        mk2 = new SimpleKernelImpl("mem:mk2");
         mk2.commit("", "+\"/root\":{}", mk2.getHeadRevision(), "");
     }
 
-    @After
-    public void tearDown() {
-        mk1.dispose();
-        mk2.dispose();
-    }
-
     @Test
     public void fuzzTest() throws Exception {
         KernelNodeState state1 = new KernelNodeState(mk1, "/", mk1.getHeadRevision());
         KernelNodeStateEditor editor1 = new KernelNodeStateEditor(state1);
 
-        KernelNodeState state2 = new KernelNodeState(mk1, "/", mk2.getHeadRevision());
+        KernelNodeState state2 = new KernelNodeState(mk2, "/", mk2.getHeadRevision());
         KernelNodeStateEditor editor2 = new KernelNodeStateEditor(state2);
 
         for (Operation op : operations(OP_COUNT)) {
@@ -107,7 +97,7 @@ public class KernelNodeStateEditorFuzzTe
             editor1 = new KernelNodeStateEditor(state1);
             if (op instanceof Save) {
                 state2 = editor2.mergeInto(mk2, state2);
-                editor2 = new KernelNodeStateEditor(state1);
+                editor2 = new KernelNodeStateEditor(state2);
                 assertEquals(state1, state2);
             }
         }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorTest.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateEditorTest.java Fri Apr  6 08:39:00 2012
@@ -18,13 +18,13 @@
  */
 package org.apache.jackrabbit.oak.kernel;
 
+import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.model.NodeState;
 import org.apache.jackrabbit.mk.model.PropertyState;
 import org.apache.jackrabbit.mk.model.Scalar;
 import org.apache.jackrabbit.mk.model.Scalar.Type;
 import org.apache.jackrabbit.mk.model.ScalarImpl;
 import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
-import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,12 +42,13 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 
 public class KernelNodeStateEditorTest {
-    private SimpleKernelImpl microkernel;
+
+    private final MicroKernel microkernel = new SimpleKernelImpl("mem:");
+
     private KernelNodeState state;
 
     @Before
     public void setUp() {
-        microkernel = new SimpleKernelImpl("mem:KernelNodeStateTest");
         String jsop =
                 "+\"test\":{\"a\":1,\"b\":2,\"c\":3,"
                         + "\"x\":{},\"y\":{},\"z\":{}}";
@@ -55,11 +56,6 @@ public class KernelNodeStateEditorTest {
                 "/", jsop, microkernel.getHeadRevision(), "test data");
         state = new KernelNodeState(microkernel, "/test", revision);
     }
-    
-    @After
-    public void tearDown() {
-        microkernel.dispose();
-    }
 
     @Test
     public void getNode() {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java Fri Apr  6 08:39:00 2012
@@ -22,12 +22,16 @@ import java.io.LineNumberReader;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
-import org.apache.jackrabbit.mk.MicroKernelFactory;
+import java.util.List;
+
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -36,22 +40,17 @@ import org.junit.Test;
  */
 public class QueryTest {
 
-    MicroKernel mk;
+    private final MicroKernel mk = new MicroKernelImpl();
+
     String head;
     QueryEngineImpl qe;
 
     @Before
     public void setUp() {
-        mk = MicroKernelFactory.getInstance("simple:/target/temp;clear");
         head = mk.getHeadRevision();
         qe = new QueryEngineImpl(mk);
     }
 
-    @After
-    public void tearDown() {
-        mk.dispose();
-    }
-
     @Test
     public void script() throws Exception {
         test("queryTest.txt");
@@ -122,12 +121,8 @@ public class QueryTest {
                     }
                 } else if (line.startsWith("select") || line.startsWith("explain")) {
                     w.println(line);
-                    Iterator<? extends ResultRow> result = qe.executeQuery(line,
-                            QueryEngineImpl.SQL2, null).getRows().iterator();
                     boolean readEnd = true;
-                    while (result.hasNext()) {
-                        ResultRow row = result.next();
-                        String resultLine = readRow(line, row);
+                    for (String resultLine : executeQuery(line)) {
                         w.println(resultLine);
                         if (readEnd) {
                             line = r.readLine();
@@ -172,21 +167,34 @@ public class QueryTest {
         }
         if (errors) {
             throw new Exception("Results in target/queryTest.txt don't match expected " +
-                    "results in src/test/resources/quersTest.txt; compare the files for details");
+                    "results in src/test/resources/queryTest.txt; compare the files for details");
         }
     }
 
-    private String readRow(String query, ResultRow row) {
-        StringBuilder buff = new StringBuilder();
-        CoreValue[] values = row.getValues();
-        for (int i = 0; i < values.length; i++) {
-            if (i > 0) {
-                buff.append(", ");
+    private List<String> executeQuery(String query) throws ParseException {
+        List<String> lines = new ArrayList<String>();
+
+        Result result = qe.executeQuery(query, QueryEngineImpl.SQL2, null);
+        Iterator<? extends ResultRow> iterator = result.getRows().iterator();
+        while (iterator.hasNext()) {
+            ResultRow row = iterator.next();
+            StringBuilder buff = new StringBuilder();
+            CoreValue[] values = row.getValues();
+            for (int i = 0; i < values.length; i++) {
+                if (i > 0) {
+                    buff.append(", ");
+                }
+                CoreValue v = values[i];
+                buff.append(v == null ? "null" : v.getString());
             }
-            CoreValue v = values[i];
-            buff.append(v == null ? "null" : v.getString());
+            lines.add(buff.toString());
+        }
+
+        if (!query.contains("order by")) {
+            Collections.sort(lines);
         }
-        return buff.toString();
+
+        return lines;
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java Fri Apr  6 08:39:00 2012
@@ -21,9 +21,16 @@ package org.apache.jackrabbit.oak.query.
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import org.apache.jackrabbit.mk.MicroKernelFactory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.junit.After;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -32,20 +39,15 @@ import org.junit.Test;
  */
 public class TraversingCursorTest {
 
-    MicroKernel mk;
+    private final MicroKernel mk = new MicroKernelImpl();
+
     String head;
 
     @Before
     public void setUp() {
-        mk = MicroKernelFactory.getInstance("simple:/target/temp;clear");
         head = mk.getHeadRevision();
     }
 
-    @After
-    public void tearDown() {
-        mk.dispose();
-    }
-
     @Test
     public void traverse() throws Exception {
         TraversingIndex t = new TraversingIndex(mk);
@@ -63,17 +65,21 @@ public class TraversingCursorTest {
         head = mk.commit("/", "+ \"parents\": { \"p0\": {\"id\": \"0\"}, \"p1\": {\"id\": \"1\"}, \"p2\": {\"id\": \"2\"}}", head, "");
         head = mk.commit("/", "+ \"children\": { \"c1\": {\"p\": \"1\"}, \"c2\": {\"p\": \"1\"}, \"c3\": {\"p\": \"2\"}, \"c4\": {\"p\": \"3\"}}", head, "");
         Filter f = new Filter(null);
-        Cursor c;
+ 
         f.setPath("/");
-        c = t.query(f, head);
-        String[] list = {"/", "/parents", "/parents/p0", "/parents/p1",  "/parents/p2",
-                "/children", "/children/c1", "/children/c2", "/children/c3", "/children/c4"};
-        for (String s : list) {
-            assertTrue(c.next());
-            assertEquals(s, c.currentPath());
+        List<String> paths = new ArrayList<String>();
+        Cursor c = t.query(f, head);
+        while (c.next()) {
+            paths.add(c.currentPath());
         }
+        Collections.sort(paths);
+        assertEquals(Arrays.asList(
+                "/", "/children", "/children/c1", "/children/c2",
+                "/children/c3", "/children/c4", "/parents",
+                "/parents/p0", "/parents/p1",  "/parents/p2"),
+                paths);
         assertFalse(c.next());
-        assertFalse(c.next());
+
         f.setPath("/nowhere");
         c = t.query(f, head);
         assertFalse(c.next());

Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt Fri Apr  6 08:39:00 2012
@@ -50,8 +50,8 @@ select * from [nt:base] as p where p.[jc
 /parents
 
 select * from [nt:base] as p inner join [nt:base] as p2 on ischildnode(p2, p) where p.[jcr:path] = '/'
-/, /parents
 /, /children
+/, /parents
 
 select * from [nt:base] as p inner join [nt:base] as p2 on isdescendantnode(p2, p) where p.[jcr:path] = '/parents'
 /parents, /parents/p0
@@ -72,10 +72,10 @@ select id from [nt:base] where id is not
 0
 
 select * from [nt:base] as c right outer join [nt:base] as p on p.id = c.p where p.id is not null
-null, /parents/p0
 /children/c1, /parents/p1
 /children/c2, /parents/p1
 /children/c3, /parents/p2
+null, /parents/p0
 
 select * from [nt:base] as p left outer join [nt:base] as c on p.id = c.p where p.id is not null
 /parents/p0, null
@@ -180,3 +180,4 @@ select * from [nt:base] where upper(name
 
 select * from [nt:base] where upper(name) like '10\%'
 /test4
+

Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java?rev=1310228&r1=1310227&r2=1310228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java Fri Apr  6 08:39:00 2012
@@ -58,14 +58,17 @@ public class MicroKernelImpl implements 
     public MicroKernelImpl(String homeDir) throws MicroKernelException {
         init(homeDir);
     }
-    
+
     /**
-     * Argument-less constructor, used for in-memory kernel.
+     * Creates a new in-memory kernel instance that doesn't need to be
+     * explicitly closed, i.e. standard Java garbage collection will take
+     * care of releasing any acquired resources when no longer needed.
+     * Useful especially for test cases and other similar scenarios.
      */
     public MicroKernelImpl() {
         this(new Repository());
     }
-    
+
     /**
      * Alternate constructor, used for testing.
      *