aboutsummaryrefslogtreecommitdiff
path: root/tests/libtest
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2006-10-19 17:29:25 +0000
committerYang Tse <yangsita@gmail.com>2006-10-19 17:29:25 +0000
commitead6ab2ef765ec8c917ba8f5424d72a6624b0b20 (patch)
tree76673eab3e7f25a3986b051b28af40c61668ee92 /tests/libtest
parent5c3dc49f44727c33cc683a09b8a90779683fae1a (diff)
Abort test if it seems that it would have run forever. This is just to prevent
test hanging and actually is an indication that there's a condition that is not being properly handled at some point in the library. Loop counter limits might need to be further increased on false positives.
Diffstat (limited to 'tests/libtest')
-rw-r--r--tests/libtest/lib504.c15
-rw-r--r--tests/libtest/lib507.c29
-rw-r--r--tests/libtest/lib509.c30
-rw-r--r--tests/libtest/lib525.c15
-rw-r--r--tests/libtest/lib526.c15
-rw-r--r--tests/libtest/lib530.c15
-rw-r--r--tests/libtest/lib533.c15
-rw-r--r--tests/libtest/lib536.c8
8 files changed, 110 insertions, 32 deletions
diff --git a/tests/libtest/lib504.c b/tests/libtest/lib504.c
index 843e9ebd0..fed91232c 100644
--- a/tests/libtest/lib504.c
+++ b/tests/libtest/lib504.c
@@ -20,7 +20,8 @@ int test(char *URL)
int running;
int max_fd;
int rc;
- int loop=10;
+ int loop1 = 10;
+ int loop2 = 20;
curl_global_init(CURL_GLOBAL_ALL);
c = curl_easy_init();
@@ -42,12 +43,15 @@ int test(char *URL)
interval.tv_sec = 1;
interval.tv_usec = 0;
+ int loop2 = 20;
fprintf(stderr, "curl_multi_perform()\n");
do {
res = curl_multi_perform(m, &running);
- } while (res == CURLM_CALL_MULTI_PERFORM);
+ } while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM));
+ if (loop2 <= 0)
+ break;
if(!running) {
/* This is where this code is expected to reach */
int numleft;
@@ -82,7 +86,12 @@ int test(char *URL)
/* we only allow a certain number of loops to avoid hanging here
forever */
- } while(--loop>0);
+ } while(--loop1>0);
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ ret = 77;
+ }
}
curl_multi_remove_handle(m, c);
diff --git a/tests/libtest/lib507.c b/tests/libtest/lib507.c
index 8fc4ca3ce..e4b1e35a8 100644
--- a/tests/libtest/lib507.c
+++ b/tests/libtest/lib507.c
@@ -7,6 +7,8 @@ int test(char *URL)
int still_running;
int i = -1;
CURLMsg *msg;
+ int loop1 = 20;
+ int loop2 = 40;
multi = curl_multi_init();
@@ -14,8 +16,10 @@ int test(char *URL)
curl_easy_setopt(curls, CURLOPT_URL, URL);
curl_multi_add_handle(multi, curls);
- while ( CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi, &still_running) );
- while(still_running) {
+ while ((--loop1>0) && (CURLM_CALL_MULTI_PERFORM ==
+ curl_multi_perform(multi, &still_running)));
+
+ while ((loop1>0) && (--loop2>0) && (still_running)) {
struct timeval timeout;
int rc;
fd_set fdread;
@@ -34,15 +38,24 @@ int test(char *URL)
break;
case 0:
default:
- while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi, &still_running));
+ loop1 = 20;
+ while ((--loop1>0) && (CURLM_CALL_MULTI_PERFORM ==
+ curl_multi_perform(multi, &still_running)));
break;
}
}
- msg = curl_multi_info_read(multi, &still_running);
- if(msg)
- /* this should now contain a result code from the easy handle,
- get it */
- i = msg->data.result;
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ i = 77;
+ }
+ else {
+ msg = curl_multi_info_read(multi, &still_running);
+ if(msg)
+ /* this should now contain a result code from the easy handle,
+ get it */
+ i = msg->data.result;
+ }
curl_multi_cleanup(multi);
curl_easy_cleanup(curls);
diff --git a/tests/libtest/lib509.c b/tests/libtest/lib509.c
index 415208ac7..9327d728f 100644
--- a/tests/libtest/lib509.c
+++ b/tests/libtest/lib509.c
@@ -175,6 +175,9 @@ int test(char *URL)
int i = 0;
CURLMsg *msg;
+ int loop1 = 40;
+ int loop2 = 20;
+
if(arg2) {
portnum = atoi(arg2);
}
@@ -205,15 +208,16 @@ int test(char *URL)
res = curl_multi_add_handle(multi, p.curl);
- while(!done) {
+ while ((--loop1>0) && (loop2>0) && (!done)) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
+ loop2 = 20;
- while (res == CURLM_CALL_MULTI_PERFORM) {
+ while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
res = curl_multi_perform(multi, &running);
fprintf(stderr, "running=%d res=%d\n",running,res);
if (running <= 0) {
@@ -221,7 +225,7 @@ int test(char *URL)
break;
}
}
- if(done)
+ if ((loop2 <= 0) || (done))
break;
if (res != CURLM_OK) {
@@ -249,13 +253,23 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- msg = curl_multi_info_read(multi, &running);
- /* this should now contain a result code from the easy handle, get it */
- if(msg)
- i = msg->data.result;
+
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ i = 77;
+ }
+ else {
+ msg = curl_multi_info_read(multi, &running);
+ /* this should now contain a result code from the easy handle, get it */
+ if(msg)
+ i = msg->data.result;
+ }
}
- fprintf(stderr, "all done\n");
+ if ((loop1>0) && (loop2>0)) {
+ fprintf(stderr, "all done\n");
+ }
curl_multi_remove_handle(multi, p.curl);
curl_easy_cleanup(p.curl);
diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c
index 9dcddaecf..b5b522de1 100644
--- a/tests/libtest/lib525.c
+++ b/tests/libtest/lib525.c
@@ -24,6 +24,8 @@ int test(char *URL)
int running;
char done=FALSE;
CURLM *m;
+ int loop1 = 40;
+ int loop2 = 20;
if (!arg2) {
fprintf(stderr, "Usage: lib525 [url] [uploadfile]\n");
@@ -82,22 +84,23 @@ int test(char *URL)
res = (int)curl_multi_add_handle(m, curl);
- while(!done) {
+ while ((--loop1>0) && (loop2>0) && (!done)) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
+ loop2 = 20;
- while (res == CURLM_CALL_MULTI_PERFORM) {
+ while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
res = (int)curl_multi_perform(m, &running);
if (running <= 0) {
done = TRUE;
break;
}
}
- if(done)
+ if ((loop2 <= 0) || (done))
break;
if (res != CURLM_OK) {
@@ -125,6 +128,12 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = 77;
+ }
+
#ifdef LIB529
/* test 529 */
curl_multi_remove_handle(m, curl);
diff --git a/tests/libtest/lib526.c b/tests/libtest/lib526.c
index dce6a9f1b..e521b6021 100644
--- a/tests/libtest/lib526.c
+++ b/tests/libtest/lib526.c
@@ -44,6 +44,8 @@ int test(char *URL)
CURLM *m;
int current=0;
int i;
+ int loop1 = 40;
+ int loop2 = 20;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -67,15 +69,16 @@ int test(char *URL)
fprintf(stderr, "Start at URL 0\n");
- while(!done) {
+ while ((--loop1>0) && (loop2>0) && (!done)) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
+ loop2 = 20;
- while (res == CURLM_CALL_MULTI_PERFORM) {
+ while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
res = (int)curl_multi_perform(m, &running);
if (running <= 0) {
#ifdef LIB527
@@ -112,7 +115,7 @@ int test(char *URL)
break;
}
}
- if(done)
+ if ((loop2 <= 0) || (done))
break;
if (res != CURLM_OK) {
@@ -140,6 +143,12 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = 77;
+ }
+
#ifndef LIB527
/* get NUM_HANDLES easy handles */
for(i=0; i < NUM_HANDLES; i++) {
diff --git a/tests/libtest/lib530.c b/tests/libtest/lib530.c
index d062886f4..6ee346d94 100644
--- a/tests/libtest/lib530.c
+++ b/tests/libtest/lib530.c
@@ -23,6 +23,8 @@ int test(char *URL)
char done=FALSE;
CURLM *m;
int i;
+ int loop1 = 40;
+ int loop2 = 20;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -51,22 +53,23 @@ int test(char *URL)
fprintf(stderr, "Start at URL 0\n");
- while(!done) {
+ while ((--loop1>0) && (loop2>0) && (!done)) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
+ loop2 = 20;
- while (res == CURLM_CALL_MULTI_PERFORM) {
+ while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
res = (int)curl_multi_perform(m, &running);
if (running <= 0) {
done = TRUE; /* bail out */
break;
}
}
- if(done)
+ if ((loop2 <= 0) || (done))
break;
if (res != CURLM_OK) {
@@ -94,6 +97,12 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = 77;
+ }
+
/* get NUM_HANDLES easy handles */
for(i=0; i < NUM_HANDLES; i++) {
curl_multi_remove_handle(m, curl[i]);
diff --git a/tests/libtest/lib533.c b/tests/libtest/lib533.c
index 74499c232..4403f75ff 100644
--- a/tests/libtest/lib533.c
+++ b/tests/libtest/lib533.c
@@ -24,6 +24,8 @@ int test(char *URL)
char done=FALSE;
CURLM *m;
int current=0;
+ int loop1 = 40;
+ int loop2 = 20;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -44,15 +46,16 @@ int test(char *URL)
fprintf(stderr, "Start at URL 0\n");
- while(!done) {
+ while ((--loop1>0) && (loop2>0) && (!done)) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
+ loop2 = 20;
- while (res == CURLM_CALL_MULTI_PERFORM) {
+ while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
res = (int)curl_multi_perform(m, &running);
if (running <= 0) {
if(!current++) {
@@ -80,7 +83,7 @@ int test(char *URL)
break;
}
}
- if(done)
+ if ((loop2 <= 0) || (done))
break;
if (res != CURLM_OK) {
@@ -108,6 +111,12 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
+ if ((loop1 <= 0) || (loop2 <= 0)) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = 77;
+ }
+
curl_easy_cleanup(curl);
curl_multi_cleanup(m);
diff --git a/tests/libtest/lib536.c b/tests/libtest/lib536.c
index 40b45e47d..53439c797 100644
--- a/tests/libtest/lib536.c
+++ b/tests/libtest/lib536.c
@@ -21,8 +21,9 @@ static CURLMcode perform(CURLM * multi)
int handles, maxfd;
CURLMcode code;
fd_set fdread, fdwrite, fdexcep;
+ int loop;
- for (;;) {
+ for (loop=40;loop>0;loop--) {
code = curl_multi_perform(multi, &handles);
if (handles <= 0)
return CURLM_OK;
@@ -45,6 +46,11 @@ static CURLMcode perform(CURLM * multi)
if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, 0) == -1)
return (CURLMcode) ~CURLM_OK;
}
+ if (loop <= 0) {
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ return (CURLMcode) ~CURLM_OK;
+ }
}
int test(char *URL)