mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
Add an SSL_dup test
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/12180)
This commit is contained in:
parent
7cccecc0b6
commit
49a36a528a
@ -8151,6 +8151,75 @@ static int test_pluggable_group(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#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(libctx, 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
|
||||
|
||||
OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config\n")
|
||||
|
||||
int setup_tests(void)
|
||||
@ -8352,6 +8421,9 @@ int setup_tests(void)
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1_3
|
||||
ADD_TEST(test_pluggable_group);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1_2
|
||||
ADD_TEST(test_ssl_dup);
|
||||
#endif
|
||||
return 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user