aboutsummaryrefslogtreecommitdiffstats
path: root/tests/libtest/lib575.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libtest/lib575.c')
-rw-r--r--tests/libtest/lib575.c105
1 files changed, 55 insertions, 50 deletions
diff --git a/tests/libtest/lib575.c b/tests/libtest/lib575.c
index 521720e9..942df68c 100644
--- a/tests/libtest/lib575.c
+++ b/tests/libtest/lib575.c
@@ -1,21 +1,34 @@
-/*****************************************************************************
+/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- */
-
+ * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
#include "test.h"
-#include <sys/types.h>
-#include <sys/stat.h>
#include <fcntl.h>
#include "testutil.h"
+#include "warnless.h"
#include "memdebug.h"
+#define TEST_HANG_TIMEOUT 60 * 1000
+
/* 3x download!
* 1. normal
* 2. dup handle
@@ -24,26 +37,21 @@
int test(char *URL)
{
- CURLMcode m;
- CURL *handle = NULL, *duphandle;
+ CURL *handle = NULL;
+ CURL *duphandle = NULL;
CURLM *mhandle = NULL;
int res = 0;
int still_running = 0;
- if(curl_global_init(CURL_GLOBAL_ALL)) {
- fprintf(stderr, "curl_global_init() failed\n");
- goto test_cleanup;
- }
+ start_test_timing();
- handle = curl_easy_init();
- if(!handle) {
- res = CURLE_OUT_OF_MEMORY;
- goto test_cleanup;
- }
+ global_init(CURL_GLOBAL_ALL);
+
+ easy_init(handle);
- test_setopt(handle, CURLOPT_URL, URL);
- test_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
- test_setopt(handle, CURLOPT_VERBOSE, 1L);
+ easy_setopt(handle, CURLOPT_URL, URL);
+ easy_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+ easy_setopt(handle, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(handle);
if(res)
@@ -59,51 +67,48 @@ int test(char *URL)
curl_easy_cleanup(handle);
handle = duphandle;
- mhandle = curl_multi_init();
- if(!mhandle) {
- fprintf(stderr, "curl_multi_init() failed\n");
- goto test_cleanup;
- }
+ multi_init(mhandle);
+
+ multi_add_handle(mhandle, handle);
- curl_multi_add_handle(mhandle, handle);
+ multi_perform(mhandle, &still_running);
- while(CURLM_CALL_MULTI_PERFORM ==
- curl_multi_perform(mhandle, &still_running));
+ abort_on_test_timeout();
while(still_running) {
- static struct timeval timeout = /* 100 ms */ { 0, 100000L };
- int rc;
+ struct timeval timeout;
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
- int max_fdset = -1;
+ int maxfd = -99;
+
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 100000L; /* 100 ms */
+
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
- m = curl_multi_fdset(mhandle, &fdread, &fdwrite, &fdexcep, &max_fdset);
- if(m != CURLM_OK) {
- fprintf(stderr, "curl_multi_fdset() error\n");
- goto test_cleanup;
- }
- /* We call select(max_fdset + 1, ...), specially in case of (maxfd == -1),
- * we call select(0, ...), which is basically equal to sleep. */
- rc = select(max_fdset + 1, &fdread, &fdwrite, &fdexcep, &timeout);
- if(rc == -1) {
- fprintf(stderr, "select() error\n");
- goto test_cleanup;
- }
- else {
- while(CURLM_CALL_MULTI_PERFORM ==
- curl_multi_perform(mhandle, &still_running));
- }
+ multi_fdset(mhandle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* At this point, maxfd is guaranteed to be greater or equal than -1. */
+
+ select_test(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ abort_on_test_timeout();
+
+ multi_perform(mhandle, &still_running);
+
+ abort_on_test_timeout();
}
test_cleanup:
- if(mhandle)
- curl_multi_cleanup(mhandle);
- if(handle)
- curl_easy_cleanup(handle);
+
+ /* undocumented cleanup sequence - type UA */
+
+ curl_multi_cleanup(mhandle);
+ curl_easy_cleanup(handle);
curl_global_cleanup();
+
return res;
}