Author: mreutegg Date: Mon Jan 28 15:04:43 2013 New Revision: 1439441 URL: http://svn.apache.org/viewvc?rev=1439441&view=rev Log: OAK-588: Run oak-jcr tests on mongomk
Added: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java (with props) jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java (with props) Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ApiIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/LockIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/NodetypeIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ObservationIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/QueryIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/RetentionIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/SecurityIT.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/VersionIT.java jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml jackrabbit/oak/trunk/oak-parent/pom.xml Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/pom.xml (original) +++ jackrabbit/oak/trunk/oak-jcr/pom.xml Mon Jan 28 15:04:43 2013 @@ -329,6 +329,12 @@ <!-- Test dependencies --> <dependency> + <groupId>org.apache.jackrabbit</groupId> + <artifactId>oak-mongomk</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> Added: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java?rev=1439441&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java Mon Jan 28 15:04:43 2013 @@ -0,0 +1,135 @@ +/* + * 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.mk.core.MicroKernelImpl; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoMicroKernel; +import org.apache.jackrabbit.mongomk.impl.MongoNodeStore; +import org.apache.jackrabbit.mongomk.impl.blob.MongoGridFSBlobStore; +import org.apache.jackrabbit.test.NotExecutableException; +import org.apache.jackrabbit.test.RepositoryStub; + +import com.mongodb.BasicDBObject; + +/** + * A repository stub implementation for Oak on MongoMK + */ +public class OakMongoMKRepositoryStub 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("mongo.db", "MongoMKDB"); + + private final MongoConnection 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 OakMongoMKRepositoryStub(Properties settings) throws RepositoryException { + super(settings); + + Session session = null; + try { + this.connection = new MongoConnection(HOST, PORT, DB); + Jcr jcr = new Jcr(new MongoMicroKernel(connection, + new MongoNodeStore(connection.getDB()), + new MongoGridFSBlobStore(connection.getDB()))); + 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 isMongoDBAvailable() { + try { + MongoConnection connection = new MongoConnection(HOST, PORT, DB); + connection.getDB().command(new BasicDBObject("ping", 1)); + return true; + } 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; + } +} Propchange: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakMongoMKRepositoryStub.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ApiIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ApiIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ApiIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ApiIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class ApiIT extends ConcurrentTestSuite { +public class ApiIT extends TCKBase { public static Test suite() { return new ApiIT(); @@ -27,7 +26,10 @@ public class ApiIT extends ConcurrentTes public ApiIT() { super("JCR API tests"); - addTest(org.apache.jackrabbit.test.api.TestAll.suite()); } + @Override + protected void addTests() { + addTest(org.apache.jackrabbit.test.api.TestAll.suite()); + } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/LockIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/LockIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/LockIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/LockIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class LockIT extends ConcurrentTestSuite { +public class LockIT extends TCKBase { public static Test suite() { return new LockIT(); @@ -27,6 +26,10 @@ public class LockIT extends ConcurrentTe public LockIT() { super("JCR lock tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.lock.TestAll.suite()); } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/NodetypeIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/NodetypeIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/NodetypeIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/NodetypeIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class NodetypeIT extends ConcurrentTestSuite { +public class NodetypeIT extends TCKBase { public static Test suite() { return new NodetypeIT(); @@ -27,6 +26,10 @@ public class NodetypeIT extends Concurre public NodetypeIT() { super("JCR node type tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.nodetype.TestAll.suite()); } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ObservationIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ObservationIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ObservationIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/ObservationIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class ObservationIT extends ConcurrentTestSuite { +public class ObservationIT extends TCKBase { public static Test suite() { return new ObservationIT(); @@ -27,6 +26,10 @@ public class ObservationIT extends Concu public ObservationIT() { super("JCR observation tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.observation.TestAll.suite()); } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/QueryIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/QueryIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/QueryIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/QueryIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class QueryIT extends ConcurrentTestSuite { +public class QueryIT extends TCKBase { public static Test suite() { return new QueryIT(); @@ -27,6 +26,10 @@ public class QueryIT extends ConcurrentT public QueryIT() { super("JCR query tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.query.TestAll.suite()); addTest(org.apache.jackrabbit.test.api.query.qom.TestAll.suite()); } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/RetentionIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/RetentionIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/RetentionIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/RetentionIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class RetentionIT extends ConcurrentTestSuite { +public class RetentionIT extends TCKBase { public static Test suite() { return new RetentionIT(); @@ -27,6 +26,10 @@ public class RetentionIT extends Concurr public RetentionIT() { super("JCR retention tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.retention.TestAll.suite()); } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/SecurityIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/SecurityIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/SecurityIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/SecurityIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class SecurityIT extends ConcurrentTestSuite { +public class SecurityIT extends TCKBase { public static Test suite() { return new SecurityIT(); @@ -27,6 +26,10 @@ public class SecurityIT extends Concurre public SecurityIT() { super("JCR security tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.security.TestAll.suite()); } } Added: 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=1439441&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java Mon Jan 28 15:04:43 2013 @@ -0,0 +1,74 @@ +/* + * 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.tck; + +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.test.AbstractJCRTest; +import org.apache.jackrabbit.test.RepositoryHelper; +import org.apache.jackrabbit.test.RepositoryHelperPool; +import org.apache.jackrabbit.test.RepositoryStub; + +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Base class for TCK tests. + */ +public abstract class TCKBase extends TestSuite { + + public TCKBase(String name) { + super(name); + addTest(new Setup(OakRepositoryStub.class.getName())); + addTests(); + if (OakMongoMKRepositoryStub.isMongoDBAvailable()) { + addTest(new Setup(OakMongoMKRepositoryStub.class.getName())); + addTests(); + } + } + + abstract protected void addTests(); + + /** + * Setup test class to replace the RepositoryHelper. This is quite a hack + * be cause the existing TCK tests do not take parameters. + */ + public static class Setup extends TestCase { + + private final String stubClass; + + public Setup(String stubClass) { + super("testSetup"); + this.stubClass = stubClass; + } + + public void testSetup() throws Exception { + // replace the existing helper with our parametrized version + Field poolField = AbstractJCRTest.class.getDeclaredField("HELPER_POOL"); + poolField.setAccessible(true); + RepositoryHelperPool helperPool = (RepositoryHelperPool) poolField.get(null); + helperPool.borrowHelper(); + Properties props = new Properties(); + props.load(getClass().getClassLoader().getResourceAsStream(RepositoryStub.STUB_IMPL_PROPS)); + props.put(RepositoryStub.PROP_STUB_IMPL_CLASS, stubClass); + helperPool.returnHelper(new RepositoryHelper(props)); + } + } +} Propchange: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/VersionIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/VersionIT.java?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/VersionIT.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/VersionIT.java Mon Jan 28 15:04:43 2013 @@ -17,9 +17,8 @@ package org.apache.jackrabbit.oak.jcr.tck; import junit.framework.Test; -import org.apache.jackrabbit.test.ConcurrentTestSuite; -public class VersionIT extends ConcurrentTestSuite { +public class VersionIT extends TCKBase { public static Test suite() { return new VersionIT(); @@ -27,6 +26,11 @@ public class VersionIT extends Concurren public VersionIT() { super("JCR version tests"); + } + + @Override + protected void addTests() { addTest(org.apache.jackrabbit.test.api.version.TestAll.suite()); - addTest(org.apache.jackrabbit.test.api.version.simple.TestAll.suite()); } + addTest(org.apache.jackrabbit.test.api.version.simple.TestAll.suite()); + } } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/resources/logback-test.xml Mon Jan 28 15:04:43 2013 @@ -29,7 +29,9 @@ </encoder> </appender> - <root level="DEBUG"> + <logger name="org.apache.jackrabbit.test.api" level="DEBUG"/> + + <root level="INFO"> <!-- <appender-ref ref="console"/> --> Modified: jackrabbit/oak/trunk/oak-parent/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1439441&r1=1439440&r2=1439441&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-parent/pom.xml (original) +++ jackrabbit/oak/trunk/oak-parent/pom.xml Mon Jan 28 15:04:43 2013 @@ -128,6 +128,7 @@ <mongo.db>${mongo.db}</mongo.db> <mongo.db2>${mongo.db2}</mongo.db2> </systemPropertyVariables> + <redirectTestOutputToFile>true</redirectTestOutputToFile> </configuration> </plugin> <plugin>