diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2007-07-14 22:39:22 +0000 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2007-07-14 22:39:22 +0000 | 
| commit | 15c821934011bfa0b3d7f3f93d0349adc2ab40e9 (patch) | |
| tree | ae74b77e469e1c8a7f076464d0d1a96171dc6f6a | |
| parent | 5ae21ebde90b299e7617a91b0a59e639414df182 (diff) | |
Added test case 540 and lib540.c, the 'proxyauth.c' test app posted by Shmulik
Regev on the libcurl mailing list on 10 Jul 2007, converted to a test case.
| -rw-r--r-- | tests/data/Makefile.am | 2 | ||||
| -rw-r--r-- | tests/data/test540 | 87 | ||||
| -rw-r--r-- | tests/libtest/Makefile.am | 5 | ||||
| -rw-r--r-- | tests/libtest/lib540.c | 119 | 
4 files changed, 211 insertions, 2 deletions
| diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 4af0491ca..98988cf0e 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -42,4 +42,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46	   \   test405 test604 test605 test606 test607 test608 test609 test294 test295   \   test296 test297 test298 test610 test611 test612 test406 test407 test408   \   test409 test613 test614 test700 test701 test702 test704 test705 test703   \ - test706 test707 test350 test351 test352 test353 test289 + test706 test707 test350 test351 test352 test353 test289 test540 diff --git a/tests/data/test540 b/tests/data/test540 new file mode 100644 index 000000000..aa62ca069 --- /dev/null +++ b/tests/data/test540 @@ -0,0 +1,87 @@ +<testcase> +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data> +HTTP/1.1 407 Authorization Required to proxy me my dear
 +Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
 +
 +And you should ignore this data. +</data> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK
 +Content-Length: 21
 +Server: no
 +
 +Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
 +Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
 +
 +HTTP/1.1 200 OK
 +Content-Length: 21
 +Server: no
 +
 +Nice proxy auth sir! +HTTP/1.1 200 OK
 +Content-Length: 21
 +Server: no
 +
 +Nice proxy auth sir! +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib540 +</tool> +<features> +crypto +</features> + <name> +HTTP proxy auth Digest multi API re-using connection + </name> + <command> +http://test.remote.server.com/path/540 http://%HOSTIP:%HTTPPORT silly:person +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://test.remote.server.com/path/540 HTTP/1.1
 +Host: test.remote.server.com
 +Pragma: no-cache
 +Accept: */*
 +Proxy-Connection: Keep-Alive
 +
 +GET http://test.remote.server.com/path/540 HTTP/1.1
 +Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
 +Host: test.remote.server.com
 +Pragma: no-cache
 +Accept: */*
 +Proxy-Connection: Keep-Alive
 +
 +GET http://test.remote.server.com/path/540 HTTP/1.1
 +Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
 +Host: test.remote.server.com
 +Pragma: no-cache
 +Accept: */*
 +Proxy-Connection: Keep-Alive
 +
 +</protocol> +</verify> +</testcase> diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index b50b0ea21..2614ce3f3 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -47,7 +47,7 @@ SUPPORTFILES = first.c test.h  noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506	\    lib507 lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516	\    lib517 lib518 lib519 lib520 lib521 lib523 lib524 lib525 lib526 lib527	\ -  lib529 lib530 lib532 lib533 lib536 lib537 +  lib529 lib530 lib532 lib533 lib536 lib537 lib540  # Dependencies (may need to be overriden)  LIBTEST_LIBS = $(LIBDIR)/libcurl.la @@ -190,3 +190,6 @@ lib537_SOURCES = lib537.c $(SUPPORTFILES)  lib537_DEPENDENCIES = $(DEPENDENCIES)  lib537_LDADD = $(LIBTEST_LIBS) +lib540_SOURCES = lib540.c $(SUPPORTFILES) +lib540_DEPENDENCIES = $(DEPENDENCIES) +lib540_LDADD = $(LIBTEST_LIBS) diff --git a/tests/libtest/lib540.c b/tests/libtest/lib540.c new file mode 100644 index 000000000..4b8e141b6 --- /dev/null +++ b/tests/libtest/lib540.c @@ -0,0 +1,119 @@ +/***************************************************************************** + *                                  _   _ ____  _ + *  Project                     ___| | | |  _ \| | + *                             / __| | | | |_) | | + *                            | (__| |_| |  _ <| |___ + *                             \___|\___/|_| \_\_____| + * + * $Id$ + * + * This is the 'proxyauth.c' test app posted by Shmulik Regev on the libcurl + * mailing list on 10 Jul 2007, converted to a test case. + * + * argv1 = URL + * argv2 = proxy + * argv3 = proxyuser:password + */ + +#include "test.h" + +#define PROXY arg2 +#define PROXYUSERPWD arg3 + +static void init(CURLM *cm, const char* url, const char* userpwd) +{ +  CURL *eh = curl_easy_init(); + +  curl_easy_setopt(eh, CURLOPT_URL, url); +  curl_easy_setopt(eh, CURLOPT_PROXY, PROXY); +  curl_easy_setopt(eh, CURLOPT_PROXYUSERPWD, userpwd); +  curl_easy_setopt(eh, CURLOPT_PROXYAUTH, CURLAUTH_ANY); +  curl_easy_setopt(eh, CURLOPT_VERBOSE, 1); +  curl_easy_setopt(eh, CURLOPT_HEADER, 1); + +  curl_multi_add_handle(cm, eh); +} + +static int loop(CURLM *cm, const char* url, const char* userpwd) +{ +  CURLMsg *msg; +  long L; +  int M, Q, U = -1; +  fd_set R, W, E; +  struct timeval T; + +  init(cm, url, userpwd); + +  while (U) { +    while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(cm, &U)); + +    if (U) { +      FD_ZERO(&R); +      FD_ZERO(&W); +      FD_ZERO(&E); + +      if (curl_multi_fdset(cm, &R, &W, &E, &M)) { +        fprintf(stderr, "E: curl_multi_fdset\n"); +        return EXIT_FAILURE; +      } + +      /* In a real-world program you OF COURSE check the return that maxfd is +         bigger than -1 so that the call to select() below makes sense! */ + +      if (curl_multi_timeout(cm, &L)) { +        fprintf(stderr, "E: curl_multi_timeout\n"); +        return EXIT_FAILURE; +      } + +      if(L != -1) { +        T.tv_sec = L/1000; +        T.tv_usec = (L%1000)*1000; +      } +      else { +        T.tv_sec = 5; +        T.tv_usec = 0; +      } + +      if (0 > select(M+1, &R, &W, &E, &T)) { +        fprintf(stderr, "E: select\n"); +        return EXIT_FAILURE; +      } +    } + +    while ((msg = curl_multi_info_read(cm, &Q))) { +      if (msg->msg == CURLMSG_DONE) { +        char *url; +        CURL *e = msg->easy_handle; +        curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, &url); +        fprintf(stderr, "R: %d - %s <%s>\n", +                msg->data.result, curl_easy_strerror(msg->data.result), url); +        curl_multi_remove_handle(cm, e); +        curl_easy_cleanup(e); +      } +      else { +        fprintf(stderr, "E: CURLMsg (%d)\n", msg->msg); +      } +    } +  } + +  return 1; +} + +int test(char *URL) +{ +  CURLM *cm; + +  curl_global_init(CURL_GLOBAL_ALL); + +  cm = curl_multi_init(); +  loop(cm, URL, PROXYUSERPWD); + +  fprintf(stderr, "lib540: now we do the request again\n"); +  loop(cm, URL, PROXYUSERPWD); + +  curl_multi_cleanup(cm); + +  curl_global_cleanup(); + +  return EXIT_SUCCESS; +} | 
