[tor-commits] [tor/master] Fix compilation with openssl 1.1 by forcibly disabling some tests

nickm at torproject.org nickm at torproject.org
Tue Oct 6 14:00:23 UTC 2015


commit 20ec030d9b6ff0e403e37d2161f3e53dfd6dd622
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Oct 6 09:59:47 2015 -0400

    Fix compilation with openssl 1.1 by forcibly disabling some tests
    
    Some of these tests can be ported to work with openssl 1.1, but
    probably some can't.
---
 src/test/test_tortls.c |  161 ++++++++++++++++++++++++++++++++++++------------
 1 file changed, 122 insertions(+), 39 deletions(-)

diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c
index be7dd9b..2e53293 100644
--- a/src/test/test_tortls.c
+++ b/src/test/test_tortls.c
@@ -28,6 +28,10 @@
 #include <openssl/ssl3.h>
 #include <openssl/err.h>
 #include <openssl/asn1t.h>
+#include <openssl/x509.h>
+#include <openssl/rsa.h>
+#include <openssl/evp.h>
+#include <openssl/bn.h>
 
 #if __GNUC__ && GCC_VERSION >= 402
 #if GCC_VERSION >= 406
@@ -49,6 +53,11 @@
 extern tor_tls_context_t *server_tls_context;
 extern tor_tls_context_t *client_tls_context;
 
