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();