aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2007-07-14 22:39:22 +0000
committerDaniel Stenberg <daniel@haxx.se>2007-07-14 22:39:22 +0000
commit15c821934011bfa0b3d7f3f93d0349adc2ab40e9 (patch)
treeae74b77e469e1c8a7f076464d0d1a96171dc6f6a
parent5ae21ebde90b299e7617a91b0a59e639414df182 (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.am2
-rw-r--r--tests/data/test54087
-rw-r--r--tests/libtest/Makefile.am5
-rw-r--r--tests/libtest/lib540.c119
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;
+}