You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2010/02/12 18:17:02 UTC

svn commit: r909504 - in /sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest: AbstractAuthenticatedTest.java NamespaceMappingTest.java userManager/AbstractUserManagerTest.java

Author: justin
Date: Fri Feb 12 17:17:00 2010
New Revision: 909504

URL: http://svn.apache.org/viewvc?rev=909504&view=rev
Log:
adding integration test for impersonation and SLING-1366. also includes pulling authentication-related test methods from a usermanager-specific base test class.

Added:
    sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/AbstractAuthenticatedTest.java
Modified:
    sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/NamespaceMappingTest.java
    sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java

Added: sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/AbstractAuthenticatedTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/AbstractAuthenticatedTest.java?rev=909504&view=auto
==============================================================================
--- sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/AbstractAuthenticatedTest.java (added)
+++ sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/AbstractAuthenticatedTest.java Fri Feb 12 17:17:00 2010
@@ -0,0 +1,184 @@
+/*
+ * 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.sling.launchpad.webapp.integrationtest;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.sling.commons.testing.integration.HttpTestBase;
+
+/**
+ * This class consists of utility methods for writing tests which use authentication.
+ */
+public abstract class AbstractAuthenticatedTest extends HttpTestBase {
+
+    /** Execute a POST request and check status */
+    protected void assertAuthenticatedAdminPostStatus(String url, int expectedStatusCode, List<NameValuePair> postParams, String assertMessage)
+    throws IOException {
+        Credentials defaultcreds = new UsernamePasswordCredentials("admin", "admin");
+        assertAuthenticatedPostStatus(defaultcreds, url, expectedStatusCode, postParams, assertMessage);
+    }
+
+    /** Execute a POST request and check status */
+    protected void assertAuthenticatedPostStatus(Credentials creds, String url, int expectedStatusCode, List<NameValuePair> postParams, String assertMessage)
+    throws IOException {
+        final PostMethod post = new PostMethod(url);
+        post.setFollowRedirects(false);
+
+        URL baseUrl = new URL(HTTP_BASE_URL);
+        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
+        post.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
+        try {
+            httpClient.getState().setCredentials(authScope, creds);
+
+            if(postParams!=null) {
+                final NameValuePair [] nvp = {};
+                post.setRequestBody(postParams.toArray(nvp));
+            }
+
+            final int status = httpClient.executeMethod(post);
+            if(assertMessage == null) {
+                assertEquals(expectedStatusCode, status);
+            } else {
+                assertEquals(assertMessage, expectedStatusCode, status);
+            }
+        } finally {
+            httpClient.getState().setCredentials(authScope, oldCredentials);
+        }
+    }
+
+    /** Verify that given URL returns expectedStatusCode
+     * @throws IOException */
+    protected void assertAuthenticatedHttpStatus(Credentials creds, String urlString, int expectedStatusCode, String assertMessage) throws IOException {
+        URL baseUrl = new URL(HTTP_BASE_URL);
+        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
+        GetMethod getMethod = new GetMethod(urlString);
+        getMethod.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
+        try {
+            httpClient.getState().setCredentials(authScope, creds);
+
+            final int status = httpClient.executeMethod(getMethod);
+            if(assertMessage == null) {
+                assertEquals(urlString,expectedStatusCode, status);
+            } else {
+                assertEquals(assertMessage, expectedStatusCode, status);
+            }
+        } finally {
+            httpClient.getState().setCredentials(authScope, oldCredentials);
+        }
+    }
+
+
+    /** retrieve the contents of given URL and assert its content type
+     * @param expectedContentType use CONTENT_TYPE_DONTCARE if must not be checked
+     * @throws IOException
+     * @throws HttpException */
+    protected String getAuthenticatedContent(Credentials creds, String url, String expectedContentType, List<NameValuePair> params, int expectedStatusCode) throws IOException {
+        final GetMethod get = new GetMethod(url);
+
+        URL baseUrl = new URL(HTTP_BASE_URL);
+        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
+        get.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
+        try {
+            httpClient.getState().setCredentials(authScope, creds);
+
+            if(params != null) {
+                final NameValuePair [] nvp = new NameValuePair[0];
+                get.setQueryString(params.toArray(nvp));
+            }
+            final int status = httpClient.executeMethod(get);
+            final InputStream is = get.getResponseBodyAsStream();
+            final StringBuffer content = new StringBuffer();
+            final String charset = get.getResponseCharSet();
+            final byte [] buffer = new byte[16384];
+            int n = 0;
+            while( (n = is.read(buffer, 0, buffer.length)) > 0) {
+                content.append(new String(buffer, 0, n, charset));
+            }
+            assertEquals("Expected status " + expectedStatusCode + " for " + url + " (content=" + content + ")",
+                    expectedStatusCode,status);
+            final Header h = get.getResponseHeader("Content-Type");
+            if(expectedContentType == null) {
+                if(h!=null) {
+                    fail("Expected null Content-Type, got " + h.getValue());
+                }
+            } else if(CONTENT_TYPE_DONTCARE.equals(expectedContentType)) {
+                // no check
+            } else if(h==null) {
+                fail(
+                        "Expected Content-Type that starts with '" + expectedContentType
+                        +" but got no Content-Type header at " + url
+                );
+            } else {
+                assertTrue(
+                    "Expected Content-Type that starts with '" + expectedContentType
+                    + "' for " + url + ", got '" + h.getValue() + "'",
+                    h.getValue().startsWith(expectedContentType)
+                );
+            }
+            return content.toString();
+
+        } finally {
+            httpClient.getState().setCredentials(authScope, oldCredentials);
+        }
+    }
+
+
+    protected static int counter = 1;
+
+    protected String createTestUser() throws IOException {
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
+
+        String testUserId = "testUser" + (counter++);
+        List<NameValuePair> postParams = new ArrayList<NameValuePair>();
+        postParams.add(new NameValuePair(":name", testUserId));
+        postParams.add(new NameValuePair("pwd", "testPwd"));
+        postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
+        assertPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
+
+        return testUserId;
+    }
+
+    protected String createTestGroup() throws IOException {
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
+
+        String testGroupId = "testGroup" + (counter++);
+        List<NameValuePair> postParams = new ArrayList<NameValuePair>();
+        postParams.add(new NameValuePair(":name", testGroupId));
+
+        //success would be a redirect to the welcome page of the webapp
+        assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
+
+        return testGroupId;
+    }
+}

