From 3c94939d3ddb627167825a551fe516360e324bb3 Mon Sep 17 00:00:00 2001 From: Chris Conlon Date: Wed, 24 Apr 2024 12:18:46 -0600 Subject: [PATCH] JNI: refactor WolfSSLSessionTest to use individual Junit Test annotation on methods, better cleanup --- .../com/wolfssl/test/WolfSSLSessionTest.java | 528 ++++++++++++------ 1 file changed, 355 insertions(+), 173 deletions(-) diff --git a/src/test/com/wolfssl/test/WolfSSLSessionTest.java b/src/test/com/wolfssl/test/WolfSSLSessionTest.java index bd79818..09dc6f0 100644 --- a/src/test/com/wolfssl/test/WolfSSLSessionTest.java +++ b/src/test/com/wolfssl/test/WolfSSLSessionTest.java @@ -44,78 +44,72 @@ import com.wolfssl.WolfSSLSession; public class WolfSSLSessionTest { - public final static int TEST_FAIL = -1; - public final static int TEST_SUCCESS = 0; + private final static int TEST_FAIL = -1; + private final static int TEST_SUCCESS = 0; - public static String cliCert = "./examples/certs/client-cert.pem"; - public static String cliKey = "./examples/certs/client-key.pem"; - public static String caCert = "./examples/certs/ca-cert.pem"; - public static String bogusFile = "/dev/null"; + private static String cliCert = "./examples/certs/client-cert.pem"; + private static String cliKey = "./examples/certs/client-key.pem"; + private static String caCert = "./examples/certs/ca-cert.pem"; + private static String bogusFile = "/dev/null"; - public final static String exampleHost = "www.example.com"; - public final static int examplePort = 443; + private final static String exampleHost = "www.example.com"; + private final static int examplePort = 443; - WolfSSLContext ctx; - WolfSSLSession ssl; + private static WolfSSLContext ctx = null; @BeforeClass - public static void loadLibrary() { + public static void loadLibrary() + throws WolfSSLException{ + + System.out.println("WolfSSLSession Class"); + try { WolfSSL.loadLibrary(); } catch (UnsatisfiedLinkError ule) { fail("failed to load native JNI library"); } - } - - @Test - public void testWolfSSLSession() throws WolfSSLException { + /* Create one WolfSSLContext */ ctx = new WolfSSLContext(WolfSSL.SSLv23_ClientMethod()); - System.out.println("WolfSSLSession Class"); - + /* Set cert/key paths */ cliCert = WolfSSLTestCommon.getPath(cliCert); cliKey = WolfSSLTestCommon.getPath(cliKey); caCert = WolfSSLTestCommon.getPath(caCert); - - test_WolfSSLSession_new(); - test_WolfSSLSession_useCertificateFile(); - test_WolfSSLSession_usePrivateKeyFile(); - test_WolfSSLSession_useCertificateChainFile(); - test_WolfSSLSession_setPskClientCb(); - test_WolfSSLSession_setPskServerCb(); - test_WolfSSLSession_usePskIdentityHint(); - test_WolfSSLSession_getPskIdentityHint(); - test_WolfSSLSession_getPskIdentity(); - test_WolfSSLSession_useSessionTicket(); - test_WolfSSLSession_timeout(); - test_WolfSSLSession_status(); - test_WolfSSLSession_useSNI(); - test_WolfSSLSession_useALPN(); - test_WolfSSLSession_freeSSL(); - test_WolfSSLSession_UseAfterFree(); - test_WolfSSLSession_getSessionID(); - test_WolfSSLSession_useSecureRenegotiation(); - test_WolfSSLSession_setTls13SecretCb(); } - public void test_WolfSSLSession_new() { + @Test + public void test_WolfSSLSession_new() + throws WolfSSLJNIException { + + WolfSSLSession sess = null; + + System.out.print("\tWolfSSLSession()"); try { - System.out.print("\tWolfSSLSession()"); - ssl = new WolfSSLSession(ctx); + sess = new WolfSSLSession(ctx); + } catch (WolfSSLException we) { System.out.println("\t... failed"); fail("failed to create WolfSSLSession object"); + + } finally { + if (sess != null) { + sess.freeSSL(); + } } System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_useCertificateFile() { + @Test + public void test_WolfSSLSession_useCertificateFile() + throws WolfSSLJNIException, WolfSSLException { System.out.print("\tuseCertificateFile()"); + WolfSSLSession ssl = new WolfSSLSession(ctx); + test_ucf("useCertificateFile", null, null, 9999, WolfSSL.SSL_FAILURE, "useCertificateFile(null, null, 9999)"); @@ -132,13 +126,21 @@ public class WolfSSLSessionTest { WolfSSL.SSL_SUCCESS, "useCertificateFile(ssl, cliCert, SSL_FILETYPE_PEM)"); + if (ssl != null) { + ssl.freeSSL(); + } + System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_useCertificateChainFile() { + @Test + public void test_WolfSSLSession_useCertificateChainFile() + throws WolfSSLJNIException, WolfSSLException { System.out.print("\tuseCertificateChainFile()"); + WolfSSLSession ssl = new WolfSSLSession(ctx); + test_ucf("useCertificateChainFile", null, null, 0, WolfSSL.SSL_FAILURE, "useCertificateChainFile(null, null)"); @@ -151,12 +153,16 @@ public class WolfSSLSessionTest { WolfSSL.SSL_SUCCESS, "useCertificateChainFile(ssl, cliCert)"); + if (ssl != null) { + ssl.freeSSL(); + } + System.out.println("\t... passed"); } /* helper for testing WolfSSLSession.useCertificateFile() */ - public void test_ucf(String func, WolfSSLSession ssl, String filePath, - int type, int cond, String name) { + private void test_ucf(String func, WolfSSLSession ssl, String filePath, + int type, int cond, String name) { int result = WolfSSL.SSL_FAILURE; @@ -191,10 +197,14 @@ public class WolfSSLSessionTest { return; } - public void test_WolfSSLSession_usePrivateKeyFile() { + @Test + public void test_WolfSSLSession_usePrivateKeyFile() + throws WolfSSLJNIException, WolfSSLException { System.out.print("\tusePrivateKeyFile()"); + WolfSSLSession ssl = new WolfSSLSession(ctx); + test_upkf(null, null, 9999, WolfSSL.SSL_FAILURE, "usePrivateKeyFile(null, null, 9999)"); @@ -208,12 +218,16 @@ public class WolfSSLSessionTest { test_upkf(ssl, cliKey, WolfSSL.SSL_FILETYPE_PEM, WolfSSL.SSL_SUCCESS, "usePrivateKeyFile(ssl, cliKey, SSL_FILETYPE_PEM)"); + if (ssl != null) { + ssl.freeSSL(); + } + System.out.println("\t\t... passed"); } /* helper for testing WolfSSLSession.usePrivateKeyFile() */ - public void test_upkf(WolfSSLSession ssl, String filePath, int type, - int cond, String name) { + private void test_upkf(WolfSSLSession ssl, String filePath, int type, + int cond, String name) { int result; @@ -259,19 +273,38 @@ public class WolfSSLSessionTest { } } - public void test_WolfSSLSession_setPskClientCb() { + @Test + public void test_WolfSSLSession_setPskClientCb() + throws WolfSSLJNIException { + + WolfSSLSession ssl = null; + System.out.print("\tsetPskClientCb()"); + try { TestPskClientCb pskClientCb = new TestPskClientCb(); + ssl = new WolfSSLSession(ctx); ssl.setPskClientCb(pskClientCb); + } catch (Exception e) { - if (!e.getMessage().equals("wolfSSL not compiled with PSK " + - "support")) { + if (e.getMessage().equals("wolfSSL not compiled with PSK " + + "support")) { + /* Not compiled in, skip */ + System.out.println("\t\t... skipped"); + return; + } + else { System.out.println("\t\t... failed"); fail("Failed setPskClientCb test"); e.printStackTrace(); } + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t... passed"); } @@ -295,122 +328,227 @@ public class WolfSSLSessionTest { } } - public void test_WolfSSLSession_setPskServerCb() { + @Test + public void test_WolfSSLSession_setPskServerCb() + throws WolfSSLJNIException { + + WolfSSLSession ssl = null; + System.out.print("\tsetPskServerCb()"); + try { TestPskServerCb pskServerCb = new TestPskServerCb(); + ssl = new WolfSSLSession(ctx); ssl.setPskServerCb(pskServerCb); + } catch (Exception e) { - if (!e.getMessage().equals("wolfSSL not compiled with PSK " + - "support")) { + if (e.getMessage().equals("wolfSSL not compiled with PSK " + + "support")) { + /* Not compiled in, skip */ + System.out.println("\t\t... skipped"); + return; + } + else { System.out.println("\t\t... failed"); fail("Failed setPskServerCb test"); e.printStackTrace(); } + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_usePskIdentityHint() { - System.out.print("\tusePskIdentityHint()"); + @Test + public void test_WolfSSLSession_useGetPskIdentityHint() + throws WolfSSLJNIException, WolfSSLException { + + int ret = 0; + String hint = null; + WolfSSLSession ssl = null; + + System.out.print("\tuse/getPskIdentityHint()"); + + ssl = new WolfSSLSession(ctx); + try { - int ret = ssl.usePskIdentityHint("wolfssl hint"); + /* Set PSK identity hint */ + ret = ssl.usePskIdentityHint("wolfssl hint"); if (ret != WolfSSL.SSL_SUCCESS && ret != WolfSSL.NOT_COMPILED_IN) { - System.out.println("\t\t... failed"); + System.out.println("\t... failed"); fail("usePskIdentityHint failed"); } - } catch (IllegalStateException e) { - System.out.println("\t\t... failed"); - fail("Failed usePskIdentityHint test"); - e.printStackTrace(); - } - System.out.println("\t\t... passed"); - } - public void test_WolfSSLSession_getPskIdentityHint() { - System.out.print("\tgetPskIdentityHint()"); - try { - String hint = ssl.getPskIdentityHint(); + /* Get PSK identity hint */ + hint = ssl.getPskIdentityHint(); if (hint != null && !hint.equals("wolfssl hint")) { - System.out.println("\t\t... failed"); + System.out.println("\t... failed"); fail("getPskIdentityHint failed"); } + } catch (IllegalStateException e) { - System.out.println("\t\t... failed"); - fail("Failed getPskIdentityHint test"); + System.out.println("\t... failed"); e.printStackTrace(); + fail("Failed use/getPskIdentityHint test"); + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } - System.out.println("\t\t... passed"); + + System.out.println("\t... passed"); } - public void test_WolfSSLSession_useSessionTicket() { + @Test + public void test_WolfSSLSession_useSessionTicket() + throws WolfSSLJNIException, WolfSSLException { + + int ret = 0; + WolfSSLSession ssl = null; + System.out.print("\tuseSessionTicket()"); + try { - int ret = ssl.useSessionTicket(); + ssl = new WolfSSLSession(ctx); + + ret = ssl.useSessionTicket(); if (ret != WolfSSL.SSL_SUCCESS && ret != WolfSSL.NOT_COMPILED_IN) { System.out.println("\t\t... failed"); fail("useSessionTicket failed"); } + } catch (IllegalStateException e) { System.out.println("\t\t... failed"); e.printStackTrace(); + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_getPskIdentity() { + @Test + public void test_WolfSSLSession_getPskIdentity() + throws WolfSSLJNIException, WolfSSLException { + + String identity = null; + WolfSSLSession ssl = null; + System.out.print("\tgetPskIdentity()"); + try { - String identity = ssl.getPskIdentity(); + ssl = new WolfSSLSession(ctx); + identity = ssl.getPskIdentity(); + } catch (IllegalStateException e) { System.out.println("\t\t... failed"); fail("Failed getPskIdentity test"); e.printStackTrace(); + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_timeout() { + @Test + public void test_WolfSSLSession_timeout() + throws WolfSSLJNIException, WolfSSLException { + + WolfSSLSession ssl = null; System.out.print("\ttimeout()"); - ssl.setTimeout(5); - if (ssl.getTimeout() != 5) { - System.out.println("\t\t\t... failed"); - fail("Failed timeout test"); + + ssl = new WolfSSLSession(ctx); + + try { + ssl.setTimeout(5); + if (ssl.getTimeout() != 5) { + System.out.println("\t\t\t... failed"); + fail("Failed timeout test"); + } + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t\t... passed"); } - public void test_WolfSSLSession_status() { + @Test + public void test_WolfSSLSession_status() + throws WolfSSLJNIException, WolfSSLException { + + WolfSSLSession ssl = null; System.out.print("\tstatus()"); - if (ssl.handshakeDone() == true) { - System.out.println("\t\t\t... failed"); - fail("Failed status test"); + + ssl = new WolfSSLSession(ctx); + + try { + if (ssl.handshakeDone() == true) { + System.out.println("\t\t\t... failed"); + fail("Failed status test"); + } + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + System.out.println("\t\t\t... passed"); } - public void test_WolfSSLSession_useSNI() { + @Test + public void test_WolfSSLSession_useSNI() + throws WolfSSLJNIException, WolfSSLException { int ret; String sniHostName = "www.example.com"; + WolfSSLSession ssl = null; System.out.print("\tuseSNI()"); - ret = ssl.useSNI((byte)0, sniHostName.getBytes()); - if (ret == WolfSSL.NOT_COMPILED_IN) { - System.out.println("\t\t\t... skipped"); - } else if (ret != WolfSSL.SSL_SUCCESS) { - System.out.println("\t\t\t... failed"); - fail("Failed useSNI test"); - } else { - System.out.println("\t\t\t... passed"); + + ssl = new WolfSSLSession(ctx); + + try { + ret = ssl.useSNI((byte)0, sniHostName.getBytes()); + if (ret == WolfSSL.NOT_COMPILED_IN) { + System.out.println("\t\t\t... skipped"); + return; + } else if (ret != WolfSSL.SSL_SUCCESS) { + System.out.println("\t\t\t... failed"); + fail("Failed useSNI test"); + } + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } } + + System.out.println("\t\t\t... passed"); } - public void test_WolfSSLSession_useALPN() { + @Test + public void test_WolfSSLSession_useALPN() + throws WolfSSLException, WolfSSLJNIException { int ret; String[] alpnProtos = new String[] { @@ -419,85 +557,109 @@ public class WolfSSLSessionTest { String http11Alpn = "http/1.1"; byte[] alpnProtoBytes = http11Alpn.getBytes(); byte[] alpnProtoBytesPacked = new byte[1 + alpnProtoBytes.length]; + WolfSSLSession ssl = null; System.out.print("\tuseALPN()"); - /* Testing useALPN(String[], int) */ - ret = ssl.useALPN(alpnProtos, - WolfSSL.WOLFSSL_ALPN_CONTINUE_ON_MISMATCH); + ssl = new WolfSSLSession(ctx); - if (ret == WolfSSL.SSL_SUCCESS) { + try { + /* Testing useALPN(String[], int) */ ret = ssl.useALPN(alpnProtos, - WolfSSL.WOLFSSL_ALPN_FAILED_ON_MISMATCH); - } + WolfSSL.WOLFSSL_ALPN_CONTINUE_ON_MISMATCH); - if (ret == WolfSSL.SSL_SUCCESS) { - ret = ssl.useALPN(null, WolfSSL.WOLFSSL_ALPN_CONTINUE_ON_MISMATCH); - if (ret < 0) { - /* error expected, null input */ - ret = WolfSSL.SSL_SUCCESS; + if (ret == WolfSSL.SSL_SUCCESS) { + ret = ssl.useALPN(alpnProtos, + WolfSSL.WOLFSSL_ALPN_FAILED_ON_MISMATCH); + } + + if (ret == WolfSSL.SSL_SUCCESS) { + ret = ssl.useALPN(null, + WolfSSL.WOLFSSL_ALPN_CONTINUE_ON_MISMATCH); + if (ret < 0) { + /* error expected, null input */ + ret = WolfSSL.SSL_SUCCESS; + } + } + + if (ret == WolfSSL.SSL_SUCCESS) { + ret = ssl.useALPN(alpnProtos, 0); + if (ret < 0) { + /* error expected, no options */ + ret = WolfSSL.SSL_SUCCESS; + } + } + + if (ret == WolfSSL.SSL_SUCCESS) { + ret = ssl.useALPN(alpnProtos, -123); + if (ret < 0) { + /* error expected, invalid options */ + ret = WolfSSL.SSL_SUCCESS; + } + } + + /* Testing useALPN(byte[]) */ + if (ret == WolfSSL.SSL_SUCCESS) { + + alpnProtoBytesPacked[0] = (byte)http11Alpn.length(); + System.arraycopy(alpnProtoBytes, 0, alpnProtoBytesPacked, 1, + alpnProtoBytes.length); + + ret = ssl.useALPN(alpnProtoBytesPacked); + } + + if (ret == WolfSSL.SSL_SUCCESS) { + ret = ssl.useALPN(null); + if (ret < 0) { + /* error expected, null input */ + ret = WolfSSL.SSL_SUCCESS; + } + } + + if (ret == WolfSSL.NOT_COMPILED_IN) { + System.out.println("\t\t\t... skipped"); + return; + + } else if (ret != WolfSSL.SSL_SUCCESS) { + System.out.println("\t\t\t... failed"); + fail("Failed useALPN test"); + } + + } finally { + if (ssl != null) { + ssl.freeSSL(); } } - if (ret == WolfSSL.SSL_SUCCESS) { - ret = ssl.useALPN(alpnProtos, 0); - if (ret < 0) { - /* error expected, no options */ - ret = WolfSSL.SSL_SUCCESS; - } - } - - if (ret == WolfSSL.SSL_SUCCESS) { - ret = ssl.useALPN(alpnProtos, -123); - if (ret < 0) { - /* error expected, invalid options */ - ret = WolfSSL.SSL_SUCCESS; - } - } - - /* Testing useALPN(byte[]) */ - if (ret == WolfSSL.SSL_SUCCESS) { - - alpnProtoBytesPacked[0] = (byte)http11Alpn.length(); - System.arraycopy(alpnProtoBytes, 0, alpnProtoBytesPacked, 1, - alpnProtoBytes.length); - - ret = ssl.useALPN(alpnProtoBytesPacked); - } - - if (ret == WolfSSL.SSL_SUCCESS) { - ret = ssl.useALPN(null); - if (ret < 0) { - /* error expected, null input */ - ret = WolfSSL.SSL_SUCCESS; - } - } - - if (ret == WolfSSL.NOT_COMPILED_IN) { - System.out.println("\t\t\t... skipped"); - } else if (ret != WolfSSL.SSL_SUCCESS) { - System.out.println("\t\t\t... failed"); - fail("Failed useALPN test"); - } else { - System.out.println("\t\t\t... passed"); - } + System.out.println("\t\t\t... passed"); } - public void test_WolfSSLSession_freeSSL() { + @Test + public void test_WolfSSLSession_freeSSL() + throws WolfSSLJNIException, WolfSSLException { + + WolfSSLSession ssl = null; System.out.print("\tfreeSSL()"); + ssl = new WolfSSLSession(ctx); + try { ssl.freeSSL(); + } catch (WolfSSLJNIException e) { System.out.println("\t\t\t... failed"); fail("Failed freeSSL test"); e.printStackTrace(); + } + System.out.println("\t\t\t... passed"); } - public void test_WolfSSLSession_UseAfterFree() { + @Test + public void test_WolfSSLSession_UseAfterFree() + throws WolfSSLJNIException { int ret, err; WolfSSL sslLib = null; @@ -532,14 +694,9 @@ public class WolfSSLSessionTest { err == WolfSSL.SSL_ERROR_WANT_WRITE)); if (ret != WolfSSL.SSL_SUCCESS) { - ssl.freeSSL(); - sslCtx.free(); fail("Failed WolfSSL.connect() to " + exampleHost); } - ssl.freeSSL(); - sslCtx.free(); - } catch (UnknownHostException | ConnectException e) { /* skip if no Internet connection */ System.out.println("\t\t... skipped"); @@ -550,14 +707,24 @@ public class WolfSSLSessionTest { fail("Failed UseAfterFree test"); e.printStackTrace(); return; + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } + if (sslCtx != null) { + sslCtx.free(); + } } try { /* this should fail, use after free */ ret = ssl.connect(); + } catch (IllegalStateException ise) { System.out.println("\t\t... passed"); return; + } catch (SocketTimeoutException | SocketException e) { System.out.println("\t\t... failed"); fail("Failed UseAfterFree test"); @@ -571,7 +738,9 @@ public class WolfSSLSessionTest { fail("WolfSSLSession was able to be used after freed"); } - public void test_WolfSSLSession_getSessionID() { + @Test + public void test_WolfSSLSession_getSessionID() + throws WolfSSLJNIException { int ret, err; WolfSSL sslLib = null; @@ -593,16 +762,12 @@ public class WolfSSLSessionTest { sessionID = ssl.getSessionID(); if (sessionID == null || sessionID.length != 0) { /* sessionID array should not be null, but should be empty */ - ssl.freeSSL(); - sslCtx.free(); fail("Session ID should be empty array before connection"); } sock = new Socket(exampleHost, examplePort); ret = ssl.setFd(sock); if (ret != WolfSSL.SSL_SUCCESS) { - ssl.freeSSL(); - sslCtx.free(); fail("Failed to set file descriptor"); } @@ -615,21 +780,15 @@ public class WolfSSLSessionTest { err == WolfSSL.SSL_ERROR_WANT_WRITE)); if (ret != WolfSSL.SSL_SUCCESS) { - ssl.freeSSL(); - sslCtx.free(); fail("Failed WolfSSL.connect() to " + exampleHost); } sessionID = ssl.getSessionID(); if (sessionID == null || sessionID.length == 0) { /* session ID should not be null or zero length */ - ssl.freeSSL(); - sslCtx.free(); fail("Session ID should not be null or 0 length " + "after connection"); } - ssl.freeSSL(); - sslCtx.free(); } catch (UnknownHostException | ConnectException e) { /* skip if no Internet connection */ @@ -641,12 +800,22 @@ public class WolfSSLSessionTest { fail("Failed getSessionID test"); e.printStackTrace(); return; + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } + if (sslCtx != null) { + sslCtx.free(); + } } System.out.println("\t\t... passed"); } - public void test_WolfSSLSession_useSecureRenegotiation() { + @Test + public void test_WolfSSLSession_useSecureRenegotiation() + throws WolfSSLJNIException { int ret, err; WolfSSL sslLib = null; @@ -670,19 +839,22 @@ public class WolfSSLSessionTest { if (ret != WolfSSL.SSL_SUCCESS && ret != WolfSSL.NOT_COMPILED_IN) { System.out.println("... failed"); fail("Failed useSecureRenegotiation test"); - ssl.freeSSL(); - sslCtx.free(); return; } - ssl.freeSSL(); - sslCtx.free(); - } catch (Exception e) { System.out.println("... failed"); fail("Failed useSecureRenegotiation test"); e.printStackTrace(); return; + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } + if (sslCtx != null) { + sslCtx.free(); + } } System.out.println("... passed"); @@ -697,7 +869,9 @@ public class WolfSSLSessionTest { } } - public void test_WolfSSLSession_setTls13SecretCb() { + @Test + public void test_WolfSSLSession_setTls13SecretCb() + throws WolfSSLJNIException { int ret; WolfSSL sslLib = null; @@ -732,6 +906,14 @@ public class WolfSSLSessionTest { e.printStackTrace(); fail("failed setTls13SecretCb() test"); return; + + } finally { + if (ssl != null) { + ssl.freeSSL(); + } + if (sslCtx != null) { + sslCtx.free(); + } } System.out.println("\t... passed");