001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.transport.http;
019:
020: import java.net.HttpURLConnection;
021: import java.util.ArrayList;
022: import java.util.HashMap;
023: import java.util.List;
024: import java.util.Map;
025:
026: import javax.net.ssl.HttpsURLConnection;
027:
028: import org.apache.cxf.Bus;
029: import org.apache.cxf.bus.CXFBusImpl;
030: import org.apache.cxf.configuration.jsse.TLSClientParameters;
031: import org.apache.cxf.message.Message;
032: import org.apache.cxf.message.MessageImpl;
033: import org.apache.cxf.service.model.EndpointInfo;
034: import org.junit.After;
035: import org.junit.Assert;
036: import org.junit.Before;
037: import org.junit.Test;
038:
039: /**
040: * This class "tests" the HTTPConduit that uses java.net.HttpURLConnection
041: * and java.net.HttpsURLConnection for its implementation. Should the
042: * implementation of HTTPConduit change (i.e. no longer use the URLConnections)
043: * this test will break.
044: */
045: public class HTTPConduitURLConnectionTest extends Assert {
046:
047: @Before
048: public void setUp() throws Exception {
049: }
050:
051: @After
052: public void tearDown() {
053: }
054:
055: /**
056: * Generates a new message.
057: */
058: private Message getNewMessage() {
059: Message message = new MessageImpl();
060: Map<String, List<String>> headers = new HashMap<String, List<String>>();
061: List<String> contentTypes = new ArrayList<String>();
062: contentTypes.add("text/xml");
063: contentTypes.add("charset=utf8");
064: headers.put("content-type", contentTypes);
065: message.put(Message.PROTOCOL_HEADERS, headers);
066: return message;
067: }
068:
069: /**
070: * This test verifies that the "prepare" call places an HttpURLConnection on
071: * the Message and that its URL matches the endpoint.
072: */
073: @Test
074: public void testConnectionURL() throws Exception {
075: Bus bus = new CXFBusImpl();
076: EndpointInfo ei = new EndpointInfo();
077: ei.setAddress("http://nowhere.com/bar/foo");
078: HTTPConduit conduit = new HTTPConduit(bus, ei, null);
079: conduit.finalizeConfig();
080:
081: Message message = getNewMessage();
082:
083: conduit.prepare(message);
084:
085: HttpURLConnection con = (HttpURLConnection) message
086: .get("http.connection");
087: assertEquals("Unexpected URL address", con.getURL().toString(),
088: ei.getAddress());
089: }
090:
091: /**
092: * This test verifies that URL used is overridden by having the
093: * ENDPOINT_ADDRESS set on the Message.
094: */
095: @Test
096: public void testConnectionURLOverride() throws Exception {
097: Bus bus = new CXFBusImpl();
098: EndpointInfo ei = new EndpointInfo();
099: ei.setAddress("http://nowhere.null/bar/foo");
100: HTTPConduit conduit = new HTTPConduit(bus, ei, null);
101: conduit.finalizeConfig();
102:
103: Message message = getNewMessage();
104: message.put(Message.ENDPOINT_ADDRESS,
105: "http://somewhere.different/");
106:
107: // Test call
108: conduit.prepare(message);
109:
110: HttpURLConnection con = (HttpURLConnection) message
111: .get("http.connection");
112: assertEquals("Unexpected URL address", con.getURL().toString(),
113: "http://somewhere.different/");
114: }
115:
116: /**
117: * This verifys that the underlying connection is an HttpsURLConnection.
118: */
119: @Test
120: public void testTLSServerParameters() throws Exception {
121: Bus bus = new CXFBusImpl();
122: EndpointInfo ei = new EndpointInfo();
123: ei.setAddress("https://secure.nowhere.null/" + "bar/foo");
124: HTTPConduit conduit = new HTTPConduit(bus, ei, null);
125: conduit.finalizeConfig();
126:
127: Message message = getNewMessage();
128: // We need an SSL policy, or we can't use "https".
129: conduit.setTlsClientParameters(new TLSClientParameters());
130:
131: // Test call
132: conduit.prepare(message);
133:
134: assertTrue(
135: "TLS Client Parameters should generate an HttpsURLConnection",
136: HttpsURLConnection.class.isInstance(message
137: .get("http.connection")));
138: }
139:
140: }
|