Modified: sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/NamespaceMappingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/NamespaceMappingTest.java?rev=909504&r1=909503&r2=909504&view=diff
==============================================================================
--- sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/NamespaceMappingTest.java (original)
+++ sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/NamespaceMappingTest.java Fri Feb 12 17:17:00 2010
@@ -17,13 +17,17 @@
 package org.apache.sling.launchpad.webapp.integrationtest;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
-import org.apache.sling.commons.testing.integration.HttpTestBase;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.NameValuePair;
 
 /**
  * Test that Namespace Mappings are working properly.
  */
-public class NamespaceMappingTest extends HttpTestBase {
+public class NamespaceMappingTest extends AbstractAuthenticatedTest {
 
     /**
      * Verify that Sling-Namespaces works.
@@ -34,4 +38,36 @@
                 CONTENT_TYPE_PLAIN);
         assertTrue("Content contains " + expected + " (" + content + ")", content.contains(expected));
     }
+
+    /**
+     * Verify that Sling-Namespaces works with impersonation.
+     */
+    public void testNamespaceFromManifestWithImpersonation() throws IOException {
+        final String expectedUser = "userid=" + testUserId;
+        final String expected = "test1=http://sling.apache.org/test/one";
+        final String content = getContent(HTTP_BASE_URL + "/testing/NamespaceTestServlet/output?sudo=" + testUserId,
+                CONTENT_TYPE_PLAIN);
+        assertTrue("Username is wrong contains " + expectedUser + " (" + content + ")", content.contains(expectedUser));
+        assertTrue("Content contains " + expected + " (" + content + ")", content.contains(expected));
+    }
+
+    String testUserId = null;
+
+    @Override
+    protected void tearDown() throws Exception {
+        if (testUserId != null) {
+            //remove the test user if it exists.
+            String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".delete.html";
+            List<NameValuePair> postParams = new ArrayList<NameValuePair>();
+            assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
+        }
+        super.tearDown();
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        this.testUserId = createTestUser();
+    }
+
 }

Modified: sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java?rev=909504&r1=909503&r2=909504&view=diff
==============================================================================
--- sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java (original)
+++ sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java Fri Feb 12 17:17:00 2010
@@ -16,170 +16,11 @@
  */
 package org.apache.sling.launchpad.webapp.integrationtest.userManager;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.sling.commons.testing.integration.HttpTestBase;
+import org.apache.sling.launchpad.webapp.integrationtest.AbstractAuthenticatedTest;
 
 /**
  * Base class for UserManager tests.
  */
-public abstract class AbstractUserManagerTest extends HttpTestBase {
-	
-    /** Execute a POST request and check status */
-    protected void assertAuthenticatedAdminPostStatus(String url, int expectedStatusCode, List<NameValuePair> postParams, String assertMessage)
-    throws IOException {
-        Credentials defaultcreds = new UsernamePasswordCredentials("admin", "admin");
-        assertAuthenticatedPostStatus(defaultcreds, url, expectedStatusCode, postParams, assertMessage);
-    }
-
-    /** Execute a POST request and check status */
-    protected void assertAuthenticatedPostStatus(Credentials creds, String url, int expectedStatusCode, List<NameValuePair> postParams, String assertMessage)
-    throws IOException {
-        final PostMethod post = new PostMethod(url);
-        post.setFollowRedirects(false);
-        
-        URL baseUrl = new URL(HTTP_BASE_URL);
-        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
-        post.setDoAuthentication(true);
-        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
-        try {
-			httpClient.getState().setCredentials(authScope, creds);
-	        
-	        if(postParams!=null) {
-	            final NameValuePair [] nvp = {};
-	            post.setRequestBody(postParams.toArray(nvp));
-	        }
-	
-	        final int status = httpClient.executeMethod(post);
-	        if(assertMessage == null) {
-	            assertEquals(expectedStatusCode, status);
-	        } else {
-	            assertEquals(assertMessage, expectedStatusCode, status);
-	        }
-        } finally {
-        	httpClient.getState().setCredentials(authScope, oldCredentials);
-        }
-    }
-
-    /** Verify that given URL returns expectedStatusCode
-     * @throws IOException */
-    protected void assertAuthenticatedHttpStatus(Credentials creds, String urlString, int expectedStatusCode, String assertMessage) throws IOException {
-        URL baseUrl = new URL(HTTP_BASE_URL);
-        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
-        GetMethod getMethod = new GetMethod(urlString);
-        getMethod.setDoAuthentication(true);
-        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
-    	try {
-			httpClient.getState().setCredentials(authScope, creds);
-
-			final int status = httpClient.executeMethod(getMethod);
-            if(assertMessage == null) {
-                assertEquals(urlString,expectedStatusCode, status);
-            } else {
-                assertEquals(assertMessage, expectedStatusCode, status);
-            }
-    	} finally {
-        	httpClient.getState().setCredentials(authScope, oldCredentials);
-    	}
-    }
-
-    
-    /** retrieve the contents of given URL and assert its content type
-     * @param expectedContentType use CONTENT_TYPE_DONTCARE if must not be checked 
-     * @throws IOException
-     * @throws HttpException */
-    protected String getAuthenticatedContent(Credentials creds, String url, String expectedContentType, List<NameValuePair> params, int expectedStatusCode) throws IOException {
-        final GetMethod get = new GetMethod(url);
-
-        URL baseUrl = new URL(HTTP_BASE_URL);
-        AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
-        get.setDoAuthentication(true);
-        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
-    	try {
-			httpClient.getState().setCredentials(authScope, creds);
-			
-	        if(params != null) {
-	            final NameValuePair [] nvp = new NameValuePair[0];
-	            get.setQueryString(params.toArray(nvp));
-	        }
-	        final int status = httpClient.executeMethod(get);
-	        final InputStream is = get.getResponseBodyAsStream();
-	        final StringBuffer content = new StringBuffer();
-	        final String charset = get.getResponseCharSet();
-	        final byte [] buffer = new byte[16384];
-	        int n = 0;
-	        while( (n = is.read(buffer, 0, buffer.length)) > 0) {
-	            content.append(new String(buffer, 0, n, charset));
-	        }
-	        assertEquals("Expected status " + expectedStatusCode + " for " + url + " (content=" + content + ")",
-	                expectedStatusCode,status);
-	        final Header h = get.getResponseHeader("Content-Type");
-	        if(expectedContentType == null) {
-	            if(h!=null) {
-	                fail("Expected null Content-Type, got " + h.getValue());
-	            }
-	        } else if(CONTENT_TYPE_DONTCARE.equals(expectedContentType)) {
-	            // no check
-	        } else if(h==null) {
-	            fail(
-	                    "Expected Content-Type that starts with '" + expectedContentType
-	                    +" but got no Content-Type header at " + url
-	            );
-	        } else {
-	            assertTrue(
-	                "Expected Content-Type that starts with '" + expectedContentType
-	                + "' for " + url + ", got '" + h.getValue() + "'",
-	                h.getValue().startsWith(expectedContentType)
-	            );
-	        }
-	        return content.toString();
-			
-    	} finally {
-        	httpClient.getState().setCredentials(authScope, oldCredentials);
-    	}
-    }
-    
-    
-    protected static int counter = 1;
-    
-	protected String createTestUser() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
-
-		String testUserId = "testUser" + (counter++);
-		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":name", testUserId));
-		postParams.add(new NameValuePair("pwd", "testPwd"));
-		postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
-		assertPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
-		
-		return testUserId;
-	}
-    
-	protected String createTestGroup() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
+public abstract class AbstractUserManagerTest extends AbstractAuthenticatedTest {
 
-		String testGroupId = "testGroup" + (counter++);
-		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":name", testGroupId));
-		
-		//success would be a redirect to the welcome page of the webapp
-		assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
-		
-		return testGroupId;
-	}
-	
 }