Testing: adjust WolfSSLEngineTest to properly close sockets and close ExecutorService

pull/267/head
Chris Conlon 2025-05-13 16:46:30 -06:00
parent ca24a84dca
commit 12f7654b5c
1 changed files with 95 additions and 40 deletions

View File

@ -1232,50 +1232,74 @@ public class WolfSSLEngineTest {
/* Start up simple TLS test server */
CountDownLatch serverOpenLatch = new CountDownLatch(1);
InternalMultiThreadedSSLSocketServer server =
new InternalMultiThreadedSSLSocketServer(svrPort, serverOpenLatch,
numThreads);
server.start();
InternalMultiThreadedSSLSocketServer server = null;
/* Wait for server thread to start up before connecting clients */
serverOpenLatch.await();
try {
server = new InternalMultiThreadedSSLSocketServer(svrPort, serverOpenLatch,
numThreads);
server.start();
/* Start up client threads */
for (int i = 0; i < numThreads; i++) {
service.submit(new Runnable() {
@Override public void run() {
SSLEngineClient client =
new SSLEngineClient(localCtx, "localhost", svrPort);
try {
client.connect();
} catch (Exception e) {
e.printStackTrace();
failures.incrementAndGet(0);
/* Wait for server thread to start up before connecting clients */
serverOpenLatch.await();
/* Start up client threads */
for (int i = 0; i < numThreads; i++) {
service.submit(new Runnable() {
@Override public void run() {
SSLEngineClient client =
new SSLEngineClient(localCtx, "localhost", svrPort);
try {
client.connect();
} catch (Exception e) {
e.printStackTrace();
failures.incrementAndGet(0);
}
success.incrementAndGet(0);
latch.countDown();
}
success.incrementAndGet(0);
});
}
latch.countDown();
}
});
}
/* Wait for all client threads to finish, else time out */
returnWithoutTimeout = latch.await(10, TimeUnit.SECONDS);
/* Wait for all client threads to finish, else time out */
returnWithoutTimeout = latch.await(10, TimeUnit.SECONDS);
server.join(1000);
/* check failure count and success count against thread count */
if (failures.get(0) == 0 && success.get(0) == numThreads) {
pass("\t\t... passed");
} else {
if (returnWithoutTimeout == true) {
error("\t\t... failed");
fail("SSLEngine threading error: " +
failures.get(0) + " failures, " +
success.get(0) + " success, " +
numThreads + " num threads total");
/* check failure count and success count against thread count */
if (failures.get(0) == 0 && success.get(0) == numThreads) {
pass("\t\t... passed");
} else {
error("\t\t... failed");
fail("SSLEngine threading error, threads timed out");
if (returnWithoutTimeout == true) {
error("\t\t... failed");
fail("SSLEngine threading error: " +
failures.get(0) + " failures, " +
success.get(0) + " success, " +
numThreads + " num threads total");
} else {
error("\t\t... failed");
fail("SSLEngine threading error, threads timed out");
}
}
} finally {
/* Ensure proper cleanup in all cases */
/* Close server socket to ensure it's released */
if (server != null) {
server.closeSocket();
try {
server.join(1000);
} catch (InterruptedException e) {
/* Ignore */
}
}
/* Shutdown executor service and wait for it to terminate */
service.shutdown();
try {
if (!service.awaitTermination(5, TimeUnit.SECONDS)) {
service.shutdownNow();
}
} catch (InterruptedException e) {
service.shutdownNow();
}
}
}
@ -1548,6 +1572,7 @@ public class WolfSSLEngineTest {
private int serverPort;
private CountDownLatch serverOpenLatch = null;
private int clientConnections = 1;
private SSLServerSocket ss = null;
public InternalMultiThreadedSSLSocketServer(
int port, CountDownLatch openLatch, int clientConnections) {
@ -1556,11 +1581,24 @@ public class WolfSSLEngineTest {
this.clientConnections = clientConnections;
}
/**
* Explicitly closes the server socket if still open
*/
public void closeSocket() {
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
try {
SSLContext ctx = tf.createSSLContext("TLS", engineProvider);
SSLServerSocket ss = (SSLServerSocket)ctx
ss = (SSLServerSocket)ctx
.getServerSocketFactory().createServerSocket(serverPort);
while (clientConnections > 0) {
@ -1573,6 +1611,15 @@ public class WolfSSLEngineTest {
} catch (Exception e) {
e.printStackTrace();
} finally {
/* Ensure server socket is closed */
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@ -1592,9 +1639,17 @@ public class WolfSSLEngineTest {
sock.startHandshake();
sock.getInputStream().read(response);
sock.getOutputStream().write(msg.getBytes());
sock.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
/* Ensure socket is closed */
try {
if (sock != null && !sock.isClosed()) {
sock.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}