summaryrefslogtreecommitdiff
path: root/tests/libtest/lib502.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2006-10-25 05:59:46 +0000
committerYang Tse <yangsita@gmail.com>2006-10-25 05:59:46 +0000
commit384c8f356087178e4779d99d3e0e7f25331293aa (patch)
tree7b7d5aec819f6f47ccc3b28d7390ae62c036535b /tests/libtest/lib502.c
parentf44ef427a2fbe506a35548ebab2b503438d6a027 (diff)
downloadgnurl-384c8f356087178e4779d99d3e0e7f25331293aa.tar.gz
gnurl-384c8f356087178e4779d99d3e0e7f25331293aa.tar.bz2
gnurl-384c8f356087178e4779d99d3e0e7f25331293aa.zip
Use curl_global_init() and curl_global_cleanup().
Improve cleanup in case of initialization failure.
Diffstat (limited to 'tests/libtest/lib502.c')
-rw-r--r--tests/libtest/lib502.c58
1 files changed, 52 insertions, 6 deletions
diff --git a/tests/libtest/lib502.c b/tests/libtest/lib502.c
index 0a852c998..362e0225a 100644
--- a/tests/libtest/lib502.c
+++ b/tests/libtest/lib502.c
@@ -1,5 +1,9 @@
#include "test.h"
+#include "timeval.h"
+
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
/*
* Get a single URL without select().
*/
@@ -8,25 +12,67 @@ int test(char *URL)
{
CURL *c;
CURLM *m;
- CURLMcode res;
+ int res = 0;
int running=1;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((c = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
- curl_global_init(CURL_GLOBAL_ALL);
- c = curl_easy_init();
curl_easy_setopt(c, CURLOPT_URL, URL);
- m = curl_multi_init();
- res = curl_multi_add_handle(m, c);
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
while (running) {
- res = curl_multi_perform(m, &running);
+ res = (int)curl_multi_perform(m, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (running <= 0) {
fprintf(stderr, "nothing left running.\n");
break;
}
}
+
+ if (mp_timedout) {
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
curl_multi_remove_handle(m, c);
curl_easy_cleanup(c);
curl_multi_cleanup(m);
+ curl_global_cleanup();
return res;
}