Skip to content

Commit

Permalink
[java] Improving performance of tests for http clients by reusing the…
Browse files Browse the repository at this point in the history
… same test server, they run in ~1 s instead of ~40 s now
  • Loading branch information
barancev committed Dec 7, 2020
1 parent 1fa1428 commit ebee17a
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ java_test_suite(
"//java/client/src/org/openqa/selenium/remote/http",
"//java/client/src/org/openqa/selenium/remote/http/netty",
"//java/client/test/org/openqa/selenium/remote/internal:test-lib",
"//java/client/test/org/openqa/selenium/testing:annotations",
artifact("junit:junit"),
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@

package org.openqa.selenium.remote.http.netty;

import org.junit.experimental.categories.Category;
import org.openqa.selenium.remote.http.HttpClient;
import org.openqa.selenium.remote.internal.HttpClientTestBase;
import org.openqa.selenium.testing.UnitTests;

@Category(UnitTests.class)
public class NettyClientTest extends HttpClientTestBase {
@Override
protected HttpClient.Factory createFactory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ java_test_suite(
"//java/client/src/org/openqa/selenium/remote/http",
"//java/client/src/org/openqa/selenium/remote/http/reactor",
"//java/client/test/org/openqa/selenium/remote/internal:test-lib",
"//java/client/test/org/openqa/selenium/testing:annotations",
"//java/client/test/org/openqa/selenium/testing:test-base",
artifact("junit:junit"),
artifact("org.assertj:assertj-core"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@

package org.openqa.selenium.remote.http.reactor;

import org.junit.experimental.categories.Category;
import org.openqa.selenium.remote.http.HttpClient;
import org.openqa.selenium.remote.internal.HttpClientTestBase;
import org.openqa.selenium.testing.UnitTests;

@Category(UnitTests.class)
public class ReactorClientTest extends HttpClientTestBase {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.BuildInfo;
import org.openqa.selenium.Platform;
Expand Down Expand Up @@ -55,6 +58,20 @@ abstract public class HttpClientTestBase {

protected abstract HttpClient.Factory createFactory();

static HttpHandler delegate;
static AppServer server;

@BeforeClass
public static void setUp() {
server = new NettyAppServer(req -> delegate.execute(req));
server.start();
}

@AfterClass
public static void tearDown() {
server.stop();
}

@Test
public void responseShouldCaptureASingleHeader() {
HashMultimap<String, String> headers = HashMultimap.create();
Expand Down Expand Up @@ -137,25 +154,19 @@ public void canAddMoreThanOneQueryParameter() {

@Test
public void shouldAllowUrlsWithSchemesToBeUsed() throws Exception {
AppServer server = new NettyAppServer(
req -> new HttpResponse().setContent(Contents.utf8String("Hello, World!")));
server.start();
delegate = req -> new HttpResponse().setContent(Contents.utf8String("Hello, World!"));

try {
// This is a terrible choice of URL
HttpClient client = createFactory().createClient(new URL("http://example.com"));
// This is a terrible choice of URL
HttpClient client = createFactory().createClient(new URL("http://example.com"));

URI uri = URI.create(server.whereIs("/"));
HttpRequest request = new HttpRequest(
GET,
String.format("http://%s:%s/hello", uri.getHost(), uri.getPort()));
URI uri = URI.create(server.whereIs("/"));
HttpRequest request = new HttpRequest(
GET,
String.format("http://%s:%s/hello", uri.getHost(), uri.getPort()));

HttpResponse response = client.execute(request);
HttpResponse response = client.execute(request);

assertThat(string(response)).isEqualTo("Hello, World!");
} finally {
server.stop();
}
assertThat(string(response)).isEqualTo("Hello, World!");
}

@Test
Expand Down Expand Up @@ -213,26 +224,14 @@ private HttpResponse getQueryParameterResponse(HttpRequest request) {
}

private HttpResponse executeWithinServer(HttpRequest request, HttpHandler handler) {
AppServer server = new NettyAppServer(handler);
server.start();

try {
HttpClient client = createFactory().createClient(fromUri(URI.create(server.whereIs("/"))));
return client.execute(request);
} finally {
server.stop();
}
delegate = handler;
HttpClient client = createFactory().createClient(fromUri(URI.create(server.whereIs("/"))));
return client.execute(request);
}

private HttpResponse executeWithinServer(HttpRequest request, HttpHandler handler, ClientConfig config) {
AppServer server = new NettyAppServer(handler);
server.start();

try {
HttpClient client = createFactory().createClient(config.baseUri(URI.create(server.whereIs("/"))));
return client.execute(request);
} finally {
server.stop();
}
delegate = handler;
HttpClient client = createFactory().createClient(config.baseUri(URI.create(server.whereIs("/"))));
return client.execute(request);
}
}

0 comments on commit ebee17a

Please sign in to comment.