+#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,0)
+#define OPENSSL_OPAQUE
+#endif
+
+#ifndef OPENSSL_OPAQUE
 static SSL_METHOD *
 give_me_a_test_method(void)
 {
@@ -62,6 +71,7 @@ fake_num_ciphers(void)
 {
   return 0;
 }
+#endif
 
 static void
 test_tortls_errno_to_tls_error(void *data)
@@ -132,12 +142,14 @@ test_tortls_tor_tls_new(void *data)
   tls = tor_tls_new(-1, 0);
   tt_assert(!tls);
 
+#ifndef OPENSSL_OPAQUE
   SSL_METHOD *method = give_me_a_test_method();
   SSL_CTX *ctx = SSL_CTX_new(method);
   method->num_ciphers = fake_num_ciphers;
   client_tls_context->ctx = ctx;
   tls = tor_tls_new(-1, 0);
   tt_assert(!tls);
+#endif
 
  done:
   UNMOCK(tor_tls_cert_matches_key);
@@ -399,6 +411,7 @@ test_tortls_log_one_error(void *ignored)
   tor_free(tls);
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_get_error(void *ignored)
 {
@@ -484,6 +497,7 @@ test_tortls_get_error(void *ignored)
   teardown_capture_of_logs(previous_log);
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_always_accept_verify_cb(void *ignored)
@@ -498,6 +512,7 @@ test_tortls_always_accept_verify_cb(void *ignored)
   (void)0;
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_x509_cert_free(void *ignored)
 {
@@ -512,6 +527,7 @@ test_tortls_x509_cert_free(void *ignored)
   cert->encoded = tor_malloc_zero(1);
   tor_x509_cert_free(cert);
 }
+#endif
 
 static void
 test_tortls_x509_cert_get_id_digests(void *ignored)
@@ -536,6 +552,7 @@ test_tortls_x509_cert_get_id_digests(void *ignored)
   (void)0;
 }
 
+#ifndef OPENSSL_OPAQUE
 static int
 fixed_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
 {
@@ -628,6 +645,7 @@ test_tortls_cert_get_key(void *ignored)
  done:
   (void)0;
 }
+#endif
 
 static void
 test_tortls_get_my_client_auth_key(void *ignored)
@@ -691,6 +709,7 @@ test_tortls_get_my_certs(void *ignored)
   (void)1;
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_get_ciphersuite_name(void *ignored)
 {
@@ -838,11 +857,17 @@ test_tortls_classify_client_ciphers(void *ignored)
  done:
   (void)1;
 }
+#endif
 
 static void
 test_tortls_client_is_using_v2_ciphers(void *ignored)
 {
   (void)ignored;
+
+#ifdef HAVE_SSL_GET_CLIENT_CIPHERS
+  tt_skip();
+#else
+
   int ret;
   SSL_CTX *ctx;
   SSL *ssl;
@@ -856,8 +881,6 @@ test_tortls_client_is_using_v2_ciphers(void *ignored)
   ssl = SSL_new(ctx);
   sess = SSL_SESSION_new();
 
-#ifdef HAVE_SSL_GET_CLIENT_CIPHERS
-#else
   ret = tor_tls_client_is_using_v2_ciphers(ssl);
   tt_int_op(ret, OP_EQ, -1);
 
@@ -878,6 +901,7 @@ test_tortls_client_is_using_v2_ciphers(void *ignored)
   (void)1;
 }
 
+#ifndef OPENSSL_OPAQUE
 static X509 *fixed_try_to_extract_certs_from_tls_cert_out_result = NULL;
 static X509 *fixed_try_to_extract_certs_from_tls_id_cert_out_result = NULL;
 
@@ -890,7 +914,9 @@ fixed_try_to_extract_certs_from_tls(int severity, tor_tls_t *tls,
   *cert_out = fixed_try_to_extract_certs_from_tls_cert_out_result;
   *id_cert_out = fixed_try_to_extract_certs_from_tls_id_cert_out_result;
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static const char* notCompletelyValidCertString =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAb8CAg37MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\n"
@@ -907,6 +933,7 @@ static const char* notCompletelyValidCertString =
   "jC9UeuErhaA/zzWi8ewMTFZW/WshOrm3fNvcMrMLKtH534JKvcdMg6qIdjTFINIr\n"
   "evnAhf0cwULaebn+lMs8Pdl7y37+sfluVok=\n"
   "-----END CERTIFICATE-----\n";
+#endif
 
 static const char* validCertString = "-----BEGIN CERTIFICATE-----\n"
   "MIIDpTCCAY0CAg3+MA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNVBAYTAlVTMREwDwYD\n"
@@ -974,6 +1001,7 @@ read_cert_from(const char *str)
   return res;
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_verify(void *ignored)
 {
@@ -1028,7 +1056,9 @@ test_tortls_verify(void *ignored)
   tor_free(tls);
   tor_free(k);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_check_lifetime(void *ignored)
 {
@@ -1062,7 +1092,9 @@ test_tortls_check_lifetime(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static int fixed_ssl_pending_result = 0;
 
 static int
@@ -1095,6 +1127,7 @@ test_tortls_get_pending_bytes(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_get_forced_write_size(void *ignored)
@@ -1215,6 +1248,7 @@ test_tortls_dn_indicates_v3_cert(void *ignored)
   X509_NAME_free(name);
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_received_v3_certificate(void *ignored)
 {
@@ -1295,6 +1329,7 @@ test_tortls_received_v3_certificate(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_get_num_server_handshakes(void *ignored)
@@ -1330,6 +1365,7 @@ test_tortls_server_got_renegotiate(void *ignored)
   tor_free(tls);
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_SSL_SESSION_get_master_key(void *ignored)
 {
@@ -1360,7 +1396,9 @@ test_tortls_SSL_SESSION_get_master_key(void *ignored)
   tor_free(tls);
   tor_free(out);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_get_tlssecrets(void *ignored)
 {
@@ -1384,7 +1422,9 @@ test_tortls_get_tlssecrets(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_get_buffer_sizes(void *ignored)
 {
@@ -1434,6 +1474,7 @@ test_tortls_get_buffer_sizes(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_evaluate_ecgroup_for_tls(void *ignored)
@@ -1457,6 +1498,7 @@ test_tortls_evaluate_ecgroup_for_tls(void *ignored)
   (void)0;
 }
 
+#ifndef OPENSSL_OPAQUE
 typedef struct cert_pkey_st_local
 {
   X509 *x509;
@@ -1516,7 +1558,9 @@ test_tortls_try_to_extract_certs_from_tls(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_get_peer_cert(void *ignored)
 {
@@ -1545,7 +1589,9 @@ test_tortls_get_peer_cert(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_peer_has_cert(void *ignored)
 {
@@ -1572,6 +1618,7 @@ test_tortls_peer_has_cert(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_is_server(void *ignored)
@@ -1589,6 +1636,7 @@ test_tortls_is_server(void *ignored)
   tor_free(tls);
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_session_secret_cb(void *ignored)
 {
@@ -1630,7 +1678,9 @@ test_tortls_session_secret_cb(void *ignored)
   SSL_CTX_free(ctx);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 /* TODO: It seems block_renegotiation and unblock_renegotiation and
  * using different blags. This might not be correct */
 static void
@@ -1669,7 +1719,9 @@ test_tortls_unblock_renegotiation(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_assert_renegotiation_unblocked(void *ignored)
 {
@@ -1685,6 +1737,7 @@ test_tortls_assert_renegotiation_unblocked(void *ignored)
 
   tor_free(tls);
 }
+#endif
 
 static void
 test_tortls_set_logged_address(void *ignored)
@@ -1705,6 +1758,7 @@ test_tortls_set_logged_address(void *ignored)
   tor_free(tls);
 }
 
+#ifndef OPENSSL_OPAQUE
 static void
 example_cb(tor_tls_t *t, void *arg)
 {
@@ -1737,7 +1791,9 @@ test_tortls_set_renegotiate_callback(void *ignored)
   tor_free(tls->ssl);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static const SSL_CIPHER *
 fake_get_cipher(unsigned ncipher)
 {
@@ -1753,7 +1809,9 @@ fake_get_cipher(unsigned ncipher)
     return NULL;
   }
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_find_cipher_by_id(void *ignored)
 {
@@ -1816,7 +1874,9 @@ test_tortls_find_cipher_by_id(void *ignored)
   SSL_free(ssl);
   SSL_CTX_free(ctx);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_debug_state_callback(void *ignored)
 {
@@ -1840,7 +1900,9 @@ test_tortls_debug_state_callback(void *ignored)
  done:
   teardown_capture_of_logs(previous_log);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_server_info_callback(void *ignored)
 {
@@ -1905,7 +1967,9 @@ test_tortls_server_info_callback(void *ignored)
   teardown_capture_of_logs(previous_log);
   tor_free(ssl);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static int fixed_ssl_read_result_index;
 static int fixed_ssl_read_result[5];
 static int fixed_ssl_shutdown_result;
@@ -2235,7 +2299,9 @@ test_tortls_renegotiate(void *ignored)
   SSL_CTX_free(ctx);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static int fixed_ssl_accept_result;
 static int fixed_ssl_connect_result;
 
@@ -2344,7 +2410,9 @@ test_tortls_handshake(void *ignored)
   SSL_CTX_free(ctx);
   tor_free(tls);
 }
+#endif
 
+#ifndef OPENSSL_OPAQUE
 static void
 test_tortls_finish_handshake(void *ignored)
 {
@@ -2417,15 +2485,10 @@ test_tortls_finish_handshake(void *ignored)
   SSL_CTX_free(ctx);
   tor_free(tls);
 }
+#endif
 
 static int fixed_crypto_pk_new_result_index;
 static crypto_pk_t *fixed_crypto_pk_new_result[5];
-static int fixed_crypto_pk_generate_key_with_bits_result_index;
-static int fixed_crypto_pk_generate_key_with_bits_result[5];
-static int fixed_tor_tls_create_certificate_result_index;
-static X509 *fixed_tor_tls_create_certificate_result[5];
-static int fixed_tor_x509_cert_new_result_index;
-static tor_x509_cert_t *fixed_tor_x509_cert_new_result[5];
 
 static crypto_pk_t *
 fixed_crypto_pk_new(void)
@@ -2433,6 +2496,14 @@ fixed_crypto_pk_new(void)
   return fixed_crypto_pk_new_result[fixed_crypto_pk_new_result_index++];
 }
 
+#ifndef OPENSSL_OPAQUE
+static int fixed_crypto_pk_generate_key_with_bits_result_index;
+static int fixed_crypto_pk_generate_key_with_bits_result[5];
+static int fixed_tor_tls_create_certificate_result_index;
+static X509 *fixed_tor_tls_create_certificate_result[5];
+static int fixed_tor_x509_cert_new_result_index;
+static tor_x509_cert_t *fixed_tor_x509_cert_new_result[5];
+
 static int
 fixed_crypto_pk_generate_key_with_bits(crypto_pk_t *env, int bits)
 {
@@ -2637,6 +2708,7 @@ test_tortls_context_new(void *ignored)
   UNMOCK(crypto_pk_generate_key_with_bits);
   UNMOCK(crypto_pk_new);
 }
+#endif
 
 static int fixed_crypto_pk_get_evp_pkey_result_index = 0;
 static EVP_PKEY *fixed_crypto_pk_get_evp_pkey_result[5];
@@ -2717,9 +2789,11 @@ test_tortls_cert_new(void *ignored)
   ret = tor_x509_cert_new(cert);
   tt_assert(ret);
 
+#ifndef OPENSSL_OPAQUE
   cert->cert_info = NULL;
   ret = tor_x509_cert_new(cert);
   tt_assert(ret);
+#endif
 
  done:
   (void)0;
@@ -2741,6 +2815,7 @@ test_tortls_cert_is_valid(void *ignored)
   ret = tor_tls_cert_is_valid(LOG_WARN, cert, scert, 0);
   tt_int_op(ret, OP_EQ, 1);
 
+#ifndef OPENSSL_OPAQUE
   cert = tor_x509_cert_new(read_cert_from(validCertString));
   scert = tor_x509_cert_new(read_cert_from(caCertString));
   cert->cert->cert_info->validity->notAfter =
@@ -2753,6 +2828,7 @@ test_tortls_cert_is_valid(void *ignored)
   cert->cert->cert_info->key = NULL;
   ret = tor_tls_cert_is_valid(LOG_WARN, cert, scert, 1);
   tt_int_op(ret, OP_EQ, 0);
+#endif
 
   cert = tor_x509_cert_new(read_cert_from(validCertString));
   scert = tor_x509_cert_new(read_cert_from(caCertString));
@@ -2804,6 +2880,13 @@ test_tortls_context_init_one(void *ignored)
 #define LOCAL_TEST_CASE(name, flags)                    \
   { #name, test_tortls_##name, (flags), NULL, NULL }
 
+#ifdef OPENSSL_OPAQUE
+#define INTRUSIVE_TEST_CASE(name, flags)        \
+  { #name, NULL, TT_SKIP, NULL, NULL }
+#else
+#define INTRUSIVE_TEST_CASE(name, flags) LOCAL_TEST_CASE(name, flags)
+#endif
+
 struct testcase_t tortls_tests[] = {
   LOCAL_TEST_CASE(errno_to_tls_error, 0),
   LOCAL_TEST_CASE(err_to_string, 0),
@@ -2813,51 +2896,51 @@ struct testcase_t tortls_tests[] = {
   LOCAL_TEST_CASE(get_by_ssl, TT_FORK),
   LOCAL_TEST_CASE(allocate_tor_tls_object_ex_data_index, TT_FORK),
   LOCAL_TEST_CASE(log_one_error, TT_FORK),
-  LOCAL_TEST_CASE(get_error, TT_FORK),
+  INTRUSIVE_TEST_CASE(get_error, TT_FORK),
   LOCAL_TEST_CASE(always_accept_verify_cb, 0),
-  LOCAL_TEST_CASE(x509_cert_free, 0),
+  INTRUSIVE_TEST_CASE(x509_cert_free, 0),
   LOCAL_TEST_CASE(x509_cert_get_id_digests, 0),
-  LOCAL_TEST_CASE(cert_matches_key, 0),
-  LOCAL_TEST_CASE(cert_get_key, 0),
+  INTRUSIVE_TEST_CASE(cert_matches_key, 0),
+  INTRUSIVE_TEST_CASE(cert_get_key, 0),
   LOCAL_TEST_CASE(get_my_client_auth_key, TT_FORK),
   LOCAL_TEST_CASE(get_my_certs, TT_FORK),
-  LOCAL_TEST_CASE(get_ciphersuite_name, 0),
-  LOCAL_TEST_CASE(classify_client_ciphers, 0),
+  INTRUSIVE_TEST_CASE(get_ciphersuite_name, 0),
+  INTRUSIVE_TEST_CASE(classify_client_ciphers, 0),
   LOCAL_TEST_CASE(client_is_using_v2_ciphers, 0),
-  LOCAL_TEST_CASE(verify, 0),
-  LOCAL_TEST_CASE(check_lifetime, 0),
-  LOCAL_TEST_CASE(get_pending_bytes, 0),
+  INTRUSIVE_TEST_CASE(verify, 0),
+  INTRUSIVE_TEST_CASE(check_lifetime, 0),
+  INTRUSIVE_TEST_CASE(get_pending_bytes, 0),
   LOCAL_TEST_CASE(get_forced_write_size, 0),
   LOCAL_TEST_CASE(get_write_overhead_ratio, TT_FORK),
   LOCAL_TEST_CASE(used_v1_handshake, TT_FORK),
   LOCAL_TEST_CASE(dn_indicates_v3_cert, 0),
-  LOCAL_TEST_CASE(received_v3_certificate, 0),
+  INTRUSIVE_TEST_CASE(received_v3_certificate, 0),
   LOCAL_TEST_CASE(get_num_server_handshakes, 0),
   LOCAL_TEST_CASE(server_got_renegotiate, 0),
-  LOCAL_TEST_CASE(SSL_SESSION_get_master_key, 0),
-  LOCAL_TEST_CASE(get_tlssecrets, 0),
-  LOCAL_TEST_CASE(get_buffer_sizes, 0),
+  INTRUSIVE_TEST_CASE(SSL_SESSION_get_master_key, 0),
+  INTRUSIVE_TEST_CASE(get_tlssecrets, 0),
+  INTRUSIVE_TEST_CASE(get_buffer_sizes, 0),
   LOCAL_TEST_CASE(evaluate_ecgroup_for_tls, 0),
-  LOCAL_TEST_CASE(try_to_extract_certs_from_tls, 0),
-  LOCAL_TEST_CASE(get_peer_cert, 0),
-  LOCAL_TEST_CASE(peer_has_cert, 0),
-  LOCAL_TEST_CASE(shutdown, 0),
-  LOCAL_TEST_CASE(renegotiate, 0),
-  LOCAL_TEST_CASE(finish_handshake, 0),
-  LOCAL_TEST_CASE(handshake, 0),
-  LOCAL_TEST_CASE(write, 0),
-  LOCAL_TEST_CASE(read, 0),
-  LOCAL_TEST_CASE(server_info_callback, 0),
+  INTRUSIVE_TEST_CASE(try_to_extract_certs_from_tls, 0),
+  INTRUSIVE_TEST_CASE(get_peer_cert, 0),
+  INTRUSIVE_TEST_CASE(peer_has_cert, 0),
+  INTRUSIVE_TEST_CASE(shutdown, 0),
+  INTRUSIVE_TEST_CASE(renegotiate, 0),
+  INTRUSIVE_TEST_CASE(finish_handshake, 0),
+  INTRUSIVE_TEST_CASE(handshake, 0),
+  INTRUSIVE_TEST_CASE(write, 0),
+  INTRUSIVE_TEST_CASE(read, 0),
+  INTRUSIVE_TEST_CASE(server_info_callback, 0),
   LOCAL_TEST_CASE(is_server, 0),
-  LOCAL_TEST_CASE(assert_renegotiation_unblocked, 0),
-  LOCAL_TEST_CASE(block_renegotiation, 0),
-  LOCAL_TEST_CASE(unblock_renegotiation, 0),
-  LOCAL_TEST_CASE(set_renegotiate_callback, 0),
+  INTRUSIVE_TEST_CASE(assert_renegotiation_unblocked, 0),
+  INTRUSIVE_TEST_CASE(block_renegotiation, 0),
+  INTRUSIVE_TEST_CASE(unblock_renegotiation, 0),
+  INTRUSIVE_TEST_CASE(set_renegotiate_callback, 0),
   LOCAL_TEST_CASE(set_logged_address, 0),
-  LOCAL_TEST_CASE(find_cipher_by_id, 0),
-  LOCAL_TEST_CASE(session_secret_cb, 0),
-  LOCAL_TEST_CASE(debug_state_callback, 0),
-  LOCAL_TEST_CASE(context_new, 0),
+  INTRUSIVE_TEST_CASE(find_cipher_by_id, 0),
+  INTRUSIVE_TEST_CASE(session_secret_cb, 0),
+  INTRUSIVE_TEST_CASE(debug_state_callback, 0),
+  INTRUSIVE_TEST_CASE(context_new, 0),
   LOCAL_TEST_CASE(create_certificate, 0),
   LOCAL_TEST_CASE(cert_new, 0),
   LOCAL_TEST_CASE(cert_is_valid, 0),



More information about the tor-commits mailing list