001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ejb3.test.jsp.unit;
023:
024: import java.net.URL;
025: import java.net.HttpURLConnection;
026: import java.io.IOException;
027: import java.lang.System;
028: import org.apache.commons.httpclient.HttpClient;
029: import org.apache.commons.httpclient.UsernamePasswordCredentials;
030: import org.apache.commons.httpclient.HttpMethodBase;
031: import org.apache.commons.httpclient.Header;
032: import org.apache.commons.httpclient.methods.GetMethod;
033: import org.apache.commons.httpclient.methods.PostMethod;
034: import org.apache.commons.httpclient.methods.HeadMethod;
035: import org.apache.commons.httpclient.methods.OptionsMethod;
036: import org.apache.commons.httpclient.methods.PutMethod;
037: import org.apache.commons.httpclient.methods.DeleteMethod;
038: import org.apache.commons.httpclient.methods.TraceMethod;
039: import org.jboss.logging.Logger;
040:
041: /** Utilities for client http requests
042: *
043: * @author Scott.Stark@jboss.org
044: * @version $Revision: 60233 $
045: */
046: public class HttpUtils {
047: private static Logger log = Logger.getLogger(HttpUtils.class);
048: private static String baseURL = "http://jduke:theduke@localhost:"
049: + Integer.getInteger("web.port", 8080) + "/";
050: private static String baseURLNoAuth = "http://localhost:"
051: + Integer.getInteger("web.port", 8080) + "/";
052:
053: public static final int GET = 1;
054: public static final int POST = 2;
055: public static final int HEAD = 3;
056: public static final int OPTIONS = 4;
057: public static final int PUT = 5;
058: public static final int DELETE = 6;
059: public static final int TRACE = 7;
060:
061: public static String getBaseURL() {
062: return baseURL;
063: }
064:
065: public static String getBaseURL(String username, String password) {
066: String url = "http://" + username + ":" + password + "@"
067: + System.getProperty("jboss.bind.address") + ":"
068: + Integer.getInteger("web.port", 8080) + "/";
069: return url;
070: }
071:
072: public static String getBaseURLNoAuth() {
073: return baseURLNoAuth;
074: }
075:
076: /** Perform a get on the indicated URL and assert an HTTP_OK response code
077: *
078: * @param url
079: * @return The commons HttpClient used to perform the get
080: * @throws Exception on any failure
081: */
082: public static HttpMethodBase accessURL(URL url) throws Exception {
083: return accessURL(url, "JBossTest Servlets",
084: HttpURLConnection.HTTP_OK);
085: }
086:
087: /** Perform a get on the indicated URL and assert that the response code
088: * matches the expectedHttpCode argument.
089: *
090: * @param url
091: * @param expectedHttpCode the http response code expected
092: * @return The commons HttpClient used to perform the get
093: * @throws Exception on any failure
094: */
095: public static HttpMethodBase accessURL(URL url, String realm,
096: int expectedHttpCode) throws Exception {
097: return accessURL(url, realm, expectedHttpCode, null);
098: }
099:
100: public static HttpMethodBase accessURL(URL url, String realm,
101: int expectedHttpCode, int type) throws Exception {
102: return accessURL(url, realm, expectedHttpCode, null, type);
103: }
104:
105: public static HttpMethodBase accessURL(URL url, String realm,
106: int expectedHttpCode, Header[] hdrs) throws Exception {
107: return accessURL(url, realm, expectedHttpCode, hdrs, GET);
108: }
109:
110: public static HttpMethodBase accessURL(URL url, String realm,
111: int expectedHttpCode, Header[] hdrs, int type)
112: throws Exception {
113: HttpClient httpConn = new HttpClient();
114: HttpMethodBase request = createMethod(url, type);
115:
116: int hdrCount = hdrs != null ? hdrs.length : 0;
117: for (int n = 0; n < hdrCount; n++)
118: request.addRequestHeader(hdrs[n]);
119: try {
120: log.debug("Connecting to: " + url);
121: String userInfo = url.getUserInfo();
122:
123: if (userInfo != null) {
124: UsernamePasswordCredentials auth = new UsernamePasswordCredentials(
125: userInfo);
126: httpConn.getState().setCredentials(realm,
127: url.getHost(), auth);
128: }
129: log.debug("RequestURI: " + request.getURI());
130: int responseCode = httpConn.executeMethod(request);
131: String response = request.getStatusText();
132: log.debug("responseCode=" + responseCode + ", response="
133: + response);
134: String content = request.getResponseBodyAsString();
135: log.debug(content);
136: // Validate that we are seeing the requested response code
137: if (responseCode != expectedHttpCode) {
138: throw new IOException("Expected reply code:"
139: + expectedHttpCode + ", actual=" + responseCode);
140: }
141: } catch (IOException e) {
142: throw e;
143: }
144: return request;
145: }
146:
147: public static HttpMethodBase createMethod(URL url, int type) {
148: HttpMethodBase request = null;
149: switch (type) {
150: case GET:
151: request = new GetMethod(url.toString());
152: break;
153: case POST:
154: request = new PostMethod(url.toString());
155: break;
156: case HEAD:
157: request = new HeadMethod(url.toString());
158: break;
159: case OPTIONS:
160: request = new OptionsMethod(url.toString());
161: break;
162: case PUT:
163: request = new PutMethod(url.toString());
164: break;
165: case DELETE:
166: request = new DeleteMethod(url.toString());
167: break;
168: case TRACE:
169: request = new TraceMethod(url.toString());
170: break;
171: }
172: return request;
173: }
174: }
|