Skip to content

Commit 904b222

Browse files
committed
Reduce the online tests with proxy as they fail quite often. Rework the CONNECT way of calculating the authoriry
1 parent 9376eee commit 904b222

File tree

6 files changed

+81
-29
lines changed

6 files changed

+81
-29
lines changed

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
import java.net.InetSocketAddress;
100100
import java.net.MalformedURLException;
101101
import java.net.URI;
102+
import java.net.URISyntaxException;
102103
import java.nio.channels.ClosedChannelException;
103104
import java.nio.channels.FileChannel;
104105
import java.nio.channels.WritableByteChannel;
@@ -465,10 +466,7 @@ private static HttpRequest construct(AsyncHttpClientConfig config,
465466

466467
HttpRequest nettyRequest;
467468
if (m.equals(HttpMethod.CONNECT)) {
468-
uri = URI.create(new StringBuilder(uri.getHost())
469-
.append(":")
470-
.append(AsyncHttpProviderUtils.getPort(uri)).toString());
471-
nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_0, m, uri.toString());
469+
nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_0, m, AsyncHttpProviderUtils.getAuthority(uri));
472470
} else if (config.getProxyServer() != null || request.getProxyServer() != null) {
473471
nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, m, uri.toString());
474472
} else {

src/main/java/com/ning/http/util/AsyncHttpProviderUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,17 @@ public final static String getBaseUrl(URI uri) {
145145
return url;
146146
}
147147

148+
public final static String getAuthority(URI uri) {
149+
String url = uri.getAuthority();
150+
int port = uri.getPort();
151+
if (port == -1) {
152+
port = getPort(uri);
153+
url += ":" + port;
154+
}
155+
return url;
156+
}
157+
158+
148159
public final static URI getRedirectUri(URI uri, String location) {
149160
URI newUri = uri.resolve(location);
150161

src/test/java/com/ning/http/client/async/AbstractBasicTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@ public void handle(String pathInContext,
6666
httpResponse.setContentType("text/html; charset=ISO-8859-1");
6767
} else {
6868
httpResponse.setContentType("text/html; charset=utf-8");
69-
7069
}
70+
71+
if (request.getMethod().equalsIgnoreCase("OPTIONS")) {
72+
httpResponse.addHeader("Allow","GET,HEAD,POST,OPTIONS,TRACE");
73+
};
74+
7175
Enumeration<?> e = httpRequest.getHeaderNames();
7276
String param;
7377
while (e.hasMoreElements()) {
@@ -160,6 +164,10 @@ protected String getTargetUrl() {
160164
return String.format("http://127.0.0.1:%d/foo/test", port1);
161165
}
162166

167+
protected String getTargetUrl2() {
168+
return String.format("https://127.0.0.1:%d/foo/test", port2);
169+
}
170+
163171
public AbstractHandler configureHandler() throws Exception {
164172
return new EchoHandler();
165173
}

src/test/java/com/ning/http/client/async/AsyncProvidersBasicTest.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,28 +1461,17 @@ public void asyncUrlWithoutPathTest() throws Throwable {
14611461
client.close();
14621462
}
14631463

1464-
@Test(groups = {"online", "default_provider", "async"})
1464+
@Test(groups = {"default_provider", "async"})
14651465
public void optionsTest() throws Throwable {
14661466
final AsyncHttpClient client = getAsyncHttpClient(new Builder().build());
1467-
Response r = client.prepareOptions("http://www.apache.org/").execute().get();
1467+
Response r = client.prepareOptions(getTargetUrl()).execute().get();
14681468

14691469
assertEquals(r.getStatusCode(), 200);
14701470
assertEquals(r.getHeader("Allow"), "GET,HEAD,POST,OPTIONS,TRACE");
14711471

14721472
client.close();
14731473
}
14741474

1475-
@Test(groups = {"online", "default_provider", "async"})
1476-
public void optionsNegativeTest() throws Throwable {
1477-
final AsyncHttpClient client = getAsyncHttpClient(new Builder().build());
1478-
Response r = client.prepareOptions("http://www.google.com/").execute().get();
1479-
1480-
assertEquals(r.getStatusCode(), 405);
1481-
assertEquals(r.getHeader("Allow"), null);
1482-
1483-
client.close();
1484-
}
1485-
14861475
@Test(groups = {"online", "default_provider"})
14871476
public void testAwsS3() throws Exception {
14881477
final AsyncHttpClient c = getAsyncHttpClient(new Builder().build());

src/test/java/com/ning/http/client/async/ConnectionPoolTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ public void multipleMaxConnectionOpenTestWithQuery() throws Throwable {
286286
c.close();
287287
}
288288

289-
@Test(groups = {"online", "default_provider", "async"})
289+
@Test(groups = {"default_provider", "async"})
290290
public void asyncDoGetMaxConnectionsTest() throws Throwable {
291291
AsyncHttpClient client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().setMaximumConnectionsTotal(2).build());
292292

@@ -310,18 +310,19 @@ public void onThrowable(Throwable t) {
310310
}
311311
}
312312
};
313-
314-
client.prepareGet("http://www.oracle.com/index.html").execute(handler).get();
315-
client.prepareGet("http://www.apache.org/").execute(handler).get();
313+
314+
client.prepareGet(getTargetUrl()).execute(handler);
315+
client.prepareGet(getTargetUrl()).execute(handler);
316316

317317
try {
318-
client.prepareGet("http://www.ning.com/").execute(handler).get();
318+
client.prepareGet(getTargetUrl()).execute(handler).get();
319319
Assert.fail();
320320
} catch (IOException ex) {
321321
String s = ex.getMessage();
322322
assertEquals(s, "Too many connections 2");
323323
}
324324

325+
325326
if (!l.await(TIMEOUT, TimeUnit.SECONDS)) {
326327
Assert.fail("Timed out");
327328
}

src/test/java/com/ning/http/client/async/ProxyyTunnellingTest.java

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,18 @@
1919
import com.ning.http.client.RequestBuilder;
2020
import com.ning.http.client.Response;
2121
import com.ning.http.client.SimpleAsyncHttpClient;
22+
import org.eclipse.jetty.server.Connector;
23+
import org.eclipse.jetty.server.Server;
2224
import org.eclipse.jetty.server.handler.AbstractHandler;
2325
import org.eclipse.jetty.server.handler.ProxyHandler;
26+
import org.eclipse.jetty.server.nio.SelectChannelConnector;
27+
import org.eclipse.jetty.server.ssl.SslSocketConnector;
28+
import org.testng.annotations.BeforeClass;
2429
import org.testng.annotations.Test;
2530

31+
import java.io.File;
2632
import java.io.IOException;
33+
import java.net.URL;
2734
import java.util.concurrent.ExecutionException;
2835
import java.util.concurrent.Future;
2936
import java.util.concurrent.TimeoutException;
@@ -36,11 +43,49 @@
3643
*/
3744
public abstract class ProxyyTunnellingTest extends AbstractBasicTest {
3845

46+
private Server server2;
47+
3948
public AbstractHandler configureHandler() throws Exception {
4049
ProxyHandler proxy = new ProxyHandler();
4150
return proxy;
4251
}
4352

53+
@BeforeClass(alwaysRun = true)
54+
public void setUpGlobal() throws Exception {
55+
server = new Server();
56+
server2 = new Server();
57+
58+
port1 = findFreePort();
59+
port2 = findFreePort();
60+
61+
Connector listener = new SelectChannelConnector();
62+
63+
listener.setHost("127.0.0.1");
64+
listener.setPort(port1);
65+
66+
server.addConnector(listener);
67+
68+
SslSocketConnector connector = new SslSocketConnector();
69+
connector.setHost("127.0.0.1");
70+
connector.setPort(port2);
71+
72+
ClassLoader cl = getClass().getClassLoader();
73+
URL keystoreUrl = cl.getResource("ssltest-keystore.jks");
74+
String keyStoreFile = new File(keystoreUrl.toURI()).getAbsolutePath();
75+
connector.setKeystore(keyStoreFile);
76+
connector.setKeyPassword("changeit");
77+
connector.setKeystoreType("JKS");
78+
79+
server2.addConnector(connector);
80+
81+
server.setHandler(configureHandler());
82+
server.start();
83+
84+
server2.setHandler(new EchoHandler());
85+
server2.start();
86+
log.info("Local HTTP server started successfully");
87+
}
88+
4489
@Test(groups = {"online", "default_provider"})
4590
public void testRequestProxy() throws IOException, InterruptedException, ExecutionException, TimeoutException {
4691
AsyncHttpClientConfig.Builder b = new AsyncHttpClientConfig.Builder();
@@ -51,7 +96,7 @@ public void testRequestProxy() throws IOException, InterruptedException, Executi
5196
AsyncHttpClientConfig config = b.build();
5297
AsyncHttpClient asyncHttpClient = new AsyncHttpClient(config);
5398

54-
RequestBuilder rb = new RequestBuilder("GET").setProxyServer(ps).setUrl("https://twitpic.com/");
99+
RequestBuilder rb = new RequestBuilder("GET").setProxyServer(ps).setUrl(getTargetUrl2());
55100
Future<Response> responseFuture = asyncHttpClient.executeRequest(rb.build(), new AsyncCompletionHandlerBase() {
56101

57102
public void onThrowable(Throwable t) {
@@ -66,7 +111,7 @@ public Response onCompleted(Response response) throws Exception {
66111
});
67112
Response r = responseFuture.get();
68113
assertEquals(r.getStatusCode(), 200);
69-
assertEquals(r.getHeader("server"), "nginx");
114+
assertEquals(r.getHeader("server"), "Jetty(7.1.4.v20100610)");
70115

71116
asyncHttpClient.close();
72117
}
@@ -82,7 +127,7 @@ public void testConfigProxy() throws IOException, InterruptedException, Executio
82127
AsyncHttpClientConfig config = b.build();
83128
AsyncHttpClient asyncHttpClient = new AsyncHttpClient(config);
84129

85-
RequestBuilder rb = new RequestBuilder("GET").setUrl("https://twitpic.com/");
130+
RequestBuilder rb = new RequestBuilder("GET").setUrl(getTargetUrl2());
86131
Future<Response> responseFuture = asyncHttpClient.executeRequest(rb.build(), new AsyncCompletionHandlerBase() {
87132

88133
public void onThrowable(Throwable t) {
@@ -97,7 +142,7 @@ public Response onCompleted(Response response) throws Exception {
97142
});
98143
Response r = responseFuture.get();
99144
assertEquals(r.getStatusCode(), 200);
100-
assertEquals(r.getHeader("server"), "nginx");
145+
assertEquals(r.getHeader("server"), "Jetty(7.1.4.v20100610)");
101146

102147
asyncHttpClient.close();
103148
}
@@ -110,14 +155,14 @@ public void testSimpleAHCConfigProxy() throws IOException, InterruptedException,
110155
.setProxyHost("127.0.0.1")
111156
.setProxyPort(port1)
112157
.setFollowRedirects(true)
113-
.setUrl("https://twitpic.com/")
158+
.setUrl(getTargetUrl2())
114159
.setHeader("Content-Type", "text/html").build();
115160

116161
StringBuffer s = new StringBuffer();
117162
Response r = client.get().get();
118163

119164
assertEquals(r.getStatusCode(), 200);
120-
assertEquals(r.getHeader("server"), "nginx");
165+
assertEquals(r.getHeader("server"), "Jetty(7.1.4.v20100610)");
121166

122167
client.close();
123168
}

0 commit comments

Comments
 (0)