Skip to content
Snippets Groups Projects
Commit 15c82193 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 5ae21ebd
No related branches found
No related tags found
No related merge requests found
......@@ -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
<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>
......@@ -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)
/*****************************************************************************
* _ _ ____ _
* 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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment