You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2008/09/24 16:28:28 UTC

svn commit: r698590 - in /jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server: ./ BindTest.java

Author: reschke
Date: Wed Sep 24 07:28:28 2008
New Revision: 698590

URL: http://svn.apache.org/viewvc?rev=698590&view=rev
Log:
JCR-1733: start work on JUnit test cases for WebDAV BIND functionality (require separately started jackrabbit webdav server)

Added:
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java   (with props)

Added: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java?rev=698590&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java Wed Sep 24 07:28:28 2008
@@ -0,0 +1,160 @@
+/*
+ * 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.webdav.server;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.MultiStatus;
+import org.apache.jackrabbit.webdav.MultiStatusResponse;
+import org.apache.jackrabbit.webdav.client.methods.DavMethod;
+import org.apache.jackrabbit.webdav.client.methods.MoveMethod;
+import org.apache.jackrabbit.webdav.client.methods.OptionsMethod;
+import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
+import org.apache.jackrabbit.webdav.client.methods.VersionControlMethod;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * Test cases for WebDAV BIND functionality (see <a href="http://greenbytes.de/tech/webdav/draft-ietf-webdav-bind-20.html">draft-ietf-webdav-bind-20</a>
+ * <p>
+ * Required system properties:
+ * <ul>
+ *   <li>webdav.test.url</li>
+ *   <li>webdav.test.username</li>
+ *   <li>webdav.test.password</li>
+ * </ul>
+ */
+
+public class BindTest extends TestCase {
+
+    private URI uri;
+    private String username, password;
+    private HttpClient client;
+    
+    protected void setUp() throws Exception {
+        this.uri = URI.create(System.getProperty("webdav.test.url"));
+        this.username = System.getProperty(("webdav.test.username"), "");
+        this.password = System.getProperty(("webdav.test.password"), "");
+        this.client = new HttpClient();
+        this.client.getState().setCredentials(
+                new AuthScope(this.uri.getHost(), this.uri.getPort()),
+                new UsernamePasswordCredentials(this.username, this.password));
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    
+    // http://greenbytes.de/tech/webdav/draft-ietf-webdav-bind-20.html#rfc.section.8.1
+    public void testOptions() throws HttpException, IOException {
+        OptionsMethod options = new OptionsMethod(this.uri.toASCIIString());
+        int status = this.client.executeMethod(options);
+        assertEquals(200, status);
+        Set features = getDavFeatures(options);
+        assertTrue("DAV header should include 'bind' feature: " + features, features.contains("bind"));
+    }
+
+    // create test resource, make it referenceable, check resource id, move resource, check again
+    public void testResourceId() throws HttpException, IOException, DavException, URISyntaxException {
+        String testuri = this.uri.toASCIIString() + (this.uri.toASCIIString().endsWith("/") ? "" : "/") + "bindtest"; 
+        String testuri2 = this.uri.toASCIIString() + (this.uri.toASCIIString().endsWith("/") ? "" : "/") + "bindtest2"; 
+        
+        PutMethod put = new PutMethod(testuri);
+        put.setRequestEntity(new StringRequestEntity("foo", "text/plain", "UTF-8"));
+        int status = this.client.executeMethod(put);
+        assertTrue(status == 200 || status == 201 || status == 204);
+        
+        // enabling version control always makes the resource referenceable
+        VersionControlMethod versioncontrol = new VersionControlMethod(testuri);
+        status = this.client.executeMethod(versioncontrol);
+        assertTrue(status == 200 || status == 201);
+        
+        URI resourceId = getResourceId(testuri);
+        
+        MoveMethod move = new MoveMethod(testuri, testuri2, true);
+        status = this.client.executeMethod(move);
+        String s = move.getResponseBodyAsString();
+        assertTrue(status == 204);
+        
+        URI resourceId2 = getResourceId(testuri2);
+        assertEquals(resourceId, resourceId2);
+    }
+    
+    // utility methods
+    
+    // see http://greenbytes.de/tech/webdav/draft-ietf-webdav-bind-20.html#rfc.section.3.1
+    private URI getResourceId(String uri) throws IOException, DavException, URISyntaxException {
+        DavPropertyNameSet names = new DavPropertyNameSet();
+        names.add(DavPropertyName.RESOURCEID); 
+        PropFindMethod propfind = new PropFindMethod(uri, names, 0);
+        int status = this.client.executeMethod(propfind);
+        assertTrue(status == 207);
+        MultiStatus multistatus = propfind.getResponseBodyAsMultiStatus();
+        MultiStatusResponse[] responses = multistatus.getResponses();
+        assertEquals(1, responses.length);
+        DavProperty resourceId = responses[0].getProperties(200).get(DavPropertyName.RESOURCEID);
+        assertNotNull(resourceId);
+        assertTrue(resourceId.getValue() instanceof Element);
+        Element href = (Element)resourceId.getValue();
+        assertEquals("href", href.getLocalName());
+        String text = getUri(href);
+        URI resid = new URI(text);
+        return resid;
+    }
+    
+    private String getUri(Element href) {
+        String s = "";
+        for (Node c = href.getFirstChild(); c != null; c = c.getNextSibling()) {
+            if (c.getNodeType() == Node.TEXT_NODE) {
+                s += c.getNodeValue();
+            }
+        }
+        return s;
+    }
+    
+    private Set getDavFeatures(DavMethod method) {
+        Set result = new HashSet();
+        Header[] features = method.getResponseHeaders("DAV");
+        for (int i = 0; i < features.length; i++) {
+            String val = features[i].getValue();
+            StringTokenizer tok = new StringTokenizer(val, "\t ,");
+            while (tok.hasMoreTokens()) {
+                result.add(tok.nextToken());
+            }
+        }
+        return result;
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java
------------------------------------------------------------------------------
    svn:eol-style = native