You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/09/06 18:40:43 UTC
svn commit: r1381673 - in /cxf/trunk/systests/transports: pom.xml
src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java
src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java
Author: dkulp
Date: Thu Sep 6 16:40:43 2012
New Revision: 1381673
URL: http://svn.apache.org/viewvc?rev=1381673&view=rev
Log:
Add a test that tests the basic HTTP proxy stuff
Added:
cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java
Modified:
cxf/trunk/systests/transports/pom.xml
cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java
Modified: cxf/trunk/systests/transports/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/pom.xml?rev=1381673&r1=1381672&r2=1381673&view=diff
==============================================================================
--- cxf/trunk/systests/transports/pom.xml (original)
+++ cxf/trunk/systests/transports/pom.xml Thu Sep 6 16:40:43 2012
@@ -286,7 +286,11 @@
<artifactId>commons-httpclient</artifactId>
<scope>test</scope>
</dependency>
-
+ <dependency>
+ <groupId>org.littleshoot</groupId>
+ <artifactId>littleproxy</artifactId>
+ <version>0.4</version>
+ </dependency>
</dependencies>
</project>
Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java?rev=1381673&r1=1381672&r2=1381673&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPConduitTest.java Thu Sep 6 16:40:43 2012
@@ -282,6 +282,16 @@ public class HTTPConduitTest extends Abs
return fac.getTrustManagers();
}
+ //methods that a subclass can override to inject a Proxy into the flow
+ //and assert the proxy was appropriately called
+ public void configureProxy(Client c) {
+ }
+ public void resetProxyCount() {
+ }
+ public void assertProxyRequestCount(int i) {
+ }
+
+
private Greeter getMortimerGreeter() throws MalformedURLException {
URL wsdl = getClass().getResource("resources/greeting.wsdl");
assertNotNull("WSDL is null", wsdl);
@@ -292,6 +302,8 @@ public class HTTPConduitTest extends Abs
Greeter mortimer = service.getPort(mortimerQ, Greeter.class);
assertNotNull("Port is null", mortimer);
updateAddressPort(mortimer, PORT0);
+
+ configureProxy(ClientProxy.getClient(mortimer));
return mortimer;
}
@@ -303,6 +315,7 @@ public class HTTPConduitTest extends Abs
String answer = mortimer.sayHi();
assertTrue("Unexpected answer: " + answer,
"Bonjour from Mortimer".equals(answer));
+ assertProxyRequestCount(1);
}
@Test
@@ -318,6 +331,7 @@ public class HTTPConduitTest extends Abs
} finally {
rootLogger.setLevel(oldLevel);
}
+ assertProxyRequestCount(1);
}
/**
@@ -343,7 +357,8 @@ public class HTTPConduitTest extends Abs
Greeter rethwel = service.getPort(rethwelQ, Greeter.class);
assertNotNull("Port is null", rethwel);
- updateAddressPort(rethwel, PORT5);
+ updateAddressPort(rethwel, PORT4);
+ configureProxy(ClientProxy.getClient(rethwel));
String answer = null;
try {
@@ -352,6 +367,7 @@ public class HTTPConduitTest extends Abs
} catch (Exception e) {
//e.printStackTrace();
}
+ assertProxyRequestCount(1);
}
@@ -393,10 +409,12 @@ public class HTTPConduitTest extends Abs
Greeter rethwel = service.getPort(rethwelQ, Greeter.class);
updateAddressPort(rethwel, PORT4);
assertNotNull("Port is null", rethwel);
+ configureProxy(ClientProxy.getClient(rethwel));
String answer = rethwel.sayHi();
assertTrue("Unexpected answer: " + answer,
"Bonjour from Mortimer".equals(answer));
+ assertProxyRequestCount(2);
}
/**
@@ -426,6 +444,7 @@ public class HTTPConduitTest extends Abs
Greeter hurlon = service.getPort(hurlonQ, Greeter.class);
assertNotNull("Port is null", hurlon);
updateAddressPort(hurlon, PORT6);
+ configureProxy(ClientProxy.getClient(hurlon));
String answer = null;
try {
@@ -436,7 +455,7 @@ public class HTTPConduitTest extends Abs
// read from the StreamReader
//e.printStackTrace();
}
-
+ assertProxyRequestCount(2);
}
/**
* This methods tests a basic https connection to Bethal.
@@ -459,6 +478,7 @@ public class HTTPConduitTest extends Abs
assertNotNull("Service is null", service);
Greeter bethal = service.getPort(bethalQ, Greeter.class);
+
assertNotNull("Port is null", bethal);
updateAddressPort(bethal, PORT2);
verifyBethalClient(bethal);
@@ -486,6 +506,7 @@ public class HTTPConduitTest extends Abs
// we just verify the configurations are loaded successfully
private void verifyBethalClient(Greeter bethal) {
Client client = ClientProxy.getClient(bethal);
+
HTTPConduit http =
(HTTPConduit) client.getConduit();
@@ -504,6 +525,9 @@ public class HTTPConduitTest extends Abs
"Betty", authPolicy.getUserName());
assertEquals("Set the wrong pass word form the configuration",
"password", authPolicy.getPassword());
+
+ configureProxy(ClientProxy.getClient(bethal));
+
String answer = bethal.sayHi();
answer = bethal.sayHi();
answer = bethal.sayHi();
@@ -511,6 +535,10 @@ public class HTTPConduitTest extends Abs
answer = bethal.sayHi();
assertTrue("Unexpected answer: " + answer,
"Bonjour from Bethal".equals(answer));
+
+ //With HTTPS, it will just be a CONNECT to the proxy and all the
+ //data is encrypted. Thus, the proxy cannot distinquish the requests
+ assertProxyRequestCount(0);
}
/**
@@ -552,9 +580,11 @@ public class HTTPConduitTest extends Abs
http.setTlsClientParameters(tlsClientParameters);
http.setAuthorization(authPolicy);
+ configureProxy(client);
String answer = bethal.sayHi();
assertTrue("Unexpected answer: " + answer,
"Bonjour from Bethal".equals(answer));
+ assertProxyRequestCount(0);
}
@@ -585,7 +615,11 @@ public class HTTPConduitTest extends Abs
http.setClient(httpClientPolicy);
http.setTlsClientParameters(tlsClientParameters);
+ configureProxy(client);
poltim.sayHi();
+ //client -> poltim is https and thus not recorded but then redirected to mortimer
+ //client -> mortimer is http and recoreded
+ assertProxyRequestCount(1);
}
class MyHttpsTrustDecider extends MessageTrustDecider {
@@ -681,9 +715,12 @@ public class HTTPConduitTest extends Abs
// Our expected server should be OU=Bethal
http.setTrustDecider(new MyHttpsTrustDecider("Bethal"));
+ configureProxy(client);
String answer = bethal.sayHi();
assertTrue("Unexpected answer: " + answer,
"Bonjour from Bethal".equals(answer));
+ assertProxyRequestCount(0);
+
// Nobody will not equal OU=Bethal
MyHttpsTrustDecider trustDecider =
@@ -697,6 +734,7 @@ public class HTTPConduitTest extends Abs
//assertTrue("Trust Decider was not called",
// 0 > trustDecider.wasCalled());
}
+ assertProxyRequestCount(0);
}
@Test
@@ -743,7 +781,9 @@ public class HTTPConduitTest extends Abs
// We actually get our answer from Bethal at the end of the
// redirects.
+ configureProxy(ClientProxy.getClient(tarpin));
String answer = tarpin.sayHi();
+ assertProxyRequestCount(0);
assertTrue("Trust Decider wasn't called correctly",
3 == trustDecider.wasCalled());
@@ -759,6 +799,7 @@ public class HTTPConduitTest extends Abs
} catch (Exception e) {
//e.printStackTrace();
}
+ assertProxyRequestCount(0);
// Set back to unlimited.
http.getClient().setMaxRetransmits(-1);
@@ -777,7 +818,7 @@ public class HTTPConduitTest extends Abs
assertTrue("Trust Decider wasn't called correctly",
2 == trustDecider.wasCalled());
}
-
+ assertProxyRequestCount(0);
}
public class MyBasicAuthSupplier implements HttpAuthSupplier {
Added: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java?rev=1381673&view=auto
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java (added)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPProxyConduitTest.java Thu Sep 6 16:40:43 2012
@@ -0,0 +1,100 @@
+/**
+ * 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.cxf.systest.http;
+
+import java.util.HashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+
+import org.jboss.netty.handler.codec.http.HttpRequest;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+
+import org.littleshoot.proxy.DefaultHttpProxyServer;
+import org.littleshoot.proxy.HttpFilter;
+import org.littleshoot.proxy.HttpRequestFilter;
+
+
+/**
+ *
+ */
+public class HTTPProxyConduitTest extends HTTPConduitTest {
+ static final int PROXY_PORT = Integer.parseInt(allocatePort(HTTPProxyConduitTest.class));
+ static DefaultHttpProxyServer proxy;
+ static CountingFilter requestFilter = new CountingFilter();
+
+ static class CountingFilter implements HttpRequestFilter {
+ AtomicInteger count = new AtomicInteger();
+ public void filter(HttpRequest httpRequest) {
+ count.incrementAndGet();
+ }
+
+ public void reset() {
+ count.set(0);
+ }
+ public int getCount() {
+ return count.get();
+ }
+ }
+
+ public HTTPProxyConduitTest() {
+ }
+
+
+ @AfterClass
+ public static void stopProxy() {
+ proxy.stop();
+ proxy = null;
+ }
+
+ @BeforeClass
+ public static void startProxy() {
+ proxy = new DefaultHttpProxyServer(PROXY_PORT, requestFilter, new HashMap<String, HttpFilter>());
+ proxy.start();
+ }
+ @Before
+ public void resetCount() {
+ requestFilter.reset();
+ }
+
+ public void configureProxy(Client client) {
+ HTTPConduit cond = (HTTPConduit)client.getConduit();
+ HTTPClientPolicy pol = cond.getClient();
+ if (pol == null) {
+ pol = new HTTPClientPolicy();
+ cond.setClient(pol);
+ }
+ pol.setProxyServer("localhost");
+ pol.setProxyServerPort(PROXY_PORT);
+ }
+
+ public void resetProxyCount() {
+ requestFilter.reset();
+ }
+ public void assertProxyRequestCount(int i) {
+ assertEquals("Unexpected request count", i, requestFilter.getCount());
+ }
+
+}