test.h (9572B)
1 /* Copyright (c) 2001-2003, Roger Dingledine. 2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. 3 * Copyright (c) 2007-2021, The Tor Project, Inc. */ 4 /* See LICENSE for licensing information */ 5 6 #ifndef TOR_TEST_H 7 #define TOR_TEST_H 8 9 /** 10 * \file test.h 11 * \brief Macros and functions used by unit tests. 12 */ 13 14 #define DEBUG_SMARTLIST 1 15 16 #include "tinytest.h" 17 #define TT_EXIT_TEST_FUNCTION STMT_BEGIN goto done; STMT_END 18 #include "tinytest_macros.h" 19 20 #ifdef __GNUC__ 21 #define PRETTY_FUNCTION __PRETTY_FUNCTION__ 22 #else 23 #define PRETTY_FUNCTION "" 24 #endif 25 26 /* As test_mem_op, but decodes 'hex' before comparing. There must be a 27 * local char* variable called mem_op_hex_tmp for this to work. */ 28 #define test_mem_op_hex(expr1, op, hex) \ 29 STMT_BEGIN \ 30 size_t length = strlen(hex); \ 31 tor_free(mem_op_hex_tmp); \ 32 mem_op_hex_tmp = tor_malloc(length/2); \ 33 tor_assert((length&1)==0); \ 34 base16_decode(mem_op_hex_tmp, length/2, hex, length); \ 35 tt_mem_op(expr1, op, mem_op_hex_tmp, length/2); \ 36 STMT_END 37 38 #define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, OP_EQ, hex) 39 40 #ifndef COCCI 41 #define tt_double_op(a,op,b) \ 42 tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%g", \ 43 TT_EXIT_TEST_FUNCTION) 44 45 /* Declare "double equal" in a sneaky way, so compiler won't complain about 46 * comparing floats with == or !=. Of course, only do this if you know what 47 * you're doing. */ 48 #define tt_double_eq(a,b) \ 49 STMT_BEGIN \ 50 tt_double_op((a), OP_GE, (b)); \ 51 tt_double_op((a), OP_LE, (b)); \ 52 STMT_END 53 54 #define tt_size_op(a,op,b) \ 55 tt_assert_test_fmt_type(a,b,#a" "#op" "#b,size_t,(val1_ op val2_), \ 56 size_t, "%"TOR_PRIuSZ, \ 57 {print_ = (size_t) value_;}, {}, TT_EXIT_TEST_FUNCTION) 58 59 #define tt_u64_op(a,op,b) \ 60 tt_assert_test_fmt_type(a,b,#a" "#op" "#b,uint64_t,(val1_ op val2_), \ 61 uint64_t, "%"PRIu64, \ 62 {print_ = (uint64_t) value_;}, {}, TT_EXIT_TEST_FUNCTION) 63 64 #define tt_i64_op(a,op,b) \ 65 tt_assert_test_fmt_type(a,b,#a" "#op" "#b,int64_t,(val1_ op val2_), \ 66 int64_t, "%"PRId64, \ 67 {print_ = (int64_t) value_;}, {}, TT_EXIT_TEST_FUNCTION) 68 #endif /* !defined(COCCI) */ 69 70 /** 71 * Declare that the test is done, even though no tt___op() calls were made. 72 * 73 * For use when you only want to test calling something, but not check 74 * any values/pointers/etc afterwards. 75 */ 76 #define tt_finished() TT_EXIT_TEST_FUNCTION 77 78 const char *get_fname(const char *name); 79 const char *get_fname_rnd(const char *name); 80 struct crypto_pk_t *pk_generate(int idx); 81 void init_pregenerated_keys(void); 82 void free_pregenerated_keys(void); 83 84 extern const struct testcase_setup_t passthrough_setup; 85 extern const struct testcase_setup_t ed25519_test_setup; 86 87 extern struct testcase_t accounting_tests[]; 88 extern struct testcase_t addr_tests[]; 89 extern struct testcase_t address_set_tests[]; 90 extern struct testcase_t address_tests[]; 91 extern struct testcase_t bridges_tests[]; 92 extern struct testcase_t btrack_tests[]; 93 extern struct testcase_t buffer_tests[]; 94 extern struct testcase_t bwmgt_tests[]; 95 extern struct testcase_t cell_format_tests[]; 96 extern struct testcase_t cell_queue_tests[]; 97 extern struct testcase_t channel_tests[]; 98 extern struct testcase_t channelpadding_tests[]; 99 extern struct testcase_t circuitpadding_tests[]; 100 extern struct testcase_t channeltls_tests[]; 101 extern struct testcase_t checkdir_tests[]; 102 extern struct testcase_t circuitbuild_tests[]; 103 extern struct testcase_t circuitlist_tests[]; 104 extern struct testcase_t circuitmux_tests[]; 105 extern struct testcase_t circuitmux_ewma_tests[]; 106 extern struct testcase_t circuitstats_tests[]; 107 extern struct testcase_t circuituse_tests[]; 108 extern struct testcase_t compat_libevent_tests[]; 109 extern struct testcase_t config_tests[]; 110 extern struct testcase_t conflux_cell_tests[]; 111 extern struct testcase_t conflux_pool_tests[]; 112 extern struct testcase_t confmgr_tests[]; 113 extern struct testcase_t confparse_tests[]; 114 extern struct testcase_t congestion_control_tests[]; 115 extern struct testcase_t connection_tests[]; 116 extern struct testcase_t conscache_tests[]; 117 extern struct testcase_t consdiff_tests[]; 118 extern struct testcase_t consdiffmgr_tests[]; 119 extern struct testcase_t container_tests[]; 120 extern struct testcase_t controller_event_tests[]; 121 extern struct testcase_t controller_tests[]; 122 extern struct testcase_t crypto_ope_tests[]; 123 extern struct testcase_t crypto_openssl_tests[]; 124 extern struct testcase_t crypto_rng_tests[]; 125 extern struct testcase_t crypto_cgo_tests[]; 126 extern struct testcase_t crypto_tests[]; 127 extern struct testcase_t dirauth_port_tests[]; 128 extern struct testcase_t dir_handle_get_tests[]; 129 extern struct testcase_t dir_tests[]; 130 extern struct testcase_t dirvote_tests[]; 131 extern struct testcase_t dispatch_tests[]; 132 extern struct testcase_t dns_tests[]; 133 extern struct testcase_t dos_tests[]; 134 extern struct testcase_t entryconn_tests[]; 135 extern struct testcase_t entrynodes_tests[]; 136 extern struct testcase_t extorport_tests[]; 137 extern struct testcase_t geoip_tests[]; 138 extern struct testcase_t guardfraction_tests[]; 139 extern struct testcase_t handle_tests[]; 140 extern struct testcase_t hs_cache[]; 141 extern struct testcase_t hs_cell_tests[]; 142 extern struct testcase_t hs_client_tests[]; 143 extern struct testcase_t hs_common_tests[]; 144 extern struct testcase_t hs_config_tests[]; 145 extern struct testcase_t hs_control_tests[]; 146 extern struct testcase_t hs_descriptor[]; 147 extern struct testcase_t hs_dos_tests[]; 148 extern struct testcase_t hs_intropoint_tests[]; 149 extern struct testcase_t hs_metrics_tests[]; 150 extern struct testcase_t hs_ntor_tests[]; 151 extern struct testcase_t hs_ob_tests[]; 152 extern struct testcase_t hs_pow_tests[]; 153 extern struct testcase_t hs_service_tests[]; 154 extern struct testcase_t keypin_tests[]; 155 extern struct testcase_t link_handshake_tests[]; 156 extern struct testcase_t logging_tests[]; 157 extern struct testcase_t mainloop_tests[]; 158 extern struct testcase_t metrics_tests[]; 159 extern struct testcase_t microdesc_tests[]; 160 extern struct testcase_t namemap_tests[]; 161 extern struct testcase_t netinfo_tests[]; 162 extern struct testcase_t nodelist_tests[]; 163 extern struct testcase_t ntor_v3_tests[]; 164 extern struct testcase_t oom_tests[]; 165 extern struct testcase_t oos_tests[]; 166 extern struct testcase_t options_tests[]; 167 extern struct testcase_t options_act_tests[]; 168 extern struct testcase_t parsecommon_tests[]; 169 extern struct testcase_t pem_tests[]; 170 extern struct testcase_t periodic_event_tests[]; 171 extern struct testcase_t policy_tests[]; 172 extern struct testcase_t prob_distr_tests[]; 173 extern struct testcase_t slow_stochastic_prob_distr_tests[]; 174 extern struct testcase_t procmon_tests[]; 175 extern struct testcase_t process_tests[]; 176 extern struct testcase_t process_descs_tests[]; 177 extern struct testcase_t proto_haproxy_tests[]; 178 extern struct testcase_t proto_http_tests[]; 179 extern struct testcase_t proto_misc_tests[]; 180 extern struct testcase_t protover_tests[]; 181 extern struct testcase_t pt_tests[]; 182 extern struct testcase_t pubsub_build_tests[]; 183 extern struct testcase_t pubsub_msg_tests[]; 184 extern struct testcase_t relay_tests[]; 185 extern struct testcase_t relaycell_tests[]; 186 extern struct testcase_t relaycrypt_tests[]; 187 extern struct testcase_t replaycache_tests[]; 188 extern struct testcase_t router_tests[]; 189 extern struct testcase_t routerkeys_tests[]; 190 extern struct testcase_t routerlist_tests[]; 191 extern struct testcase_t routerset_tests[]; 192 extern struct testcase_t sandbox_tests[]; 193 extern struct testcase_t scheduler_tests[]; 194 extern struct testcase_t sendme_tests[]; 195 extern struct testcase_t socks_tests[]; 196 extern struct testcase_t sr_tests[]; 197 extern struct testcase_t statefile_tests[]; 198 extern struct testcase_t stats_tests[]; 199 extern struct testcase_t status_tests[]; 200 extern struct testcase_t storagedir_tests[]; 201 extern struct testcase_t thread_tests[]; 202 extern struct testcase_t token_bucket_tests[]; 203 extern struct testcase_t tortls_openssl_tests[]; 204 extern struct testcase_t tortls_tests[]; 205 extern struct testcase_t util_format_tests[]; 206 extern struct testcase_t util_process_tests[]; 207 extern struct testcase_t util_tests[]; 208 extern struct testcase_t voting_flags_tests[]; 209 extern struct testcase_t voting_schedule_tests[]; 210 extern struct testcase_t x509_tests[]; 211 212 extern struct testcase_t slow_crypto_tests[]; 213 extern struct testcase_t slow_hs_pow_tests[]; 214 extern struct testcase_t slow_process_tests[]; 215 extern struct testcase_t slow_ptr_tests[]; 216 217 extern struct testgroup_t testgroups[]; 218 219 extern const char AUTHORITY_CERT_1[]; 220 extern const char AUTHORITY_SIGNKEY_1[]; 221 extern const char AUTHORITY_SIGNKEY_A_DIGEST[]; 222 extern const char AUTHORITY_SIGNKEY_A_DIGEST256[]; 223 extern const char AUTHORITY_CERT_2[]; 224 extern const char AUTHORITY_SIGNKEY_2[]; 225 extern const char AUTHORITY_SIGNKEY_B_DIGEST[]; 226 extern const char AUTHORITY_SIGNKEY_B_DIGEST256[]; 227 extern const char AUTHORITY_CERT_3[]; 228 extern const char AUTHORITY_SIGNKEY_3[]; 229 extern const char AUTHORITY_SIGNKEY_C_DIGEST[]; 230 extern const char AUTHORITY_SIGNKEY_C_DIGEST256[]; 231 232 #endif /* !defined(TOR_TEST_H) */