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 mr...@apache.org on 2016/06/15 08:48:22 UTC
svn commit: r1748524 - in /jackrabbit/oak/branches/1.0/oak-jcr: pom.xml
src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java
src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java
Author: mreutegg
Date: Wed Jun 15 08:48:22 2016
New Revision: 1748524
URL: http://svn.apache.org/viewvc?rev=1748524&view=rev
Log:
OAK-4405: JCR TCK on RDBDocumentStore
Added:
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java (with props)
Modified:
jackrabbit/oak/branches/1.0/oak-jcr/pom.xml
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java
Modified: jackrabbit/oak/branches/1.0/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-jcr/pom.xml?rev=1748524&r1=1748523&r2=1748524&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/branches/1.0/oak-jcr/pom.xml Wed Jun 15 08:48:22 2016
@@ -367,4 +367,32 @@
<artifactId>org.apache.sling.testing.osgi-mock</artifactId>
</dependency>
</dependencies>
+
+ <profiles>
+ <profile>
+ <id>rdb-derby</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <rdb.jdbc-url>jdbc:derby:./{fname}oaktest;create=true</rdb.jdbc-url>
+ <derby.stream.error.file>${project.build.directory}/derby.log</derby.stream.error.file>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <rdb.jdbc-url>jdbc:derby:./{fname}oaktest;create=true</rdb.jdbc-url>
+ <derby.stream.error.file>${project.build.directory}/derby.log</derby.stream.error.file>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
</project>
Added: jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java?rev=1748524&view=auto
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java (added)
+++ jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java Wed Jun 15 08:48:22 2016
@@ -0,0 +1,150 @@
+/*
+ * 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.io.File;
+import java.security.Principal;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+import java.util.UUID;
+
+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.api.JackrabbitSession;
+import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory;
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBOptions;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.test.RepositoryStub;
+
+/**
+ * A repository stub implementation for the RDB document store.
+ */
+public class OakDocumentRDBRepositoryStub extends RepositoryStub {
+
+ protected static final String URL = System.getProperty("rdb.jdbc-url", "");
+
+ protected static final String USERNAME = System.getProperty("rdb.jdbc-user", "sa");
+
+ protected static final String PASSWD = System.getProperty("rdb.jdbc-passwd", "");
+
+ private static final Principal UNKNOWN_PRINCIPAL = new Principal() {
+ @Override
+ public String getName() {
+ return "an_unknown_user";
+ }
+ };
+
+ private final Repository repository;
+
+ private static final String fname = (new File("target")).isDirectory() ? "target/" : "";
+ private static final String jdbcUrl = URL.replace("{fname}", fname);
+
+ /**
+ * Constructor as required by the JCR TCK.
+ *
+ * @param settings
+ * repository settings
+ * @throws javax.jcr.RepositoryException
+ * If an error occurs.
+ */
+ public OakDocumentRDBRepositoryStub(Properties settings) throws RepositoryException {
+ super(settings);
+
+ Session session = null;
+ final DocumentNodeStore m;
+ try {
+ String prefix = "T" + UUID.randomUUID().toString().replace("-", "");
+ RDBOptions options = new RDBOptions().tablePrefix(prefix).dropTablesOnClose(true);
+ m = new DocumentMK.Builder().
+ setClusterId(1).
+ memoryCacheSize(64 * 1024 * 1024).
+ setRDBConnection(RDBDataSourceFactory.forJdbcUrl(jdbcUrl, USERNAME, PASSWD), options).
+ getNodeStore();
+ this.repository = new Jcr(m).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() {
+ try {
+ m.dispose();
+ } catch (Exception e) {
+ // ignore when shutdown fails
+ }
+ }
+ }));
+ }
+
+ public static boolean isAvailable() {
+ try {
+ Connection c = DriverManager.getConnection(OakDocumentRDBRepositoryStub.jdbcUrl, USERNAME, PASSWD);
+ c.close();
+ return true;
+ }
+ catch (SQLException ex) {
+ // expected
+ 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 {
+ if (session instanceof JackrabbitSession) {
+ return ((JackrabbitSession) session).getPrincipalManager().getPrincipal(session.getUserID());
+ }
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ @Override
+ public Principal getUnknownPrincipal(Session session)
+ throws RepositoryException, NotExecutableException {
+ return UNKNOWN_PRINCIPAL;
+ }
+}
Propchange: jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakDocumentRDBRepositoryStub.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java?rev=1748524&r1=1748523&r2=1748524&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java (original)
+++ jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/tck/TCKBase.java Wed Jun 15 08:48:22 2016
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
+import org.apache.jackrabbit.oak.jcr.OakDocumentRDBRepositoryStub;
import org.apache.jackrabbit.oak.jcr.OakMongoNSRepositoryStub;
import org.apache.jackrabbit.oak.jcr.OakTarMKRepositoryStub;
import org.apache.jackrabbit.test.RepositoryHelper;
@@ -50,6 +51,9 @@ public abstract class TCKBase extends Te
if (OakMongoNSRepositoryStub.isMongoDBAvailable()) {
Setup.wrap(this, OakMongoNSRepositoryStub.class.getName());
}
+ if (OakDocumentRDBRepositoryStub.isAvailable()) {
+ Setup.wrap(this, OakDocumentRDBRepositoryStub.class.getName());
+ }
}
abstract protected void addTests();