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 2013/03/06 09:29:35 UTC

svn commit: r1453200 - in /jackrabbit/oak/trunk: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java oak-parent/pom.xml

Author: jukka
Date: Wed Mar  6 08:29:35 2013
New Revision: 1453200

URL: http://svn.apache.org/r1453200
Log:
OAK-624: Run Oak-Jcr tests using the SegmentMK

Run the TCK against the SegmentMK when MongoDB is available

Added:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java
Modified:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java
    jackrabbit/oak/trunk/oak-parent/pom.xml

Added: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java?rev=1453200&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakSegmentMKRepositoryStub.java Wed Mar  6 08:29:35 2013
@@ -0,0 +1,137 @@
+/*
+ * 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.jackrabbit.oak.jcr;
+
+import java.security.Principal;
+import java.util.Properties;
+import java.util.concurrent.Executors;
+
+import javax.jcr.Credentials;
+import javax.jcr.GuestCredentials;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.plugins.segment.MongoStore;
+import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.test.RepositoryStub;
+
+import com.mongodb.Mongo;
+
+/**
+ * A repository stub implementation for Oak on MongoMK
+ */
+public class OakSegmentMKRepositoryStub extends RepositoryStub {
+
+    protected static final String HOST =
+            System.getProperty("mongo.host", "127.0.0.1");
+
+    protected static final int PORT =
+            Integer.getInteger("mongo.port", 27017);
+
+    protected static final String DB =
+            System.getProperty("segment.db", "SegmentMK");
+
+    private final Mongo connection;
+
+    private final Repository repository;
+
+    /**
+     * Constructor as required by the JCR TCK.
+     *
+     * @param settings repository settings
+     * @throws javax.jcr.RepositoryException If an error occurs.
+     */
+    public OakSegmentMKRepositoryStub(Properties settings) throws RepositoryException {
+        super(settings);
+
+        Session session = null;
+        try {
+            this.connection = new Mongo(HOST, PORT);
+            Jcr jcr = new Jcr(new Oak(new SegmentNodeStore(
+                    new MongoStore(connection.getDB(DB), 100 * 1024 * 1024))));
+            jcr.with(Executors.newScheduledThreadPool(1));
+            this.repository = jcr.createRepository();
+
+            session = getRepository().login(superuser);
+            TestContentLoader loader = new TestContentLoader();
+            loader.loadTestContent(session);
+        } catch (Exception e) {
+            throw new RepositoryException(e);
+        } finally {
+            if (session != null) {
+                session.logout();
+            }
+        }
+        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
+            @Override
+            public void run() {
+                connection.close();
+            }
+        }));
+    }
+
+    public static boolean isAvailable() {
+        try {
+            Mongo mongo = new Mongo(HOST, PORT);
+            try {
+                mongo.getDatabaseNames();
+                return true;
+            } finally {
+                mongo.close();
+            }
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * Returns the configured repository instance.
+     *
+     * @return the configured repository instance.
+     */
+    @Override
+    public synchronized Repository getRepository() {
+        return repository;
+    }
+
+    @Override
+    public Credentials getReadOnlyCredentials() {
+        return new GuestCredentials();
+    }
+
+    @Override
+    public Principal getKnownPrincipal(Session session) throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    private static final Principal UNKNOWN_PRINCIPAL = new Principal() {
+        @Override
+        public String getName() {
+            return "an_unknown_user";
+        }
+    };
+
+    @Override
+    public Principal getUnknownPrincipal(Session session) throws RepositoryException,
+            NotExecutableException {
+        return UNKNOWN_PRINCIPAL;
+    }
+}

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java?rev=1453200&r1=1453199&r2=1453200&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java Wed Mar  6 08:29:35 2013
@@ -19,8 +19,8 @@ package org.apache.jackrabbit.oak.jcr.tc
 import java.lang.reflect.Field;
 import java.util.Properties;
 
-import org.apache.jackrabbit.oak.jcr.OakMongoMKRepositoryStub;
 import org.apache.jackrabbit.oak.jcr.OakRepositoryStub;
+import org.apache.jackrabbit.oak.jcr.OakSegmentMKRepositoryStub;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 import org.apache.jackrabbit.test.RepositoryHelper;
 import org.apache.jackrabbit.test.RepositoryHelperPool;
@@ -38,12 +38,16 @@ public abstract class TCKBase extends Te
         super(name);
         addTest(new Setup(OakRepositoryStub.class.getName()));
         addTests();
-        // OAK-588: CI builds take too long with MongoMK
-        // -> disabled for now
-        if (false && OakMongoMKRepositoryStub.isMongoDBAvailable()) {
-            addTest(new Setup(OakMongoMKRepositoryStub.class.getName()));
+        if (OakSegmentMKRepositoryStub.isAvailable()) {
+            addTest(new Setup(OakSegmentMKRepositoryStub.class.getName()));
             addTests();
         }
+        // OAK-588: CI builds take too long with MongoMK
+        // -> disabled for now
+//        if (OakMongoMKRepositoryStub.isMongoDBAvailable()) {
+//            addTest(new Setup(OakMongoMKRepositoryStub.class.getName()));
+//            addTests();
+//        }
     }
 
     abstract protected void addTests();

Modified: jackrabbit/oak/trunk/oak-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1453200&r1=1453199&r2=1453200&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-parent/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-parent/pom.xml Wed Mar  6 08:29:35 2013
@@ -45,6 +45,7 @@
     <mongo.port>27017</mongo.port>
     <mongo.db>MongoMKDB</mongo.db>
     <mongo.db2>MongoMKDB2</mongo.db2>
+    <segment.db>SegmentMK</segment.db>
     <solr.version>4.0.0</solr.version>
   </properties>
 
@@ -143,6 +144,7 @@
               <mongo.port>${mongo.port}</mongo.port>
               <mongo.db>${mongo.db}</mongo.db>
               <mongo.db2>${mongo.db2}</mongo.db2>
+              <segment.db>${segment.db}</segment.db>
             </systemPropertyVariables>
             <redirectTestOutputToFile>true</redirectTestOutputToFile>
           </configuration>