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>