Skip to content

Commit

Permalink
Add test for concurrent custom SSLSocketFactory
Browse files Browse the repository at this point in the history
Test made by Kevin Conaway @kevinconaway

Also-by: Kevin Conaway <[email protected]>
Signed-off-by: Adrian Haasler García <[email protected]>
  • Loading branch information
ahaasler committed Sep 15, 2020
1 parent 7dc7d89 commit 6a8e80e
Showing 1 changed file with 63 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,18 @@
package org.glassfish.jersey.tests.e2e.client.connector.ssl;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
Expand Down Expand Up @@ -79,6 +87,61 @@ public HttpURLConnection getConnection(final URL url) throws IOException {
assertTrue(socketFactory.isVisited());
}

/**
* Test for https://github.com/jersey/jersey/issues/3293
*
* @author Kevin Conaway
*/
@Test
public void testConcurrentRequestsWithCustomSSLContext() throws Exception {
final SSLContext sslContext = getSslContext();

final Client client = ClientBuilder.newBuilder()
.sslContext(sslContext)
.register(HttpAuthenticationFeature.basic("user", "password"))
.register(LoggingFeature.class)
.build();

int numThreads = 5;
CyclicBarrier barrier = new CyclicBarrier(numThreads);
ExecutorService service = Executors.newFixedThreadPool(numThreads);
List<Exception> exceptions = new CopyOnWriteArrayList<>();

for (int i = 0; i < numThreads; i++) {
service.submit(() -> {
try {
barrier.await(1, TimeUnit.MINUTES);
for (int call = 0; call < 10; call++) {
final Response response = client.target(Server.BASE_URI).path("/").request().get();
assertEquals(200, response.getStatus());
}
} catch (Exception ex) {
exceptions.add(ex);
}
});
}

service.shutdown();

assertTrue(
service.awaitTermination(1, TimeUnit.MINUTES)
);

assertTrue(
toString(exceptions),
exceptions.isEmpty()
);
}

private String toString(List<Exception> exceptions) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);

exceptions.forEach(e -> e.printStackTrace(printWriter));

return writer.toString();
}

public static class CustomSSLSocketFactory extends SSLSocketFactory {

private boolean visited = false;
Expand Down

0 comments on commit 6a8e80e

Please sign in to comment.