You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2013/08/10 07:53:54 UTC

svn commit: r1512568 [29/39] - in /jackrabbit/commons/filevault/trunk: ./ parent/ vault-cli/ vault-cli/src/ vault-cli/src/main/ vault-cli/src/main/appassembler/ vault-cli/src/main/assembly/ vault-cli/src/main/java/ vault-cli/src/main/java/org/ vault-cl...

Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/resources/org/apache/jackrabbit/vault/packaging/impl/nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/resources/org/apache/jackrabbit/vault/packaging/impl/nodetypes.cnd?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/resources/org/apache/jackrabbit/vault/packaging/impl/nodetypes.cnd (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/resources/org/apache/jackrabbit/vault/packaging/impl/nodetypes.cnd Sat Aug 10 05:53:42 2013
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+<'vlt'='http://www.day.com/jcr/vault/1.0'>
+<'nt'='http://www.jcp.org/jcr/nt/1.0'>
+<'mix'='http://www.jcp.org/jcr/mix/1.0'>
+<'jcr'='http://www.jcp.org/jcr/1.0'>
+
+// -----------------------------------------------------------------------------
+// P A C K A G E S
+// -----------------------------------------------------------------------------
+// PACK_START
+/**
+ * Defines a file vault package. usually added to the jcr:content of a file node.
+ * @node vlt:definition package definition
+ */
+[vlt:Package] mixin
+  orderable
+  + vlt:definition (nt:base) = vlt:PackageDefinition
+
+/**
+ * Package Definition
+ * @prop version
+ * @prop groupId package group id
+ * @prop artifactId package artifact id
+ * @prop lastUnpacked last unpack date
+ * @prop lastUnpackedBy last unpack user
+ * @prop dependencies maven style list of dependencies
+ * @prop jcr:created creation date
+ * @prop jcr:createdBy creation user
+ * @prop jcr:description description of the package
+ * @prop jcr:lastModified last modification date of the definition
+ * @prop jcr:lastModifiedBy last modification user
+ * @node filter list of package filters
+ * @node extended optional extended data (thumbnails, detailed description, etc)
+ */
+[vlt:PackageDefinition] > nt:unstructured
+  orderable
+  - version (String)
+  - groupId (String)
+  - artifactId (String)
+  - lastUnpacked (Date)
+  - lastUnpackedBy (String)
+  - dependencies (String) multiple
+  - jcr:created (Date)
+  - jcr:createdBy (String)
+  - jcr:lastModified (Date)
+  - jcr:lastModifiedBy (String)
+  - jcr:description (String)
+  + thumbnail (nt:base) = nt:unstructured
+  + filter (nt:base) = nt:unstructured
+
+/**
+ * Node type to use as a marker for folders
+ * e.g. decorate a nt:unstructured to prevent greedy aggregation
+ */
+[vlt:HierarchyNode] > nt:hierarchyNode mixin
+
+/**
+ * Marker node type that can be used to mark nodes for full coverage
+ * aggregation
+ */
+[vlt:FullCoverage] mixin
+
+ // PACK_END
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/PathMappingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/PathMappingTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/PathMappingTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/PathMappingTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,35 @@
+/*
+ * 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.vault.fs.api;
+
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * <code>PathMappingTest</code>...
+ */
+public class PathMappingTest {
+
+    @Test
+    public void testSimple() {
+        PathMapping map = new SimplePathMapping("/tmp", "/content");
+        assertEquals("/content", map.map("/tmp"));
+        assertEquals("/content/products", map.map("/tmp/products"));
+        assertEquals("/foo", map.map("/foo"));
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/RepositoryAddressTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/RepositoryAddressTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/RepositoryAddressTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/api/RepositoryAddressTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,367 @@
+/*
+ * 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.vault.fs.api;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>RepAddrTest</code>...
+ *
+ */
+public class RepositoryAddressTest extends TestCase {
+
+    public void testEmpty() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("url://localhost:1234/");
+        assertEquals("scheme", "url", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "url://localhost:1234/-/jcr:root", ra.toString());
+    }
+
+    public void testSpaces() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("url://localhost:1234/-/jcr:root/etc/packages/a%20b");
+        assertEquals("scheme", "url", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/etc/packages/a b", ra.getPath());
+        assertEquals("toString", "url://localhost:1234/-/jcr:root/etc/packages/a%20b", ra.toString());
+    }
+
+    public void testReallyEmpty() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("url://localhost:1234");
+        assertEquals("scheme", "url", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "url://localhost:1234/-/jcr:root", ra.toString());
+    }
+
+    public void testWspOnly() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("url://localhost:1234/workspace");
+        assertEquals("scheme", "url", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "url://localhost:1234/workspace/jcr:root", ra.toString());
+    }
+
+    public void testWspOnlyTrailingSlash() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("url://localhost:1234/workspace/");
+        assertEquals("scheme", "url", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "url://localhost:1234/workspace/jcr:root", ra.toString());
+    }
+
+    public void testPrefix() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root", ra.toString());
+    }
+
+    public void testRoot() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root", ra.toString());
+    }
+
+    public void testRootTrailingSlash() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root/");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root", ra.toString());
+    }
+
+    public void testPath() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testPathTrailingSlash() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar/");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testResolve() throws Exception {
+        RepositoryAddress ra = 
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace")
+                .resolve("/foo/bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testResolveSpecial() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace")
+                .resolve("/foo bar/bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo bar/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo%20bar/bar", ra.toString());
+    }
+
+    public void testResolveDefaultWsp() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/-")
+                .resolve("/foo/bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/-/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testResolveRel() throws Exception {
+        RepositoryAddress ra = 
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo")
+                .resolve("bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testResolveRelSpecial() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo%20bar")
+                .resolve("foo bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "workspace", ra.getWorkspace());
+        assertEquals("path", "/foo bar/foo bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/workspace/jcr:root/foo%20bar/foo%20bar", ra.toString());
+    }
+
+    public void testResolveRelDefaultWsp() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/-/jcr:root/foo")
+                .resolve("bar");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/-/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testDefaultWorkspace() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:1234/pfx1/pfx2/-/jcr:root/foo");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/pfx1/pfx2", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/foo", ra.getPath());
+        assertEquals("toString", "http://localhost:1234/pfx1/pfx2/-/jcr:root/foo", ra.toString());
+    }
+
+    public void testRmiBWC() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("rmi://localhost:1234/crx");
+        assertEquals("scheme", "rmi", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "rmi://localhost:1234/crx/-/jcr:root", ra.toString());
+    }
+
+    public void testRmiBWC2() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("rmi://localhost:1234/crx/crx.default");
+        assertEquals("scheme", "rmi", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "crx.default", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "rmi://localhost:1234/crx/crx.default/jcr:root", ra.toString());
+    }
+
+    public void testRmiBWC3() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("rmi://localhost:1234/crx/crx.default/foo/bar");
+        assertEquals("scheme", "rmi", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 1234, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "crx.default", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "rmi://localhost:1234/crx/crx.default/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testHttpConvenience1() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:8080/");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 8080, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx/server", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:8080/crx/server/-/jcr:root", ra.toString());
+    }
+
+    public void testHttpConvenience2() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:8080/crx");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 8080, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx/server", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:8080/crx/server/-/jcr:root", ra.toString());
+    }
+
+    public void testHttpConvenience3() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:8080/crx/server");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 8080, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/crx/server", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:8080/crx/server/-/jcr:root", ra.toString());
+    }
+
+    public void testHttpConvenience4() throws Exception {
+        RepositoryAddress ra =
+                new RepositoryAddress("http://localhost:8080/-/jcr:root");
+        assertEquals("scheme", "http", ra.getSpecificURI().getScheme());
+        assertEquals("host", "localhost", ra.getSpecificURI().getHost());
+        assertEquals("port", 8080, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "http://localhost:8080/-/jcr:root", ra.toString());
+    }
+
+    public void testRelative() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("/");
+        assertEquals("scheme", null, ra.getSpecificURI().getScheme());
+        assertEquals("host", null, ra.getSpecificURI().getHost());
+        assertEquals("port", -1, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "/-/jcr:root", ra.toString());
+    }
+
+    public void testRelative1() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("/wsp/");
+        assertEquals("scheme", null, ra.getSpecificURI().getScheme());
+        assertEquals("host", null, ra.getSpecificURI().getHost());
+        assertEquals("port", -1, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "wsp", ra.getWorkspace());
+        assertEquals("path", "/", ra.getPath());
+        assertEquals("toString", "/wsp/jcr:root", ra.toString());
+    }
+
+    public void testRelative2() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("/wsp/bar");
+        assertEquals("scheme", null, ra.getSpecificURI().getScheme());
+        assertEquals("host", null, ra.getSpecificURI().getHost());
+        assertEquals("port", -1, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "wsp", ra.getWorkspace());
+        assertEquals("path", "/bar", ra.getPath());
+        assertEquals("toString", "/wsp/jcr:root/bar", ra.toString());
+    }
+
+    public void testRelative3() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("/wsp/foo/bar");
+        assertEquals("scheme", null, ra.getSpecificURI().getScheme());
+        assertEquals("host", null, ra.getSpecificURI().getHost());
+        assertEquals("port", -1, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", "wsp", ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "/wsp/jcr:root/foo/bar", ra.toString());
+    }
+
+    public void testRelative4() throws Exception {
+        RepositoryAddress ra = new RepositoryAddress("/-/foo/bar");
+        assertEquals("scheme", null, ra.getSpecificURI().getScheme());
+        assertEquals("host", null, ra.getSpecificURI().getHost());
+        assertEquals("port", -1, ra.getSpecificURI().getPort());
+        assertEquals("prefix", "/", ra.getSpecificURI().getPath());
+        assertEquals("workspace", null, ra.getWorkspace());
+        assertEquals("path", "/foo/bar", ra.getPath());
+        assertEquals("toString", "/-/jcr:root/foo/bar", ra.toString());
+    }
+
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/DefaultPathFiterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/DefaultPathFiterTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/DefaultPathFiterTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/DefaultPathFiterTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,67 @@
+/*
+ * 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.vault.fs.filter;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>PathFiterTest</code>...
+ *
+ */
+public class DefaultPathFiterTest extends TestCase {
+
+    public void testExact() {
+        test("/foo\\.bar", "/foo.bar", true);
+        test("/foo\\.bar", "/foo_bar", false);
+    }
+
+    public void testFiles() {
+        test("/foo/bar\\.[^/]*$", "/foo/bar.txt", true);
+        test("/foo/bar\\.[^/]*$", "/foo/bar.zip", true);
+        test("/foo/bar\\.[^/]*$", "/foo/bar1.txt", false);
+        test("/foo/bar.[^/]*$", "/foo/bar.dir/readme", false);
+        test("^.*/bar\\.[^/]*$", "/foo/bar.txt", true);
+        test("^.*/bar\\.[^/]*$", "/foo/bar1.txt", false);
+        test("^.*/bar\\.[^/]*$", "/foo/bar.dir/readme", false);
+        test("^.*/bar\\.[^/]*$", "foobar.txt", false);
+    }
+
+    public void testDirectChildren() {
+        test("/foo/[^/]*$", "/foo/bar", true);
+        test("/foo/[^/]*$", "/foo/bar/readme", false);
+    }
+
+    public void testDeepChildren() {
+        test("/foo/.*", "/foo/bar", true);
+        test("/foo/.*", "/foo/bar/readme.txt", true);
+        test("/foo/.*", "/bar/bar/readme.txt", false);
+    }
+    
+    public void testSelfAndDeepChildren() {
+        test("/foo(/.*)?", "/foo", true);
+        test("/foo(/.*)?", "/foo/bar/readme.txt", true);
+        test("/foo(/.*)?", "/foobar", false);
+        test("/foo(/.*)?", "/foobar/foo", false);
+    }
+
+    private void test(String pattern, String path, boolean result) {
+        DefaultPathFilter f = new DefaultPathFilter(pattern);
+        assertEquals("Pattern '" + pattern + "' matches '" + path + "'", result, f.matches(path));
+    }
+
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/WorkspaceFilterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/WorkspaceFilterTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/WorkspaceFilterTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/filter/WorkspaceFilterTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,104 @@
+/*
+ * 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.vault.fs.filter;
+
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.PathMapping;
+import org.apache.jackrabbit.vault.fs.api.SimplePathMapping;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * <code>WorkspaceFilterTest</code>...
+ */
+public class WorkspaceFilterTest {
+
+    @Test
+    public void testMatching() {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet("/foo");
+        filter.add(set1);
+        PathFilterSet set2 = new PathFilterSet("/tmp");
+        set2.addInclude(new DefaultPathFilter("/tmp(/.*)?"));
+        set2.addExclude(new DefaultPathFilter("/tmp/foo(/.*)?"));
+        filter.add(set2);
+        assertTrue(filter.contains("/foo"));
+        assertTrue(filter.contains("/foo/bar"));
+        assertTrue(filter.contains("/tmp"));
+        assertTrue(filter.contains("/tmp/bar"));
+        assertFalse(filter.contains("/tmp/foo"));
+        assertFalse(filter.contains("/tmp/foo/bar"));
+        assertFalse(filter.contains("/"));
+        assertFalse(filter.contains("/bar"));
+
+        assertTrue(filter.covers("/foo"));
+        assertTrue(filter.covers("/tmp"));
+        assertTrue(filter.covers("/tmp/foo"));
+    }
+
+    @Test
+    public void testMapping1() {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet("/tmp/stage/products");
+        filter.add(set1);
+        PathMapping map = new SimplePathMapping("/tmp/stage", "/content/geometrixx/en");
+        WorkspaceFilter mapped = filter.translate(map);
+        assertFalse(mapped.contains("/content/geometrixx/en"));
+        assertTrue(mapped.contains("/content/geometrixx/en/products"));
+    }
+
+    @Test
+    public void testMapping2() {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet("/tmp/stage");
+        set1.addInclude(new DefaultPathFilter("/tmp/stage/products(/.*)?"));
+        set1.addExclude(new DefaultPathFilter("/tmp/stage/products/triangle(/.*)?"));
+        set1.addExclude(new DefaultPathFilter(".*/foo"));
+        filter.add(set1);
+        PathMapping map = new SimplePathMapping("/tmp/stage", "/content/geometrixx/en");
+        WorkspaceFilter mapped = filter.translate(map);
+        assertFalse(mapped.contains("/content/geometrixx/en"));
+        assertTrue(mapped.contains("/content/geometrixx/en/products"));
+        assertFalse(mapped.contains("/content/geometrixx/en/products/triangle"));
+        assertFalse(mapped.contains("/content/geometrixx/en/products/foo"));
+    }
+
+    @Test
+    public void testRelativePatterns() {
+        PathFilterSet set1 = new PathFilterSet("/foo");
+        set1.addInclude(new DefaultPathFilter("/foo/.*"));
+        set1.addInclude(new DefaultPathFilter("/bar/.*"));
+        set1.seal();
+        assertFalse(set1.hasOnlyRelativePatterns());
+
+        PathFilterSet set2 = new PathFilterSet("/foo");
+        set2.addInclude(new DefaultPathFilter(".*/foo/.*"));
+        set2.addInclude(new DefaultPathFilter(".*/bar/.*"));
+        set2.seal();
+        assertTrue(set2.hasOnlyRelativePatterns());
+
+        PathFilterSet set3 = new PathFilterSet("/foo");
+        set3.addInclude(new DefaultPathFilter(".*/foo/.*"));
+        set3.addInclude(new DefaultPathFilter("/.*/bar/.*"));
+        set3.seal();
+        assertFalse(set3.hasOnlyRelativePatterns());
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DepResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DepResolverTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DepResolverTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DepResolverTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,125 @@
+/*
+ * 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.vault.packaging;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>DepResolverTest</code>...
+ */
+public class DepResolverTest extends TestCase {
+
+    public static PackageId P1 = PackageId.fromString("foo:pack1:1.0");
+    public static PackageId P2 = PackageId.fromString("foo:pack2:1.0");
+    public static PackageId P3 = PackageId.fromString("foo:pack3:1.0");
+    public static PackageId P4 = PackageId.fromString("foo:pack4:1.0");
+    public static PackageId P5 = PackageId.fromString("foo:pack5:1.0");
+
+    public static Dependency D1 = Dependency.fromString("foo:pack1:1.0");
+    public static Dependency D2 = Dependency.fromString("foo:pack2:1.0");
+    public static Dependency D3 = Dependency.fromString("foo:pack3:1.0");
+    public static Dependency D4 = Dependency.fromString("foo:pack4:1.0");
+    public static Dependency D5 = Dependency.fromString("foo:pack5:1.0");
+
+    public void testLinear() throws CyclicDependencyException {
+        Map<PackageId, Dependency[]> deps = new LinkedHashMap<PackageId, Dependency[]>();
+        // p1 -> p2, p3
+        deps.put(P1, new Dependency[]{D2, D3});
+        // p2 -> p4
+        deps.put(P2, new Dependency[]{D4});
+        // p3 -> p5
+        deps.put(P3, new Dependency[]{D5});
+        // p4 -> p5
+        deps.put(P4, new Dependency[]{D5});
+        // p5
+        deps.put(P5, Dependency.EMPTY);
+        
+        // expect: p5, p4, p2, p3, p1
+        PackageId[] expect = new PackageId[]{P5, P4, P2, P3, P1};
+        List<PackageId> result = DependencyUtil.resolve(deps);
+        assertEquals("package list", expect, result);
+    }
+
+    public void testLinear2() throws CyclicDependencyException {
+        Map<PackageId, Dependency[]> deps = new LinkedHashMap<PackageId, Dependency[]>();
+        // p3 -> p4, p5
+        deps.put(P3, new Dependency[]{D4, D5});
+        // p4 -> p2, p5
+        deps.put(P4, new Dependency[]{D2, D5});
+        // p1 -> p2, p3, p4
+        deps.put(P1, new Dependency[]{D2, D3, D4});
+        // p2
+        deps.put(P2, Dependency.EMPTY);
+        // p5
+        deps.put(P5, Dependency.EMPTY);
+
+        // expect: p5, p4, p2, p3, p1
+        PackageId[] expect = new PackageId[]{P2, P5, P4, P3, P1};
+        List<PackageId> result = DependencyUtil.resolve(deps);
+        assertEquals("package list", expect, result);
+    }
+
+    public void testMissing() throws Exception {
+        Map<PackageId, Dependency[]> deps = new LinkedHashMap<PackageId, Dependency[]>();
+        // p3 -> p4, p5
+        deps.put(P3, new Dependency[]{D4, D5});
+        // p4 -> p2, p5
+        deps.put(P4, new Dependency[]{D2, D5});
+        // p1 -> p2, p3, p4
+        deps.put(P1, new Dependency[]{D2, D3, D4});
+        // p2
+        deps.put(P2, Dependency.EMPTY);
+
+        // expect: p4, p2, p3, p1
+        PackageId[] expect = new PackageId[]{P2, P4, P3, P1};
+        List<PackageId> result = DependencyUtil.resolve(deps);
+        assertEquals("package list", expect, result);
+    }
+
+    public void testCircular() throws Exception {
+        Map<PackageId, Dependency[]> deps = new LinkedHashMap<PackageId, Dependency[]>();
+        // p1 -> p2
+        deps.put(P1, new Dependency[]{D2});
+        // p2 -> p3, p4
+        deps.put(P2, new Dependency[]{D3, D4});
+        // p4 -> p1, p5
+        deps.put(P4, new Dependency[]{D1, D5});
+        try {
+            DependencyUtil.resolve(deps);
+            fail("Expected cyclic dep exception.");
+        } catch (CyclicDependencyException e) {
+            // ignore
+        }
+    }
+
+    private void assertEquals(String msg, PackageId[] expect, List<PackageId> result) {
+        String expStr = "";
+        for (PackageId pid: expect) {
+            expStr+=pid.toString() + "\n";
+        }
+        String resStr = "";
+        for (PackageId pid: result) {
+            resStr+=pid.toString() + "\n";
+        }
+        assertEquals(msg, expStr, resStr);
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,104 @@
+/*
+ * 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.vault.packaging;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>DependencyTest</code>...
+ */
+public class DependencyTest extends TestCase {
+
+    public void testFromString() {
+        Dependency d = Dependency.fromString("group:name:[1.0,2.0]");
+        assertEquals("group", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals("[1.0,2.0]", d.getRange().toString());
+    }
+
+    public void testFromString2() {
+        Dependency d = Dependency.fromString("name");
+        assertEquals("", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals(VersionRange.INFINITE, d.getRange());
+    }
+
+    public void testFromString3() {
+        Dependency d = Dependency.fromString("group:name");
+        assertEquals("group", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals(VersionRange.INFINITE, d.getRange());
+    }
+
+    public void testFromString4() {
+        Dependency d = Dependency.fromString("foo/bar/group/name");
+        assertEquals("foo/bar/group", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals(VersionRange.INFINITE, d.getRange());
+    }
+
+    public void testFromString41() {
+        Dependency d = Dependency.fromString("foo/bar/group:name");
+        assertEquals("foo/bar/group", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals(VersionRange.INFINITE, d.getRange());
+    }
+
+    public void testFromString5() {
+        Dependency d = Dependency.fromString("foo/bar/group/name:[1.0,2.0]");
+        assertEquals("foo/bar/group", d.getGroup());
+        assertEquals("name", d.getName());
+        assertEquals("[1.0,2.0]", d.getRange().toString());
+    }
+
+    public void testToString() {
+        Dependency d = new Dependency("group", "name", VersionRange.fromString("[1.0, 2.0]"));
+        assertEquals("group:name:[1.0,2.0]", d.toString());
+    }
+
+    public void testToString2() {
+        Dependency d = new Dependency("", "name", VersionRange.fromString("[1.0, 2.0]"));
+        assertEquals(":name:[1.0,2.0]", d.toString());
+    }
+
+    public void testToString3() {
+        Dependency d = new Dependency("", "name", null);
+        assertEquals("name", d.toString());
+    }
+
+    public void testToString4() {
+        Dependency d = new Dependency("group", "name", null);
+        assertEquals("group:name", d.toString());
+    }
+
+    public void testParse() {
+        Dependency[] d = Dependency.parse("name1,group2:name2,group3:name3:1.0,group4:name4:[1.0,2.0],:name5:[1.0,2.0]");
+        assertEquals(5,d.length);
+        assertEquals("name1", d[0].toString());
+        assertEquals("group2:name2", d[1].toString());
+        assertEquals("group3:name3:1.0", d[2].toString());
+        assertEquals("group4:name4:[1.0,2.0]", d[3].toString());
+        assertEquals(":name5:[1.0,2.0]", d[4].toString());
+    }
+
+    public void testMatches() {
+        PackageId id = PackageId.fromString("apache/jackrabbit/product:jcr-content:5.5.0-SNAPSHOT.20111116");
+        Dependency d = Dependency.fromString("apache/jackrabbit/product:jcr-content:[5.5.0,)");
+        assertTrue(d.matches(id));
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/PackageIdTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/PackageIdTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/PackageIdTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/PackageIdTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,173 @@
+/*
+ * 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.vault.packaging;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>PackageIdTest</code>...
+ */
+public class PackageIdTest extends TestCase {
+
+    public void testToString() {
+        PackageId packId = new PackageId("group", "name", "version");
+        assertEquals("group:name:version", packId.toString());
+    }
+
+    public void testToInstallPath() {
+        PackageId packId = new PackageId("group", "name", "version");
+        assertEquals("/etc/packages/group/name-version", packId.getInstallationPath());
+    }
+
+    public void testToInstallPath1() {
+        PackageId packId = new PackageId("group", "name", "");
+        assertEquals("/etc/packages/group/name", packId.getInstallationPath());
+    }
+
+    public void testFromPath() {
+        PackageId packId = new PackageId("/etc/packages/apache/jackrabbit/hotfix/name.zip", "1.0");
+        assertEquals("apache/jackrabbit/hotfix:name:1.0", packId.toString());
+    }
+
+    public void testFromPath1() {
+        PackageId packId = new PackageId("/etc/packages/name-1.0.zip", "1.0");
+        assertEquals(":name:1.0", packId.toString());
+    }
+
+    public void testFromPath2() {
+        PackageId packId = new PackageId("apache/jackrabbit/hotfix/name", "1.0");
+        assertEquals("apache/jackrabbit/hotfix:name:1.0", packId.toString());
+    }
+
+    public void testFromPath3() {
+        PackageId packId = new PackageId("name.zip", "1.0");
+        assertEquals(":name:1.0", packId.toString());
+    }
+
+    public void testFromPath4() {
+        PackageId packId = new PackageId("name", (Version) null);
+        assertEquals(":name", packId.toString());
+    }
+
+    public void testFromPath5() {
+        PackageId packId = new PackageId("hotfix/name-1.0", "2.0");
+        assertEquals("hotfix:name-1.0:2.0", packId.toString());
+    }
+
+    public void testFromVPath() {
+        PackageId packId = new PackageId("/etc/packages/apache/jackrabbit/hotfix/name.zip");
+        assertEquals("apache/jackrabbit/hotfix:name", packId.toString());
+    }
+
+    public void testFromVPath1() {
+        PackageId packId = new PackageId("hotfix/name-1.0");
+        assertEquals("hotfix:name:1.0", packId.toString());
+    }
+
+    public void testFromVPath2() {
+        PackageId packId = new PackageId("hotfix/name-1.0-SNAPSHOT");
+        assertEquals("hotfix:name:1.0-SNAPSHOT", packId.toString());
+    }
+
+    public void testFromVPath3() {
+        PackageId packId = new PackageId("hotfix/cq-name-1.0-SNAPSHOT");
+        assertEquals("hotfix:cq-name:1.0-SNAPSHOT", packId.toString());
+    }
+
+    public void testFromVPath4() {
+        PackageId packId = new PackageId("hotfix/cq-5.3.0-hotfix-12345-1.0-SNAPSHOT");
+        assertEquals("hotfix:cq-5.3.0-hotfix-12345:1.0-SNAPSHOT", packId.toString());
+    }
+
+    public void testFromVPath5() {
+        PackageId packId = new PackageId("hotfix/cq-5.3.0-hotfix-12345-1.0-R1234");
+        assertEquals("hotfix:cq-5.3.0-hotfix-12345:1.0-R1234", packId.toString());
+    }
+
+    public void testFromVPath6() {
+        PackageId packId = new PackageId("hotfix/cq-5.3.0-RG12");
+        assertEquals("hotfix:cq-5.3.0-RG12", packId.toString());
+    }
+
+    public void testEquals() {
+        PackageId pack1 = new PackageId("group", "name", "version");
+        PackageId pack2 = new PackageId("group", "name", "version");
+        assertEquals(pack1, pack2);
+    }
+    public void testFromString() {
+        PackageId packId = PackageId.fromString("group:name:version");
+        assertEquals(packId.getGroup(), "group");
+        assertEquals(packId.getName(), "name");
+        assertEquals(packId.getVersion().toString(), "version");
+    }
+
+    public void testFromString2() {
+        PackageId packId = PackageId.fromString("group:name");
+        assertEquals(packId.getGroup(), "group");
+        assertEquals(packId.getName(), "name");
+        assertEquals(packId.getVersionString(), "");
+    }
+
+    public void testFromString3() {
+        PackageId packId = PackageId.fromString("name");
+        assertEquals(packId.getGroup(), "");
+        assertEquals(packId.getName(), "name");
+        assertEquals(packId.getVersionString(), "");
+    }
+
+    public void testFromString4() {
+        PackageId packId = PackageId.fromString(":name:version");
+        assertEquals(packId.getGroup(), "");
+        assertEquals(packId.getName(), "name");
+        assertEquals(packId.getVersionString(), "version");
+    }
+
+    public void testRoundtrip() {
+        PackageId p1 = new PackageId("", "name", "");
+        PackageId p2 = PackageId.fromString(p1.toString());
+        assertEquals(p1.getName(), p2.getName());
+        assertEquals(p1.getGroup(), p2.getGroup());
+        assertEquals(p1.getVersion(), p2.getVersion());
+    }
+
+    public void testRoundtrip2() {
+        PackageId p1 = new PackageId("", "name", "version");
+        PackageId p2 = PackageId.fromString(p1.toString());
+        assertEquals(p1.getName(), p2.getName());
+        assertEquals(p1.getGroup(), p2.getGroup());
+        assertEquals(p1.getVersion(), p2.getVersion());
+    }
+
+    public void testRoundtrip3() {
+        PackageId p1 = new PackageId("group", "name", "");
+        PackageId p2 = PackageId.fromString(p1.toString());
+        assertEquals(p1.getName(), p2.getName());
+        assertEquals(p1.getGroup(), p2.getGroup());
+        assertEquals(p1.getVersion(), p2.getVersion());
+    }
+
+    public void testRoundtrip4() {
+        PackageId p1 = new PackageId("group", "name", "version");
+        PackageId p2 = PackageId.fromString(p1.toString());
+        assertEquals(p1.getName(), p2.getName());
+        assertEquals(p1.getGroup(), p2.getGroup());
+        assertEquals(p1.getVersion(), p2.getVersion());
+    }
+
+
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionRangeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionRangeTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionRangeTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionRangeTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,192 @@
+/*
+ * 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.vault.packaging;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>VersionRangeTest</code>...
+ */
+public class VersionRangeTest extends TestCase {
+
+    private final Version v09 = Version.create("0.9");
+    private final Version v1 = Version.create("1.0");
+    private final Version v11 = Version.create("1.1");
+    private final Version v2 = Version.create("2.0");
+    private final Version v21 = Version.create("2.1");
+    private final Version v1s = Version.create("1.0-SNAPSHOT");
+
+
+    public void testInfinite() {
+        assertTrue("Infinite range includes all versions", VersionRange.INFINITE.isInRange(v1));
+    }
+
+    public void testLowerBoundIncl() {
+        VersionRange vr = new VersionRange(v1, true, null, false);
+        assertTrue("[1.0,] includes 1.0", vr.isInRange(v1));
+        assertTrue("[1.0,] includes 2.0", vr.isInRange(v2));
+        assertFalse("[1.0,] excludes 0.9", vr.isInRange(v09));
+    }
+
+    public void testLowerBoundExcl() {
+        VersionRange vr = new VersionRange(v1, false, null, false);
+        assertFalse("(1.0,] excludes 1.0", vr.isInRange(v1));
+        assertTrue("(1.0,] includes 2.0", vr.isInRange(v2));
+        assertFalse("(1.0,] excludes 0.9", vr.isInRange(v09));
+    }
+
+    public void testUpperBoundIncl() {
+        VersionRange vr = new VersionRange(null, false, v2, true);
+        assertTrue("[,2.0] includes 1.0", vr.isInRange(v1));
+        assertTrue("[,2.0] includes 2.0", vr.isInRange(v2));
+        assertFalse("[,2.0] excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testUpperBoundExcl() {
+        VersionRange vr = new VersionRange(null, false, v2, false);
+        assertTrue("[,2.0) includes 1.0", vr.isInRange(v1));
+        assertFalse("[,2.0) excludes 2.0", vr.isInRange(v2));
+        assertFalse("[,2.0) excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testRangeInclIncl() {
+        VersionRange vr = new VersionRange(v1, true, v2, true);
+        assertFalse("[1.0,2.0] excludes 0.9", vr.isInRange(v09));
+        assertTrue("[1.0,2.0] includes 1.0", vr.isInRange(v1));
+        assertTrue("[1.0,2.0] includes 1.1", vr.isInRange(v11));
+        assertTrue("[1.0,2.0] includes 2.0", vr.isInRange(v2));
+        assertFalse("[1.0,2.0] excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testRangeExclIncl() {
+        VersionRange vr = new VersionRange(v1, false, v2, true);
+        assertFalse("(1.0,2.0] excludes 0.9", vr.isInRange(v09));
+        assertFalse("(1.0,2.0] includes 1.0", vr.isInRange(v1));
+        assertTrue("(1.0,2.0] includes 1.1", vr.isInRange(v11));
+        assertTrue("(1.0,2.0] includes 2.0", vr.isInRange(v2));
+        assertFalse("(1.0,2.0] excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testRangeInclExcl() {
+        VersionRange vr = new VersionRange(v1, true, v2, false);
+        assertFalse("[1.0,2.0) excludes 0.9", vr.isInRange(v09));
+        assertTrue("[1.0,2.0) includes 1.0", vr.isInRange(v1));
+        assertTrue("[1.0,2.0) includes 1.1", vr.isInRange(v11));
+        assertFalse("[1.0,2.0) includes 2.0", vr.isInRange(v2));
+        assertFalse("[1.0,2.0) excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testRangeExclExcl() {
+        VersionRange vr = new VersionRange(v1, false, v2, false);
+        assertFalse("(1.0,2.0) excludes 0.9", vr.isInRange(v09));
+        assertFalse("(1.0,2.0) includes 1.0", vr.isInRange(v1));
+        assertTrue("(1.0,2.0) includes 1.1", vr.isInRange(v11));
+        assertFalse("(1.0,2.0) includes 2.0", vr.isInRange(v2));
+        assertFalse("(1.0,2.0) excludes 2.1", vr.isInRange(v21));
+    }
+
+    public void testRangeSnapshots() {
+        VersionRange vr = VersionRange.fromString("[1.0,2.0)");
+        assertTrue("[1.0,2.0) includes 1.0-SNAPSHOT", vr.isInRange(v1s));
+    }
+
+    public void testRangeInvalid() {
+        try {
+            new VersionRange(v2, false, v1, false);
+            fail("invalid range (2.0,1.0) must fail");
+        } catch (Exception e) {
+            // ignore
+        }
+    }
+
+    public void testRangeInvalid2() {
+        try {
+            new VersionRange(v1, false, v1, false);
+            fail("invalid range (1.0,1.0) must fail");
+        } catch (Exception e) {
+            // ignore
+        }
+    }
+
+    public void testParse() {
+        VersionRange vr = VersionRange.fromString("[1.0,2.0]");
+        assertEquals(v1, vr.getLow());
+        assertEquals(v2, vr.getHigh());
+        assertEquals(true, vr.isLowInclusive());
+        assertEquals(true, vr.isHighInclusive());
+    }
+
+    public void testParse2() {
+        VersionRange vr = VersionRange.fromString("(1.0,2.0)");
+        assertEquals(v1, vr.getLow());
+        assertEquals(v2, vr.getHigh());
+        assertEquals(false, vr.isLowInclusive());
+        assertEquals(false, vr.isHighInclusive());
+    }
+
+    public void testParse3() {
+        VersionRange vr = VersionRange.fromString("1.0");
+        assertEquals(v1, vr.getLow());
+        assertEquals(null, vr.getHigh());
+        assertEquals(true, vr.isLowInclusive());
+    }
+
+    public void testParse4() {
+        VersionRange vr = VersionRange.fromString("(1.0,]");
+        assertEquals(v1, vr.getLow());
+        assertEquals(null, vr.getHigh());
+        assertEquals(false, vr.isLowInclusive());
+    }
+
+    public void testParse5() {
+        VersionRange vr = VersionRange.fromString("[,2.0]");
+        assertEquals(null, vr.getLow());
+        assertEquals(v2, vr.getHigh());
+        assertEquals(true, vr.isHighInclusive());
+    }
+
+    public void testToString() {
+        VersionRange vr = new VersionRange(v1, true, v2, true);
+        assertEquals("[1.0,2.0]", vr.toString());
+    }
+
+    public void testToString2() {
+        VersionRange vr = new VersionRange(v1, false, v2, false);
+        assertEquals("(1.0,2.0)", vr.toString());
+    }
+
+    public void testToString3() {
+        VersionRange vr = new VersionRange(v1, false, null, false);
+        assertEquals("(1.0,)", vr.toString());
+    }
+
+    public void testToString4() {
+        VersionRange vr = new VersionRange(v1, true, null, false);
+        assertEquals("1.0", vr.toString());
+    }
+
+    public void testToString5() {
+        VersionRange vr = new VersionRange(null, false, v2, true);
+        assertEquals("[,2.0]", vr.toString());
+    }
+
+    public void testToString6() {
+        VersionRange vr = new VersionRange(null, false, v2, false);
+        assertEquals("[,2.0)", vr.toString());
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,93 @@
+/*
+ * 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.vault.packaging;
+
+import junit.framework.TestCase;
+
+/**
+ * <code>VersionTest</code>...
+ */
+public class VersionTest extends TestCase {
+
+    public void testFromSegments() {
+        String[] segs = {"1", "2", "3-SNAPSHOT"};
+        Version v = Version.create(segs);
+        assertEquals("1.2.3-SNAPSHOT", v.toString());
+    }
+
+    public void testCompare() {
+        compare("1.0.0", "1.0.0", 0);
+        compare("1.0.1", "1.0.0", 1);
+        compare("1.1", "1.0.0", 1);
+        compare("1.11", "1.9", 1);
+        compare("1.1-SNAPSHOT", "1.0.0", 1);
+        compare("2.0", "2.0-beta-8", 1);
+        compare("2.0", "2.0-SNAPSHOT", 1);
+        compare("1.11", "1.9-SNAPSHOT", 1);
+        compare("1.11-SNAPSHOT", "1.9-SNAPSHOT", 1);
+        compare("1.11-SNAPSHOT", "1.9", 1);
+        compare("1.1", "1.1-SNAPSHOT", 1);
+        compare("1.1-SNAPSHOT", "1.1-R12345", 1);
+    }
+
+    public void testOsgiCompare() {
+        osgiCompare("1.0.0", "1.0.0", 0);
+        osgiCompare("1.0.1", "1.0.0", 1);
+        osgiCompare("1.1", "1.0.0", 1);
+        osgiCompare("1.11", "1.9", 1);
+        osgiCompare("1.1-SNAPSHOT", "1.0.0", 1);
+        osgiCompare("2.0", "2.0-beta-8", -1);
+        osgiCompare("2.0", "2.0-SNAPSHOT", -1);
+        osgiCompare("1.11", "1.9-SNAPSHOT", 1);
+        osgiCompare("1.11-SNAPSHOT", "1.9-SNAPSHOT", 1);
+        osgiCompare("1.11-SNAPSHOT", "1.9", 1);
+        osgiCompare("1.1", "1.1-SNAPSHOT", -1);
+        osgiCompare("1.1-SNAPSHOT", "1.1-R12345", 1);
+    }
+
+    private void compare(String v1, String v2, int comp) {
+        Version vv1 = Version.create(v1);
+        Version vv2 = Version.create(v2);
+        int ret = vv1.compareTo(vv2);
+        if (ret == comp) {
+            return;
+        }
+        if (ret < 0 && comp < 0) {
+            return;
+        }
+        if (ret > 0 && comp > 0) {
+            return;
+        }
+        fail(v1 + " compare to " + v2 + " must return " + comp);
+    }
+    private void osgiCompare(String v1, String v2, int comp) {
+        Version vv1 = Version.create(v1);
+        Version vv2 = Version.create(v2);
+        int ret = vv1.osgiCompareTo(vv2);
+        if (ret == comp) {
+            return;
+        }
+        if (ret < 0 && comp < 0) {
+            return;
+        }
+        if (ret > 0 && comp > 0) {
+            return;
+        }
+        fail(v1 + " osgi compare to " + v2 + " must return " + comp);
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/AdminPermissionCheckerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/AdminPermissionCheckerTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/AdminPermissionCheckerTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/AdminPermissionCheckerTest.java Sat Aug 10 05:53:42 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.vault.packaging.impl;
+
+import javax.jcr.SimpleCredentials;
+
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.vault.packaging.integration.IntegrationTestBase;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Testcase for {@link AdminPermissionChecker}
+ */
+public class AdminPermissionCheckerTest extends IntegrationTestBase {
+
+    @Test
+    public void testAdminUser() throws Exception {
+        assertTrue("user admin should have admin permissions", AdminPermissionChecker.hasAdministrativePermissions(admin));
+    }
+
+    @Test
+    public void testNotAdminUser() throws Exception {
+        JackrabbitSession jackrabbitSession = (JackrabbitSession) admin;
+        Authorizable vip = jackrabbitSession.getUserManager().getAuthorizable("who");
+        if (vip == null) {
+            jackrabbitSession.getUserManager().createUser("who", "who");
+        }
+        jackrabbitSession.save();
+        admin.save();
+        admin.logout();
+        admin = repository.login(new SimpleCredentials("who", "who".toCharArray()));
+        assertFalse("\"who\" is not admin/system and doesn't belong to administrators thus shouldn't have admin permissions",
+                AdminPermissionChecker.hasAdministrativePermissions(admin));
+    }
+
+    @Test
+    public void testAdminGroup() throws Exception {
+        JackrabbitSession jackrabbitSession = (JackrabbitSession) admin;
+        Authorizable admins = jackrabbitSession.getUserManager().getAuthorizable("administrators");
+        if (admins == null) {
+            admins = jackrabbitSession.getUserManager().createGroup("administrators");
+        }
+        Group adminsGroup = (Group) admins;
+        adminsGroup.addMember(jackrabbitSession.getUserManager().getAuthorizable("anonymous"));
+        jackrabbitSession.save();
+        admin.save();
+        admin.logout();
+        admin = repository.login(new SimpleCredentials("anonymous", "anonymous".toCharArray()));
+        assertTrue("user \"anonymous\" has been added to administrators group thus should have admin permissions",
+                AdminPermissionChecker.hasAdministrativePermissions(admin));
+    }
+
+
+}

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplTest.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplTest.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,113 @@
+/*
+ * 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.vault.packaging.impl;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+
+import org.apache.jackrabbit.vault.packaging.integration.IntegrationTestBase;
+import org.junit.Test;
+
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Testcase for {@link JcrPackageManagerImpl}
+ */
+public class JcrPackageManagerImplTest extends IntegrationTestBase {
+
+    private List<String> visitedPaths = new LinkedList<String>();
+
+    @Test
+    public void testMkdDirWithUnauthorizedSession() throws Exception {
+        Session session = mock(Session.class);
+        when(session.nodeExists(anyString())).thenReturn(false);
+        when(session.getWorkspace()).thenReturn(admin.getWorkspace());
+        JcrPackageManagerImpl jcrPackageManager = new JcrPackageManagerImpl(session);
+        String path = "/etc/packages";
+        try {
+            jcrPackageManager.mkdir(path, true);
+            fail("this should've thrown RepositoryException as the session always tells nodes don't exist");
+        }
+        catch (RepositoryException e) {
+            // everything it's ok
+        }
+
+    }
+
+    @Test
+    public void testMkDirWithAnonymousSession() throws Exception {
+        Session session = repository.login(new SimpleCredentials("anonymous", "anonymous".toCharArray()));
+        JcrPackageManagerImpl jcrPackageManager = new JcrPackageManagerImpl(session);
+        jcrPackageManager.mkdir("/something/that/is/not/going/to/be/found/anywhere/in/this/repository/even/if/searching/in/very/long/paths/like/this", false);
+        jcrPackageManager.mkdir("/something/that/is/not/going/to/be/found/anywhere/in/this/repository/even/if/searching/in/very/long/paths/like/this", false);
+        jcrPackageManager.mkdir("/something/that/is/not/going/to/be/found/anywhere/in/this/repository/even/if/searching/in/very/long/paths/like/this", false);
+    }
+
+    @Test
+    public void mkdDirStressTest() throws Exception {
+        JcrPackageManagerImpl jcrPackageManager = new JcrPackageManagerImpl(admin);
+        String path = admin.getRootNode().getPath();
+        while (path != null) {
+            jcrPackageManager.mkdir(path, true);
+            jcrPackageManager.mkdir(path, false);
+            path = getNextPath(path);
+        }
+    }
+
+    private String getNextPath(String path) throws RepositoryException {
+        Node currentNode = admin.getNode(path);
+        if (currentNode.hasNodes()) {
+            NodeIterator nodes = currentNode.getNodes();
+            while (nodes.hasNext()) {
+                Node node = nodes.nextNode();
+                String nodePath = node.getPath();
+                if (visitedPaths.contains(nodePath)) {
+                    continue;
+                } else {
+                    visitedPaths.add(nodePath);
+                }
+                return nodePath;
+            }
+            return getParentPath(path);
+        } else {
+            return getParentPath(path);
+        }
+    }
+
+    private String getParentPath(String path) throws RepositoryException {
+        Node currentNode = admin.getNode(path);
+        if (currentNode.getPath().equals(admin.getRootNode().getPath())) {
+            return null;
+        } else {
+            Node parent = currentNode.getParent();
+            if (parent != null) {
+                return parent.getPath();
+            } else {
+                return null;
+            }
+        }
+    }
+}

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/DumpCoverageTests.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/DumpCoverageTests.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/DumpCoverageTests.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/DumpCoverageTests.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,136 @@
+/*
+ * 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.vault.packaging.integration;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
+import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
+import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
+import org.apache.jackrabbit.vault.util.Text;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * <code>ImportTests</code>...
+ */
+public class DumpCoverageTests extends IntegrationTestBase {
+
+    /**
+     * default logger
+     */
+    private static final Logger log = LoggerFactory.getLogger(DumpCoverageTests.class);
+
+    public static final String TEST_ROOT = "/testroot";
+
+    public static final String[] ALL_PAGES = {
+            TEST_ROOT + "/content",
+            TEST_ROOT + "/content/en",
+            TEST_ROOT + "/content/en/foo",
+            TEST_ROOT + "/content/en/bar",
+            TEST_ROOT + "/content/fr",
+            TEST_ROOT + "/content/fr/foo"
+    };
+    public static final String[] LANGUAGE_PAGES = {
+            TEST_ROOT + "/content/en",
+            TEST_ROOT + "/content/en/foo",
+            TEST_ROOT + "/content/en/bar",
+            TEST_ROOT + "/content/fr",
+            TEST_ROOT + "/content/fr/foo"
+    };
+    public static String[] ALL_PATHS;
+    static {
+        ALL_PATHS = new String[ALL_PAGES.length*2];
+        for (int i=0; i<ALL_PAGES.length;i++) {
+            ALL_PATHS[i*2] = ALL_PAGES[i];
+            ALL_PATHS[i*2+1] = ALL_PAGES[i] + "/jcr:content";
+        }
+    }
+
+    @Before
+    public void init() throws RepositoryException {
+        clean(TEST_ROOT);
+
+        JcrUtils.getOrCreateByPath(TEST_ROOT, "nt:folder", admin);
+        for (String path: ALL_PAGES) {
+            JcrUtils.getOrCreateByPath(path, "nt:folder", admin);
+            JcrUtils.getOrCreateByPath(path + "/jcr:content", "nt:folder", admin);
+        }
+    }
+
+    @Test
+    public void testFullCoverage() throws IOException, RepositoryException, ConfigurationException {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet(TEST_ROOT + "/content");
+        filter.add(set1);
+        Collector listener = new Collector();
+        filter.dumpCoverage(admin, listener, false);
+        checkResults("Full coverage needs to include all paths", ALL_PATHS, listener.paths);
+    }
+
+    @Test
+    public void testNoJcrContentCoverage() throws IOException, RepositoryException, ConfigurationException {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet(TEST_ROOT + "/content");
+        filter.add(set1);
+        Collector listener = new Collector();
+        filter.dumpCoverage(admin, listener, true);
+        checkResults("Partial coverage needs to include all pages", ALL_PAGES, listener.paths);
+    }
+
+
+    @Test
+    public void testSplitRootsCoverage() throws IOException, RepositoryException, ConfigurationException {
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        PathFilterSet set1 = new PathFilterSet(TEST_ROOT + "/content/en");
+        PathFilterSet set2 = new PathFilterSet(TEST_ROOT + "/content/fr");
+        filter.add(set1);
+        filter.add(set2);
+        Collector listener = new Collector();
+        filter.dumpCoverage(admin, listener, true);
+        checkResults("Split roots", LANGUAGE_PAGES, listener.paths);
+    }
+
+
+    private static class Collector implements ProgressTrackerListener {
+        private final List<String> paths = new LinkedList<String>();
+
+        public void onMessage(Mode mode, String action, String path) {
+            paths.add(path);
+        }
+
+        public void onError(Mode mode, String path, Exception e) {
+        }
+    }
+
+    public static void checkResults(String msg, String[] expected, List<String> result) {
+        String left = Text.implode(expected, "\n");
+        String right = Text.implode(result.toArray(new String[result.size()]), "\n");
+        assertEquals(msg, left, right);
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook1.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook1.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook1.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook1.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,39 @@
+/*
+ * 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.vault.packaging.integration;
+
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallHook;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+
+/**
+ * <code>ExternalTestHook</code> that is called by the external_hook package.
+ */
+public class ExternalTestHook1 implements InstallHook {
+
+    public void execute(InstallContext context) throws PackageException {
+        try {
+            context.getSession().getNode("/testroot").setProperty("TestHook1", context.getPhase().toString());
+            context.getSession().save();
+        } catch (RepositoryException e) {
+            throw new PackageException(e);
+        }
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook2.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook2.java?rev=1512568&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook2.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHook2.java Sat Aug 10 05:53:42 2013
@@ -0,0 +1,39 @@
+/*
+ * 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.vault.packaging.integration;
+
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallHook;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+
+/**
+ * <code>ExternalTestHook</code> that is called by the external_hook package.
+ */
+public class ExternalTestHook2 implements InstallHook {
+
+    public void execute(InstallContext context) throws PackageException {
+        try {
+            context.getSession().getNode("/testroot").setProperty("TestHook2", context.getPhase().toString());
+            context.getSession().save();
+        } catch (RepositoryException e) {
+            throw new PackageException(e);
+        }
+    }
+}
\ No newline at end of file