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;
- }
-
}