diff options
author | Matt Caswell <matt@openssl.org> | 2020-06-16 17:19:40 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2020-06-30 10:54:02 +0100 |
commit | 45f02e9095f30abefc799b34a612140a47aa9e27 (patch) | |
tree | de4f37b7edebd3891d097f4f22a5ae9996fb5cc9 /test | |
parent | 4864a232ee7f901388532f65911866ca2478cfa9 (diff) |
Add an SSL_dup test
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/12245)
Diffstat (limited to 'test')
-rw-r--r-- | test/sslapitest.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/sslapitest.c b/test/sslapitest.c index 62d22e85b0..52207226f4 100644 --- a/test/sslapitest.c +++ b/test/sslapitest.c @@ -6578,6 +6578,75 @@ static int test_servername(int tst) return testresult; } +#ifndef OPENSSL_NO_TLS1_2 +static int test_ssl_dup(void) +{ + SSL_CTX *cctx = NULL, *sctx = NULL; + SSL *clientssl = NULL, *serverssl = NULL, *client2ssl = NULL; + int testresult = 0; + BIO *rbio = NULL, *wbio = NULL; + + if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), + TLS_client_method(), + 0, + 0, + &sctx, &cctx, cert, privkey))) + goto end; + + if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, + NULL, NULL))) + goto end; + + if (!TEST_true(SSL_set_min_proto_version(clientssl, TLS1_2_VERSION)) + || !TEST_true(SSL_set_max_proto_version(clientssl, TLS1_2_VERSION))) + goto end; + + client2ssl = SSL_dup(clientssl); + rbio = SSL_get_rbio(clientssl); + if (!TEST_ptr(rbio) + || !TEST_true(BIO_up_ref(rbio))) + goto end; + SSL_set0_rbio(client2ssl, rbio); + rbio = NULL; + + wbio = SSL_get_wbio(clientssl); + if (!TEST_ptr(wbio) || !TEST_true(BIO_up_ref(wbio))) + goto end; + SSL_set0_wbio(client2ssl, wbio); + rbio = NULL; + + if (!TEST_ptr(client2ssl) + /* Handshake not started so pointers should be different */ + || !TEST_ptr_ne(clientssl, client2ssl)) + goto end; + + if (!TEST_int_eq(SSL_get_min_proto_version(client2ssl), TLS1_2_VERSION) + || !TEST_int_eq(SSL_get_max_proto_version(client2ssl), TLS1_2_VERSION)) + goto end; + + if (!TEST_true(create_ssl_connection(serverssl, client2ssl, SSL_ERROR_NONE))) + goto end; + + SSL_free(clientssl); + clientssl = SSL_dup(client2ssl); + if (!TEST_ptr(clientssl) + /* Handshake has finished so pointers should be the same */ + || !TEST_ptr_eq(clientssl, client2ssl)) + goto end; + + testresult = 1; + + end: + SSL_free(serverssl); + SSL_free(clientssl); + SSL_free(client2ssl); + SSL_CTX_free(sctx); + SSL_CTX_free(cctx); + + return testresult; +} +#endif + int setup_tests(void) { if (!TEST_ptr(certsdir = test_get_argument(0)) @@ -6698,6 +6767,9 @@ int setup_tests(void) ADD_ALL_TESTS(test_client_cert_cb, 2); ADD_ALL_TESTS(test_ca_names, 3); ADD_ALL_TESTS(test_servername, 10); +#ifndef OPENSSL_NO_TLS1_2 + ADD_TEST(test_ssl_dup); +#endif return 1; } |