Loading tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -22,4 +22,4 @@ test500 test501 test502 test503 test504 test136 test57 test137 test138 \ test58 test139 test140 test141 test59 test60 test61 test142 test143 \ test62 test63 test64 test65 test66 test144 test145 test67 test68 test41 \ test40 test42 test69 test70 test71 test72 test73 test146 test505 \ test74 test75 test76 test77 test78 test147 test148 test74 test75 test76 test77 test78 test147 test148 test506 tests/data/test506 0 → 100644 +147 −0 Original line number Diff line number Diff line # Server-side <reply> <data1> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT Server: test-server/fake Content-Type: text/html Set-Cookie: test1=one; domain=foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test2=two; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test3=three; domain=foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Content-Length: 29 run 1: set cookie 1, 2 and 3 </data1> <data2> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:01 GMT Server: test-server/fake Content-Type: text/html Set-Cookie: test4=four; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test5=five; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Content-Length: 26 run 2: set cookie 4 and 5 </data2> <data3> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:02 GMT Server: test-server/fake Content-Type: text/html Funny-head: yesyes Set-Cookie: test4=overwritten4; domain=host.foo.com; expires=Thu Dec 31 23:59:59 MET 2009 Set-Cookie: test1=overwritten1; domain=foo.com; expires=Tue Feb 2 11:56:27 MET 2007 Content-Type: text/html Content-Length: 32 run 3: overwrite cookie 1 and 4 </data5> </reply> # Client-side <client> <server> http </server> <name> HTTP with shared cookie list (and dns cache) </name> <tool> lib506 </tool> <command> http://%HOSTIP:%HOSTPORT/506 </command> </client> # Verify data after the test has been "shot" <verify> <stdout> GLOBAL_INIT SHARE_INIT CURL_LOCK_DATA_COOKIE CURL_LOCK_DATA_DNS *** run 1 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 1: set cookie 1, 2 and 3 lock: dns <Pigs in space> unlock: dns <Pigs in space> CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> *** run 2 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 2: set cookie 4 and 5 lock: dns <Pigs in space> unlock: dns <Pigs in space> CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> *** run 3 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> CURLOPT_COOKIEJAR PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 3: overwrite cookie 1 and 4 lock: dns <Pigs in space> unlock: dns <Pigs in space> try SHARE_CLEANUP... lock: share <Pigs in space> unlock: share <Pigs in space> SHARE_CLEANUP failed, correct CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> SHARE_CLEANUP lock: share <Pigs in space> unlock: share <Pigs in space> GLOBAL_CLEANUP </stdout> <stderr> http://%HOSTIP:%HOSTPORT/506 </stderr> <file name="log/jar506"> # Netscape HTTP Cookie File # http://www.netscape.com/newsref/std/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. .foo.com TRUE / FALSE 1170413787 test1 overwritten1 .host.foo.com TRUE / FALSE 1170327387 test2 two .foo.com TRUE / FALSE 1170327387 test3 three .host.foo.com TRUE / FALSE 1262300399 test4 overwritten4 .host.foo.com TRUE / FALSE 1170327387 test5 five </file> </verify> tests/libtest/Makefile.am +6 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ LIBDIR = ../../lib SUPPORTFILES = first.c test.h # here are all tools used for running libcurl tests noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_LDADD = $(LIBDIR)/libcurl.la Loading @@ -36,3 +36,8 @@ lib504_DEPENDENCIES = $(LIBDIR)/libcurl.la lib505_SOURCES = lib505.c $(SUPPORTFILES) lib505_LDADD = $(LIBDIR)/libcurl.la lib505_DEPENDENCIES = $(LIBDIR)/libcurl.la lib506_SOURCES = lib506.c $(SUPPORTFILES) lib506_LDADD = $(LIBDIR)/libcurl.la lib506_DEPENDENCIES = $(LIBDIR)/libcurl.la tests/libtest/lib506.c 0 → 100644 +210 −0 Original line number Diff line number Diff line #include "test.h" #include <stdlib.h> #include <ctype.h> #include <errno.h> const char *HOSTHEADER = "Host: www.host.foo.com"; const char *JAR = "log/jar506"; #define THREADS 2 /* struct containing data of a thread */ struct Tdata { CURLSH *share; char *url; }; /* lock callback */ void lock(CURL *handle, curl_lock_data data, curl_lock_access access, void *useptr ) { const char *what; (void)handle; (void)access; switch ( data ) { case CURL_LOCK_DATA_SHARE: what = "share "; break; case CURL_LOCK_DATA_DNS: what = "dns "; break; case CURL_LOCK_DATA_COOKIE: what = "cookie"; break; default: fprintf(stderr, "lock: no such data: %d\n",data); return; } printf("lock: %s <%s>\n", what, (char *)useptr); } /* unlock callback */ void unlock(CURL *handle, curl_lock_data data, void *useptr ) { const char *what; (void)handle; switch ( data ) { case CURL_LOCK_DATA_SHARE: what = "share "; break; case CURL_LOCK_DATA_DNS: what = "dns "; break; case CURL_LOCK_DATA_COOKIE: what = "cookie"; break; default: fprintf(stderr, "unlock: no such data: %d\n",data); return; } printf("unlock: %s <%s>\n", what, (char *)useptr); } /* build host entry */ struct curl_slist *sethost(struct curl_slist *headers) { (void)headers; return curl_slist_append(NULL, HOSTHEADER ); } /* the dummy thread function */ void *fire(void *ptr) { CURLcode code; struct curl_slist *headers; struct Tdata *tdata = (struct Tdata*)ptr; CURL *curl = curl_easy_init(); int i; headers = sethost(NULL); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, (void*)headers); curl_easy_setopt(curl, CURLOPT_URL, (void*)tdata->url); printf( "CURLOPT_SHARE\n" ); curl_easy_setopt(curl, CURLOPT_SHARE, (void*)tdata->share); printf( "PERFORM\n" ); code = curl_easy_perform(curl); if( code != CURLE_OK ) { fprintf(stderr, "perform url '%s' repeat %d failed, curlcode %d\n", tdata->url, i, code); } printf( "CLEANUP\n" ); curl_easy_cleanup(curl); curl_slist_free_all(headers); return NULL; } /* build request url */ char *suburl(char *base, int i) { int len = strlen(base); char *url = (char *)malloc(len+5); if (!url) { abort(); } strcpy(url, base); strcat(url, "0000"); url[len+3] = 48+i; return url; } /* test function */ CURLcode test(char *URL) { CURLcode res; CURLSHcode scode; char *url; struct Tdata tdata; CURL *curl; CURLSH *share; struct curl_slist *headers; int i; printf( "GLOBAL_INIT\n" ); curl_global_init( CURL_GLOBAL_ALL ); /* prepare share */ printf( "SHARE_INIT\n" ); share = curl_share_init(); curl_share_setopt( share, CURLSHOPT_LOCKFUNC, lock); curl_share_setopt( share, CURLSHOPT_UNLOCKFUNC, unlock); curl_share_setopt( share, CURLSHOPT_USERDATA, "Pigs in space"); printf( "CURL_LOCK_DATA_COOKIE\n" ); curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE); printf( "CURL_LOCK_DATA_DNS\n" ); curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS); res = 0; /* start treads */ for (i=1; i<=THREADS; i++ ) { /* set thread data */ tdata.url = suburl( URL, i ); /* must be freed */ tdata.share = share; /* simulate thread, direct call of "thread" function */ printf( "*** run %d\n",i ); fire( &tdata ); free( tdata.url ); } /* fetch a another one and save cookies */ printf( "*** run %d\n", i ); curl = curl_easy_init(); url = suburl( URL, i ); headers = sethost( NULL ); curl_easy_setopt( curl, CURLOPT_HTTPHEADER, (void*)headers ); curl_easy_setopt( curl, CURLOPT_URL, url ); printf( "CURLOPT_SHARE\n" ); curl_easy_setopt( curl, CURLOPT_SHARE, share ); printf( "CURLOPT_COOKIEJAR\n" ); curl_easy_setopt( curl, CURLOPT_COOKIEJAR, JAR ); printf( "PERFORM\n" ); curl_easy_perform( curl ); /* try to free share, expect to fail because share is in use*/ printf( "try SHARE_CLEANUP...\n" ); scode = curl_share_cleanup( share ); if ( scode==CURLSHE_OK ) { fprintf(stderr, "curl_share_cleanup succeed but error expected\n"); share = NULL; } else { printf( "SHARE_CLEANUP failed, correct\n" ); } /* clean up last handle */ printf( "CLEANUP\n" ); curl_easy_cleanup( curl ); curl_slist_free_all( headers ); free(url); /* free share */ printf( "SHARE_CLEANUP\n" ); scode = curl_share_cleanup( share ); if ( scode!=CURLSHE_OK ) { fprintf(stderr, "curl_share_cleanup failed, code errno %d\n", scode); } printf( "GLOBAL_CLEANUP\n" ); curl_global_cleanup(); return res; } Loading
tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -22,4 +22,4 @@ test500 test501 test502 test503 test504 test136 test57 test137 test138 \ test58 test139 test140 test141 test59 test60 test61 test142 test143 \ test62 test63 test64 test65 test66 test144 test145 test67 test68 test41 \ test40 test42 test69 test70 test71 test72 test73 test146 test505 \ test74 test75 test76 test77 test78 test147 test148 test74 test75 test76 test77 test78 test147 test148 test506
tests/data/test506 0 → 100644 +147 −0 Original line number Diff line number Diff line # Server-side <reply> <data1> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT Server: test-server/fake Content-Type: text/html Set-Cookie: test1=one; domain=foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test2=two; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test3=three; domain=foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Content-Length: 29 run 1: set cookie 1, 2 and 3 </data1> <data2> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:01 GMT Server: test-server/fake Content-Type: text/html Set-Cookie: test4=four; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Set-Cookie: test5=five; domain=host.foo.com; expires=Tue Feb 1 11:56:27 MET 2007 Content-Length: 26 run 2: set cookie 4 and 5 </data2> <data3> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:02 GMT Server: test-server/fake Content-Type: text/html Funny-head: yesyes Set-Cookie: test4=overwritten4; domain=host.foo.com; expires=Thu Dec 31 23:59:59 MET 2009 Set-Cookie: test1=overwritten1; domain=foo.com; expires=Tue Feb 2 11:56:27 MET 2007 Content-Type: text/html Content-Length: 32 run 3: overwrite cookie 1 and 4 </data5> </reply> # Client-side <client> <server> http </server> <name> HTTP with shared cookie list (and dns cache) </name> <tool> lib506 </tool> <command> http://%HOSTIP:%HOSTPORT/506 </command> </client> # Verify data after the test has been "shot" <verify> <stdout> GLOBAL_INIT SHARE_INIT CURL_LOCK_DATA_COOKIE CURL_LOCK_DATA_DNS *** run 1 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 1: set cookie 1, 2 and 3 lock: dns <Pigs in space> unlock: dns <Pigs in space> CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> *** run 2 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 2: set cookie 4 and 5 lock: dns <Pigs in space> unlock: dns <Pigs in space> CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> *** run 3 CURLOPT_SHARE lock: share <Pigs in space> unlock: share <Pigs in space> CURLOPT_COOKIEJAR PERFORM lock: dns <Pigs in space> unlock: dns <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> lock: cookie <Pigs in space> unlock: cookie <Pigs in space> run 3: overwrite cookie 1 and 4 lock: dns <Pigs in space> unlock: dns <Pigs in space> try SHARE_CLEANUP... lock: share <Pigs in space> unlock: share <Pigs in space> SHARE_CLEANUP failed, correct CLEANUP lock: cookie <Pigs in space> unlock: cookie <Pigs in space> SHARE_CLEANUP lock: share <Pigs in space> unlock: share <Pigs in space> GLOBAL_CLEANUP </stdout> <stderr> http://%HOSTIP:%HOSTPORT/506 </stderr> <file name="log/jar506"> # Netscape HTTP Cookie File # http://www.netscape.com/newsref/std/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. .foo.com TRUE / FALSE 1170413787 test1 overwritten1 .host.foo.com TRUE / FALSE 1170327387 test2 two .foo.com TRUE / FALSE 1170327387 test3 three .host.foo.com TRUE / FALSE 1262300399 test4 overwritten4 .host.foo.com TRUE / FALSE 1170327387 test5 five </file> </verify>
tests/libtest/Makefile.am +6 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ LIBDIR = ../../lib SUPPORTFILES = first.c test.h # here are all tools used for running libcurl tests noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_LDADD = $(LIBDIR)/libcurl.la Loading @@ -36,3 +36,8 @@ lib504_DEPENDENCIES = $(LIBDIR)/libcurl.la lib505_SOURCES = lib505.c $(SUPPORTFILES) lib505_LDADD = $(LIBDIR)/libcurl.la lib505_DEPENDENCIES = $(LIBDIR)/libcurl.la lib506_SOURCES = lib506.c $(SUPPORTFILES) lib506_LDADD = $(LIBDIR)/libcurl.la lib506_DEPENDENCIES = $(LIBDIR)/libcurl.la
tests/libtest/lib506.c 0 → 100644 +210 −0 Original line number Diff line number Diff line #include "test.h" #include <stdlib.h> #include <ctype.h> #include <errno.h> const char *HOSTHEADER = "Host: www.host.foo.com"; const char *JAR = "log/jar506"; #define THREADS 2 /* struct containing data of a thread */ struct Tdata { CURLSH *share; char *url; }; /* lock callback */ void lock(CURL *handle, curl_lock_data data, curl_lock_access access, void *useptr ) { const char *what; (void)handle; (void)access; switch ( data ) { case CURL_LOCK_DATA_SHARE: what = "share "; break; case CURL_LOCK_DATA_DNS: what = "dns "; break; case CURL_LOCK_DATA_COOKIE: what = "cookie"; break; default: fprintf(stderr, "lock: no such data: %d\n",data); return; } printf("lock: %s <%s>\n", what, (char *)useptr); } /* unlock callback */ void unlock(CURL *handle, curl_lock_data data, void *useptr ) { const char *what; (void)handle; switch ( data ) { case CURL_LOCK_DATA_SHARE: what = "share "; break; case CURL_LOCK_DATA_DNS: what = "dns "; break; case CURL_LOCK_DATA_COOKIE: what = "cookie"; break; default: fprintf(stderr, "unlock: no such data: %d\n",data); return; } printf("unlock: %s <%s>\n", what, (char *)useptr); } /* build host entry */ struct curl_slist *sethost(struct curl_slist *headers) { (void)headers; return curl_slist_append(NULL, HOSTHEADER ); } /* the dummy thread function */ void *fire(void *ptr) { CURLcode code; struct curl_slist *headers; struct Tdata *tdata = (struct Tdata*)ptr; CURL *curl = curl_easy_init(); int i; headers = sethost(NULL); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, (void*)headers); curl_easy_setopt(curl, CURLOPT_URL, (void*)tdata->url); printf( "CURLOPT_SHARE\n" ); curl_easy_setopt(curl, CURLOPT_SHARE, (void*)tdata->share); printf( "PERFORM\n" ); code = curl_easy_perform(curl); if( code != CURLE_OK ) { fprintf(stderr, "perform url '%s' repeat %d failed, curlcode %d\n", tdata->url, i, code); } printf( "CLEANUP\n" ); curl_easy_cleanup(curl); curl_slist_free_all(headers); return NULL; } /* build request url */ char *suburl(char *base, int i) { int len = strlen(base); char *url = (char *)malloc(len+5); if (!url) { abort(); } strcpy(url, base); strcat(url, "0000"); url[len+3] = 48+i; return url; } /* test function */ CURLcode test(char *URL) { CURLcode res; CURLSHcode scode; char *url; struct Tdata tdata; CURL *curl; CURLSH *share; struct curl_slist *headers; int i; printf( "GLOBAL_INIT\n" ); curl_global_init( CURL_GLOBAL_ALL ); /* prepare share */ printf( "SHARE_INIT\n" ); share = curl_share_init(); curl_share_setopt( share, CURLSHOPT_LOCKFUNC, lock); curl_share_setopt( share, CURLSHOPT_UNLOCKFUNC, unlock); curl_share_setopt( share, CURLSHOPT_USERDATA, "Pigs in space"); printf( "CURL_LOCK_DATA_COOKIE\n" ); curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE); printf( "CURL_LOCK_DATA_DNS\n" ); curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS); res = 0; /* start treads */ for (i=1; i<=THREADS; i++ ) { /* set thread data */ tdata.url = suburl( URL, i ); /* must be freed */ tdata.share = share; /* simulate thread, direct call of "thread" function */ printf( "*** run %d\n",i ); fire( &tdata ); free( tdata.url ); } /* fetch a another one and save cookies */ printf( "*** run %d\n", i ); curl = curl_easy_init(); url = suburl( URL, i ); headers = sethost( NULL ); curl_easy_setopt( curl, CURLOPT_HTTPHEADER, (void*)headers ); curl_easy_setopt( curl, CURLOPT_URL, url ); printf( "CURLOPT_SHARE\n" ); curl_easy_setopt( curl, CURLOPT_SHARE, share ); printf( "CURLOPT_COOKIEJAR\n" ); curl_easy_setopt( curl, CURLOPT_COOKIEJAR, JAR ); printf( "PERFORM\n" ); curl_easy_perform( curl ); /* try to free share, expect to fail because share is in use*/ printf( "try SHARE_CLEANUP...\n" ); scode = curl_share_cleanup( share ); if ( scode==CURLSHE_OK ) { fprintf(stderr, "curl_share_cleanup succeed but error expected\n"); share = NULL; } else { printf( "SHARE_CLEANUP failed, correct\n" ); } /* clean up last handle */ printf( "CLEANUP\n" ); curl_easy_cleanup( curl ); curl_slist_free_all( headers ); free(url); /* free share */ printf( "SHARE_CLEANUP\n" ); scode = curl_share_cleanup( share ); if ( scode!=CURLSHE_OK ) { fprintf(stderr, "curl_share_cleanup failed, code errno %d\n", scode); } printf( "GLOBAL_CLEANUP\n" ); curl_global_cleanup(); return res; }