xref: /aosp_15_r20/external/curl/tests/libtest/test.h (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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