30 #define CURL_NO_OLDIES 36 #ifdef HAVE_SYS_SELECT_H 38 #include <sys/select.h> 47 #define test_setopt(A,B,C) \ 48 if((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) goto test_cleanup 50 #define test_multi_setopt(A,B,C) \ 51 if((res = curl_multi_setopt((A), (B), (C))) != CURLE_OK) goto test_cleanup 62 extern int select_wrapper(
int nfds, fd_set *rd, fd_set *wr, fd_set *exc,
67 extern int test(
char *URL);
85 #define TEST_ERR_MAJOR_BAD 126 86 #define TEST_ERR_RUNS_FOREVER 125 87 #define TEST_ERR_EASY_INIT 124 88 #define TEST_ERR_MULTI_INIT 123 89 #define TEST_ERR_NUM_HANDLES 122 90 #define TEST_ERR_SELECT 121 91 #define TEST_ERR_SUCCESS 120 92 #define TEST_ERR_FAILURE 119 93 #define TEST_ERR_USAGE 118 94 #define TEST_ERR_FOPEN 117 95 #define TEST_ERR_FSTAT 116 96 #define TEST_ERR_BAD_TIMEOUT 115 129 #define exe_easy_init(A,Y,Z) do { \ 130 if(((A) = curl_easy_init()) == NULL) { \ 131 fprintf(stderr, "%s:%d curl_easy_init() failed\n", (Y), (Z)); \ 132 res = TEST_ERR_EASY_INIT; \ 136 #define res_easy_init(A) \ 137 exe_easy_init((A), (__FILE__), (__LINE__)) 139 #define chk_easy_init(A,Y,Z) do { \ 140 exe_easy_init((A), (Y), (Z)); \ 145 #define easy_init(A) \ 146 chk_easy_init((A), (__FILE__), (__LINE__)) 150 #define exe_multi_init(A,Y,Z) do { \ 151 if(((A) = curl_multi_init()) == NULL) { \ 152 fprintf(stderr, "%s:%d curl_multi_init() failed\n", (Y), (Z)); \ 153 res = TEST_ERR_MULTI_INIT; \ 157 #define res_multi_init(A) \ 158 exe_multi_init((A), (__FILE__), (__LINE__)) 160 #define chk_multi_init(A,Y,Z) do { \ 161 exe_multi_init((A), (Y), (Z)); \ 166 #define multi_init(A) \ 167 chk_multi_init((A), (__FILE__), (__LINE__)) 171 #define exe_easy_setopt(A,B,C,Y,Z) do { \ 173 if((ec = curl_easy_setopt((A), (B), (C))) != CURLE_OK) { \ 174 fprintf(stderr, "%s:%d curl_easy_setopt() failed, " \ 175 "with code %d (%s)\n", \ 176 (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 181 #define res_easy_setopt(A, B, C) \ 182 exe_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) 184 #define chk_easy_setopt(A, B, C, Y, Z) do { \ 185 exe_easy_setopt((A), (B), (C), (Y), (Z)); \ 190 #define easy_setopt(A, B, C) \ 191 chk_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) 195 #define exe_multi_setopt(A, B, C, Y, Z) do { \ 197 if((ec = curl_multi_setopt((A), (B), (C))) != CURLM_OK) { \ 198 fprintf(stderr, "%s:%d curl_multi_setopt() failed, " \ 199 "with code %d (%s)\n", \ 200 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 205 #define res_multi_setopt(A,B,C) \ 206 exe_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) 208 #define chk_multi_setopt(A,B,C,Y,Z) do { \ 209 exe_multi_setopt((A), (B), (C), (Y), (Z)); \ 214 #define multi_setopt(A,B,C) \ 215 chk_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) 219 #define exe_multi_add_handle(A,B,Y,Z) do { \ 221 if((ec = curl_multi_add_handle((A), (B))) != CURLM_OK) { \ 222 fprintf(stderr, "%s:%d curl_multi_add_handle() failed, " \ 223 "with code %d (%s)\n", \ 224 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 229 #define res_multi_add_handle(A, B) \ 230 exe_multi_add_handle((A), (B), (__FILE__), (__LINE__)) 232 #define chk_multi_add_handle(A, B, Y, Z) do { \ 233 exe_multi_add_handle((A), (B), (Y), (Z)); \ 238 #define multi_add_handle(A, B) \ 239 chk_multi_add_handle((A), (B), (__FILE__), (__LINE__)) 243 #define exe_multi_remove_handle(A,B,Y,Z) do { \ 245 if((ec = curl_multi_remove_handle((A), (B))) != CURLM_OK) { \ 246 fprintf(stderr, "%s:%d curl_multi_remove_handle() failed, " \ 247 "with code %d (%s)\n", \ 248 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 253 #define res_multi_remove_handle(A, B) \ 254 exe_multi_remove_handle((A), (B), (__FILE__), (__LINE__)) 256 #define chk_multi_remove_handle(A, B, Y, Z) do { \ 257 exe_multi_remove_handle((A), (B), (Y), (Z)); \ 263 #define multi_remove_handle(A, B) \ 264 chk_multi_remove_handle((A), (B), (__FILE__), (__LINE__)) 268 #define exe_multi_perform(A,B,Y,Z) do { \ 270 if((ec = curl_multi_perform((A), (B))) != CURLM_OK) { \ 271 fprintf(stderr, "%s:%d curl_multi_perform() failed, " \ 272 "with code %d (%s)\n", \ 273 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 276 else if(*((B)) < 0) { \ 277 fprintf(stderr, "%s:%d curl_multi_perform() succeeded, " \ 278 "but returned invalid running_handles value (%d)\n", \ 279 (Y), (Z), (int)*((B))); \ 280 res = TEST_ERR_NUM_HANDLES; \ 284 #define res_multi_perform(A, B) \ 285 exe_multi_perform((A), (B), (__FILE__), (__LINE__)) 287 #define chk_multi_perform(A, B, Y, Z) do { \ 288 exe_multi_perform((A), (B), (Y), (Z)); \ 293 #define multi_perform(A,B) \ 294 chk_multi_perform((A), (B), (__FILE__), (__LINE__)) 298 #define exe_multi_fdset(A, B, C, D, E, Y, Z) do { \ 300 if((ec = curl_multi_fdset((A), (B), (C), (D), (E))) != CURLM_OK) { \ 301 fprintf(stderr, "%s:%d curl_multi_fdset() failed, " \ 302 "with code %d (%s)\n", \ 303 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 306 else if(*((E)) < -1) { \ 307 fprintf(stderr, "%s:%d curl_multi_fdset() succeeded, " \ 308 "but returned invalid max_fd value (%d)\n", \ 309 (Y), (Z), (int)*((E))); \ 310 res = TEST_ERR_NUM_HANDLES; \ 314 #define res_multi_fdset(A, B, C, D, E) \ 315 exe_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 317 #define chk_multi_fdset(A, B, C, D, E, Y, Z) do { \ 318 exe_multi_fdset((A), (B), (C), (D), (E), (Y), (Z)); \ 323 #define multi_fdset(A, B, C, D, E) \ 324 chk_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 328 #define exe_multi_timeout(A,B,Y,Z) do { \ 330 if((ec = curl_multi_timeout((A), (B))) != CURLM_OK) { \ 331 fprintf(stderr, "%s:%d curl_multi_timeout() failed, " \ 332 "with code %d (%s)\n", \ 333 (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 336 else if(*((B)) < -1L) { \ 337 fprintf(stderr, "%s:%d curl_multi_timeout() succeeded, " \ 338 "but returned invalid timeout value (%ld)\n", \ 339 (Y), (Z), (long)*((B))); \ 340 res = TEST_ERR_BAD_TIMEOUT; \ 344 #define res_multi_timeout(A, B) \ 345 exe_multi_timeout((A), (B), (__FILE__), (__LINE__)) 347 #define chk_multi_timeout(A, B, Y, Z) do { \ 348 exe_multi_timeout((A), (B), (Y), (Z)); \ 353 #define multi_timeout(A, B) \ 354 chk_multi_timeout((A), (B), (__FILE__), (__LINE__)) 358 #define exe_select_test(A, B, C, D, E, Y, Z) do { \ 360 if(select_wrapper((A), (B), (C), (D), (E)) == -1) { \ 362 fprintf(stderr, "%s:%d select() failed, with " \ 364 (Y), (Z), ec, strerror(ec)); \ 365 res = TEST_ERR_SELECT; \ 369 #define res_select_test(A, B, C, D, E) \ 370 exe_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 372 #define chk_select_test(A, B, C, D, E, Y, Z) do { \ 373 exe_select_test((A), (B), (C), (D), (E), (Y), (Z)); \ 378 #define select_test(A, B, C, D, E) \ 379 chk_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 383 #define start_test_timing() do { \ 384 tv_test_start = tutil_tvnow(); \ 387 #define exe_test_timedout(Y,Z) do { \ 388 if(tutil_tvdiff(tutil_tvnow(), tv_test_start) > TEST_HANG_TIMEOUT) { \ 389 fprintf(stderr, "%s:%d ABORTING TEST, since it seems " \ 390 "that it would have run forever.\n", (Y), (Z)); \ 391 res = TEST_ERR_RUNS_FOREVER; \ 395 #define res_test_timedout() \ 396 exe_test_timedout((__FILE__), (__LINE__)) 398 #define chk_test_timedout(Y, Z) do { \ 399 exe_test_timedout(Y, Z); \ 404 #define abort_on_test_timeout() \ 405 chk_test_timedout((__FILE__), (__LINE__)) 409 #define exe_global_init(A,Y,Z) do { \ 411 if((ec = curl_global_init((A))) != CURLE_OK) { \ 412 fprintf(stderr, "%s:%d curl_global_init() failed, " \ 413 "with code %d (%s)\n", \ 414 (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 419 #define res_global_init(A) \ 420 exe_global_init((A), (__FILE__), (__LINE__)) 422 #define chk_global_init(A, Y, Z) do { \ 423 exe_global_init((A), (Y), (Z)); \ 431 #define global_init(A) \ 432 chk_global_init((A), (__FILE__), (__LINE__))
int select_wrapper(int nfds, fd_set *rd, fd_set *wr, fd_set *exc, struct timeval *tv)
struct timeval tv_test_start
char * hexdump(const unsigned char *buffer, size_t len)