1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_TEST_H 2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_TEST_H 3*6236dae4SAndroid Build Coastguard Worker /*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker * 10*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker * 12*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker * 23*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker * 25*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 26*6236dae4SAndroid Build Coastguard Worker 27*6236dae4SAndroid Build Coastguard Worker /* Now include the curl_setup.h file from libcurl's private libdir (the source 28*6236dae4SAndroid Build Coastguard Worker version, but that might include "curl_config.h" from the build dir so we 29*6236dae4SAndroid Build Coastguard Worker need both of them in the include path), so that we get good in-depth 30*6236dae4SAndroid Build Coastguard Worker knowledge about the system we're building this on */ 31*6236dae4SAndroid Build Coastguard Worker 32*6236dae4SAndroid Build Coastguard Worker #define CURL_NO_OLDIES 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Worker #include "curl_setup.h" 35*6236dae4SAndroid Build Coastguard Worker 36*6236dae4SAndroid Build Coastguard Worker #include <curl/curl.h> 37*6236dae4SAndroid Build Coastguard Worker 38*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_SELECT_H 39*6236dae4SAndroid Build Coastguard Worker /* since so many tests use select(), we can just as well include it here */ 40*6236dae4SAndroid Build Coastguard Worker #include <sys/select.h> 41*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_UNISTD_H) 42*6236dae4SAndroid Build Coastguard Worker #include <unistd.h> 43*6236dae4SAndroid Build Coastguard Worker #endif 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Worker #include "curl_printf.h" 46*6236dae4SAndroid Build Coastguard Worker 47*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32 48*6236dae4SAndroid Build Coastguard Worker #define sleep(sec) Sleep ((sec)*1000) 49*6236dae4SAndroid Build Coastguard Worker #endif 50*6236dae4SAndroid Build Coastguard Worker 51*6236dae4SAndroid Build Coastguard Worker #define test_setopt(A,B,C) \ 52*6236dae4SAndroid Build Coastguard Worker if((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \ 53*6236dae4SAndroid Build Coastguard Worker goto test_cleanup 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker #define test_multi_setopt(A,B,C) \ 56*6236dae4SAndroid Build Coastguard Worker if((res = curl_multi_setopt((A), (B), (C))) != CURLE_OK) \ 57*6236dae4SAndroid Build Coastguard Worker goto test_cleanup 58*6236dae4SAndroid Build Coastguard Worker 59*6236dae4SAndroid Build Coastguard Worker extern char *libtest_arg2; /* set by first.c to the argv[2] or NULL */ 60*6236dae4SAndroid Build Coastguard Worker extern char *libtest_arg3; /* set by first.c to the argv[3] or NULL */ 61*6236dae4SAndroid Build Coastguard Worker 62*6236dae4SAndroid Build Coastguard Worker /* argc and argv as passed in to the main() function */ 63*6236dae4SAndroid Build Coastguard Worker extern int test_argc; 64*6236dae4SAndroid Build Coastguard Worker extern char **test_argv; 65*6236dae4SAndroid Build Coastguard Worker 66*6236dae4SAndroid Build Coastguard Worker extern struct timeval tv_test_start; /* for test timing */ 67*6236dae4SAndroid Build Coastguard Worker 68*6236dae4SAndroid Build Coastguard Worker extern int select_wrapper(int nfds, fd_set *rd, fd_set *wr, fd_set *exc, 69*6236dae4SAndroid Build Coastguard Worker struct timeval *tv); 70*6236dae4SAndroid Build Coastguard Worker 71*6236dae4SAndroid Build Coastguard Worker extern void wait_ms(int ms); /* wait this many milliseconds */ 72*6236dae4SAndroid Build Coastguard Worker 73*6236dae4SAndroid Build Coastguard Worker #ifndef CURLTESTS_BUNDLED_TEST_H 74*6236dae4SAndroid Build Coastguard Worker extern CURLcode test(char *URL); /* the actual test function provided by each 75*6236dae4SAndroid Build Coastguard Worker individual libXXX.c file */ 76*6236dae4SAndroid Build Coastguard Worker #endif 77*6236dae4SAndroid Build Coastguard Worker 78*6236dae4SAndroid Build Coastguard Worker extern char *hexdump(const unsigned char *buffer, size_t len); 79*6236dae4SAndroid Build Coastguard Worker 80*6236dae4SAndroid Build Coastguard Worker extern int unitfail; 81*6236dae4SAndroid Build Coastguard Worker 82*6236dae4SAndroid Build Coastguard Worker /* 83*6236dae4SAndroid Build Coastguard Worker ** TEST_ERR_* values must be greater than CURL_LAST CURLcode in order 84*6236dae4SAndroid Build Coastguard Worker ** to avoid confusion with any CURLcode or CURLMcode. These TEST_ERR_* 85*6236dae4SAndroid Build Coastguard Worker ** codes are returned to signal test specific situations and should 86*6236dae4SAndroid Build Coastguard Worker ** not get mixed with CURLcode or CURLMcode values. 87*6236dae4SAndroid Build Coastguard Worker ** 88*6236dae4SAndroid Build Coastguard Worker ** For portability reasons TEST_ERR_* values should be less than 127. 89*6236dae4SAndroid Build Coastguard Worker */ 90*6236dae4SAndroid Build Coastguard Worker 91*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_MAJOR_BAD (CURLcode) 126 92*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_RUNS_FOREVER (CURLcode) 125 93*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_EASY_INIT (CURLcode) 124 94*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_MULTI (CURLcode) 123 95*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_NUM_HANDLES (CURLcode) 122 96*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_SELECT (CURLcode) 121 97*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_SUCCESS (CURLcode) 120 98*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_FAILURE (CURLcode) 119 99*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_USAGE (CURLcode) 118 100*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_FOPEN (CURLcode) 117 101*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_FSTAT (CURLcode) 116 102*6236dae4SAndroid Build Coastguard Worker #define TEST_ERR_BAD_TIMEOUT (CURLcode) 115 103*6236dae4SAndroid Build Coastguard Worker 104*6236dae4SAndroid Build Coastguard Worker /* 105*6236dae4SAndroid Build Coastguard Worker ** Macros for test source code readability/maintainability. 106*6236dae4SAndroid Build Coastguard Worker ** 107*6236dae4SAndroid Build Coastguard Worker ** All of the following macros require that an int data type 'res' variable 108*6236dae4SAndroid Build Coastguard Worker ** exists in scope where macro is used, and that it has been initialized to 109*6236dae4SAndroid Build Coastguard Worker ** zero before the macro is used. 110*6236dae4SAndroid Build Coastguard Worker ** 111*6236dae4SAndroid Build Coastguard Worker ** exe_* and chk_* macros are helper macros not intended to be used from 112*6236dae4SAndroid Build Coastguard Worker ** outside of this header file. Arguments 'Y' and 'Z' of these represent 113*6236dae4SAndroid Build Coastguard Worker ** source code file and line number, while Arguments 'A', 'B', etc, are 114*6236dae4SAndroid Build Coastguard Worker ** the arguments used to actually call a libcurl function. 115*6236dae4SAndroid Build Coastguard Worker ** 116*6236dae4SAndroid Build Coastguard Worker ** All easy_* and multi_* macros call a libcurl function and evaluate if 117*6236dae4SAndroid Build Coastguard Worker ** the function has succeeded or failed. When the function succeeds 'res' 118*6236dae4SAndroid Build Coastguard Worker ** variable is not set nor cleared and program continues normal flow. On 119*6236dae4SAndroid Build Coastguard Worker ** the other hand if function fails 'res' variable is set and a jump to 120*6236dae4SAndroid Build Coastguard Worker ** label 'test_cleanup' is performed. 121*6236dae4SAndroid Build Coastguard Worker ** 122*6236dae4SAndroid Build Coastguard Worker ** Every easy_* and multi_* macros have a res_easy_* and res_multi_* macro 123*6236dae4SAndroid Build Coastguard Worker ** counterpart that operates in the same way with the exception that no 124*6236dae4SAndroid Build Coastguard Worker ** jump takes place in case of failure. res_easy_* and res_multi_* macros 125*6236dae4SAndroid Build Coastguard Worker ** should be immediately followed by checking if 'res' variable has been 126*6236dae4SAndroid Build Coastguard Worker ** set. 127*6236dae4SAndroid Build Coastguard Worker ** 128*6236dae4SAndroid Build Coastguard Worker ** 'res' variable when set will hold a CURLcode, CURLMcode, or any of the 129*6236dae4SAndroid Build Coastguard Worker ** TEST_ERR_* values defined above. It is advisable to return this value 130*6236dae4SAndroid Build Coastguard Worker ** as test result. 131*6236dae4SAndroid Build Coastguard Worker */ 132*6236dae4SAndroid Build Coastguard Worker 133*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 134*6236dae4SAndroid Build Coastguard Worker 135*6236dae4SAndroid Build Coastguard Worker #define exe_easy_init(A,Y,Z) do { \ 136*6236dae4SAndroid Build Coastguard Worker if(((A) = curl_easy_init()) == NULL) { \ 137*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_easy_init() failed\n", (Y), (Z)); \ 138*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_EASY_INIT; \ 139*6236dae4SAndroid Build Coastguard Worker } \ 140*6236dae4SAndroid Build Coastguard Worker } while(0) 141*6236dae4SAndroid Build Coastguard Worker 142*6236dae4SAndroid Build Coastguard Worker #define res_easy_init(A) \ 143*6236dae4SAndroid Build Coastguard Worker exe_easy_init((A), (__FILE__), (__LINE__)) 144*6236dae4SAndroid Build Coastguard Worker 145*6236dae4SAndroid Build Coastguard Worker #define chk_easy_init(A,Y,Z) do { \ 146*6236dae4SAndroid Build Coastguard Worker exe_easy_init((A), (Y), (Z)); \ 147*6236dae4SAndroid Build Coastguard Worker if(res) \ 148*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 149*6236dae4SAndroid Build Coastguard Worker } while(0) 150*6236dae4SAndroid Build Coastguard Worker 151*6236dae4SAndroid Build Coastguard Worker #define easy_init(A) \ 152*6236dae4SAndroid Build Coastguard Worker chk_easy_init((A), (__FILE__), (__LINE__)) 153*6236dae4SAndroid Build Coastguard Worker 154*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 155*6236dae4SAndroid Build Coastguard Worker 156*6236dae4SAndroid Build Coastguard Worker #define exe_multi_init(A,Y,Z) do { \ 157*6236dae4SAndroid Build Coastguard Worker if(((A) = curl_multi_init()) == NULL) { \ 158*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_init() failed\n", (Y), (Z)); \ 159*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 160*6236dae4SAndroid Build Coastguard Worker } \ 161*6236dae4SAndroid Build Coastguard Worker } while(0) 162*6236dae4SAndroid Build Coastguard Worker 163*6236dae4SAndroid Build Coastguard Worker #define res_multi_init(A) \ 164*6236dae4SAndroid Build Coastguard Worker exe_multi_init((A), (__FILE__), (__LINE__)) 165*6236dae4SAndroid Build Coastguard Worker 166*6236dae4SAndroid Build Coastguard Worker #define chk_multi_init(A,Y,Z) do { \ 167*6236dae4SAndroid Build Coastguard Worker exe_multi_init((A), (Y), (Z)); \ 168*6236dae4SAndroid Build Coastguard Worker if(res) \ 169*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 170*6236dae4SAndroid Build Coastguard Worker } while(0) 171*6236dae4SAndroid Build Coastguard Worker 172*6236dae4SAndroid Build Coastguard Worker #define multi_init(A) \ 173*6236dae4SAndroid Build Coastguard Worker chk_multi_init((A), (__FILE__), (__LINE__)) 174*6236dae4SAndroid Build Coastguard Worker 175*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 176*6236dae4SAndroid Build Coastguard Worker 177*6236dae4SAndroid Build Coastguard Worker #define exe_easy_setopt(A,B,C,Y,Z) do { \ 178*6236dae4SAndroid Build Coastguard Worker CURLcode ec; \ 179*6236dae4SAndroid Build Coastguard Worker if((ec = curl_easy_setopt((A), (B), (C))) != CURLE_OK) { \ 180*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_easy_setopt() failed, " \ 181*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 182*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 183*6236dae4SAndroid Build Coastguard Worker res = ec; \ 184*6236dae4SAndroid Build Coastguard Worker } \ 185*6236dae4SAndroid Build Coastguard Worker } while(0) 186*6236dae4SAndroid Build Coastguard Worker 187*6236dae4SAndroid Build Coastguard Worker #define res_easy_setopt(A, B, C) \ 188*6236dae4SAndroid Build Coastguard Worker exe_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) 189*6236dae4SAndroid Build Coastguard Worker 190*6236dae4SAndroid Build Coastguard Worker #define chk_easy_setopt(A, B, C, Y, Z) do { \ 191*6236dae4SAndroid Build Coastguard Worker exe_easy_setopt((A), (B), (C), (Y), (Z)); \ 192*6236dae4SAndroid Build Coastguard Worker if(res) \ 193*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 194*6236dae4SAndroid Build Coastguard Worker } while(0) 195*6236dae4SAndroid Build Coastguard Worker 196*6236dae4SAndroid Build Coastguard Worker #define easy_setopt(A, B, C) \ 197*6236dae4SAndroid Build Coastguard Worker chk_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) 198*6236dae4SAndroid Build Coastguard Worker 199*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 200*6236dae4SAndroid Build Coastguard Worker 201*6236dae4SAndroid Build Coastguard Worker #define exe_multi_setopt(A, B, C, Y, Z) do { \ 202*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 203*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_setopt((A), (B), (C))) != CURLM_OK) { \ 204*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_setopt() failed, " \ 205*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 206*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 207*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 208*6236dae4SAndroid Build Coastguard Worker } \ 209*6236dae4SAndroid Build Coastguard Worker } while(0) 210*6236dae4SAndroid Build Coastguard Worker 211*6236dae4SAndroid Build Coastguard Worker #define res_multi_setopt(A,B,C) \ 212*6236dae4SAndroid Build Coastguard Worker exe_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) 213*6236dae4SAndroid Build Coastguard Worker 214*6236dae4SAndroid Build Coastguard Worker #define chk_multi_setopt(A,B,C,Y,Z) do { \ 215*6236dae4SAndroid Build Coastguard Worker exe_multi_setopt((A), (B), (C), (Y), (Z)); \ 216*6236dae4SAndroid Build Coastguard Worker if(res) \ 217*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 218*6236dae4SAndroid Build Coastguard Worker } while(0) 219*6236dae4SAndroid Build Coastguard Worker 220*6236dae4SAndroid Build Coastguard Worker #define multi_setopt(A,B,C) \ 221*6236dae4SAndroid Build Coastguard Worker chk_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) 222*6236dae4SAndroid Build Coastguard Worker 223*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 224*6236dae4SAndroid Build Coastguard Worker 225*6236dae4SAndroid Build Coastguard Worker #define exe_multi_add_handle(A,B,Y,Z) do { \ 226*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 227*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_add_handle((A), (B))) != CURLM_OK) { \ 228*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_add_handle() failed, " \ 229*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 230*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 231*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 232*6236dae4SAndroid Build Coastguard Worker } \ 233*6236dae4SAndroid Build Coastguard Worker } while(0) 234*6236dae4SAndroid Build Coastguard Worker 235*6236dae4SAndroid Build Coastguard Worker #define res_multi_add_handle(A, B) \ 236*6236dae4SAndroid Build Coastguard Worker exe_multi_add_handle((A), (B), (__FILE__), (__LINE__)) 237*6236dae4SAndroid Build Coastguard Worker 238*6236dae4SAndroid Build Coastguard Worker #define chk_multi_add_handle(A, B, Y, Z) do { \ 239*6236dae4SAndroid Build Coastguard Worker exe_multi_add_handle((A), (B), (Y), (Z)); \ 240*6236dae4SAndroid Build Coastguard Worker if(res) \ 241*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 242*6236dae4SAndroid Build Coastguard Worker } while(0) 243*6236dae4SAndroid Build Coastguard Worker 244*6236dae4SAndroid Build Coastguard Worker #define multi_add_handle(A, B) \ 245*6236dae4SAndroid Build Coastguard Worker chk_multi_add_handle((A), (B), (__FILE__), (__LINE__)) 246*6236dae4SAndroid Build Coastguard Worker 247*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 248*6236dae4SAndroid Build Coastguard Worker 249*6236dae4SAndroid Build Coastguard Worker #define exe_multi_remove_handle(A,B,Y,Z) do { \ 250*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 251*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_remove_handle((A), (B))) != CURLM_OK) { \ 252*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_remove_handle() failed, " \ 253*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 254*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 255*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 256*6236dae4SAndroid Build Coastguard Worker } \ 257*6236dae4SAndroid Build Coastguard Worker } while(0) 258*6236dae4SAndroid Build Coastguard Worker 259*6236dae4SAndroid Build Coastguard Worker #define res_multi_remove_handle(A, B) \ 260*6236dae4SAndroid Build Coastguard Worker exe_multi_remove_handle((A), (B), (__FILE__), (__LINE__)) 261*6236dae4SAndroid Build Coastguard Worker 262*6236dae4SAndroid Build Coastguard Worker #define chk_multi_remove_handle(A, B, Y, Z) do { \ 263*6236dae4SAndroid Build Coastguard Worker exe_multi_remove_handle((A), (B), (Y), (Z)); \ 264*6236dae4SAndroid Build Coastguard Worker if(res) \ 265*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 266*6236dae4SAndroid Build Coastguard Worker } while(0) 267*6236dae4SAndroid Build Coastguard Worker 268*6236dae4SAndroid Build Coastguard Worker 269*6236dae4SAndroid Build Coastguard Worker #define multi_remove_handle(A, B) \ 270*6236dae4SAndroid Build Coastguard Worker chk_multi_remove_handle((A), (B), (__FILE__), (__LINE__)) 271*6236dae4SAndroid Build Coastguard Worker 272*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 273*6236dae4SAndroid Build Coastguard Worker 274*6236dae4SAndroid Build Coastguard Worker #define exe_multi_perform(A,B,Y,Z) do { \ 275*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 276*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_perform((A), (B))) != CURLM_OK) { \ 277*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_perform() failed, " \ 278*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 279*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 280*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 281*6236dae4SAndroid Build Coastguard Worker } \ 282*6236dae4SAndroid Build Coastguard Worker else if(*((B)) < 0) { \ 283*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_perform() succeeded, " \ 284*6236dae4SAndroid Build Coastguard Worker "but returned invalid running_handles value (%d)\n", \ 285*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)*((B))); \ 286*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_NUM_HANDLES; \ 287*6236dae4SAndroid Build Coastguard Worker } \ 288*6236dae4SAndroid Build Coastguard Worker } while(0) 289*6236dae4SAndroid Build Coastguard Worker 290*6236dae4SAndroid Build Coastguard Worker #define res_multi_perform(A, B) \ 291*6236dae4SAndroid Build Coastguard Worker exe_multi_perform((A), (B), (__FILE__), (__LINE__)) 292*6236dae4SAndroid Build Coastguard Worker 293*6236dae4SAndroid Build Coastguard Worker #define chk_multi_perform(A, B, Y, Z) do { \ 294*6236dae4SAndroid Build Coastguard Worker exe_multi_perform((A), (B), (Y), (Z)); \ 295*6236dae4SAndroid Build Coastguard Worker if(res) \ 296*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 297*6236dae4SAndroid Build Coastguard Worker } while(0) 298*6236dae4SAndroid Build Coastguard Worker 299*6236dae4SAndroid Build Coastguard Worker #define multi_perform(A,B) \ 300*6236dae4SAndroid Build Coastguard Worker chk_multi_perform((A), (B), (__FILE__), (__LINE__)) 301*6236dae4SAndroid Build Coastguard Worker 302*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 303*6236dae4SAndroid Build Coastguard Worker 304*6236dae4SAndroid Build Coastguard Worker #define exe_multi_fdset(A, B, C, D, E, Y, Z) do { \ 305*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 306*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_fdset((A), (B), (C), (D), (E))) != CURLM_OK) { \ 307*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_fdset() failed, " \ 308*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 309*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 310*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 311*6236dae4SAndroid Build Coastguard Worker } \ 312*6236dae4SAndroid Build Coastguard Worker else if(*((E)) < -1) { \ 313*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_fdset() succeeded, " \ 314*6236dae4SAndroid Build Coastguard Worker "but returned invalid max_fd value (%d)\n", \ 315*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)*((E))); \ 316*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_NUM_HANDLES; \ 317*6236dae4SAndroid Build Coastguard Worker } \ 318*6236dae4SAndroid Build Coastguard Worker } while(0) 319*6236dae4SAndroid Build Coastguard Worker 320*6236dae4SAndroid Build Coastguard Worker #define res_multi_fdset(A, B, C, D, E) \ 321*6236dae4SAndroid Build Coastguard Worker exe_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 322*6236dae4SAndroid Build Coastguard Worker 323*6236dae4SAndroid Build Coastguard Worker #define chk_multi_fdset(A, B, C, D, E, Y, Z) do { \ 324*6236dae4SAndroid Build Coastguard Worker exe_multi_fdset((A), (B), (C), (D), (E), (Y), (Z)); \ 325*6236dae4SAndroid Build Coastguard Worker if(res) \ 326*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 327*6236dae4SAndroid Build Coastguard Worker } while(0) 328*6236dae4SAndroid Build Coastguard Worker 329*6236dae4SAndroid Build Coastguard Worker #define multi_fdset(A, B, C, D, E) \ 330*6236dae4SAndroid Build Coastguard Worker chk_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 331*6236dae4SAndroid Build Coastguard Worker 332*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 333*6236dae4SAndroid Build Coastguard Worker 334*6236dae4SAndroid Build Coastguard Worker #define exe_multi_timeout(A,B,Y,Z) do { \ 335*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 336*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_timeout((A), (B))) != CURLM_OK) { \ 337*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_timeout() failed, " \ 338*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 339*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 340*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_BAD_TIMEOUT; \ 341*6236dae4SAndroid Build Coastguard Worker } \ 342*6236dae4SAndroid Build Coastguard Worker else if(*((B)) < -1L) { \ 343*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_timeout() succeeded, " \ 344*6236dae4SAndroid Build Coastguard Worker "but returned invalid timeout value (%ld)\n", \ 345*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (long)*((B))); \ 346*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_BAD_TIMEOUT; \ 347*6236dae4SAndroid Build Coastguard Worker } \ 348*6236dae4SAndroid Build Coastguard Worker } while(0) 349*6236dae4SAndroid Build Coastguard Worker 350*6236dae4SAndroid Build Coastguard Worker #define res_multi_timeout(A, B) \ 351*6236dae4SAndroid Build Coastguard Worker exe_multi_timeout((A), (B), (__FILE__), (__LINE__)) 352*6236dae4SAndroid Build Coastguard Worker 353*6236dae4SAndroid Build Coastguard Worker #define chk_multi_timeout(A, B, Y, Z) do { \ 354*6236dae4SAndroid Build Coastguard Worker exe_multi_timeout((A), (B), (Y), (Z)); \ 355*6236dae4SAndroid Build Coastguard Worker if(res) \ 356*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 357*6236dae4SAndroid Build Coastguard Worker } while(0) 358*6236dae4SAndroid Build Coastguard Worker 359*6236dae4SAndroid Build Coastguard Worker #define multi_timeout(A, B) \ 360*6236dae4SAndroid Build Coastguard Worker chk_multi_timeout((A), (B), (__FILE__), (__LINE__)) 361*6236dae4SAndroid Build Coastguard Worker 362*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 363*6236dae4SAndroid Build Coastguard Worker 364*6236dae4SAndroid Build Coastguard Worker #define exe_multi_poll(A,B,C,D,E,Y,Z) do { \ 365*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 366*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_poll((A), (B), (C), (D), (E))) != CURLM_OK) { \ 367*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_poll() failed, " \ 368*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 369*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 370*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 371*6236dae4SAndroid Build Coastguard Worker } \ 372*6236dae4SAndroid Build Coastguard Worker else if(*((E)) < 0) { \ 373*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_poll() succeeded, " \ 374*6236dae4SAndroid Build Coastguard Worker "but returned invalid numfds value (%d)\n", \ 375*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)*((E))); \ 376*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_NUM_HANDLES; \ 377*6236dae4SAndroid Build Coastguard Worker } \ 378*6236dae4SAndroid Build Coastguard Worker } while(0) 379*6236dae4SAndroid Build Coastguard Worker 380*6236dae4SAndroid Build Coastguard Worker #define res_multi_poll(A, B, C, D, E) \ 381*6236dae4SAndroid Build Coastguard Worker exe_multi_poll((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 382*6236dae4SAndroid Build Coastguard Worker 383*6236dae4SAndroid Build Coastguard Worker #define chk_multi_poll(A, B, C, D, E, Y, Z) do { \ 384*6236dae4SAndroid Build Coastguard Worker exe_multi_poll((A), (B), (C), (D), (E), (Y), (Z)); \ 385*6236dae4SAndroid Build Coastguard Worker if(res) \ 386*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 387*6236dae4SAndroid Build Coastguard Worker } while(0) 388*6236dae4SAndroid Build Coastguard Worker 389*6236dae4SAndroid Build Coastguard Worker #define multi_poll(A, B, C, D, E) \ 390*6236dae4SAndroid Build Coastguard Worker chk_multi_poll((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 391*6236dae4SAndroid Build Coastguard Worker 392*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 393*6236dae4SAndroid Build Coastguard Worker 394*6236dae4SAndroid Build Coastguard Worker #define exe_multi_wakeup(A,Y,Z) do { \ 395*6236dae4SAndroid Build Coastguard Worker CURLMcode ec; \ 396*6236dae4SAndroid Build Coastguard Worker if((ec = curl_multi_wakeup((A))) != CURLM_OK) { \ 397*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_multi_wakeup() failed, " \ 398*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 399*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 400*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_MULTI; \ 401*6236dae4SAndroid Build Coastguard Worker } \ 402*6236dae4SAndroid Build Coastguard Worker } while(0) 403*6236dae4SAndroid Build Coastguard Worker 404*6236dae4SAndroid Build Coastguard Worker #define res_multi_wakeup(A) \ 405*6236dae4SAndroid Build Coastguard Worker exe_multi_wakeup((A), (__FILE__), (__LINE__)) 406*6236dae4SAndroid Build Coastguard Worker 407*6236dae4SAndroid Build Coastguard Worker #define chk_multi_wakeup(A, Y, Z) do { \ 408*6236dae4SAndroid Build Coastguard Worker exe_multi_wakeup((A), (Y), (Z)); \ 409*6236dae4SAndroid Build Coastguard Worker if(res) \ 410*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 411*6236dae4SAndroid Build Coastguard Worker } while(0) 412*6236dae4SAndroid Build Coastguard Worker 413*6236dae4SAndroid Build Coastguard Worker #define multi_wakeup(A) \ 414*6236dae4SAndroid Build Coastguard Worker chk_multi_wakeup((A), (__FILE__), (__LINE__)) 415*6236dae4SAndroid Build Coastguard Worker 416*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 417*6236dae4SAndroid Build Coastguard Worker 418*6236dae4SAndroid Build Coastguard Worker #define exe_select_test(A, B, C, D, E, Y, Z) do { \ 419*6236dae4SAndroid Build Coastguard Worker int ec; \ 420*6236dae4SAndroid Build Coastguard Worker if(select_wrapper((A), (B), (C), (D), (E)) == -1) { \ 421*6236dae4SAndroid Build Coastguard Worker ec = SOCKERRNO; \ 422*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d select() failed, with " \ 423*6236dae4SAndroid Build Coastguard Worker "errno %d (%s)\n", \ 424*6236dae4SAndroid Build Coastguard Worker (Y), (Z), ec, strerror(ec)); \ 425*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_SELECT; \ 426*6236dae4SAndroid Build Coastguard Worker } \ 427*6236dae4SAndroid Build Coastguard Worker } while(0) 428*6236dae4SAndroid Build Coastguard Worker 429*6236dae4SAndroid Build Coastguard Worker #define res_select_test(A, B, C, D, E) \ 430*6236dae4SAndroid Build Coastguard Worker exe_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 431*6236dae4SAndroid Build Coastguard Worker 432*6236dae4SAndroid Build Coastguard Worker #define chk_select_test(A, B, C, D, E, Y, Z) do { \ 433*6236dae4SAndroid Build Coastguard Worker exe_select_test((A), (B), (C), (D), (E), (Y), (Z)); \ 434*6236dae4SAndroid Build Coastguard Worker if(res) \ 435*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 436*6236dae4SAndroid Build Coastguard Worker } while(0) 437*6236dae4SAndroid Build Coastguard Worker 438*6236dae4SAndroid Build Coastguard Worker #define select_test(A, B, C, D, E) \ 439*6236dae4SAndroid Build Coastguard Worker chk_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) 440*6236dae4SAndroid Build Coastguard Worker 441*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 442*6236dae4SAndroid Build Coastguard Worker 443*6236dae4SAndroid Build Coastguard Worker #define start_test_timing() do { \ 444*6236dae4SAndroid Build Coastguard Worker tv_test_start = tutil_tvnow(); \ 445*6236dae4SAndroid Build Coastguard Worker } while(0) 446*6236dae4SAndroid Build Coastguard Worker 447*6236dae4SAndroid Build Coastguard Worker #define exe_test_timedout(Y,Z) do { \ 448*6236dae4SAndroid Build Coastguard Worker long timediff = tutil_tvdiff(tutil_tvnow(), tv_test_start); \ 449*6236dae4SAndroid Build Coastguard Worker if(timediff > (TEST_HANG_TIMEOUT)) { \ 450*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d ABORTING TEST, since it seems " \ 451*6236dae4SAndroid Build Coastguard Worker "that it would have run forever (%ld ms > %ld ms)\n", \ 452*6236dae4SAndroid Build Coastguard Worker (Y), (Z), timediff, (long) (TEST_HANG_TIMEOUT)); \ 453*6236dae4SAndroid Build Coastguard Worker res = TEST_ERR_RUNS_FOREVER; \ 454*6236dae4SAndroid Build Coastguard Worker } \ 455*6236dae4SAndroid Build Coastguard Worker } while(0) 456*6236dae4SAndroid Build Coastguard Worker 457*6236dae4SAndroid Build Coastguard Worker #define res_test_timedout() \ 458*6236dae4SAndroid Build Coastguard Worker exe_test_timedout((__FILE__), (__LINE__)) 459*6236dae4SAndroid Build Coastguard Worker 460*6236dae4SAndroid Build Coastguard Worker #define chk_test_timedout(Y, Z) do { \ 461*6236dae4SAndroid Build Coastguard Worker exe_test_timedout(Y, Z); \ 462*6236dae4SAndroid Build Coastguard Worker if(res) \ 463*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; \ 464*6236dae4SAndroid Build Coastguard Worker } while(0) 465*6236dae4SAndroid Build Coastguard Worker 466*6236dae4SAndroid Build Coastguard Worker #define abort_on_test_timeout() \ 467*6236dae4SAndroid Build Coastguard Worker chk_test_timedout((__FILE__), (__LINE__)) 468*6236dae4SAndroid Build Coastguard Worker 469*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 470*6236dae4SAndroid Build Coastguard Worker 471*6236dae4SAndroid Build Coastguard Worker #define exe_global_init(A,Y,Z) do { \ 472*6236dae4SAndroid Build Coastguard Worker CURLcode ec; \ 473*6236dae4SAndroid Build Coastguard Worker if((ec = curl_global_init((A))) != CURLE_OK) { \ 474*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d curl_global_init() failed, " \ 475*6236dae4SAndroid Build Coastguard Worker "with code %d (%s)\n", \ 476*6236dae4SAndroid Build Coastguard Worker (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 477*6236dae4SAndroid Build Coastguard Worker res = ec; \ 478*6236dae4SAndroid Build Coastguard Worker } \ 479*6236dae4SAndroid Build Coastguard Worker } while(0) 480*6236dae4SAndroid Build Coastguard Worker 481*6236dae4SAndroid Build Coastguard Worker #define res_global_init(A) \ 482*6236dae4SAndroid Build Coastguard Worker exe_global_init((A), (__FILE__), (__LINE__)) 483*6236dae4SAndroid Build Coastguard Worker 484*6236dae4SAndroid Build Coastguard Worker #define chk_global_init(A, Y, Z) do { \ 485*6236dae4SAndroid Build Coastguard Worker exe_global_init((A), (Y), (Z)); \ 486*6236dae4SAndroid Build Coastguard Worker if(res) \ 487*6236dae4SAndroid Build Coastguard Worker return res; \ 488*6236dae4SAndroid Build Coastguard Worker } while(0) 489*6236dae4SAndroid Build Coastguard Worker 490*6236dae4SAndroid Build Coastguard Worker /* global_init() is different than other macros. In case of 491*6236dae4SAndroid Build Coastguard Worker failure it 'return's instead of going to 'test_cleanup'. */ 492*6236dae4SAndroid Build Coastguard Worker 493*6236dae4SAndroid Build Coastguard Worker #define global_init(A) \ 494*6236dae4SAndroid Build Coastguard Worker chk_global_init((A), (__FILE__), (__LINE__)) 495*6236dae4SAndroid Build Coastguard Worker 496*6236dae4SAndroid Build Coastguard Worker #ifndef CURLTESTS_BUNDLED_TEST_H 497*6236dae4SAndroid Build Coastguard Worker #define NO_SUPPORT_BUILT_IN \ 498*6236dae4SAndroid Build Coastguard Worker CURLcode test(char *URL) \ 499*6236dae4SAndroid Build Coastguard Worker { \ 500*6236dae4SAndroid Build Coastguard Worker (void)URL; \ 501*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "Missing support\n"); \ 502*6236dae4SAndroid Build Coastguard Worker return (CURLcode)1; \ 503*6236dae4SAndroid Build Coastguard Worker } 504*6236dae4SAndroid Build Coastguard Worker #endif 505*6236dae4SAndroid Build Coastguard Worker 506*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 507*6236dae4SAndroid Build Coastguard Worker 508*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_TEST_H */ 509*6236dae4SAndroid Build Coastguard Worker 510*6236dae4SAndroid Build Coastguard Worker #ifdef CURLTESTS_BUNDLED_TEST_H 511*6236dae4SAndroid Build Coastguard Worker extern CURLcode test(char *URL); /* the actual test function provided by each 512*6236dae4SAndroid Build Coastguard Worker individual libXXX.c file */ 513*6236dae4SAndroid Build Coastguard Worker 514*6236dae4SAndroid Build Coastguard Worker #undef NO_SUPPORT_BUILT_IN 515*6236dae4SAndroid Build Coastguard Worker #define NO_SUPPORT_BUILT_IN \ 516*6236dae4SAndroid Build Coastguard Worker CURLcode test(char *URL) \ 517*6236dae4SAndroid Build Coastguard Worker { \ 518*6236dae4SAndroid Build Coastguard Worker (void)URL; \ 519*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "Missing support\n"); \ 520*6236dae4SAndroid Build Coastguard Worker return (CURLcode)1; \ 521*6236dae4SAndroid Build Coastguard Worker } 522*6236dae4SAndroid Build Coastguard Worker #endif 523