diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2012-12-11 23:31:45 +0100 |
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2012-12-11 23:31:45 +0100 |
| commit | 50d7397ea54df79e403649d1e37d002eb52d268f (patch) | |
| tree | 6b6eed95d3d4b69cd26e0b2377fa934d5ea99c09 /tests/data | |
| parent | a3d6368c690b943e92082951e8c5fc3ef2d76c12 (diff) | |
| parent | 4deb52831a071bc83cefb4871764281a5c32f902 (diff) | |
| download | curl-multi-always.tar.gz | |
Merge branch 'multi2' into multi-alwaysmulti-always
Diffstat (limited to 'tests/data')
782 files changed, 55551 insertions, 0 deletions
diff --git a/tests/data/.gitattributes b/tests/data/.gitattributes new file mode 100644 index 000000000..4636c2ccf --- /dev/null +++ b/tests/data/.gitattributes @@ -0,0 +1 @@ +test* -crlf diff --git a/tests/data/DISABLED b/tests/data/DISABLED new file mode 100644 index 000000000..5a0f2bf95 --- /dev/null +++ b/tests/data/DISABLED @@ -0,0 +1,7 @@ +# This file can be used to specify test cases that should not run when all +# test cases are run by runtests.pl. Just add the plain test case numbers, one +# per line. +# Lines starting with '#' letters are treated as comments. +594 +1209 +1211 diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am new file mode 100644 index 000000000..0528a2567 --- /dev/null +++ b/tests/data/Makefile.am @@ -0,0 +1,126 @@ +iall: +install: +test: + +# this list is in numerical order +TESTCASES = test1 test2 test3 test4 test5 test6 test7 test8 test9 \ +test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \ +test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \ +test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \ +test40 test41 test42 test43 test44 test45 test46 test47 test48 test49 \ +test50 test51 test52 test53 test54 test55 test56 test57 test58 test59 \ +test60 test61 test62 test63 test64 test65 test66 test67 test68 test69 \ +test70 test71 test72 test73 test74 test75 test76 test77 test78 test79 \ +test80 test81 test82 test83 test84 test85 test86 test87 test88 test89 \ +test90 test91 test92 test93 test94 test95 test97 test98 test99 test100 \ +test101 test102 test103 test104 test105 test106 test107 test108 test109 \ +test110 test111 test112 test113 test114 test115 test116 test117 test118 \ +test119 test120 test121 test122 test123 test124 test125 test126 test127 \ +test128 test129 test130 test131 test132 test133 test134 test135 test136 \ +test137 test138 test139 test140 test141 test142 test143 test144 test145 \ +test146 test147 test148 test149 test150 test151 test152 test153 test154 \ +test155 test156 test157 test158 test159 test160 test161 test162 test163 \ +test164 test165 test166 test167 test168 test169 test170 test171 test172 \ +test173 test174 test175 test176 test177 test178 test179 test180 test181 \ +test182 test183 test184 test185 test186 test187 test188 test189 test190 \ +test191 test192 test193 test194 test195 test196 test197 test198 test199 \ +test200 test201 test202 test203 test204 test205 test206 test207 test208 \ +test209 test210 test211 test212 test213 test214 test215 test216 test217 \ +test218 test220 test221 test222 test223 test224 test225 test226 test227 \ +test228 test229 test231 test233 test234 test235 test236 test237 test238 \ +test239 test240 test241 test242 test243 test245 test246 test247 test248 \ +test249 test250 test251 test252 test253 test254 test255 test256 test257 \ +test258 test259 test260 test261 test262 test263 test264 test265 test266 \ +test267 test268 test269 test270 test271 test272 test273 test274 test275 \ +test276 test277 test278 test279 test280 test281 test282 test283 test284 \ +test285 test286 test287 test288 test289 test290 test291 test292 test293 \ +test294 test295 test296 test297 test298 test299 test300 test301 test302 \ +test303 test304 test305 test306 test307 test308 test309 test310 test311 \ +test312 test313 test320 test321 test322 test323 test324 test350 test351 \ +test352 test353 test354 test400 test401 test402 test403 test404 test405 \ +test406 test407 test408 test409 test500 test501 test502 test503 test504 \ +test505 test506 test507 test508 test510 test511 test512 test513 test514 \ +test515 test516 test517 test518 test519 test520 test521 test522 test523 \ +test524 test525 test526 test527 test528 test529 test530 test531 test532 \ +test533 test534 test535 test536 test537 test538 test539 test540 test541 \ +test542 test543 test544 test545 test546 test547 test548 test549 test550 \ +test551 test552 test553 test554 test555 test556 test557 test560 test561 \ +test562 test563 test564 test565 test566 test567 test568 test569 test570 \ +test571 test572 test573 test574 test575 test576 test578 test579 test580 \ +test581 test582 test583 test584 test585 test586 test587 test588 test590 \ +test591 test592 test593 test594 test595 test596 test597 test598 test599 \ +test600 test601 test602 test603 test604 \ +test605 test606 test607 test608 test609 test610 test611 test612 test613 \ +test614 test615 test616 test617 test618 test619 test620 test621 test622 \ +test623 test624 test625 test626 test627 test628 test629 test630 test631 \ +test632 test633 test634 test635 test636 test637 test638 test639 \ +test700 test701 test702 test703 test704 test705 test706 test707 test708 \ +test709 test710 \ +test800 test801 test802 \ +test803 test804 test805 test806 test807 test808 test809 test810 test811 \ +test812 test813 test814 test815 \ +test1000 test1001 test1002 test1003 test1004 test1005 \ +test1006 test1007 test1008 test1009 test1010 test1011 test1012 test1013 \ +test1014 test1015 test1016 test1017 test1018 test1019 test1020 test1021 \ +test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 \ +test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 \ +test1038 test1039 test1040 test1041 test1042 test1043 test1044 test1045 \ +test1046 test1047 test1048 test1049 test1050 test1051 test1052 test1053 \ +test1054 test1055 test1056 test1057 test1058 test1059 test1060 test1061 \ +test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 \ +test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 \ +test1078 test1079 test1080 test1081 test1082 test1083 test1084 test1085 \ +test1086 test1087 test1088 test1089 test1090 test1091 test1092 test1093 \ +test1094 test1095 test1096 test1097 test1098 test1099 test1100 test1101 \ +test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 \ +test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 \ +test1118 test1119 test1120 test1121 test1122 test1123 test1124 test1125 \ +test1126 test1127 test1128 test1129 test1130 test1131 test1132 \ +test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ +test1208 test1209 test1210 test1211 \ +test1220 \ +test1300 test1301 test1302 test1303 test1304 test1305 \ +test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \ +test1314 test1315 test1316 test1317 test1318 test1319 test1320 test1321 \ +test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 \ +test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 \ +test1339 test1340 test1341 test1342 test1343 test1344 test1345 test1346 \ +test1347 test1348 test1349 test1350 test1351 test1352 test1353 test1354 \ +test1355 test1356 test1357 test1358 test1359 test1360 test1361 test1362 \ +test1363 test1364 test1365 test1366 test1367 test1368 test1369 test1370 \ +test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 \ +test1379 test1380 test1381 test1382 test1383 test1384 test1385 test1386 \ +test1387 test1388 test1389 test1390 test1391 test1392 test1393 \ +test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \ +test1408 test1409 test1410 test1411 test1412 test1413 \ +test1500 test1501 test1502 \ +test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \ +test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \ +test2016 test2017 test2018 test2019 test2020 test2021 test2022 \ +test2023 test2024 test2025 \ +test2026 test2027 test2028 \ +test2029 test2030 test2031 \ +test2032 + +EXTRA_DIST = $(TESTCASES) DISABLED + +filecheck: + @mkdir test-place; \ + cp "$(top_srcdir)"/tests/data/test[0-9]* test-place/; \ + rm test-place/*~; \ + for f in $(EXTRA_DIST); do \ + if test -f "$(top_srcdir)/tests/data/$$f"; then \ + rm -f "test-place/$$f"; \ + else \ + echo "$$f is listed but missing!"; \ + fi \ + done; \ + echo "Local files not present in EXTRA_DIST:" ; \ + ls test-place; \ + ! ls test-place | grep . >/dev/null ; \ + RC=$$? ; \ + rm -rf test-place ; \ + exit $$RC + +show: + @echo $(EXTRA_DIST) diff --git a/tests/data/test1 b/tests/data/test1 new file mode 100644 index 000000000..b88273514 --- /dev/null +++ b/tests/data/test1 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET + </name> + <command> +http://%HOSTIP:%HTTPPORT/1 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test10 b/tests/data/test10 new file mode 100644 index 000000000..806aa697f --- /dev/null +++ b/tests/data/test10 @@ -0,0 +1,67 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +simple HTTP PUT from file + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/10 -T log/test10.txt +</command> +<file name="log/test10.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /we/want/10 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird + file + to + upload +for + testing +the + PUT + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test100 b/tests/data/test100 new file mode 100644 index 000000000..6127163b2 --- /dev/null +++ b/tests/data/test100 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1000 b/tests/data/test1000 new file mode 100644 index 000000000..e6f8eef41 --- /dev/null +++ b/tests/data/test1000 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +NOBODY +</keywords> +</info> +# +# Server-side +<reply> +<datacheck> +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list PASV with -I + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1000/ -I +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD 1000
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1001 b/tests/data/test1001 new file mode 100644 index 000000000..9a87d6e8b --- /dev/null +++ b/tests/data/test1001 @@ -0,0 +1,104 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP proxy +HTTP Digest auth +Resume +Content-Range +CUSTOMREQUEST +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP POST --digest with PUT and resumed upload and modified method + </name> + <command> +http://%HOSTIP:%HTTPPORT/1001 -u auser:apasswd --digest -T log/1001 -x http://%HOSTIP:%HTTPPORT -C 2 -X GET +</command> +<file name="log/1001"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1001", response="6af4d89c952f4dd4cc215a6878dc499d"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1002 b/tests/data/test1002 new file mode 100644 index 000000000..04c18f91a --- /dev/null +++ b/tests/data/test1002 @@ -0,0 +1,114 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP proxy +HTTP Digest auth +Resume +Content-Range +CUSTOMREQUEST +</keywords> +</info> + +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP POST --digest with PUT and resumed upload and modified method, twice + </name> + <command> +http://%HOSTIP:%HTTPPORT/1002.upload1 -T log/1002 http://%HOSTIP:%HTTPPORT/1002.upload2 -T log/1002 -u auser:apasswd --digest -x http://%HOSTIP:%HTTPPORT -C 2 -X GET +</command> +<file name="log/1002"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload1", response="198aa9b6acb4b0c71d02a197a5e41f54"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload2", response="d711f0d2042786d930de635ba0d1a1d0"
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.16.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1003 b/tests/data/test1003 new file mode 100644 index 000000000..08e377a79 --- /dev/null +++ b/tests/data/test1003 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +RETR +huge response +</keywords> +</info> +# Server-side +<reply> +<data> +mooo +</data> +# a ~17000 bytes response string to CWD to make sure the ftp parser deals +# with it nicely +<servercmd> +REPLY CWD 250 CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with excessively large server command response line + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/1003 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1003
+RETR 1003
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1004 b/tests/data/test1004 new file mode 100644 index 000000000..955163b36 --- /dev/null +++ b/tests/data/test1004 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with empty proxy + </name> + <command> +http://%HOSTIP:%HTTPPORT/1004 --proxy "" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test1005 b/tests/data/test1005 new file mode 100644 index 000000000..5c0c67643 --- /dev/null +++ b/tests/data/test1005 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +RETR +huge response +</keywords> +</info> +# Server-side +<reply> +<data> +mooo +</data> +# a long set of response strings to CWD to make sure the ftp parser deals +# with it nicely +<servercmd> +REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250 Finally, here is the response +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with excessively large number of server command response lines + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/1005 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1005
+RETR 1005
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1006 b/tests/data/test1006 new file mode 100644 index 000000000..b37f807b7 --- /dev/null +++ b/tests/data/test1006 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +FTP +RETR +huge response +</keywords> +</info> +# Server-side +<reply> +<data> +mooo +</data> +# A long set of response strings to CWD to make sure the ftp parser deals +# with it nicely. The length hits a boundary condition that may make curl +# hang. +<servercmd> +REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250 Finally, here is the response +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with excessively large number of server command response lines (boundary condition) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/1006 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1006
+RETR 1006
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1007 b/tests/data/test1007 new file mode 100644 index 000000000..5966ab366 --- /dev/null +++ b/tests/data/test1007 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP WRQ +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP send with invalid permission on server + </name> + <command> +-T log/test1007.txt tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit +</command> +<file name="log/test1007.txt"> +This data will not be sent +</file> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<errorcode> +69 +</errorcode> +<protocol> +opcode: 2 +filename: /invalid-file +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1008 b/tests/data/test1008 new file mode 100644 index 000000000..e576e7197 --- /dev/null +++ b/tests/data/test1008 @@ -0,0 +1,130 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +connection-monitor +</servercmd> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Transfer-Encoding: chunked
+
+20
+And you should ignore this data.
+FA0
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+0
+
+</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Transfer-Encoding: chunked
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP proxy CONNECT auth NTLM with chunked-encoded 407 response + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com:1008/path/10080002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.example.com:1008 HTTP/1.1
+Host: test.remote.example.com:1008
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:1008 HTTP/1.1
+Host: test.remote.example.com:1008
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/10080002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.example.com:1008
+Accept: */*
+
+[DISCONNECT] +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1009 b/tests/data/test1009 new file mode 100644 index 000000000..b0a93e5e0 --- /dev/null +++ b/tests/data/test1009 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +--local-port +</keywords> +</info> + +# +# Server-side +<reply> +<data> +a chunk of +data +returned + to client +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve with --local-port + </name> + <command> +tftp://%HOSTIP:%TFTPPORT//1009 --local-port 44444-45444 +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /1009 +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test101 b/tests/data/test101 new file mode 100644 index 000000000..815292b2c --- /dev/null +++ b/tests/data/test101 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +PORT +LIST +</keywords> +</info> +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list, PORT with specified IP + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1010 b/tests/data/test1010 new file mode 100644 index 000000000..1f8bf3a8e --- /dev/null +++ b/tests/data/test1010 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list nocwd + </name> + <command> +ftp://%HOSTIP:%FTPPORT//list/this/path/1010/ --ftp-method nocwd +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST /list/this/path/1010/
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1011 b/tests/data/test1011 new file mode 100644 index 000000000..566867dd6 --- /dev/null +++ b/tests/data/test1011 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 301 OK
+Location: moo.html&testcase=/10110002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 0
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 301 OK
+Location: moo.html&testcase=/10110002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 0
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with 301 redirect + </name> + <command> +http://%HOSTIP:%HTTPPORT/blah/1011 -L -d "moo" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /blah/1011 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooGET /blah/moo.html&testcase=/10110002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1012 b/tests/data/test1012 new file mode 100644 index 000000000..4edc1731e --- /dev/null +++ b/tests/data/test1012 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10120002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10120002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with 301 redirect and --post301 + </name> + <command> +http://%HOSTIP:%HTTPPORT/blah/1012 -L -d "moo" --post301 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /blah/1012 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /blah/moo.html&testcase=/10120002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1013 b/tests/data/test1013 new file mode 100644 index 000000000..9a1e6d4e3 --- /dev/null +++ b/tests/data/test1013 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +curl-config +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +Compare curl --version with curl-config --protocols + </name> + <command> +--version +</command> +<postcheck> +%SRCDIR/libtest/test1013.pl ../curl-config log/stdout1013 protocols +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1014 b/tests/data/test1014 new file mode 100644 index 000000000..5116aad7c --- /dev/null +++ b/tests/data/test1014 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +curl-config +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +Compare curl --version with curl-config --features + </name> + <command> +--version +</command> +<postcheck> +%SRCDIR/libtest/test1013.pl ../curl-config log/stdout1014 features +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1015 b/tests/data/test1015 new file mode 100644 index 000000000..c16746646 --- /dev/null +++ b/tests/data/test1015 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +--data-urlencode +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 I am cool swsclose
+Server: Cool server/10.0
+Content-Length: 0
+
+</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +--data-urlencode + </name> + <command> +http://%HOSTIP:%HTTPPORT/1015 --data-urlencode "my name is moo[]" --data-urlencode "y e s=s_i_r" --data-urlencode "v_alue@log/1015.txt" --data-urlencode @log/1015.txt +</command> +<file name="log/1015.txt"> +content to _?!#$'|<> +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /1015 HTTP/1.1
+User-Agent: curl/7.17.2-CVS (i686-pc-linux-gnu) libcurl/7.17.2-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.5.2-CVS libidn/1.1 libssh2/0.19.0-C
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 133
+Content-Type: application/x-www-form-urlencoded
+
+my%20name%20is%20moo%5B%5D&y e s=s_i_r&v_alue=content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A&content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1016 b/tests/data/test1016 new file mode 100644 index 000000000..b404cacb6 --- /dev/null +++ b/tests/data/test1016 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +FILE +Range +</keywords> +</info> + +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +X-Y range on a file:// URL to stdout + </name> + <command> +-r 1-4 file://localhost/%PWD/log/test1016.txt +</command> +<file name="log/test1016.txt"> +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout nonewline="yes"> +2345 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1017 b/tests/data/test1017 new file mode 100644 index 000000000..6fbc38ab2 --- /dev/null +++ b/tests/data/test1017 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +FILE +Range +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +0-Y range on a file:// URL to stdout + </name> + <command> +-r 0-3 file://localhost/%PWD/log/test1017.txt +</command> +<file name="log/test1017.txt"> +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout nonewline="yes"> +1234 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1018 b/tests/data/test1018 new file mode 100644 index 000000000..28a7027d9 --- /dev/null +++ b/tests/data/test1018 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +FILE +Range +</keywords> +</info> + +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +X-X range on a file:// URL to stdout + </name> + <command> +-r 4-4 file://localhost/%PWD/log/test1018.txt +</command> +<file name="log/test1018.txt"> +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout nonewline="yes"> +5 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1019 b/tests/data/test1019 new file mode 100644 index 000000000..4d9872a2d --- /dev/null +++ b/tests/data/test1019 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +FILE +Range +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +X- range on a file:// URL to stdout + </name> + <command> +-r 7- file://localhost/%PWD/log/test1019.txt +</command> +<file name="log/test1019.txt"> +1234567890 +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +890 +1234567890 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test102 b/tests/data/test102 new file mode 100644 index 000000000..141bc0f35 --- /dev/null +++ b/tests/data/test102 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/102 +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 102
+RETR 102
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1020 b/tests/data/test1020 new file mode 100644 index 000000000..735871d6b --- /dev/null +++ b/tests/data/test1020 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +FILE +Range +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +-Y range on a file:// URL to stdout + </name> + <command> +-r -9 file://localhost/%PWD/log/test1020.txt +</command> +<file name="log/test1020.txt"> +1234567890 +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +34567890 +</stdout> +</verify> +</testcase> + diff --git a/tests/data/test1021 b/tests/data/test1021 new file mode 100644 index 000000000..1979f7507 --- /dev/null +++ b/tests/data/test1021 @@ -0,0 +1,139 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +--proxy-anyauth +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: NTLM
+Content-Length: 21
+Connection: close
+ +data to discard +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 28
+ +And you should ignore this data.
+</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: NTLM
+Content-Length: 21
+Connection: close
+ +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 28
+ +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP proxy CONNECT with any proxyauth and proxy offers NTLM and close + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com:1021/path/10210002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth --proxytunnel +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.example.com:1021 HTTP/1.1
+Host: test.remote.example.com:1021
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:1021 HTTP/1.1
+Host: test.remote.example.com:1021
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:1021 HTTP/1.1
+Host: test.remote.example.com:1021
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/10210002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.example.com:1021
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1022 b/tests/data/test1022 new file mode 100644 index 000000000..6a8b01258 --- /dev/null +++ b/tests/data/test1022 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +curl-config +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +Compare curl --version with curl-config --version + </name> + <command> +--version +</command> +<postcheck> +%SRCDIR/libtest/test1022.pl ../curl-config log/stdout1022 version +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1023 b/tests/data/test1023 new file mode 100644 index 000000000..9c916a085 --- /dev/null +++ b/tests/data/test1023 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +curl-config +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +Compare curl --version with curl-config --vernum + </name> + <command> +--version +</command> +<postcheck> +%SRCDIR/libtest/test1022.pl ../curl-config log/stdout1023 vernum +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1024 b/tests/data/test1024 new file mode 100644 index 000000000..086ef267a --- /dev/null +++ b/tests/data/test1024 @@ -0,0 +1,103 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10240002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies + +</data> +<data2> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10240003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies + +</data2> +<data3> +HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</data3> +<datacheck> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10240002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10240003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with cookies + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1024 -L -c log/jar1024 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1024 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/10240002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/10240003.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: firstcookie=want
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1025 b/tests/data/test1025 new file mode 100644 index 000000000..494f8f8d5 --- /dev/null +++ b/tests/data/test1025 @@ -0,0 +1,105 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10250002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies + +</data> +<data2> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10250003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies + +</data2> +<data3> +HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</data3> +<datacheck> +HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10250002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10250003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with command-line and server cookies + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1025 -L -c log/jar1025 -b forcedcookie=yes +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1025 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: forcedcookie=yes
+
+GET /data/10250002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: forcedcookie=yes
+
+GET /want/10250003.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: firstcookie=want; forcedcookie=yes
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1026 b/tests/data/test1026 new file mode 100644 index 000000000..e47b12a0a --- /dev/null +++ b/tests/data/test1026 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +--manual +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +curl --manual + </name> + <command> +--manual +</command> +# Search for these two sentinel lines in the manual output; if they are found, +# then chances are good the entire manual is there. +<postcheck> +perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(a\s*tool\s*to\s*transfer\s*data)|(mailing\s*lists\s*to\s*discuss\s*curl)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout1026 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1027 b/tests/data/test1027 new file mode 100644 index 000000000..9c3d6e3ea --- /dev/null +++ b/tests/data/test1027 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +--help +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> + <name> +curl --help + </name> + <command> +--help +</command> +# Search for these two sentinel lines in the help output; if they are found, +# then chances are good the entire help is there. +<postcheck> +perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(Usage: curl )|(--version\s*Show version)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout1027 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1028 b/tests/data/test1028 new file mode 100644 index 000000000..fd5162a70 --- /dev/null +++ b/tests/data/test1028 @@ -0,0 +1,94 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +FTP +PASV +FILE +</keywords> +</info> + +# +# Server-side +<reply> +<data1> +HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: ftp://127.0.0.1:8992/10280002
+Content-Length: 0
+Connection: close
+
+</data1> +<data2> +data + to + see +that FTP +works + so does it? +</data2> +</reply> + +# +# Client-side +<client> +<server> +http +ftp +</server> + <name> +HTTP Location: redirect to FTP URL + </name> + <command> +http://%HOSTIP:%HTTPPORT/10280001 -L +</command> +# The data section doesn't do variable substitution, so we must assert this +<precheck> +perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%FTPPORT' ne '8992' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /10280001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 10280002
+RETR 10280002
+QUIT
+</protocol> +<stdout> +HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: ftp://%HOSTIP:%FTPPORT/10280002
+Content-Length: 0
+Connection: close
+
+data + to + see +that FTP +works + so does it? +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1029 b/tests/data/test1029 new file mode 100644 index 000000000..9c2bc5ff0 --- /dev/null +++ b/tests/data/test1029 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +redirect_url +followlocation +--write-out +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 301 This is a weirdo text message swsclose +Location: data/10290002.txt?coolsite=yes +Content-Length: 62 +Connection: close + +This server reply is for testing a simple Location: following +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: and 'redirect_url' check + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/our/1029 -w '%{redirect_url}\n' +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/our/1029 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout mode="text"> +HTTP/1.1 301 This is a weirdo text message swsclose +Location: data/10290002.txt?coolsite=yes +Content-Length: 62 +Connection: close + +This server reply is for testing a simple Location: following +http://%HOSTIP:%HTTPPORT/we/want/our/data/10290002.txt?coolsite=yes +</stdout> +</verify> +</testcase> diff --git a/tests/data/test103 b/tests/data/test103 new file mode 100644 index 000000000..15712f5da --- /dev/null +++ b/tests/data/test103 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PORT with CWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/103 -P - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+PORT 127,0,0,1,0,0
+TYPE I
+SIZE 103
+RETR 103
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1030 b/tests/data/test1030 new file mode 100644 index 000000000..d05a0927a --- /dev/null +++ b/tests/data/test1030 @@ -0,0 +1,109 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP Digest auth +--anyauth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP PUT with --anyauth authorization (picking Digest) + </name> + <command> +http://%HOSTIP:%HTTPPORT/1030 -T log/put1030 -u testuser:testpass --anyauth +</command> +<file name="log/put1030"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1030 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +PUT /1030 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1030", response="01cb59db1ddaac246b072d5f5f0716d9"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1031 b/tests/data/test1031 new file mode 100644 index 000000000..9cfbab5c5 --- /dev/null +++ b/tests/data/test1031 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: ?coolsite=yes/10310002.txt +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: ?coolsite=yes/10310002.txt +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following to a query string + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/this/1031 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/this/1031 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/this/1031?coolsite=yes/10310002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1032 b/tests/data/test1032 new file mode 100644 index 000000000..614cdbf74 --- /dev/null +++ b/tests/data/test1032 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP HEAD +range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP HEAD with --range + </name> + <command> +--range 1-3 --head http://%HOSTIP:%HTTPPORT/1032 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +HEAD /1032 HTTP/1.1
+Range: bytes=1-3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1033 b/tests/data/test1033 new file mode 100644 index 000000000..9ad5d2526 --- /dev/null +++ b/tests/data/test1033 @@ -0,0 +1,60 @@ +<testcase> +# +# This case with an unexpected 1xx response used to cause a "hang" before the fix +# got 7.19.0 +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 102 unexpected huh?! + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with 102 response! + </name> + <command> +http://%HOSTIP:%HTTPPORT/1033 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1033 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1034 b/tests/data/test1034 new file mode 100644 index 000000000..c47574051 --- /dev/null +++ b/tests/data/test1034 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +IDN +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.0 503 Service Unavailable
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +idn +</features> +<setenv> +CHARSET=UTF-8 +</setenv> + <name> +HTTP over proxy with malformatted IDN host name + </name> + +# This host name contains an invalid UTF-8 byte sequence that can't be +# converted into an IDN name + <command> +http://invalid-utf8-â�.local/page/1034 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://invalid-utf8-â�.local/page/1034 HTTP/1.1
+Host: invalid-utf8-â�.local
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1035 b/tests/data/test1035 new file mode 100644 index 000000000..20b434c34 --- /dev/null +++ b/tests/data/test1035 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +IDN +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.0 503 Service Unavailable
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +idn +</features> +<setenv> +CHARSET=ISO8859-1 +</setenv> + <name> +HTTP over proxy with too long IDN host name + </name> + <command> +http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/1035 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/1035 HTTP/1.1
+Host: too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1036 b/tests/data/test1036 new file mode 100644 index 000000000..b8ebc4fc0 --- /dev/null +++ b/tests/data/test1036 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +Resume +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +expected to be a file without the first part +but we emulate that +</data> +<size> +85 +</size> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download resume from end of file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1036 -C - +</command> +<file name="log/curl1036.out"> +This is the start!! +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 1036
+REST 20
+RETR 1036
+QUIT
+</protocol> +<file name="log/curl1036.out"> +This is the start!! +expected to be a file without the first part +but we emulate that +</file> +</verify> +</testcase> diff --git a/tests/data/test1037 b/tests/data/test1037 new file mode 100644 index 000000000..d9cdc0a66 --- /dev/null +++ b/tests/data/test1037 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +Resume +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +expected to be a file without the first part +but we emulate that +</data> +<size> +65 +</size> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download resume from end of empty file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1037 -C - +</command> +<file name="log/curl1037.out"> +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 1037
+RETR 1037
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1038 b/tests/data/test1038 new file mode 100644 index 000000000..9572d78e0 --- /dev/null +++ b/tests/data/test1038 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +APPE +Resume +</keywords> +</info> +# Server-side +<reply> +<size> +17 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PASV upload resume from end of file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1038 -T log/upload1038 -C - +</command> +<file name="log/upload1038"> +this is the *****cr@p******** that we're gonna upload + +worx? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1038
+APPE 1038
+QUIT
+</protocol> +<upload> +cr@p******** that we're gonna upload + +worx? +</upload> +</verify> +</testcase> diff --git a/tests/data/test1039 b/tests/data/test1039 new file mode 100644 index 000000000..654d836d2 --- /dev/null +++ b/tests/data/test1039 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +APPE +Resume +</keywords> +</info> +# Server-side +<reply> +<size> +0 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PASV upload resume from end of empty file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1039 -T log/upload1039 -C - +</command> +<file name="log/upload1039"> +this is the *****cr@p******** that we're gonna upload + +worx? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1039
+STOR 1039
+QUIT
+</protocol> +<upload> +this is the *****cr@p******** that we're gonna upload + +worx? +</upload> +</verify> +</testcase> diff --git a/tests/data/test104 b/tests/data/test104 new file mode 100644 index 000000000..82df98aee --- /dev/null +++ b/tests/data/test104 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +FTP +NOBODY +</keywords> +</info> +# Server-side +<reply> +<size> +51 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP --head to get file size only + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/104 --head +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+MDTM 104
+TYPE I
+SIZE 104
+REST 0
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1040 b/tests/data/test1040 new file mode 100644 index 000000000..2466e7050 --- /dev/null +++ b/tests/data/test1040 @@ -0,0 +1,79 @@ +<testcase> +# Similar to test92 +<info> +<keywords> +HTTP +HTTP GET +Resume +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+
+</data> + +# The file data that exists at the start of the test must be included in +# the verification. +<datacheck> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+
+</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with resume from end of entirely-downloaded file + </name> + <command> +http://%HOSTIP:%HTTPPORT/1040 -C - +</command> +<file name="log/curl1040.out"> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1040 HTTP/1.1
+Range: bytes=100-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1041 b/tests/data/test1041 new file mode 100644 index 000000000..fa1692c1f --- /dev/null +++ b/tests/data/test1041 @@ -0,0 +1,78 @@ +<testcase> +# Similar to test33 +<info> +<keywords> +HTTP +HTTP PUT +Resume +Content-Range +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT with resume from end of already-uploaded file + </name> +<file name="log/test1041.txt"> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</file> + <command> +http://%HOSTIP:%HTTPPORT/1041 -Tlog/test1041.txt -C - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +# curl doesn't do a HEAD request on the remote file so it has no idea whether +# it can skip part of the file or not. Instead, it sends the entire file. +<protocol> +PUT /1041 HTTP/1.1
+Content-Range: bytes 0-99/100
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 100
+Expect: 100-continue
+
+012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1042 b/tests/data/test1042 new file mode 100644 index 000000000..d532120d9 --- /dev/null +++ b/tests/data/test1042 @@ -0,0 +1,94 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Resume +FAILURE +</keywords> +</info> + +# Server-side +<reply> +# Some servers (e.g. Apache 1.2) respond this way to an invalid byte range +<data> +HTTP/1.1 200 OK
+Connection: close
+Content-Length: 100
+Content-Type: text/plain
+
+012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</data> + +# The file data that exists at the start of the test must be included in +# the verification. +<datacheck> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +HTTP/1.1 200 OK
+Connection: close
+Content-Length: 100
+Content-Type: text/plain
+
+</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET from end of entirely-downloaded file, no server resume + </name> + <command> +http://%HOSTIP:%HTTPPORT/1042 -C - +</command> +<file name="log/curl1042.out"> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +33 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1042 HTTP/1.1
+Range: bytes=100-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1043 b/tests/data/test1043 new file mode 100644 index 000000000..f9bd1057b --- /dev/null +++ b/tests/data/test1043 @@ -0,0 +1,84 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Resume +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2007 13:41:09 GMT
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+Accept-Ranges: bytes
+Content-Length: 60
+Content-Range: bytes 40-99/100
+
+012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</data> + +# The file data that exists at the start of the test must be included in +# the verification. +<datacheck> +012345678 +012345678 +012345678 +012345678 +HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2007 13:41:09 GMT
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+Accept-Ranges: bytes
+Content-Length: 60
+Content-Range: bytes 40-99/100
+
+012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with resume from end of file + </name> + <command> +http://%HOSTIP:%HTTPPORT/1043 -C - +</command> +<file name="log/curl1043.out"> +012345678 +012345678 +012345678 +012345678 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1043 HTTP/1.1
+Range: bytes=40-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1044 b/tests/data/test1044 new file mode 100644 index 000000000..a95f5681d --- /dev/null +++ b/tests/data/test1044 @@ -0,0 +1,58 @@ +<testcase> +# Similar to test141 +<info> +<keywords> +FTP +NOBODY +Largefile +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<size> +9999999999 +</size> +<mdtm> +213 20080726102659 +</mdtm> +</reply> + +# Client-side +<client> +<features> +large_file +</features> +<server> +ftp +</server> + <name> +FTP download large file info with -I + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/1044 -I +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 1044
+TYPE I
+SIZE 1044
+REST 0
+QUIT
+</protocol> +<stdout> +Last-Modified: Sat, 26 Jul 2008 10:26:59 GMT
+Content-Length: 9999999999
+Accept-ranges: bytes
+</stdout> +</verify> +</testcase> diff --git a/tests/data/test1045 b/tests/data/test1045 new file mode 100644 index 000000000..fa8ad4b44 --- /dev/null +++ b/tests/data/test1045 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with numeric localhost --interface + </name> + <command> +http://%HOSTIP:%HTTPPORT/1045 --interface %CLIENTIP +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1045 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1046 b/tests/data/test1046 new file mode 100644 index 000000000..bc4e5c293 --- /dev/null +++ b/tests/data/test1046 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +IPv6 +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo- +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET with numeric localhost --interface + </name> + <command> +-g "http://%HOST6IP:%HTTP6PORT/1046" --interface ::1 +</command> +# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out +<precheck> +perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1046 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1047 b/tests/data/test1047 new file mode 100644 index 000000000..421708cc4 --- /dev/null +++ b/tests/data/test1047 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +--interface +</keywords> +</info> + +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list PASV with localhost --interface + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ --interface %CLIENTIP +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1048 b/tests/data/test1048 new file mode 100644 index 000000000..cba99ba75 --- /dev/null +++ b/tests/data/test1048 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +--interface +IPv6 +</keywords> +</info> + +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP-IPv6 dir list PASV with localhost --interface + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" --interface ::1 +</command> +# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out +<precheck> +perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1049 b/tests/data/test1049 new file mode 100644 index 000000000..e6054a478 --- /dev/null +++ b/tests/data/test1049 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +--interface +</keywords> +</info> + +# +# Server-side +<reply> +<data> +a chunk of +data +returned + to client +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve with localhost --interface + </name> + <command> +tftp://%HOSTIP:%TFTPPORT//1049 --trace-ascii log/traceit --interface %CLIENTIP +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /1049 +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test105 b/tests/data/test105 new file mode 100644 index 000000000..cc811aeb8 --- /dev/null +++ b/tests/data/test105 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PASV +TYPE A +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY EPSV 500 no such command +REPLY SIZE 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP user+password in URL and ASCII transfer + </name> + <command> +ftp://userdude:passfellow@%HOSTIP:%FTPPORT/105 --use-ascii +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER userdude
+PASS passfellow
+PWD
+EPSV
+PASV
+TYPE A
+SIZE 105
+RETR 105
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1050 b/tests/data/test1050 new file mode 100644 index 000000000..1abb9b1ce --- /dev/null +++ b/tests/data/test1050 @@ -0,0 +1,66 @@ +<testcase> +# Similar to test 253 +<info> +<keywords> +FTP-ipv6 +IPv6 +EPRT +</keywords> +</info> + +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP-IPv6 dir list, EPRT with specified IP + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" -P ::1 +</command> +# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out +<precheck> +perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );" +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of EPRT that curl can send +<strippart> +s/^(EPRT \|2\|::1\|)(.*)/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1| +TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1051 b/tests/data/test1051 new file mode 100644 index 000000000..080e1d1d5 --- /dev/null +++ b/tests/data/test1051 @@ -0,0 +1,118 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +followlocation +</keywords> + +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10510002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data> +<data2> +HTTP/1.1 100 Continue
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked +</data2> +<datacheck> +HTTP/1.1 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10510002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 100 Continue
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT with Location: following + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1051 -L -T log/test1051.txt +</command> +<file name="log/test1051.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> + +# The primary reason libcurl sends the data part twice in this test is that +# the test HTTP server is blocking until it has read the entire request, +# including the full request-body before it responds. So in this test the +# server says 301 and 100 _after_ the entire PUT body has been sent. + +<protocol> +PUT /want/1051 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird + file + to + upload +for + testing +the + PUT + feature +PUT /want/data/10510002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird + file + to + upload +for + testing +the + PUT + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1052 b/tests/data/test1052 new file mode 100644 index 000000000..10c16b4a7 --- /dev/null +++ b/tests/data/test1052 @@ -0,0 +1,111 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +followlocation +</keywords> + +</info> +# Server-side +<reply> +<data> +HTTP/1.0 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10520002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data> +<data2> +HTTP/1.0 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked +</data2> +<datacheck> +HTTP/1.0 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10520002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.0 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 1.0 PUT with Location: following + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1052 -0 -L -T log/test1052.txt +</command> +<file name="log/test1052.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> + +# The primary reason libcurl sends the data part twice in this test is that +# the test HTTP server is blocking until it has read the entire request, +# including the full request-body before it responds. So in this test the +# server says 301 and 200 _after_ the entire PUT body has been sent. +<protocol> +PUT /want/1052 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird + file + to + upload +for + testing +the + PUT + feature +PUT /want/data/10520002.txt?coolsite=yes HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird + file + to + upload +for + testing +the + PUT + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1053 b/tests/data/test1053 new file mode 100644 index 000000000..8c60e5ce3 --- /dev/null +++ b/tests/data/test1053 @@ -0,0 +1,129 @@ +<testcase> +# Based on test 9 +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP file upload +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 307 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10530002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+Connection: close
+
+blablabla + +</data2> +<datacheck> +HTTP/1.1 307 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10530002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+Connection: close
+
+blablabla + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting from file with Location: following + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1053 -L -F name=daniel -F tool=curl -F file=@log/test1053.txt +</command> +# We create this file before the command is invoked! +<file name="log/test1053.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/1053 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 410
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test1053.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------9ef8d6205763--
+POST /we/want/data/10530002.txt?coolsite=yes HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 410
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test1053.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------9ef8d6205763--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1054 b/tests/data/test1054 new file mode 100644 index 000000000..54d023267 --- /dev/null +++ b/tests/data/test1054 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +followlocation +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsclose
+Location: moo/testcase/10540002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 301 OK swsclose
+Location: moo/testcase/10540002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST from file with 301 redirect and --post301 + </name> +<file name="log/test1054.txt"> +field=data +</file> + <command> +http://%HOSTIP:%HTTPPORT/blah/1054 -L -d @log/test1054.txt --post301 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /blah/1054 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 10
+Content-Type: application/x-www-form-urlencoded
+
+field=dataPOST /blah/moo/testcase/10540002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 10
+Content-Type: application/x-www-form-urlencoded
+
+field=data +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1055 b/tests/data/test1055 new file mode 100644 index 000000000..510d490f4 --- /dev/null +++ b/tests/data/test1055 @@ -0,0 +1,100 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +followlocation +FTP +EPSV +STOR +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 307 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Location: ftp://127.0.0.1:8992/1055
+Content-Length: 0
+Connection: close
+
+</data> +</reply> + +# +# Client-side +<client> +<server> +http +ftp +</server> + <name> +HTTP PUT Location: redirect to FTP URL + </name> + <command> +http://%HOSTIP:%HTTPPORT/1055 -L -T log/test1055.txt +</command> +# The data section doesn't do variable substitution, so we must assert this +<precheck> +perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%FTPPORT' ne '8992' );" +</precheck> +<file name="log/test1055.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1055 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird + file + to + upload +for + testing +the + PUT + feature +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 1055
+QUIT
+</protocol> +<upload> +Weird + file + to + upload +for + testing +the + PUT + feature +</upload> +</verify> +</testcase> diff --git a/tests/data/test1056 b/tests/data/test1056 new file mode 100644 index 000000000..52b013614 --- /dev/null +++ b/tests/data/test1056 @@ -0,0 +1,81 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +IPv6 +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose
+Location: http://[::1%259999]:8994/moo/10560002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose
+Location: http://[::1%259999]:8994/moo/10560002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http +http-ipv6 +</server> + <name> +HTTP follow redirect from IPv4 to IPv6 with scope + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/1056 -L +</command> +# The data section doesn't do variable substitution, so we must assert this +<precheck> +perl -e "print 'Test requires default test server host and port' if ( '%HOST6IP' ne '[::1]' || '%HTTP6PORT' ne '8994' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/1056 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /moo/10560002 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1057 b/tests/data/test1057 new file mode 100644 index 000000000..b4ef20c8d --- /dev/null +++ b/tests/data/test1057 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +Range +</keywords> +</info> + +# Server-side +<reply> +<data> +456789abcdef +</data> +<datacheck nonewline="yes"> +456789abcdef +</datacheck> +<size> +64 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP retrieve a byte-range relative to end of file + </name> + <command> +-r -12 ftp://%HOSTIP:%FTPPORT/1057 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1057
+REST 52
+RETR 1057
+ABOR
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1058 b/tests/data/test1058 new file mode 100644 index 000000000..0731778e0 --- /dev/null +++ b/tests/data/test1058 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Content-Range +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 206 Partial Content
+Date: Thu, 31 Jul 2008 13:41:09 GMT
+Accept-Ranges: bytes
+Content-Length: 101
+Content-Range: bytes 100-200/201
+Connection: close
+Content-Type: text/html
+
+..partial data returned from the +server as a result of setting an explicit byte range +in the request +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP range relative to end of file + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1058 -r -101 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1058 HTTP/1.1
+Range: bytes=-101
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1059 b/tests/data/test1059 new file mode 100644 index 000000000..5a96de61a --- /dev/null +++ b/tests/data/test1059 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP CONNECT +proxytunnel +FTP +FAILURE +</keywords> + +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 501 Method not implemented swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 0
+
+</data> +</reply> + +# +# Client-side +<client> +<features> +ftp +</features> +<server> +http +</server> + <name> +HTTP CONNECT with proxytunnel to unsupported FTP URL + </name> + <command> +ftp://test-number:1059/wanted/page -p -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +# The server doesn't implement CONNECT for ftp, so this must be a failure test +<errorcode> +56 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +CONNECT test-number:1059 HTTP/1.1
+Host: test-number:1059
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test106 b/tests/data/test106 new file mode 100644 index 000000000..d1b9a81b9 --- /dev/null +++ b/tests/data/test106 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +TYPE A +RETR +type= +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP GET with type=A style ASCII URL using %20 codes + </name> + <command> +"ftp://%HOSTIP:%FTPPORT//path%20with%20%20spaces//and%20things2/106;type=A" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD /path with spaces
+CWD and things2
+EPSV
+TYPE A
+SIZE 106
+RETR 106
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1060 b/tests/data/test1060 new file mode 100644 index 000000000..767a7ccc9 --- /dev/null +++ b/tests/data/test1060 @@ -0,0 +1,902 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +proxytunnel +HTTP proxy Digest auth +</keywords> +</info> + +# 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"
+Content-Length: 40000
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +</data> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+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"
+Content-Length: 40000
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+HTTP/1.1 200 OK swsbounce
+Server: no +
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP proxy CONNECT auth Digest, large headers and data + </name> + <command> +http://test.remote.haxx.se:1060/path/10600002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.haxx.se:1060 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1060 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1060", response="79e394ffcd42b6c771c7582da1fc4498"
+Proxy-Connection: Keep-Alive
+
+GET /path/10600002 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1061 b/tests/data/test1061 new file mode 100644 index 000000000..0fb8c5110 --- /dev/null +++ b/tests/data/test1061 @@ -0,0 +1,907 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +chunked Transfer-Encoding +proxytunnel +HTTP proxy Digest auth +</keywords> +</info> + +# 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"
+Transfer-Encoding: chunked
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+9c40
+And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +And you should ignore this data. aaaaaaaaaaaaaaaa +end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
+0
+
+</data> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+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"
+Transfer-Encoding: chunked
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+HTTP/1.1 200 OK swsbounce
+Server: no +
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP proxy CONNECT auth Digest, large headers and chunked data + </name> + <command> +http://test.remote.haxx.se:1061/path/10610002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.haxx.se:1061 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1061 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1061", response="8e96acf6a6214012183879e28e73b2d3"
+Proxy-Connection: Keep-Alive
+
+GET /path/10610002 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1062 b/tests/data/test1062 new file mode 100644 index 000000000..d96686e05 --- /dev/null +++ b/tests/data/test1062 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +FTP +RETR +huge response +</keywords> +</info> + +# Server-side +<reply> +<data> +mooo +</data> +# a long set of response strings to CWD to make sure the ftp parser deals +# with it nicely +<servercmd> +REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-A Exactly fill curl's buffer\r\n250 Finally, here is the response, boundary condition +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with excessively long server command response lines, boundary condition + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/1062 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1062
+RETR 1062
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1063 b/tests/data/test1063 new file mode 100644 index 000000000..cc07e6bfc --- /dev/null +++ b/tests/data/test1063 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FILE +Range +FAILURE +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +large_file +</features> + <name> +Invalid large X- range on a file:// + </name> +# This range value is 2**32+7, which will be truncated to the valid value 7 +# if the large file support is not working correctly + <command> +-r 4294967303- file://localhost/%PWD/log/test1063.txt +</command> +<file name="log/test1063.txt"> +1234567890 +1234567890 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +36 +</errorcode> +<stdout> +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1064 b/tests/data/test1064 new file mode 100644 index 000000000..dd05ddf3a --- /dev/null +++ b/tests/data/test1064 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> + +<reply> +<data nocheck="yes"> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data> +<data2 nocheck="yes"> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok +</data2> +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP PUT twice + </name> + <command> +-H "Expect:" -T log/1064 http://%HOSTIP:%HTTPPORT/1064.upload1 -T log/1064 http://%HOSTIP:%HTTPPORT/10640002.upload2 +</command> +<file name="log/1064"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1064.upload1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test +PUT /10640002.upload2 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test +</protocol> +<stdout> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1065 b/tests/data/test1065 new file mode 100644 index 000000000..5688ff964 --- /dev/null +++ b/tests/data/test1065 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP GET +</keywords> +</info> + +<reply> +<data nocheck="yes"> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data> +<data2 nocheck="yes"> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok +</data2> +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP PUT with one file but two URLs + </name> + <command> +-H "Expect:" -T log/1065 http://%HOSTIP:%HTTPPORT/1065.upload1 http://%HOSTIP:%HTTPPORT/10650002.url2 +</command> +<file name="log/1065"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1065.upload1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test +GET /10650002.url2 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1066 b/tests/data/test1066 new file mode 100644 index 000000000..bacedefbb --- /dev/null +++ b/tests/data/test1066 @@ -0,0 +1,82 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Length: 6
+
+first +</data> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Length: 7
+
+second +</data1> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP --dump-header - with two URLs + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1066 http://%HOSTIP:%HTTPPORT/want/10660001 --dump-header - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1066 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/10660001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +HTTP/1.1 200 OK
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Type: text/plain
+Content-Length: 6
+Content-Length: 6
+
+
+first +HTTP/1.1 200 OK
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Type: text/plain
+Content-Length: 7
+Content-Length: 7
+
+
+second +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1067 b/tests/data/test1067 new file mode 100644 index 000000000..9fc7a6fa4 --- /dev/null +++ b/tests/data/test1067 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/10670002.txt?coolsite=yes +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/10670002.txt?coolsite=yes +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with auto-referer + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1067 -L --referer "firstone.html;auto" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1067 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Referer: firstone.html
+
+GET /want/data/10670002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Referer: http://%HOSTIP:%HTTPPORT/want/1067
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1068 b/tests/data/test1068 new file mode 100644 index 000000000..ff26d78c6 --- /dev/null +++ b/tests/data/test1068 @@ -0,0 +1,57 @@ +<testcase> +# Similar to test 60 +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +HTTP PUT from stdin +</name> + <command> +http://%HOSTIP:%HTTPPORT/bzz/1068 -T - +</command> +<stdin> +more than one byte +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /bzz/1068 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+13
+more than one byte +
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1069 b/tests/data/test1069 new file mode 100644 index 000000000..c47c357d7 --- /dev/null +++ b/tests/data/test1069 @@ -0,0 +1,36 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP/1.0 +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +HTTP 1.0 PUT from stdin with no content length +</name> + <command> +http://%HOSTIP:%HTTPPORT/bzz/1069 -T - -0 +</command> +<stdin> +this data can't be sent +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +25 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test107 b/tests/data/test107 new file mode 100644 index 000000000..25b645200 --- /dev/null +++ b/tests/data/test107 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +STOR +</keywords> +</info> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PASV upload file + </name> +<file name="log/test107.txt"> +data + to + see +that FTP +works + so does it? +</file> + <command> +ftp://%HOSTIP:%FTPPORT/107 -T log/test107.txt +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +data + to + see +that FTP +works + so does it? +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 107
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1070 b/tests/data/test1070 new file mode 100644 index 000000000..d202a9c07 --- /dev/null +++ b/tests/data/test1070 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 403 Go away and swsclose
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 55
+Connection: close
+
+you are not supposed to be allowed to send things here +</data> +<servercmd> +skip: 2300 +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with server closing connection before (all) data is received + </name> + <command> + -d @log/input1070 http://%HOSTIP:%HTTPPORT/1070 +</command> +<file name="log/input1070"> +This creates the named file with this content before the test case is run, +which is useful if the test case needs a file to act on. We create this file +rather large (larger than your typical TCP packet) so that not all of it can nor +will be sent in one go as that is kind of the point of this test! + +Here's 2000 x 'O': +OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /1070 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 2313
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+This creates +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1071 b/tests/data/test1071 new file mode 100644 index 000000000..758457a04 --- /dev/null +++ b/tests/data/test1071 @@ -0,0 +1,113 @@ +<testcase> +# Authorization is used to force curl to realize that the server is +# speaking HTTP 1.0. The request must be resent with the correct +# authorization header, but using HTTP 1.0, not 1.1. +<info> +<keywords> +HTTP +HTTP PUT +HTTP Digest auth +--anyauth +HTTP/1.0 +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 35
+Connection: close
+
+Try again on this HTTP 1.0 server! +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.0 200 OK swsclose
+Server: testcurl
+Content-Type: text/plain
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 35
+Connection: close
+
+HTTP/1.0 200 OK swsclose
+Server: testcurl
+Content-Type: text/plain
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +Downgraded HTTP PUT to HTTP 1.0 with authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/1071 -T log/put1071 -u testuser:testpass --anyauth +</command> +<file name="log/put1071"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1071 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +PUT /1071 HTTP/1.0
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1071", response="df4cef6b52a30e65d472dd848d2055a1"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1072 b/tests/data/test1072 new file mode 100644 index 000000000..14b6d804c --- /dev/null +++ b/tests/data/test1072 @@ -0,0 +1,78 @@ +<testcase> +# Authorization is used to force curl to realize that the server is +# speaking HTTP 1.0. The request is impossible to satisfy with HTTP 1.0 +# because chunked encoding is unavailable, so the request must fail. +<info> +<keywords> +HTTP +HTTP PUT +HTTP Digest auth +--anyauth +HTTP/1.0 +chunked Transfer-Encoding +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 0
+Connection: close
+
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP chunked PUT to HTTP 1.0 server with authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/1072 -T - -u testuser:testpass --anyauth +</command> +<stdin> +This is data we upload with PUT +it comes from stdin so MUST be sent +with chunked encoding +which is impossible in HTTP/1.0 +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +25 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1072 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+7a
+This is data we upload with PUT +it comes from stdin so MUST be sent +with chunked encoding +which is impossible in HTTP/1.0 +
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1073 b/tests/data/test1073 new file mode 100644 index 000000000..481f9098f --- /dev/null +++ b/tests/data/test1073 @@ -0,0 +1,72 @@ +<testcase> +# Redirection is used to force curl to realize that the server is +# speaking HTTP 1.0. The request is impossible to satisfy with HTTP 1.0 +# because chunked encoding is unavailable, so the request must fail. +<info> +<keywords> +HTTP +HTTP PUT +HTTP/1.0 +followlocation +chunked Transfer-Encoding +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 301 Redirect swsclose
+Server: testcurl
+Content-Type: text/plain
+Location: /newlocation/10730002
+Content-Length: 0
+Connection: close
+
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP chunked PUT to HTTP 1.0 server with redirect + </name> + <command> +http://%HOSTIP:%HTTPPORT/1073 -T - -L +</command> +<stdin> +This is data we upload with PUT +it comes from stdin so MUST be sent +with chunked encoding +which is impossible in HTTP/1.0 +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +25 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1073 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+7a
+This is data we upload with PUT +it comes from stdin so MUST be sent +with chunked encoding +which is impossible in HTTP/1.0 +
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1074 b/tests/data/test1074 new file mode 100644 index 000000000..3464b4183 --- /dev/null +++ b/tests/data/test1074 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP/1.0 +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Connection: Keep-Alive
+
+surprise +</data> +<data1> +HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2 +</data1> + +<postcmd> +wait 1 +</postcmd> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP downgrade to HTTP/1.0 on second request + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1074 http://%HOSTIP:%HTTPPORT/wantmore/10740001 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Connection: Keep-Alive
+
+surprise +HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2 +</stdout> + +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1074 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/10740001 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1075 b/tests/data/test1075 new file mode 100644 index 000000000..5b8f186a0 --- /dev/null +++ b/tests/data/test1075 @@ -0,0 +1,94 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP Basic auth +--anyauth +</keywords> +</info> + +# Server-side +<reply> +# The test server provides no way to respond differently to a subsequent +# Basic authenticated request (we really want to respond with 200 for +# the second), so just respond with 401 for both and let curl deal with it. +<data> +HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+</data> +<datacheck> +HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT with --anyauth authorization (picking Basic) + </name> + <command> +http://%HOSTIP:%HTTPPORT/1075 -T log/put1075 -u testuser:testpass --anyauth +</command> +<file name="log/put1075"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1075 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +PUT /1075 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1076 b/tests/data/test1076 new file mode 100644 index 000000000..ad079eb94 --- /dev/null +++ b/tests/data/test1076 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: moo.html&testcase=/10760002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: moo.html&testcase=/10760002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with 302 redirect and --post302 + </name> + <command> +http://%HOSTIP:%HTTPPORT/blah/1076 -L -d "moo" --post302 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /blah/1076 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /blah/moo.html&testcase=/10760002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1077 b/tests/data/test1077 new file mode 100644 index 000000000..a3c90245a --- /dev/null +++ b/tests/data/test1077 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +HTTP/1.0 +HTTP GET +HTTP proxy +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/plain
+Content-Length: 9
+Funny-head: yesyes
+Proxy-Connection: Keep-Alive
+
+contents +</data> +<data2> +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/plain
+Content-Length: 9
+Funny-head: yesyes
+Proxy-Connection: Keep-Alive
+
+contents +</data2> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +FTP over HTTP proxy with downgrade to HTTP 1.0 + </name> + <command> +-x %HOSTIP:%HTTPPORT ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1077 ftp://%HOSTIP:%HTTPPORT/we/want/that/page/10770002 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1077 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/10770002 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1078 b/tests/data/test1078 new file mode 100644 index 000000000..cacdf4dd4 --- /dev/null +++ b/tests/data/test1078 @@ -0,0 +1,89 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP/1.0 +HTTP GET +HTTP CONNECT +HTTP proxy +proxytunnel +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents +</data> +</reply> + +# +# Client-side +<client> +<server> +http +http-proxy +</server> + <name> +HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0 + </name> + <command> +--proxy1.0 %HOSTIP:%PROXYPORT -p http://%HOSTIP:%HTTPPORT/we/want/that/page/1078 http://%HOSTIP:%HTTPPORT/we/want/that/page/1078 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<proxy> +CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /we/want/that/page/1078 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/that/page/1078 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents +HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1079 b/tests/data/test1079 new file mode 100644 index 000000000..c188e792e --- /dev/null +++ b/tests/data/test1079 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/plain; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +# Send nothing to force an error code 52 reply +<data1000> +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/plain; charset=iso-8859-1
+Content-Length: 26
+
+</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP retry after closed connection and empty response + </name> + <command> +http://%HOSTIP:%HTTPPORT/1079 -u testuser:testpass --digest +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +52 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1079 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1079 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1079", response="e340c7cdca0950462070f46ee139e9f7"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test108 b/tests/data/test108 new file mode 100644 index 000000000..eb2ea63c1 --- /dev/null +++ b/tests/data/test108 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +PORT +STOR +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT upload with CWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/108 -T log/upload108 -P - +</command> +<file name="log/upload108"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD CWD
+CWD STOR
+CWD RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 108
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test1080 b/tests/data/test1080 new file mode 100644 index 000000000..ae37fb7fd --- /dev/null +++ b/tests/data/test1080 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +redirect_url +followlocation +--write-out +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: on two URLs 'redirect_url' check + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/our/1080 http://%HOSTIP:%HTTPPORT/we/want/our/1080 -w '%{redirect_url}\n' +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/our/1080 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/our/1080 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout mode="text"> +HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following +http://%HOSTIP:%HTTPPORT/we/want/our/data/10800002.txt?coolsite=yes +HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following +http://%HOSTIP:%HTTPPORT/we/want/our/data/10800002.txt?coolsite=yes +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1081 b/tests/data/test1081 new file mode 100644 index 000000000..d290020b6 --- /dev/null +++ b/tests/data/test1081 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +redirect_url +followlocation +--write-out +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10810099.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following +</data> +<data2 nocheck="yes"> +HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 41
+
+This second URL does not have a location +</data2> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP no Location: on second URL 'redirect_url' check + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/our/1081 http://%HOSTIP:%HTTPPORT/we/want/our/10810002 -w '%{redirect_url}\n' +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/our/1081 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/our/10810002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout mode="text"> +HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10810099.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following +http://%HOSTIP:%HTTPPORT/we/want/our/data/10810099.txt?coolsite=yes +HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 41
+
+This second URL does not have a location + +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1082 b/tests/data/test1082 new file mode 100644 index 000000000..d58dd25cd --- /dev/null +++ b/tests/data/test1082 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with localhost --interface + </name> + <command> +http://%HOSTIP:%HTTPPORT/1082 --interface localhost +</command> +<precheck> +perl -e "print 'Test requires default test server host address' if ( '%CLIENTIP' ne '127.0.0.1' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1082 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1083 b/tests/data/test1083 new file mode 100644 index 000000000..e441278da --- /dev/null +++ b/tests/data/test1083 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +IPv6 +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo- +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET with ip6-localhost --interface + </name> + <command> +-g "http://%HOST6IP:%HTTP6PORT/1083" --interface ip6-localhost +</command> +<precheck> +perl -e "if ('%CLIENT6IP' ne '[::1]') {print 'Test requires default test server host address';} else {exec './server/resolve --ipv6 ip6-localhost'; print 'Cannot run precheck resolve';}" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1083 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1084 b/tests/data/test1084 new file mode 100644 index 000000000..1cfab68dc --- /dev/null +++ b/tests/data/test1084 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +FAILURE +non-existing host +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<features> +http +</features> +<server> +none +</server> + <name> +HTTP GET with invalid --interface + </name> + <command> +http://%HOSTIP:%HTTPPORT/1084 --interface non-existing-host.haxx.se. +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +45 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1085 b/tests/data/test1085 new file mode 100644 index 000000000..db02e6033 --- /dev/null +++ b/tests/data/test1085 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--interface +IPv6 +FAILURE +non-existing host +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<features> +http +ipv6 +</features> +<server> +none +</server> + <name> +HTTP-IPv6 GET with invalid --interface + </name> + <command> +-g "http://%HOST6IP:%HTTP6PORT/1085" --interface non-existing-host.haxx.se. +</command> +# Ensure the IPv6 stack is operational before running this test (other tests +# use the startup of the IPv6 test server as a substitute check for this). +<precheck> +./server/resolve --ipv6 ::1 +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +45 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1086 b/tests/data/test1086 new file mode 100644 index 000000000..402e1f920 --- /dev/null +++ b/tests/data/test1086 @@ -0,0 +1,109 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +timeout +FAILURE +</keywords> +</info> + +# Server-side +<reply> +# Overload some standard FTP responses to make them shorter and faster +# to avoid wasting time waiting for the data phase to start +<servercmd> +SLOWDOWN +REPLY USER 331 OK +REPLY PASS 230 OK +REPLY PWD 257 "/" +REPLY TYPE 200 OK +</servercmd> +<data nocheck="yes"> +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<killserver> +ftp +</killserver> + <name> +FTP download with strict timeout and slow data transfer + </name> + <command timeout="1"> +ftp://%HOSTIP:%FTPPORT/1086 -m 7 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 28 is CURLE_OPERATION_TIMEDOUT +<errorcode> +28 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1086
+RETR 1086
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1087 b/tests/data/test1087 new file mode 100644 index 000000000..d3bec0c84 --- /dev/null +++ b/tests/data/test1087 @@ -0,0 +1,110 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP proxy +HTTP Basic auth +HTTP proxy Basic auth +followlocation +--anyauth +</keywords> +</info> + +# +# Server-side +<reply> +<data1000 nocheck="yes"> +HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+</data1000> +<data1001 nocheck="yes"> +HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10871002
+Content-Length: 0
+Connection: close
+
+</data1001> +<data1002 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents +</data1002> + +<datacheck> +HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10871002
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, proxy with --anyauth and Location: to new host + </name> + <command> +http://first.host.it.is/we/want/that/page/10871000 -x %HOSTIP:%HTTPPORT --user iam:myself --location --anyauth +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/10871002 HTTP/1.1
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1088 b/tests/data/test1088 new file mode 100644 index 000000000..13e7d03cb --- /dev/null +++ b/tests/data/test1088 @@ -0,0 +1,112 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP proxy +HTTP Basic auth +HTTP proxy Basic auth +followlocation +--anyauth +--location-trusted +</keywords> +</info> + +# +# Server-side +<reply> +<data1000 nocheck="yes"> +HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+</data1000> +<data1001 nocheck="yes"> +HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10881002
+Content-Length: 0
+Connection: close
+
+</data1001> +<data1003 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents +</data1003> + +<datacheck> +HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10881002
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, proxy with --anyauth and Location: to new host using location-trusted + </name> + <command> +http://first.host.it.is/we/want/that/page/10881000 -x %HOSTIP:%HTTPPORT --user iam:myself --location-trusted --anyauth +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/10881002 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1089 b/tests/data/test1089 new file mode 100644 index 000000000..d2a18a21d --- /dev/null +++ b/tests/data/test1089 @@ -0,0 +1,91 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +--write-out +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10890001
+
+monster +</data> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 15
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster +</data1> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET --write-out with redirected fetch + </name> + <command> +http://%HOSTIP:%HTTPPORT/1089 -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1089 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /10890001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<stdout> +HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10890001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 15
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster +2 +1 +15 +http://%HOSTIP:%HTTPPORT/10890001 +text/plain; charset=us-ascii +200 +</stdout> + +</verify> +</testcase> diff --git a/tests/data/test109 b/tests/data/test109 new file mode 100644 index 000000000..c027885b1 --- /dev/null +++ b/tests/data/test109 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +APPE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PASV upload append + </name> + <command> +ftp://%HOSTIP:%FTPPORT/109 -T log/upload109 --append +</command> +<file name="log/upload109"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+APPE 109
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test1090 b/tests/data/test1090 new file mode 100644 index 000000000..3304f911d --- /dev/null +++ b/tests/data/test1090 @@ -0,0 +1,98 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +chunked Transfer-Encoding +--write-out +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10900001
+
+monster +</data> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Transfer-Encoding: chunked
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+0007
+bigger
+0008
+monster +
+0
+
+</data1> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET --write-out with redirected fetch and chunked reply + </name> + <command> +http://%HOSTIP:%HTTPPORT/1090 -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1090 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /10900001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<stdout> +HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10900001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Transfer-Encoding: chunked
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster +2 +1 +15 +http://%HOSTIP:%HTTPPORT/10900001 +text/plain; charset=us-ascii +200 +</stdout> + +</verify> +</testcase> diff --git a/tests/data/test1091 b/tests/data/test1091 new file mode 100644 index 000000000..f3ce8608a --- /dev/null +++ b/tests/data/test1091 @@ -0,0 +1,46 @@ +<testcase> +# based on test 143 +<info> +<keywords> +FTP +RETR +type= +</keywords> +</info> + +# Server-side +<reply> +<data> +bla bla bla +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP URL with type=i + </name> + <command> +"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/1091;type=i" --use-ascii +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD /tmp
+CWD moo
+EPSV
+TYPE I
+SIZE 1091
+RETR 1091
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1092 b/tests/data/test1092 new file mode 100644 index 000000000..adef4320b --- /dev/null +++ b/tests/data/test1092 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +HTTP GET +HTTP proxy +type= +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +contents +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +FTP with type=i over HTTP proxy + </name> + <command> +"ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1092;type=i" --use-ascii -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1092;type=i HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1093 b/tests/data/test1093 new file mode 100644 index 000000000..dbcfd9f7a --- /dev/null +++ b/tests/data/test1093 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +mode= +</keywords> +</info> + +# +# Server-side +<reply> +<data> +a chunk of +data +returned + to client +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve with mode=i + </name> + <command> +"tftp://%HOSTIP:%TFTPPORT//1093;mode=i" --use-ascii --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /1093 +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1094 b/tests/data/test1094 new file mode 100644 index 000000000..29965505f --- /dev/null +++ b/tests/data/test1094 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +mode= +</keywords> +</info> + +# +# Server-side +<reply> +<data> +a chunk of +data +returned + to client +</data> +<datacheck> +a chunk of
+data
+returned
+ to client
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve with mode=netascii + </name> + <command> +"tftp://%HOSTIP:%TFTPPORT//1094;mode=netascii" --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /1094 +mode: netascii +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1095 b/tests/data/test1095 new file mode 100644 index 000000000..d401b52be --- /dev/null +++ b/tests/data/test1095 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="test \"this\" realm!!", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="test \"this\" realm!!", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with Digest and realm with quoted quotes + </name> + <command> +http://%HOSTIP:%HTTPPORT/1095 -u testuser:testpass --digest +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1095 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1095 HTTP/1.1
+Authorization: Digest username="testuser", realm="test \"this\" realm!!", nonce="1053604145", uri="/1095", response="a1c7931ece9e8617bae2715045e4f49f"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1096 b/tests/data/test1096 new file mode 100644 index 000000000..30748c1b4 --- /dev/null +++ b/tests/data/test1096 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY RETR 550 no such file! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +Two FTP downloads, with failed RETR but re-used control connection + </name> + <command> +ftp://%HOSTIP:%FTPPORT/dir/1096 ftp://%HOSTIP:%FTPPORT/dir/1096 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +78 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD dir
+EPSV
+TYPE I
+SIZE 1096
+RETR 1096
+EPSV
+SIZE 1096
+RETR 1096
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1097 b/tests/data/test1097 new file mode 100644 index 000000000..ebb039962 --- /dev/null +++ b/tests/data/test1097 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+ +This is all fine and dandy +</data> +<data1001> +HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+ +This is all fine and dandy +</data1001> +<datacheck> +HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+ +HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+ +This is all fine and dandy +</datacheck> +</reply> + +# Client-side +<client> +<server> +https +</server> +<features> +NTLM +</features> + <name> +HTTP POST using CONNECT with --proxy-ntlm but no auth is required + </name> + <command> +http://test.a.galaxy.far.far.away:1097/1097 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -d "dummy=value" -p +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.a.galaxy.far.far.away:1097 HTTP/1.1
+Host: test.a.galaxy.far.far.away:1097
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
+Proxy-Connection: Keep-Alive
+
+POST /1097 HTTP/1.1
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
+Host: test.a.galaxy.far.far.away:1097
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test1098 b/tests/data/test1098 new file mode 100644 index 000000000..b5c45cbc9 --- /dev/null +++ b/tests/data/test1098 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +FTP +HTTP proxy +CURLOPT_PROXY +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 + +hello +</data> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +http +ftp +</features> + <name> +FTP RETR twice over proxy confirming persistent connection + </name> + + <command> +ftp://ftp-site/moo/1098 ftp://ftp-site/moo/1098 --proxy http://%HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://ftp-site/moo/1098 HTTP/1.1
+Host: ftp-site:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET ftp://ftp-site/moo/1098 HTTP/1.1
+Host: ftp-site:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<stdout mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 + +hello +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 + +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1099 b/tests/data/test1099 new file mode 100644 index 000000000..f81e6017b --- /dev/null +++ b/tests/data/test1099 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +FAILURE +</keywords> +</info> + +<reply> +<data nocheck="yes"> +data for 1099 +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP get first a non-existing file then an existing + </name> + <command> +tftp://%HOSTIP:%TFTPPORT/an/invalid-file tftp://%HOSTIP:%TFTPPORT//1099 --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: an/invalid-file +mode: octet +opcode: 1 +filename: /1099 +mode: octet +</protocol> +<stdout mode="text"> +data for 1099 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test11 b/tests/data/test11 new file mode 100644 index 000000000..9d93f80e0 --- /dev/null +++ b/tests/data/test11 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/110002.txt?coolsite=yes +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/110002.txt?coolsite=yes +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +simple HTTP Location: following + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/11 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/11 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/110002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test110 b/tests/data/test110 new file mode 100644 index 000000000..b63ba8a2d --- /dev/null +++ b/tests/data/test110 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +Resume +</keywords> +</info> +# Server-side +<reply> +<data> +expected to be a file without the first part +but we emulate that +</data> +<size> +85 +</size> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download resume with set limit + </name> + <command> +ftp://%HOSTIP:%FTPPORT/110 -C 20 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 110
+REST 20
+RETR 110
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1100 b/tests/data/test1100 new file mode 100644 index 000000000..e38c0e0d7 --- /dev/null +++ b/tests/data/test1100 @@ -0,0 +1,116 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 200 Thanks for this! swsclose
+Content-Length: 25
+
+This is the final page ! +</data> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 302 Thanks for this, but we want to redir you!
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Location: /1100
+Content-Length: 34
+
+This is not the real page either! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 302 Thanks for this, but we want to redir you!
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Location: /1100
+Content-Length: 34
+
+HTTP/1.1 200 Thanks for this! swsclose
+Content-Length: 25
+
+This is the final page ! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP POST with NTLM authorization and following a 302 redirect + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/1100 -u testuser:testpass --ntlm -L -d "stuff to send away" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /1100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /1100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 18
+Content-Type: application/x-www-form-urlencoded
+
+stuff to send awayGET /1100 HTTP/1.1
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS GnuTLS/2.6.6 zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.14 libssh2/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1101 b/tests/data/test1101 new file mode 100644 index 000000000..63887c4bb --- /dev/null +++ b/tests/data/test1101 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +NO_PROXY +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 4
+Content-Type: text/html
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +NO_PROXY test, with user name in URL + </name> + +<setenv> +no_proxy=%HOSTIP +http_proxy=http://non-existing-host.haxx.se:3128/ +</setenv> + <command> +http://user:secret@%HOSTIP:%HTTPPORT/gimme/1101 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /gimme/1101 HTTP/1.1
+Authorization: Basic dXNlcjpzZWNyZXQ=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1102 b/tests/data/test1102 new file mode 100644 index 000000000..addc7b572 --- /dev/null +++ b/tests/data/test1102 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +SYST +SITE +OS400 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +blabla +</data> +<servercmd> +REPLY PWD 257 "QGPL" is the current library +REPLY SYST 215 OS/400 runs this server +REPLY SITE 250 Name format set to 1 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP OS/400 server name format check + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1102 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+SYST
+SITE NAMEFMT 1
+PWD
+EPSV
+TYPE I
+SIZE 1102
+RETR 1102
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1103 b/tests/data/test1103 new file mode 100644 index 000000000..4d45056d5 --- /dev/null +++ b/tests/data/test1103 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +SYST +SITE +OS400 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +blabla +</data> +<servercmd> +REPLY PWD 257 "C:/somedir" is the current directory +REPLY SYST 215 unknown-OS runs this server +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP non-OS/400 server + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1103 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+SYST
+EPSV
+TYPE I
+SIZE 1103
+RETR 1103
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1104 b/tests/data/test1104 new file mode 100644 index 000000000..21efe3c15 --- /dev/null +++ b/tests/data/test1104 @@ -0,0 +1,85 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 Moved +Date: Thu, 09 Nov 2010 14:49:00 GMT +Location: /want/data/11040002 +Server: test-server/fake +Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970; +Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 2 11:56:27 GMT 2035; +Connection: close + +This server reply is for testing a set-cookie + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 Moved +Date: Thu, 09 Nov 2010 14:49:00 GMT +Location: /want/data/11040002 +Server: test-server/fake +Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970; +Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 2 11:56:27 GMT 2035; +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP cookie expiry date at Jan 1 00:00:00 GMT 1970 + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1104 -L -x %HOSTIP:%HTTPPORT -c log/cookies.jar +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/want/1104 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/want/data/11040002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: test2=true
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1105 b/tests/data/test1105 new file mode 100644 index 000000000..922346ff0 --- /dev/null +++ b/tests/data/test1105 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +cookies +cookiejar +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes swsclose +Set-Cookie: foobar=name; +Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/"; +Set-Cookie: partmatch=present; domain=.0.0.1; path=/; + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with cookie parser and header recording + </name> + <command> +"http://%HOSTIP:%HTTPPORT/we/want/1105?parm1=this*that/other/thing&parm2=foobar/1105" -c log/cookie1105.txt -d "userid=myname&password=mypassword" +</command> +<precheck> +perl -e 'if ("%HOSTIP" !~ /127\.0\.0\.1$/) {print "Test only works for HOSTIP 127.0.0.1"; exit(1)}' +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /we/want/1105?parm1=this*that/other/thing&parm2=foobar/1105 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 33
+Content-Type: application/x-www-form-urlencoded
+
+userid=myname&password=mypassword +</protocol> +<file name="log/cookie1105.txt"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +127.0.0.1 FALSE /we/want/ FALSE 0 foobar name +.127.0.0.1 TRUE "/silly/" FALSE 0 mismatch this +.0.0.1 TRUE / FALSE 0 partmatch present +</file> +</verify> +</testcase> diff --git a/tests/data/test1106 b/tests/data/test1106 new file mode 100644 index 000000000..0c6bec177 --- /dev/null +++ b/tests/data/test1106 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +CURLOPT_PORT +HTTP proxy +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello +</data> +</reply> + +# Client-side +<client> +<features> +ftp +</features> +<server> +http +</server> + <name> +FTP URL and with ftp_proxy environment variable set + </name> + +<setenv> +ftp_proxy=http://%HOSTIP:%HTTPPORT/ +</setenv> + <command> +ftp://%HOSTIP:23456/1106 +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://%HOSTIP:23456/1106 HTTP/1.1
+Host: %HOSTIP:23456
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1107 b/tests/data/test1107 new file mode 100644 index 000000000..6adc6360c --- /dev/null +++ b/tests/data/test1107 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +PRET +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY PRET 200 fine +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PASV with PRET + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1107 --ftp-pret +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PRET RETR 1107
+EPSV
+TYPE I
+SIZE 1107
+RETR 1107
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1108 b/tests/data/test1108 new file mode 100644 index 000000000..7b779e11f --- /dev/null +++ b/tests/data/test1108 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +PRET +</keywords> +</info> +# Server-side +<reply> + +<servercmd> +REPLY PRET 550 unkown command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PASV with PRET not supported + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1108 --ftp-pret +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PRET RETR 1108
+</protocol> +# we expect that the server doesn't understand PRET +<errorcode> +84 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1109 b/tests/data/test1109 new file mode 100644 index 000000000..c18ae46c6 --- /dev/null +++ b/tests/data/test1109 @@ -0,0 +1,46 @@ +<testcase> +# Test that the fragment is not send as part of the path. +<info> +<keywords> +HTTP +CURLOPT_URL +</keywords> +</info> + +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Content-Length: 6 + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with URL that contains fragment after the path + </name> + <command> +http://%HOSTIP:%HTTPPORT/1109#test +</command> +</client> + + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1109 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test111 b/tests/data/test111 new file mode 100644 index 000000000..bcaa55425 --- /dev/null +++ b/tests/data/test111 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +Resume +FAILURE +</keywords> +</info> +# Server-side +<reply> +<size> +85 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download resume beyond file size + </name> + <command> +ftp://%HOSTIP:%FTPPORT/111 -C 2000 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +36 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 111
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1110 b/tests/data/test1110 new file mode 100644 index 000000000..90ffc41e3 --- /dev/null +++ b/tests/data/test1110 @@ -0,0 +1,47 @@ +<testcase> +# Test that the fragment is not send as part of the path +# when it contains a query. +<info> +<keywords> +HTTP +CURLOPT_URL +</keywords> +</info> + +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Content-Length: 6 + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with URL that contains a fragment after the query part + </name> + <command> +http://%HOSTIP:%HTTPPORT/1110?q=foobar#fragment +</command> +</client> + + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1110?q=foobar HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1111 b/tests/data/test1111 new file mode 100644 index 000000000..77b78f75d --- /dev/null +++ b/tests/data/test1111 @@ -0,0 +1,47 @@ +<testcase> +# Test that no fragment is not send as part of the path +# when the URI contains 2 '#' (does not follow RFC 2396) +<info> +<keywords> +HTTP +CURLOPT_URL +</keywords> +</info> + +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Content-Length: 6 + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with URL whose fragment contains a # (which is illegal) + </name> + <command> +http://%HOSTIP:%HTTPPORT/1111?q=foobar#fragment#fragment2 +</command> +</client> + + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1111?q=foobar HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1112 b/tests/data/test1112 new file mode 100644 index 000000000..9307d9354 --- /dev/null +++ b/tests/data/test1112 @@ -0,0 +1,114 @@ +<testcase> +<info> +<keywords> +FTPS +EPSV +RETR +timeout +FAILURE +</keywords> +</info> + +# Server-side +<reply> +# Overload some standard FTP responses to make them shorter and faster +# to avoid wasting time waiting for the data phase to start +<servercmd> +SLOWDOWN +REPLY USER 331 OK +REPLY PASS 230 OK +REPLY PWD 257 "/" +REPLY TYPE 200 OK +</servercmd> +<data nocheck="yes"> +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +Long chunk of data that couldn't possibly be sent in the time allotted. +</data> +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> +<killserver> +ftps +</killserver> + <name> +FTPS download with strict timeout and slow data transfer + </name> + <command timeout="1"> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/1112 -m 7 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 28 is CURLE_OPERATION_TIMEDOUT +<errorcode> +28 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+SIZE 1112
+RETR 1112
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1113 b/tests/data/test1113 new file mode 100644 index 000000000..4d692ae38 --- /dev/null +++ b/tests/data/test1113 @@ -0,0 +1,98 @@ +<testcase> +<info> +<keywords> +FTP +RETR +LIST +wildcardmatch +ftplistparser +</keywords> +</info> + +# +# Server-side +<reply> +<data mode="text"> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib574 +</tool> +<name> +FTP wildcard download - changed fnmatch, 2x perform (DOS LIST response) +</name> +<command> +"ftp://%HOSTIP:%FTPPORT/fully_simulated/DOS/*.txt" +</command> +</client> + +############################################ +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +# THERE SHOULD NOT BE "SIZE"! and one "USER/PASS" +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD DOS
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD DOS
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol> +<stdout mode="text"> +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1114 b/tests/data/test1114 new file mode 100644 index 000000000..8eee4293b --- /dev/null +++ b/tests/data/test1114 @@ -0,0 +1,136 @@ +<testcase> +<info> +<keywords> +FTP +wildcardmatch +ftplistparser +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib576 +</tool> + <name> +FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (DOS) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/fully_simulated/DOS/* +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +<stdout mode="text"> +============================================================= +Remains: 12 +Filename: . +Size: 0B +Time: 04-27-10 05:12AM +Filetype: directory +============================================================= +Remains: 11 +Filename: .. +Size: 0B +Time: 04-23-10 03:12AM +Filetype: directory +============================================================= +Remains: 10 +Filename: chmod1 +Size: 38B +Time: 01-11-10 10:00AM +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 444 +------------------------------------------------------------- +============================================================= +Remains: 9 +Filename: chmod2 +Size: 38B +Time: 02-01-10 08:00AM +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 666 +------------------------------------------------------------- +============================================================= +Remains: 8 +Filename: chmod3 +Size: 38B +Time: 02-01-10 08:00AM +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 777 +------------------------------------------------------------- +============================================================= +Remains: 7 +Filename: chmod4 +Size: 0B +Time: 05-04-10 04:31AM +Filetype: directory +============================================================= +Remains: 6 +Filename: chmod5 +Size: 0B +Time: 05-04-10 04:31AM +Filetype: directory +============================================================= +Remains: 5 +Filename: empty_file.dat +Size: 0B +Time: 04-27-10 11:01AM +Filetype: regular file +Content: +------------------------------------------------------------- +------------------------------------------------------------- +============================================================= +Remains: 4 +Filename: file.txt +Size: 35B +Time: 04-27-10 11:01AM +Filetype: regular file +Content: +------------------------------------------------------------- +This is content of file "file.txt" +------------------------------------------------------------- +============================================================= +Remains: 3 +Filename: .NeXT +Size: 0B +Time: 01-23-05 02:05AM +Filetype: directory +============================================================= +Remains: 2 +Filename: someothertext.txt +Size: 47B +Time: 04-27-10 11:01AM +Filetype: regular file +Content: +------------------------------------------------------------- +# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK # +------------------------------------------------------------- +============================================================= +Remains: 1 +Filename: weirddir.txt +Size: 0B +Time: 04-23-10 03:12AM +Filetype: directory +============================================================= +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1115 b/tests/data/test1115 new file mode 100644 index 000000000..0f294d4cf --- /dev/null +++ b/tests/data/test1115 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP 1xx response code +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 104 Experiment
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 200 OK swsbounce
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP GET with unexpected 1xx response + </name> + <command> +http://%HOSTIP:%HTTPPORT/1115 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1115 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1116 b/tests/data/test1116 new file mode 100644 index 000000000..a9af3e61b --- /dev/null +++ b/tests/data/test1116 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +chunked Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc +
+0
+chunky-trailer: header data
+another-header: yes
+
+</data> +<datacheck> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with chunked trailer without Trailer: + </name> + <command> +http://%HOSTIP:%HTTPPORT/1116 -D log/heads1116 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1116 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/heads1116"> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+chunky-trailer: header data
+another-header: yes
+</file> +</verify> + +</testcase> diff --git a/tests/data/test1117 b/tests/data/test1117 new file mode 100644 index 000000000..5b696112b --- /dev/null +++ b/tests/data/test1117 @@ -0,0 +1,87 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Range +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Thu, 09 Sep 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 115
+
+This is a long error message that is large enough that the test server is +guaranteed to split it into two packets. +</data> + +<data1> +HTTP/1.1 206 Partial Content
+Date: Thu, 09 Sep 2010 14:49:01 GMT
+Accept-Ranges: bytes
+Content-Range: bytes 10-18/155
+Content-Length: 13
+Content-Type: text/plain
+
+partial body +</data1> + +<servercmd> +writedelay: 1 +</servercmd> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with invalid range then another URL + </name> + <command> +-r 10-22 http://%HOSTIP:%HTTPPORT/want/1117 http://%HOSTIP:%HTTPPORT/wantmore/11170001 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Thu, 09 Sep 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 115
+
+This is a long error message that is large enough that the test server is +guaranteed to split it into two packets. +HTTP/1.1 206 Partial Content
+Date: Thu, 09 Sep 2010 14:49:01 GMT
+Accept-Ranges: bytes
+Content-Range: bytes 10-18/155
+Content-Length: 13
+Content-Type: text/plain
+
+partial body +</stdout> + +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1117 HTTP/1.1
+Range: bytes=10-22
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/11170001 HTTP/1.1
+Range: bytes=10-22
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1118 b/tests/data/test1118 new file mode 100644 index 000000000..bc776aff6 --- /dev/null +++ b/tests/data/test1118 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +URL without slash and @-letter in query + </name> + <command> +http://%HOSTIP:%HTTPPORT?email=name@example.com/1118 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /?email=name@example.com/1118 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1119 b/tests/data/test1119 new file mode 100644 index 000000000..4b5a9ec73 --- /dev/null +++ b/tests/data/test1119 @@ -0,0 +1,24 @@ +<testcase> +<info> +<keywords> +symbols-in-versions +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> + + <name> +Verify that symbols-in-versions and headers are in sync + </name> + +<command type="perl"> +%SRCDIR/symbol-scan.pl %SRCDIR/.. ../include/curl +</command> +</client> + +</testcase> diff --git a/tests/data/test112 b/tests/data/test112 new file mode 100644 index 000000000..eb3400c57 --- /dev/null +++ b/tests/data/test112 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +APPE +Resume +</keywords> +</info> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PASV upload resume + </name> + <command> +ftp://%HOSTIP:%FTPPORT/112 -T log/upload112 -C 40 +</command> +<file name="log/upload112"> +this is the *****crap******** that we're gonna upload + +worx? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+APPE 112
+QUIT
+</protocol> +<upload> + gonna upload + +worx? +</upload> +</verify> +</testcase> diff --git a/tests/data/test1120 b/tests/data/test1120 new file mode 100644 index 000000000..4ea204258 --- /dev/null +++ b/tests/data/test1120 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +421 +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY CWD 421 Timeout! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with 421 timeout response + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/1120 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+</protocol> +# CURLE_OPERATION_TIMEDOUT is 28 +<errorcode> +28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1121 b/tests/data/test1121 new file mode 100644 index 000000000..e704e05fa --- /dev/null +++ b/tests/data/test1121 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP multiple provided Host: headers + </name> + <command> +-H "Host: host1" -H "Host: host2" -H "Host: host3" http://%HOSTIP:%HTTPPORT/1121 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1121 HTTP/1.1
+Accept: */*
+Host: host1
+Host: host2
+Host: host3
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1122 b/tests/data/test1122 new file mode 100644 index 000000000..78d50d77b --- /dev/null +++ b/tests/data/test1122 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpUcmFuc2Zlci1FbmNvZGluZzogZ3ppcA0KQ29udGVudC1MZW5ndGg6IDQ0DQoN +Ch+LCAh5nqtBAANsYWxhbGEAy8nMS1Uw5FLIAdFGXAoQhjEXAAoCcWAYAAAA +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Transfer-Encoding: gzip
+Content-Length: 44
+
+line 1 + line 2 + line 3 +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET gzip transfer-encoded content + </name> + <command> +http://%HOSTIP:%HTTPPORT/1122 --tr-encoding +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1122 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Connection: TE
+TE: gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1123 b/tests/data/test1123 new file mode 100644 index 000000000..3172fedb1 --- /dev/null +++ b/tests/data/test1123 @@ -0,0 +1,200 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpUcmFuc2Zlci1FbmNvZGluZzogZGVmbGF0ZQ0KQ29udGVudC1MZW5ndGg6IDEz +MDUNCg0KeJzcWNtu4zYQfTeQf2D91AK2brYTOXC0KHLZBM02wdoFuk8GLdE2G0kUSMq5PPTbO5Qo +ibEcr3eDvgRIYnLmnMPhDEmTmXx6SmK0IVxQlp51XcvpIpKGLKLp6qx7M73r+/5o3He7n4LO5JeL +u/PZt/tLlHH2DwllP6ZCAhBNv01nl19Qdy1ldmrbS07EOiFYWimR9gKHDySN7GXS1zzRd6yhFcmo +C6JbWkEHocqm2k1vTqPAPXa9iW0YSkSEJZnjKCKAGI/9vuP3PRc5w1PHPfXGE9vwG4Q8Ux9R4DnO +sO86fddHjnfqwc9AUyrEqzhSnJC5WDMugzDncR2OYW/jl3kcF3CE0wjFdNGmFhAdHhGhljpnSVJS +UoIkY7UAx/wZLRlHYUxJKvuCRgT99fUWSY5TsYSKWjCLRshQ3hkMogLhcgSlWqlwVd8ljYk46uRC +ddQY4jmV+MlCNxKJPMtAX6Dr2ey+V/yd9tAVtI86V0X74uZ81kOzy9s/L+Hz9uJ3gF3d3F72iuE/ +391fX36FNgzwSGKIqZTqZ0zInm7m0AoZe6BEFNooz2KGIxgCllqekKiZdQ9lWIhHxiPVhMjSPFkU +9un09qgTEi7pkoZQVzD9QTj4mChDgWo8wQjFtCAbGXsknERHncVzlaQekmvyZsarslhHndkaqAjD +74KmajMJSG2dapVgBpsOec5RJ8bpKscrIooYSLqhnKUJDCBAR5fQWBsbKnFM5fNchIyTYHTiD63R +ycTesm+BM8JDkAwGlntsYCvzFhrm8wB7bWwgC5Ne1yzLY8ybsY5HY4hhCMt529MiVAO6A8t3XxFe +h2I4ymCc0Su0EQ7HxbnhWyNnYuuO6ZmHLAddz6282vAKUw7iD2qMMYDIFyLkNJNwRIpgoE6H16YS +BqVPw/Vc7eXggixxHsuJbRpLGNR/Xh1gGZQ92HloVielrdaLPbFbrEZszRLythAsYMpLFXV42iZD +69YCjaZcvRwuB2CtpGiNyOLFO1wEwFpE0RqRF5odLgJgLaJojUi4hj1GYrY6XKqmaMFGopHlWXK4 +IIC1lKI1IhFZHC4CYC2iaI0IE0+HiwBYiyiaUS8RqfPyB2pWEqq6abqxzHMOaRMk0Ou36hqF2Ygf +KMlGVMXYCENE3RwOV1FoLVMQG52Ecs744UolXmtpslnXhAVVraBZemIKhxyk4MvNzP4bncPpASmj +eYJuS8fErhAar76n5JyTmNSZa5nn+v4WnFiuZ8EF6Q33G2x1rzo5dvxRi1hdsNocdS/afXHaBSzn +Yu+azATOUQITXjM5l2v4qoactUwlEucSbjKiDqnsV93aoE9gnFISo6kkKXzDrya26WxRoEq76/7v +Aq8ioopsIFt0zmIS3D2mhNe4wlRFapuhVr1qCasveE4TmmJpzk5yuCEUtYGC1p2W1/OO97kHe7n7 +nK7v7+W6e8eFpbE/6r1u93i4zz3eS/bHe73OXrc7+k7c3wlsf2SD1tjl/W67/LAmMngywUMMrqO1 +Tm18RvI5I2ddTkJ4HSibeknVi7LBmRvZUUPtcuwk6nsLuE+Gqhg7XTuZxuOsRd1+uL3FlVSqDQV2 +uLOjX/Vt6redWiW23mkN4u28seLehuP/L2nOT2dsOHhnxtT76uMnyvUGI/cdmXqBp9jHz9LAc4Yn +78jSNaFJhOOPn6jhcDTw3pGosA9PffEzeTIs+qyv/ysUdP4DAAD//4IzEaNjAAAAAP//AwDdOI7R +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Transfer-Encoding: deflate
+Content-Length: 1305
+
+<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE project-listing SYSTEM "http://freshmeat.net/backend/fm-projects-0.4.dtd"> +<project-listing> + <project> + <project_id>1612</project_id> + <date_added>1998-08-21 04:01:29</date_added> + <date_updated>2004-10-18 02:22:23</date_updated> + <projectname_short>curl</projectname_short> + <projectname_full>curl and libcurl</projectname_full> + <desc_short>Command line tool and library for client-side URL transfers.</desc_short> + <desc_full>curl and libcurl is a tool for transferring files
+using URL syntax. It supports HTTP, HTTPS, FTP,
+FTPS, DICT, TELNET, LDAP, FILE, and GOPHER, as
+well as HTTP-post, HTTP-put, cookies, FTP upload,
+resumed transfers, passwords, portnumbers, SSL
+certificates, Kerberos, and proxies. It is powered
+by libcurl, the client-side URL transfer library.
+There are bindings to libcurl for over 20
+languages and environments.
+</desc_full> + <vitality_score>5784.57</vitality_score> + <vitality_percent>3.16</vitality_percent> + <vitality_rank>169</vitality_rank> + <popularity_score>6594.54</popularity_score> + <popularity_percent>13.81</popularity_percent> + <popularity_rank>105</popularity_rank> + <rating>8.50</rating> + <rating_count>21</rating_count> + <rating_rank>183</rating_rank> + <subscriptions>323</subscriptions> + <branch_name>Default</branch_name> + <url_project_page>http://freshmeat.net/projects/curl/</url_project_page> + <url_homepage>http://freshmeat.net/redir/curl/1612/url_homepage/</url_homepage> + <url_tgz>http://freshmeat.net/redir/curl/1612/url_tgz/</url_tgz> + <url_bz2>http://freshmeat.net/redir/curl/1612/url_bz2/</url_bz2> + <url_zip>http://freshmeat.net/redir/curl/1612/url_zip/</url_zip> + <url_changelog>http://freshmeat.net/redir/curl/1612/url_changelog/</url_changelog> + <url_rpm>http://freshmeat.net/redir/curl/1612/url_rpm/</url_rpm> + <url_deb>http://freshmeat.net/redir/curl/1612/url_deb/</url_deb> + <url_osx>http://freshmeat.net/redir/curl/1612/url_osx/</url_osx> + <url_bsdport>http://freshmeat.net/redir/curl/1612/url_bsdport/</url_bsdport> + <url_purchase></url_purchase> + <url_cvs>http://freshmeat.net/redir/curl/1612/url_cvs/</url_cvs> + <url_list>http://freshmeat.net/redir/curl/1612/url_list/</url_list> + <url_mirror>http://freshmeat.net/redir/curl/1612/url_mirror/</url_mirror> + <url_demo></url_demo> + <license>MIT/X Consortium License</license> + <latest_release> + <latest_release_version>7.12.2</latest_release_version> + <latest_release_id>176085</latest_release_id> + <latest_release_date>2004-10-18 02:22:23</latest_release_date> + </latest_release> + <screenshot_thumb></screenshot_thumb> + <authors> + <author> + <author_name>Daniel Stenberg</author_name> + <author_url>http://freshmeat.net/~bagder/</author_url> + <author_role>Owner</author_role> + </author> + </authors> + <descriminators> + <trove_id>12</trove_id> + <trove_id>226</trove_id> + <trove_id>3</trove_id> + <trove_id>2</trove_id> + <trove_id>188</trove_id> + <trove_id>216</trove_id> + <trove_id>200</trove_id> + <trove_id>220</trove_id> + <trove_id>164</trove_id> + <trove_id>90</trove_id> + <trove_id>89</trove_id> + <trove_id>809</trove_id> + <trove_id>150</trove_id> + <trove_id>224</trove_id> + <trove_id>900</trove_id> + <trove_id>839</trove_id> + </descriminators> + <dependencies> + <dependency type="recommended"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>7464</dependency_branch_id> + <dependency_project_id>7464</dependency_project_id> + <dependency_project_title>OpenSSL (Default)</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>7443</dependency_project_id> + <dependency_project_title>OpenLDAP</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>12351</dependency_project_id> + <dependency_project_title>zlib</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>32047</dependency_project_id> + <dependency_project_title>Heimdal</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>44532</dependency_project_id> + <dependency_project_title>c-ares</dependency_project_title> + </dependency> + </dependencies> + </project> +</project-listing> +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET deflate transfer-encoded content + </name> + <command> +http://%HOSTIP:%HTTPPORT/1123 --tr-encoding +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1123 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Connection: TE
+TE: gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1124 b/tests/data/test1124 new file mode 100644 index 000000000..d860bee13 --- /dev/null +++ b/tests/data/test1124 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +Transfer-Encoding +chunked +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDI0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBTb21ldGhpbmctVEUtZnJpZW5kbHkvMC4xDQpWYXJ5OiBBY2NlcHQtRW5jb2RpbmcNCkNv +bnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENClRyYW5zZmVyLUVuY29k +aW5nOiBnemlwLCBjaHVua2VkDQoNCjE0DQofiwgIeZ6rQQADbGFsYWxhAMvJzA0KMTgNCktVMORS +yAHRRlwKEIYxFwAKAnFgGAAAAA0KMA0KDQo= +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2024 21:56:53 GMT
+Server: Something-TE-friendly/0.1
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Transfer-Encoding: gzip, chunked
+
+line 1 + line 2 + line 3 +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET gzip+chunked transfer-encoded content + </name> + <command> +http://%HOSTIP:%HTTPPORT/1124 --tr-encoding +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1124 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Connection: TE
+TE: gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1125 b/tests/data/test1125 new file mode 100644 index 000000000..1883734d9 --- /dev/null +++ b/tests/data/test1125 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpUcmFuc2Zlci1FbmNvZGluZzogZ3ppcA0KQ29udGVudC1MZW5ndGg6IDQ0DQoN +Ch+LCAh5nqtBAANsYWxhbGEAy8nMS1Uw5FLIAdFGXAoQhjEXAAoCcWAYAAAA +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Transfer-Encoding: gzip
+Content-Length: 44
+
+line 1 + line 2 + line 3 +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET transfer-encoding with custom Connection: + </name> + <command> +http://%HOSTIP:%HTTPPORT/1125 --tr-encoding -H "Connection: close" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1125 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Connection: close, TE
+TE: gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1126 b/tests/data/test1126 new file mode 100644 index 000000000..52f4db411 --- /dev/null +++ b/tests/data/test1126 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +If-Modified-Since +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2003 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +0123456789 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 200 If-Modified-Since with newer document + </name> + <command> +http://%HOSTIP:%HTTPPORT/1126 -z "dec 12 12:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1126 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1127 b/tests/data/test1127 new file mode 100644 index 000000000..3cc42c26a --- /dev/null +++ b/tests/data/test1127 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +If-Modified-Since +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1980 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +0123456789 +</data> +<datacheck> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1980 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 200 If-Modified-Since with older document + </name> + <command> +http://%HOSTIP:%HTTPPORT/1127 -z "dec 12 12:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1127 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1128 b/tests/data/test1128 new file mode 100644 index 000000000..a20487b43 --- /dev/null +++ b/tests/data/test1128 @@ -0,0 +1,85 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +If-Modified-Since +</keywords> +</info> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1980 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +0123456789 +</data> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:01 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2002 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +0123456789 +</data1> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 200 If-Modified-Since with old+new documents + </name> + <command> +http://%HOSTIP:%HTTPPORT/1128 http://%HOSTIP:%HTTPPORT/11280001 -z "dec 12 12:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1128 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+GET /11280001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol> + +<stdout> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1980 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:01 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2002 12:10:00 GMT +Content-Length: 11 +Content-Type: text/html + +0123456789 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1129 b/tests/data/test1129 new file mode 100644 index 000000000..f47141cd3 --- /dev/null +++ b/tests/data/test1129 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +Expect: 100-continue +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 404 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</data> + +<data1> +HTTP/1.1 404 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</data1> + +# we use skip to make the test server never read the full payload off +# the socket and instead return the response at once +<servercmd> +skip: 1025 +</servercmd> +</reply> + +# +# Client-side +<client> +# 1025 x 'x' +<file name="log/file1129"> +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +</file> +<server> +http +</server> + <name> +HTTP POST expect 100-continue with a 404 + </name> + <command option="no-output"> +-d @log/file1129 http://%HOSTIP:%HTTPPORT/1129 http://%HOSTIP:%HTTPPORT/11290001 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.1 404 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +HTTP/1.1 404 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</stdout> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /1129 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 1025
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+POST /11290001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 1025
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test113 b/tests/data/test113 new file mode 100644 index 000000000..0046297cf --- /dev/null +++ b/tests/data/test113 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY USER 314 bluah you fewl! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed login: USER not valid + </name> + <command> +ftp://%HOSTIP:%FTPPORT/113 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<protocol> +USER anonymous
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1130 b/tests/data/test1130 new file mode 100644 index 000000000..eb1e59f5b --- /dev/null +++ b/tests/data/test1130 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +Expect: 100-continue +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 404 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</data> + +<data1> +HTTP/1.1 404 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</data1> + +# we use skip to make the test server never read the full payload off +# the socket and instead return the response at once +<servercmd> +skip: 100 +</servercmd> +</reply> + +# +# Client-side +<client> +# 100 x 'x' +<file name="log/file1130"> +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +</file> +<server> +http +</server> + <name> +HTTP POST forced expect 100-continue with a 404 + </name> + <command option="no-output"> +-d @log/file1130 http://%HOSTIP:%HTTPPORT/1130 http://%HOSTIP:%HTTPPORT/11300001 -H "Expect: 100-continue" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.1 404 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +HTTP/1.1 404 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Content-Type: text/html + +-foo- +</stdout> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /1130 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Expect: 100-continue
+Content-Length: 100
+Content-Type: application/x-www-form-urlencoded
+
+POST /11300001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Expect: 100-continue
+Content-Length: 100
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1131 b/tests/data/test1131 new file mode 100644 index 000000000..96843af54 --- /dev/null +++ b/tests/data/test1131 @@ -0,0 +1,95 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +Expect: 100-continue +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 400 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 +Content-Type: text/html + +FAILURE1 +</data> + +<data1> +HTTP/1.1 400 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 +Content-Type: text/html + +FAILURE2 +</data1> + +# we use skip to make the test server never read the full payload off +# the socket and instead return the response at once +<servercmd> +skip: 100 +</servercmd> +</reply> + +# +# Client-side +<client> +# 100 x 'x' +<file name="log/file1131"> +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +</file> +<server> +http +</server> + <name> +HTTP PUT expect 100-continue with a 400 + </name> + <command option="no-output"> +-T log/file1131 http://%HOSTIP:%HTTPPORT/1131 -T log/file1131 http://%HOSTIP:%HTTPPORT/11310001 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.1 400 NOOOOOOOOO +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 +Content-Type: text/html + +FAILURE1 +HTTP/1.1 400 NEITHER +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 +Content-Type: text/html + +FAILURE2 +</stdout> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /1131 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 100
+Expect: 100-continue
+
+PUT /11310001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 100
+Expect: 100-continue
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1132 b/tests/data/test1132 new file mode 100644 index 000000000..366ffc77c --- /dev/null +++ b/tests/data/test1132 @@ -0,0 +1,24 @@ +<testcase> +<info> +<keywords> +memory-includes +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> + + <name> +Verify memory #include files in libcurl's C source files + </name> + +<command type="perl"> +%SRCDIR/mem-include-scan.pl %SRCDIR/../lib +</command> +</client> + +</testcase> diff --git a/tests/data/test114 b/tests/data/test114 new file mode 100644 index 000000000..6611aedeb --- /dev/null +++ b/tests/data/test114 @@ -0,0 +1,38 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY PASS 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed login: PASS not valid + </name> + <command> +ftp://%HOSTIP:%FTPPORT/114 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test115 b/tests/data/test115 new file mode 100644 index 000000000..f37a7e9fd --- /dev/null +++ b/tests/data/test115 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +FTP +PASV +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY PASV 314 bluah you f00l! +REPLY EPSV 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/115 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +13 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test116 b/tests/data/test116 new file mode 100644 index 000000000..9a36f9770 --- /dev/null +++ b/tests/data/test116 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +PORT +FAILURE +EPRT refused +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY EPRT 500 we don't like EPRT now +REPLY PORT 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# EPRT is only sent when IPv6 is enabled +<features> +ipv6 +</features> + <name> +FTP download, failed PORT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/116 -P 1.2.3.4 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +30 +</errorcode> +# Strip the port number but leave the rest +<strippart> +s/^(PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},)\d{1,3},\d{1,3}/$1/ +s/^(EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|)\d{1,5}\|/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1|1.2.3.4|
+PORT 1,2,3,4,
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test117 b/tests/data/test117 new file mode 100644 index 000000000..2caad0da5 --- /dev/null +++ b/tests/data/test117 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY EPSV 314 bluah you f00l! +REPLY TYPE 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed TYPE + </name> + <command> +ftp://%HOSTIP:%FTPPORT/117 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +17 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test118 b/tests/data/test118 new file mode 100644 index 000000000..6cd086ca2 --- /dev/null +++ b/tests/data/test118 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY RETR 314 bluah you f00l! +REPLY EPSV 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed RETR + </name> + <command> +ftp://%HOSTIP:%FTPPORT/118 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +19 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 118
+RETR 118
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test119 b/tests/data/test119 new file mode 100644 index 000000000..00a24287b --- /dev/null +++ b/tests/data/test119 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY RETR 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed RETR with PORT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/119 -P - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +19 +</errorcode> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+TYPE I
+SIZE 119
+RETR 119
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test12 b/tests/data/test12 new file mode 100644 index 000000000..95b891aca --- /dev/null +++ b/tests/data/test12 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Content-Range +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: Apache/1.3.11 (Unix) PHP/3.0.14
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 101
+Content-Range: bytes 100-200/3527
+Connection: close
+Content-Type: text/html
+
+..partial data returned from the +server as a result of setting an explicit byte range +in the request +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP range support + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/12 -r 100-200 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/12 HTTP/1.1
+Range: bytes=100-200
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test120 b/tests/data/test120 new file mode 100644 index 000000000..85d49f529 --- /dev/null +++ b/tests/data/test120 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +post-quote +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY EPSV 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +ftp download with post-quote delete operation + </name> + <command> +ftp://%HOSTIP:%FTPPORT/120 -Q "-DELE file" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 120
+RETR 120
+DELE file
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1200 b/tests/data/test1200 new file mode 100644 index 000000000..ba1159f80 --- /dev/null +++ b/tests/data/test1200 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +GOPHER +INDEX +</keywords> +</info> + +# +# Server-side +<reply> +<data> +iMenu results error.host 1
+0Selector /bar bar.foo.invalid 70
+.
+</data> +</reply> + +# Client-side +<client> +<server> +gopher +</server> + <name> +Gopher index + </name> + <command> +gopher://%HOSTIP:%GOPHERPORT/1/1200 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +/1200
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1201 b/tests/data/test1201 new file mode 100644 index 000000000..81a9fe425 --- /dev/null +++ b/tests/data/test1201 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +GOPHER +SELECTOR +</keywords> +</info> + +# +# Server-side +<reply> +<data> +iMenu results error.host 1
+0Selector /selector/SELECTOR /bar bar.foo.invalid 70
+.
+</data> +</reply> + +# Client-side +<client> +<server> +gopher +</server> + <name> +Gopher selector + </name> + <command> +gopher://%HOSTIP:%GOPHERPORT/1/selector/SELECTOR/1201 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +/selector/SELECTOR/1201
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1202 b/tests/data/test1202 new file mode 100644 index 000000000..37d270acb --- /dev/null +++ b/tests/data/test1202 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +GOPHER +QUERY +</keywords> +</info> + +# +# Server-side +<reply> +<data> +iSearch results error.host 1
+0Query query succeeded /foo foo.bar.invalid 70
+0Selector /the/search/engine /bar bar.foo.invalid 70
+.
+</data> +</reply> + +# Client-side +<client> +<server> +gopher +</server> + <name> +Gopher query + </name> + <command> +"gopher://%HOSTIP:%GOPHERPORT/7/the/search/engine?query%20succeeded/1202" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +/the/search/engine query succeeded/1202
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1203 b/tests/data/test1203 new file mode 100644 index 000000000..02d094da0 --- /dev/null +++ b/tests/data/test1203 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +GOPHER-ipv6 +IPv6 +INDEX +</keywords> +</info> + +# +# Server-side +<reply> +<data> +iMenu results error.host 1
+0Selector /bar bar.foo.invalid 70
+.
+</data> +</reply> + +# Client-side +<client> +<features> +ipv6 +</features> +<server> +gopher-ipv6 +</server> + <name> +Gopher IPv6 index + </name> + <command> +-g gopher://%HOST6IP:%GOPHER6PORT/1/moo/1203 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +/moo/1203
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1204 b/tests/data/test1204 new file mode 100644 index 000000000..02502fb8e --- /dev/null +++ b/tests/data/test1204 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +--anyauth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: X-MobileMe-AuthToken realm="Newcastle", Basic realm="fun fun fun"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets the second request +<data1> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1> + +<datacheck> +HTTP/1.1 401 Authorization Required swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: X-MobileMe-AuthToken realm="Newcastle", Basic realm="fun fun fun"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with WWW-Authenticate and multiple auths in a single line + </name> + <command> +http://%HOSTIP:%HTTPPORT/1204 -u testuser:testpass --anyauth +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1204 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1204 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1205 b/tests/data/test1205 new file mode 100644 index 000000000..6d7bb7b03 --- /dev/null +++ b/tests/data/test1205 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply name="1205"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Funny-head: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAendofthem + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with 18K HTTP header + </name> + <command> +http://%HOSTIP:%HTTPPORT/1205 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1205 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1206 b/tests/data/test1206 new file mode 100644 index 000000000..3f853d1d9 --- /dev/null +++ b/tests/data/test1206 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +NODATACONN425 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +some bytes +</data> +<servercmd> +NODATACONN425 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT and 425 on download + </name> + <command> +--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/1206 -P - +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 1206
+RETR 1206
+QUIT
+</protocol> +<errorcode> +10 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1207 b/tests/data/test1207 new file mode 100644 index 000000000..283e46d5b --- /dev/null +++ b/tests/data/test1207 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +NODATACONN421 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +some bytes +</data> +<servercmd> +NODATACONN421 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT and 421 on download + </name> + <command> +--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/1207 -P - +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 1207
+RETR 1207
+QUIT
+</protocol> +<errorcode> +10 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1208 b/tests/data/test1208 new file mode 100644 index 000000000..a0d428b43 --- /dev/null +++ b/tests/data/test1208 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +NODATACONN150 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +some bytes +</data> +<servercmd> +NODATACONN150 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT download, no data conn and no transient negative reply + </name> + <command> +--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/1208 -P - +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 1208
+RETR 1208
+QUIT
+</protocol> +<errorcode> +12 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1209 b/tests/data/test1209 new file mode 100644 index 000000000..7086829f1 --- /dev/null +++ b/tests/data/test1209 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +NODATACONN +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +some bytes +</data> +<servercmd> +NODATACONN +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT download, no data conn and no positive preliminary reply + </name> + <command> +--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/1209 -P - +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> + +# The protocol part does not include QUIT simply because the error is +# CURLE_OPERATION_TIMEDOUT (28) which is a generic timeout error without +# specificly saying for which connection it concerns, and for timeouts libcurl +# marks the control channel as "invalid". As this test case times out for the +# data connection it could still use the control channel. +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 1209
+RETR 1209
+</protocol> +<errorcode> +28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test121 b/tests/data/test121 new file mode 100644 index 000000000..de7a56174 --- /dev/null +++ b/tests/data/test121 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +post-quote +pre-quote +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +ftp download with post- and pre-transfer delete operations + </name> + <command> +ftp://%HOSTIP:%FTPPORT/121 -Q "-DELE after_transfer" -Q "DELE before_transfer" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+DELE before_transfer
+EPSV
+TYPE I
+SIZE 121
+RETR 121
+DELE after_transfer
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1210 b/tests/data/test1210 new file mode 100644 index 000000000..df931988c --- /dev/null +++ b/tests/data/test1210 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -J without Content-Disposition +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1210 -J -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1210 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/1210"> +12345 +</file> + +</verify> +</testcase> diff --git a/tests/data/test1211 b/tests/data/test1211 new file mode 100644 index 000000000..5418a85f7 --- /dev/null +++ b/tests/data/test1211 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PORT +RETR +NODATACONN425 +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +some bytes +</data> +<servercmd> +NODATACONN425 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP PORT and 425 on download + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1211 -P - +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> + +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 1211
+RETR 1211
+</protocol> +<errorcode> +28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test122 b/tests/data/test122 new file mode 100644 index 000000000..fb1dd05fc --- /dev/null +++ b/tests/data/test122 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +PASV +Resume +</keywords> +</info> +# Server-side +<reply> +<size> +5 +</size> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download resume with whole file already downloaded + </name> + <command> +ftp://%HOSTIP:%FTPPORT/122 -C 5 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 122
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1220 b/tests/data/test1220 new file mode 100644 index 000000000..d36524960 --- /dev/null +++ b/tests/data/test1220 @@ -0,0 +1,30 @@ +<testcase> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +file:// URLs with query string + </name> + <command> +file://localhost/%PWD/log/test1220.txt?a_query=foobar#afragment +</command> +<file name="log/test1220.txt"> +contents in a single file +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +contents in a single file +</stdout> +</verify> +</testcase> diff --git a/tests/data/test123 b/tests/data/test123 new file mode 100644 index 000000000..4bbfce9a4 --- /dev/null +++ b/tests/data/test123 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +Resume +</keywords> +</info> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP upload resume with whole file already downloaded + </name> + <command> +ftp://%HOSTIP:%FTPPORT/123 -T log/upload123 -C 51 +</command> +<file name="log/upload123"> +-------------------------------------------------- +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test124 b/tests/data/test124 new file mode 100644 index 000000000..255d8731f --- /dev/null +++ b/tests/data/test124 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +we can still send data even if pwd fails! +</data> +<servercmd> +REPLY PWD 314 bluah you f00l! +REPLY EPSV 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed PWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/124 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 124
+RETR 124
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test125 b/tests/data/test125 new file mode 100644 index 000000000..5677aeb47 --- /dev/null +++ b/tests/data/test125 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY CWD 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download, failed CWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/to/file/125 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +9 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test126 b/tests/data/test126 new file mode 100644 index 000000000..0872214af --- /dev/null +++ b/tests/data/test126 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +RETRWEIRDO +</keywords> +</info> +# Server-side +<reply> +<data> +this is file contents +</data> +<servercmd> +RETRWEIRDO +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download with multiple replies at once in RETR + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/lululul/126 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 126
+RETR 126
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test127 b/tests/data/test127 new file mode 100644 index 000000000..ac46d8d00 --- /dev/null +++ b/tests/data/test127 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +--disable-epsv +</keywords> +</info> +# Server-side +<reply> +<data> +moooooooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP --disable-epsv + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/to/file/127 --disable-epsv +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+CWD to
+CWD file
+PASV
+TYPE I
+SIZE 127
+RETR 127
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test128 b/tests/data/test128 new file mode 100644 index 000000000..743cd126f --- /dev/null +++ b/tests/data/test128 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +STOR +--crlf +</keywords> +</info> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP upload with --crlf + </name> + <command> +ftp://%HOSTIP:%FTPPORT/128 -T log/upload128 --crlf +</command> +<file name="log/upload128"> +file +with unix newlines +meant to be +converted +with +the +--crlf option +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 128
+QUIT
+</protocol> +<upload> +file
+with unix newlines
+meant to be
+converted
+with
+the
+--crlf option
+</upload> +</verify> +</testcase> diff --git a/tests/data/test129 b/tests/data/test129 new file mode 100644 index 000000000..cf1e8391d --- /dev/null +++ b/tests/data/test129 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +TYPE A +RETR +type= +</keywords> +</info> +# Server-side +<reply> +<size> +37 +</size> +<data> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP GET with type=A style ASCII URL and understated server SIZE + </name> + <command> +"ftp://%HOSTIP:%FTPPORT/129;type=A" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+SIZE 129
+RETR 129
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test13 b/tests/data/test13 new file mode 100644 index 000000000..18f7f8114 --- /dev/null +++ b/tests/data/test13 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP custom request +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 Read you
+Content-Length: 29
+Deleted: suppose we got a header like this! ;-)
+
+blabla custom request result +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP custom request 'DELETE' + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/13 -X DELETE +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +DELETE /want/13 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test130 b/tests/data/test130 new file mode 100644 index 000000000..dcc46fc8f --- /dev/null +++ b/tests/data/test130 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +LIST +netrc +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP (optional .netrc; no user/pass) dir list PASV + </name> + <command> +--netrc-optional --netrc-file log/netrc130 ftp://%HOSTIP:%FTPPORT/ +</command> +<file name="log/netrc130" > +# the following two lines were created while testing curl +machine %HOSTIP login user1 password passwd1 +machine %HOSTIP login user2 password passwd2 +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER user1
+PASS passwd1
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1300 b/tests/data/test1300 new file mode 100644 index 000000000..100888561 --- /dev/null +++ b/tests/data/test1300 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +unittest +llist +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +llist unit tests + </name> +<tool> +unit1300 +</tool> +</client> + +</testcase> diff --git a/tests/data/test1301 b/tests/data/test1301 new file mode 100644 index 000000000..4b6fac8b8 --- /dev/null +++ b/tests/data/test1301 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +unittest +curl_strequal +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +curl_strequal unit tests + </name> +<tool> +unit1301 +</tool> +</client> + +</testcase> diff --git a/tests/data/test1302 b/tests/data/test1302 new file mode 100644 index 000000000..27ea86248 --- /dev/null +++ b/tests/data/test1302 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +unittest +base64 +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +base64 encode/decode unit tests + </name> +<tool> +unit1302 +</tool> +</client> + +</testcase> diff --git a/tests/data/test1303 b/tests/data/test1303 new file mode 100644 index 000000000..925b47e15 --- /dev/null +++ b/tests/data/test1303 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +unittest +Curl_timeleft +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +Curl_timeleft unit tests + </name> +<tool> +unit1303 +</tool> +</client> + +</testcase> diff --git a/tests/data/test1304 b/tests/data/test1304 new file mode 100644 index 000000000..d518de9e4 --- /dev/null +++ b/tests/data/test1304 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +unittest +netrc +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +netrc parsing unit tests + </name> +<tool> +unit1304 +</tool> +<file name="log/netrc1304"> +machine example.com login admin password passwd +machine curl.example.com login none password none +</file> +</client> + +</testcase> diff --git a/tests/data/test1305 b/tests/data/test1305 new file mode 100644 index 000000000..91149b3ad --- /dev/null +++ b/tests/data/test1305 @@ -0,0 +1,30 @@ +<testcase> +<!-- This replaces test 558 --> +<info> +<keywords> +unittest +hash +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +internal hash create/destroy testing + </name> +<tool> +unit1305 +</tool> +<command> +1305 +</command> +</client> + +</testcase> diff --git a/tests/data/test1306 b/tests/data/test1306 new file mode 100644 index 000000000..b490efb51 --- /dev/null +++ b/tests/data/test1306 @@ -0,0 +1,30 @@ +<testcase> +<!-- This replaces test 559 --> +<info> +<keywords> +unittest +hash +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +internal hash create/add/destroy testing + </name> +<tool> +unit1305 +</tool> +<command> +1306 +</command> +</client> + +</testcase> diff --git a/tests/data/test1307 b/tests/data/test1307 new file mode 100644 index 000000000..82ed3c07f --- /dev/null +++ b/tests/data/test1307 @@ -0,0 +1,27 @@ +<testcase> +<!-- This replaces test 577 --> +<info> +<keywords> +unittest +wildcardmatch +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +internal Curl_fnmatch() testing + </name> +<tool> +unit1307 +</tool> +</client> + +</testcase> diff --git a/tests/data/test1308 b/tests/data/test1308 new file mode 100644 index 000000000..88e9771dd --- /dev/null +++ b/tests/data/test1308 @@ -0,0 +1,31 @@ +<testcase> +<info> +<keywords> +unittest +curl_formadd +curl_formget +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +http +</features> + <name> +formpost unit tests + </name> +<tool> +unit1308 +</tool> +<file name="log/test-1308"> +Piece of the file that is to uploaded as a formpost +</file> +</client> + +</testcase> diff --git a/tests/data/test1309 b/tests/data/test1309 new file mode 100644 index 000000000..c2f67ff10 --- /dev/null +++ b/tests/data/test1309 @@ -0,0 +1,1457 @@ +<testcase> +<info> +<keywords> +unittest +splay +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +splay unit tests + </name> +<tool> +unit1309 +</tool> +</client> + +<verify> +<stdout> +Result: + 0.1013[3] + 0.1003[2] + 0.954[3] + 0.944[1] +0.934[0] + 0.895[1] + 0.885[4] + 0.875[3] + 0.836[4] + 0.826[7] + 0.816[6] + 0.777[5] + 0.767[9] + 0.757[8] + 0.718[7] + 0.708[10] + 0.698[9] + 0.659[8] + 0.649[9] + 0.639[10] + 0.600[12] + 0.590[13] + 0.580[11] + 0.541[6] + 0.531[9] + 0.521[10] + 0.472[8] + 0.462[9] + 0.413[7] + 0.403[2] + 0.393[3] + 0.354[5] + 0.344[4] + 0.334[5] + 0.295[7] + 0.285[6] + 0.275[7] + 0.236[9] + 0.226[8] + 0.216[9] + 0.177[11] + 0.167[12] + 0.157[10] + 0.118[11] + 0.108[13] + 0.98[12] + 0.59[13] + 0.49[15] + 0.39[14] + 0.0[15] +Tree look: + 0.1013[3] + 0.1003[2] + 0.954[3] + 0.944[1] +0.934[0] + 0.895[1] + 0.885[4] + 0.875[3] + 0.836[4] + 0.826[7] + 0.816[6] + 0.777[5] + 0.767[9] + 0.757[8] + 0.718[7] + 0.708[10] + 0.698[9] + 0.659[8] + 0.649[9] + 0.639[10] + 0.600[12] + 0.590[13] + 0.580[11] + 0.541[6] + 0.531[9] + 0.521[10] + 0.472[8] + 0.462[9] + 0.413[7] + 0.403[2] + 0.393[3] + 0.354[5] + 0.344[4] + 0.334[5] + 0.295[7] + 0.285[6] + 0.275[7] + 0.236[9] + 0.226[8] + 0.216[9] + 0.177[11] + 0.167[12] + 0.157[10] + 0.118[11] + 0.108[13] + 0.98[12] + 0.59[13] + 0.49[15] + 0.39[14] + 0.0[15] +remove pointer 7, payload 718 +Tree look: + 0.1013[5] + 0.1003[4] + 0.954[5] + 0.944[3] + 0.934[2] + 0.895[1] + 0.885[4] + 0.875[3] + 0.836[2] + 0.826[5] + 0.816[4] + 0.777[3] + 0.767[5] + 0.757[4] +0.708[0] + 0.698[2] + 0.659[3] + 0.649[4] + 0.639[5] + 0.600[7] + 0.590[8] + 0.580[6] + 0.541[1] + 0.531[5] + 0.521[6] + 0.472[4] + 0.462[5] + 0.413[3] + 0.403[2] + 0.393[3] + 0.354[5] + 0.344[4] + 0.334[5] + 0.295[7] + 0.285[6] + 0.275[7] + 0.236[9] + 0.226[8] + 0.216[9] + 0.177[11] + 0.167[12] + 0.157[10] + 0.118[11] + 0.108[13] + 0.98[12] + 0.59[13] + 0.49[15] + 0.39[14] + 0.0[15] +remove pointer 8, payload 236 +Tree look: + 0.1013[7] + 0.1003[6] + 0.954[7] + 0.944[5] + 0.934[4] + 0.895[3] + 0.885[6] + 0.875[5] + 0.836[4] + 0.826[7] + 0.816[6] + 0.777[5] + 0.767[7] + 0.757[6] + 0.708[2] + 0.698[3] + 0.659[4] + 0.649[5] + 0.639[6] + 0.600[8] + 0.590[9] + 0.580[7] + 0.541[1] + 0.531[6] + 0.521[7] + 0.472[5] + 0.462[6] + 0.413[4] + 0.403[3] + 0.393[2] + 0.354[5] + 0.344[4] + 0.334[3] + 0.295[6] + 0.285[5] + 0.275[4] +0.226[0] + 0.216[1] + 0.177[3] + 0.167[4] + 0.157[2] + 0.118[3] + 0.108[5] + 0.98[4] + 0.59[5] + 0.49[7] + 0.39[6] + 0.0[7] +remove pointer 9, payload 777 +Tree look: + 0.1013[6] + 0.1003[5] + 0.954[6] + 0.944[4] + 0.934[3] + 0.895[2] + 0.885[4] + 0.875[3] + 0.836[1] + 0.826[3] + 0.816[2] +0.767[0] + 0.757[2] + 0.708[1] + 0.698[3] + 0.659[4] + 0.649[5] + 0.639[6] + 0.600[8] + 0.590[9] + 0.580[7] + 0.541[2] + 0.531[8] + 0.521[9] + 0.472[7] + 0.462[8] + 0.413[6] + 0.403[5] + 0.393[4] + 0.354[7] + 0.344[6] + 0.334[5] + 0.295[8] + 0.285[7] + 0.275[6] + 0.226[3] + 0.216[4] + 0.177[6] + 0.167[7] + 0.157[5] + 0.118[6] + 0.108[8] + 0.98[7] + 0.59[8] + 0.49[10] + 0.39[9] + 0.0[10] +remove pointer 10, payload 295 +Tree look: + 0.1013[8] + 0.1003[7] + 0.954[8] + 0.944[6] + 0.934[5] + 0.895[4] + 0.885[6] + 0.875[5] + 0.836[3] + 0.826[5] + 0.816[4] + 0.767[2] + 0.757[3] + 0.708[1] + 0.698[3] + 0.659[4] + 0.649[5] + 0.639[6] + 0.600[8] + 0.590[9] + 0.580[7] + 0.541[2] + 0.531[8] + 0.521[9] + 0.472[7] + 0.462[8] + 0.413[6] + 0.403[5] + 0.393[4] + 0.354[6] + 0.344[5] + 0.334[3] +0.285[0] + 0.275[2] + 0.226[1] + 0.216[2] + 0.177[4] + 0.167[5] + 0.157[3] + 0.118[4] + 0.108[6] + 0.98[5] + 0.59[6] + 0.49[8] + 0.39[7] + 0.0[8] +remove pointer 11, payload 836 +Tree look: + 0.1013[5] + 0.1003[4] + 0.954[5] + 0.944[3] + 0.934[2] + 0.895[1] + 0.885[3] + 0.875[2] +0.826[0] + 0.816[2] + 0.767[1] + 0.757[3] + 0.708[2] + 0.698[5] + 0.659[6] + 0.649[7] + 0.639[8] + 0.600[10] + 0.590[11] + 0.580[9] + 0.541[4] + 0.531[10] + 0.521[11] + 0.472[9] + 0.462[10] + 0.413[8] + 0.403[7] + 0.393[6] + 0.354[8] + 0.344[7] + 0.334[5] + 0.285[3] + 0.275[5] + 0.226[4] + 0.216[5] + 0.177[7] + 0.167[8] + 0.157[6] + 0.118[7] + 0.108[9] + 0.98[8] + 0.59[9] + 0.49[11] + 0.39[10] + 0.0[11] +remove pointer 12, payload 354 +Tree look: + 0.1013[7] + 0.1003[6] + 0.954[7] + 0.944[5] + 0.934[4] + 0.895[3] + 0.885[5] + 0.875[4] + 0.826[2] + 0.816[3] + 0.767[1] + 0.757[3] + 0.708[2] + 0.698[4] + 0.659[5] + 0.649[6] + 0.639[7] + 0.600[9] + 0.590[10] + 0.580[8] + 0.541[3] + 0.531[8] + 0.521[9] + 0.472[7] + 0.462[8] + 0.413[6] + 0.403[5] + 0.393[4] +0.344[0] + 0.334[1] + 0.285[2] + 0.275[4] + 0.226[3] + 0.216[4] + 0.177[6] + 0.167[7] + 0.157[5] + 0.118[6] + 0.108[8] + 0.98[7] + 0.59[8] + 0.49[10] + 0.39[9] + 0.0[10] +remove pointer 13, payload 895 +Tree look: + 0.1013[4] + 0.1003[3] + 0.954[4] + 0.944[2] + 0.934[1] +0.885[0] + 0.875[2] + 0.826[1] + 0.816[3] + 0.767[2] + 0.757[5] + 0.708[4] + 0.698[6] + 0.659[7] + 0.649[8] + 0.639[9] + 0.600[11] + 0.590[12] + 0.580[10] + 0.541[5] + 0.531[10] + 0.521[11] + 0.472[9] + 0.462[10] + 0.413[8] + 0.403[7] + 0.393[6] + 0.344[3] + 0.334[4] + 0.285[5] + 0.275[7] + 0.226[6] + 0.216[7] + 0.177[9] + 0.167[10] + 0.157[8] + 0.118[9] + 0.108[11] + 0.98[10] + 0.59[11] + 0.49[13] + 0.39[12] + 0.0[13] +remove pointer 14, payload 413 +Tree look: + 0.1013[6] + 0.1003[5] + 0.954[6] + 0.944[4] + 0.934[3] + 0.885[2] + 0.875[3] + 0.826[1] + 0.816[3] + 0.767[2] + 0.757[5] + 0.708[4] + 0.698[5] + 0.659[6] + 0.649[7] + 0.639[8] + 0.600[10] + 0.590[11] + 0.580[9] + 0.541[3] + 0.531[5] + 0.521[6] + 0.472[4] + 0.462[5] +0.403[0] + 0.393[2] + 0.344[1] + 0.334[2] + 0.285[3] + 0.275[5] + 0.226[4] + 0.216[5] + 0.177[7] + 0.167[8] + 0.157[6] + 0.118[7] + 0.108[9] + 0.98[8] + 0.59[9] + 0.49[11] + 0.39[10] + 0.0[11] +remove pointer 15, payload 954 +Tree look: + 0.1013[2] + 0.1003[1] +0.944[0] + 0.934[1] + 0.885[3] + 0.875[4] + 0.826[2] + 0.816[5] + 0.767[4] + 0.757[7] + 0.708[6] + 0.698[7] + 0.659[8] + 0.649[9] + 0.639[10] + 0.600[12] + 0.590[13] + 0.580[11] + 0.541[5] + 0.531[7] + 0.521[8] + 0.472[6] + 0.462[7] + 0.403[3] + 0.393[5] + 0.344[4] + 0.334[5] + 0.285[6] + 0.275[8] + 0.226[7] + 0.216[8] + 0.177[10] + 0.167[11] + 0.157[9] + 0.118[10] + 0.108[12] + 0.98[11] + 0.59[12] + 0.49[14] + 0.39[13] + 0.0[14] +remove pointer 16, payload 472 +Tree look: + 0.1013[4] + 0.1003[3] + 0.944[2] + 0.934[1] + 0.885[3] + 0.875[4] + 0.826[2] + 0.816[5] + 0.767[4] + 0.757[6] + 0.708[5] + 0.698[6] + 0.659[7] + 0.649[8] + 0.639[9] + 0.600[11] + 0.590[12] + 0.580[10] + 0.541[3] + 0.531[4] + 0.521[5] +0.462[0] + 0.403[1] + 0.393[3] + 0.344[2] + 0.334[3] + 0.285[4] + 0.275[6] + 0.226[5] + 0.216[6] + 0.177[8] + 0.167[9] + 0.157[7] + 0.118[8] + 0.108[10] + 0.98[9] + 0.59[10] + 0.49[12] + 0.39[11] + 0.0[12] +remove pointer 17, payload 1013 +Tree look: +0.1003[0] + 0.944[2] + 0.934[1] + 0.885[4] + 0.875[5] + 0.826[3] + 0.816[6] + 0.767[5] + 0.757[7] + 0.708[6] + 0.698[7] + 0.659[8] + 0.649[9] + 0.639[10] + 0.600[12] + 0.590[13] + 0.580[11] + 0.541[4] + 0.531[5] + 0.521[6] + 0.462[2] + 0.403[3] + 0.393[5] + 0.344[4] + 0.334[5] + 0.285[6] + 0.275[8] + 0.226[7] + 0.216[8] + 0.177[10] + 0.167[11] + 0.157[9] + 0.118[10] + 0.108[12] + 0.98[11] + 0.59[12] + 0.49[14] + 0.39[13] + 0.0[14] +remove pointer 18, payload 531 +Tree look: + 0.1003[2] + 0.944[3] + 0.934[1] + 0.885[4] + 0.875[5] + 0.826[3] + 0.816[5] + 0.767[4] + 0.757[6] + 0.708[5] + 0.698[6] + 0.659[7] + 0.649[8] + 0.639[9] + 0.600[11] + 0.590[12] + 0.580[10] + 0.541[2] +0.521[0] + 0.462[1] + 0.403[2] + 0.393[4] + 0.344[3] + 0.334[4] + 0.285[5] + 0.275[7] + 0.226[6] + 0.216[7] + 0.177[9] + 0.167[10] + 0.157[8] + 0.118[9] + 0.108[11] + 0.98[10] + 0.59[11] + 0.49[13] + 0.39[12] + 0.0[13] +remove pointer 19, payload 49 +Tree look: + 0.1003[4] + 0.944[5] + 0.934[3] + 0.885[6] + 0.875[7] + 0.826[5] + 0.816[7] + 0.767[6] + 0.757[8] + 0.708[7] + 0.698[8] + 0.659[9] + 0.649[10] + 0.639[11] + 0.600[13] + 0.590[14] + 0.580[12] + 0.541[4] + 0.521[2] + 0.462[1] + 0.403[3] + 0.393[4] + 0.344[2] + 0.334[4] + 0.285[3] + 0.275[6] + 0.226[5] + 0.216[4] + 0.177[7] + 0.167[8] + 0.157[6] + 0.118[5] + 0.108[8] + 0.98[7] + 0.59[6] +0.39[0] + 0.0[1] +remove pointer 20, payload 590 +Tree look: + 0.1003[2] + 0.944[3] + 0.934[1] + 0.885[4] + 0.875[5] + 0.826[3] + 0.816[4] + 0.767[2] + 0.757[5] + 0.708[4] + 0.698[3] + 0.659[5] + 0.649[4] + 0.639[5] + 0.600[6] +0.580[0] + 0.541[2] + 0.521[1] + 0.462[2] + 0.403[5] + 0.393[6] + 0.344[4] + 0.334[6] + 0.285[5] + 0.275[8] + 0.226[7] + 0.216[6] + 0.177[9] + 0.167[10] + 0.157[8] + 0.118[7] + 0.108[10] + 0.98[9] + 0.59[8] + 0.39[3] + 0.0[4] +remove pointer 21, payload 108 +Tree look: + 0.1003[4] + 0.944[5] + 0.934[3] + 0.885[6] + 0.875[7] + 0.826[5] + 0.816[6] + 0.767[4] + 0.757[7] + 0.708[6] + 0.698[5] + 0.659[7] + 0.649[6] + 0.639[7] + 0.600[8] + 0.580[2] + 0.541[3] + 0.521[1] + 0.462[2] + 0.403[5] + 0.393[6] + 0.344[4] + 0.334[5] + 0.285[3] + 0.275[7] + 0.226[6] + 0.216[5] + 0.177[7] + 0.167[8] + 0.157[6] + 0.118[4] +0.98[0] + 0.59[2] + 0.39[1] + 0.0[2] +remove pointer 22, payload 649 +Tree look: + 0.1003[3] + 0.944[4] + 0.934[2] + 0.885[4] + 0.875[5] + 0.826[3] + 0.816[4] + 0.767[1] + 0.757[4] + 0.708[3] + 0.698[2] + 0.659[3] +0.639[0] + 0.600[2] + 0.580[1] + 0.541[3] + 0.521[2] + 0.462[4] + 0.403[7] + 0.393[8] + 0.344[6] + 0.334[7] + 0.285[5] + 0.275[9] + 0.226[8] + 0.216[7] + 0.177[9] + 0.167[10] + 0.157[8] + 0.118[6] + 0.98[3] + 0.59[5] + 0.39[4] + 0.0[5] +remove pointer 23, payload 167 +Tree look: + 0.1003[5] + 0.944[6] + 0.934[4] + 0.885[6] + 0.875[7] + 0.826[5] + 0.816[6] + 0.767[3] + 0.757[6] + 0.708[5] + 0.698[4] + 0.659[5] + 0.639[2] + 0.600[3] + 0.580[1] + 0.541[3] + 0.521[2] + 0.462[4] + 0.403[6] + 0.393[7] + 0.344[5] + 0.334[6] + 0.285[3] + 0.275[6] + 0.226[5] + 0.216[4] + 0.177[5] +0.157[0] + 0.118[1] + 0.98[2] + 0.59[4] + 0.39[3] + 0.0[4] +remove pointer 24, payload 708 +Tree look: + 0.1003[3] + 0.944[4] + 0.934[2] + 0.885[4] + 0.875[5] + 0.826[3] + 0.816[4] + 0.767[1] + 0.757[2] +0.698[0] + 0.659[2] + 0.639[1] + 0.600[3] + 0.580[2] + 0.541[5] + 0.521[4] + 0.462[6] + 0.403[8] + 0.393[9] + 0.344[7] + 0.334[8] + 0.285[5] + 0.275[8] + 0.226[7] + 0.216[6] + 0.177[7] + 0.157[3] + 0.118[4] + 0.98[5] + 0.59[7] + 0.39[6] + 0.0[7] +remove pointer 25, payload 226 +Tree look: + 0.1003[5] + 0.944[6] + 0.934[4] + 0.885[6] + 0.875[7] + 0.826[5] + 0.816[6] + 0.767[3] + 0.757[4] + 0.698[2] + 0.659[3] + 0.639[1] + 0.600[3] + 0.580[2] + 0.541[5] + 0.521[4] + 0.462[5] + 0.403[7] + 0.393[8] + 0.344[6] + 0.334[7] + 0.285[3] + 0.275[4] +0.216[0] + 0.177[2] + 0.157[1] + 0.118[2] + 0.98[3] + 0.59[5] + 0.39[4] + 0.0[5] +remove pointer 26, payload 767 +Tree look: + 0.1003[2] + 0.944[3] + 0.934[1] + 0.885[3] + 0.875[4] + 0.826[2] + 0.816[3] +0.757[0] + 0.698[1] + 0.659[3] + 0.639[2] + 0.600[5] + 0.580[4] + 0.541[7] + 0.521[6] + 0.462[7] + 0.403[9] + 0.393[10] + 0.344[8] + 0.334[9] + 0.285[5] + 0.275[6] + 0.216[3] + 0.177[5] + 0.157[4] + 0.118[5] + 0.98[6] + 0.59[8] + 0.39[7] + 0.0[8] +remove pointer 27, payload 285 +Tree look: + 0.1003[4] + 0.944[5] + 0.934[3] + 0.885[5] + 0.875[6] + 0.826[4] + 0.816[5] + 0.757[2] + 0.698[1] + 0.659[3] + 0.639[2] + 0.600[4] + 0.580[3] + 0.541[5] + 0.521[4] + 0.462[5] + 0.403[7] + 0.393[8] + 0.344[6] + 0.334[7] +0.275[0] + 0.216[1] + 0.177[3] + 0.157[2] + 0.118[3] + 0.98[4] + 0.59[6] + 0.39[5] + 0.0[6] +remove pointer 28, payload 826 +Tree look: + 0.1003[2] + 0.944[3] + 0.934[1] + 0.885[2] + 0.875[3] +0.816[0] + 0.757[1] + 0.698[2] + 0.659[5] + 0.639[4] + 0.600[6] + 0.580[5] + 0.541[7] + 0.521[6] + 0.462[7] + 0.403[9] + 0.393[10] + 0.344[8] + 0.334[9] + 0.275[3] + 0.216[4] + 0.177[6] + 0.157[5] + 0.118[6] + 0.98[7] + 0.59[9] + 0.39[8] + 0.0[9] +remove pointer 29, payload 344 +Tree look: + 0.1003[4] + 0.944[5] + 0.934[3] + 0.885[4] + 0.875[5] + 0.816[2] + 0.757[1] + 0.698[2] + 0.659[5] + 0.639[4] + 0.600[5] + 0.580[3] + 0.541[6] + 0.521[5] + 0.462[4] + 0.403[5] + 0.393[6] +0.334[0] + 0.275[1] + 0.216[2] + 0.177[4] + 0.157[3] + 0.118[4] + 0.98[5] + 0.59[7] + 0.39[6] + 0.0[7] +remove pointer 30, payload 885 +Tree look: + 0.1003[2] + 0.944[3] + 0.934[1] +0.875[0] + 0.816[1] + 0.757[2] + 0.698[4] + 0.659[7] + 0.639[6] + 0.600[7] + 0.580[5] + 0.541[8] + 0.521[7] + 0.462[6] + 0.403[7] + 0.393[8] + 0.334[3] + 0.275[4] + 0.216[5] + 0.177[7] + 0.157[6] + 0.118[7] + 0.98[8] + 0.59[10] + 0.39[9] + 0.0[10] +remove pointer 31, payload 403 +Tree look: + 0.1003[4] + 0.944[5] + 0.934[3] + 0.875[2] + 0.816[1] + 0.757[2] + 0.698[4] + 0.659[6] + 0.639[5] + 0.600[6] + 0.580[3] + 0.541[6] + 0.521[5] + 0.462[4] +0.393[0] + 0.334[1] + 0.275[2] + 0.216[3] + 0.177[5] + 0.157[4] + 0.118[5] + 0.98[6] + 0.59[8] + 0.39[7] + 0.0[8] +remove pointer 32, payload 944 +Tree look: + 0.1003[1] +0.934[0] + 0.875[2] + 0.816[1] + 0.757[3] + 0.698[5] + 0.659[7] + 0.639[6] + 0.600[7] + 0.580[4] + 0.541[7] + 0.521[6] + 0.462[5] + 0.393[2] + 0.334[3] + 0.275[4] + 0.216[5] + 0.177[7] + 0.157[6] + 0.118[7] + 0.98[8] + 0.59[10] + 0.39[9] + 0.0[10] +remove pointer 33, payload 462 +Tree look: + 0.1003[3] + 0.934[2] + 0.875[3] + 0.816[1] + 0.757[3] + 0.698[4] + 0.659[6] + 0.639[5] + 0.600[6] + 0.580[2] + 0.541[4] + 0.521[3] +0.393[0] + 0.334[1] + 0.275[2] + 0.216[3] + 0.177[5] + 0.157[4] + 0.118[5] + 0.98[6] + 0.59[8] + 0.39[7] + 0.0[8] +remove pointer 34, payload 1003 +Tree look: +0.934[0] + 0.875[2] + 0.816[1] + 0.757[4] + 0.698[5] + 0.659[7] + 0.639[6] + 0.600[7] + 0.580[3] + 0.541[5] + 0.521[4] + 0.393[2] + 0.334[3] + 0.275[4] + 0.216[5] + 0.177[7] + 0.157[6] + 0.118[7] + 0.98[8] + 0.59[10] + 0.39[9] + 0.0[10] +remove pointer 35, payload 521 +Tree look: + 0.934[2] + 0.875[3] + 0.816[1] + 0.757[3] + 0.698[4] + 0.659[6] + 0.639[5] + 0.600[6] + 0.580[2] + 0.541[3] +0.393[0] + 0.334[1] + 0.275[2] + 0.216[3] + 0.177[5] + 0.157[4] + 0.118[5] + 0.98[6] + 0.59[8] + 0.39[7] + 0.0[8] +remove pointer 36, payload 39 +Tree look: + 0.934[4] + 0.875[5] + 0.816[3] + 0.757[5] + 0.698[6] + 0.659[8] + 0.639[7] + 0.600[8] + 0.580[4] + 0.541[5] + 0.393[2] + 0.334[1] + 0.275[3] + 0.216[2] + 0.177[5] + 0.157[4] + 0.118[3] + 0.98[4] + 0.59[5] +0.0[0] +remove pointer 37, payload 580 +Tree look: + 0.934[2] + 0.875[3] + 0.816[1] + 0.757[2] + 0.698[3] + 0.659[5] + 0.639[4] + 0.600[5] +0.541[0] + 0.393[1] + 0.334[2] + 0.275[5] + 0.216[4] + 0.177[7] + 0.157[6] + 0.118[5] + 0.98[6] + 0.59[7] + 0.0[3] +remove pointer 38, payload 98 +Tree look: + 0.934[4] + 0.875[5] + 0.816[3] + 0.757[4] + 0.698[5] + 0.659[7] + 0.639[6] + 0.600[7] + 0.541[2] + 0.393[1] + 0.334[2] + 0.275[5] + 0.216[4] + 0.177[6] + 0.157[5] + 0.118[3] +0.59[0] + 0.0[1] +remove pointer 39, payload 639 +Tree look: + 0.934[3] + 0.875[4] + 0.816[2] + 0.757[1] + 0.698[2] + 0.659[3] +0.600[0] + 0.541[1] + 0.393[2] + 0.334[4] + 0.275[7] + 0.216[6] + 0.177[8] + 0.157[7] + 0.118[5] + 0.59[3] + 0.0[4] +remove pointer 40, payload 157 +Tree look: + 0.934[5] + 0.875[6] + 0.816[4] + 0.757[3] + 0.698[4] + 0.659[5] + 0.600[2] + 0.541[1] + 0.393[2] + 0.334[3] + 0.275[5] + 0.216[4] + 0.177[5] +0.118[0] + 0.59[1] + 0.0[2] +remove pointer 41, payload 698 +Tree look: + 0.934[3] + 0.875[4] + 0.816[2] + 0.757[1] +0.659[0] + 0.600[1] + 0.541[2] + 0.393[4] + 0.334[5] + 0.275[7] + 0.216[6] + 0.177[7] + 0.118[3] + 0.59[4] + 0.0[5] +remove pointer 42, payload 216 +Tree look: + 0.934[5] + 0.875[6] + 0.816[4] + 0.757[3] + 0.659[2] + 0.600[1] + 0.541[2] + 0.393[4] + 0.334[3] + 0.275[4] +0.177[0] + 0.118[1] + 0.59[2] + 0.0[3] +remove pointer 43, payload 757 +Tree look: + 0.934[2] + 0.875[3] + 0.816[1] +0.659[0] + 0.600[1] + 0.541[3] + 0.393[5] + 0.334[4] + 0.275[5] + 0.177[2] + 0.118[3] + 0.59[4] + 0.0[5] +remove pointer 44, payload 275 +Tree look: + 0.934[4] + 0.875[5] + 0.816[3] + 0.659[2] + 0.600[1] + 0.541[3] + 0.393[4] + 0.334[2] +0.177[0] + 0.118[1] + 0.59[2] + 0.0[3] +remove pointer 45, payload 816 +Tree look: + 0.934[1] + 0.875[2] +0.659[0] + 0.600[1] + 0.541[4] + 0.393[5] + 0.334[3] + 0.177[2] + 0.118[3] + 0.59[4] + 0.0[5] +remove pointer 46, payload 334 +Tree look: + 0.934[3] + 0.875[4] + 0.659[2] + 0.600[1] + 0.541[2] + 0.393[3] +0.177[0] + 0.118[1] + 0.59[2] + 0.0[3] +remove pointer 47, payload 875 +Tree look: + 0.934[1] +0.659[0] + 0.600[1] + 0.541[3] + 0.393[4] + 0.177[2] + 0.118[3] + 0.59[4] + 0.0[5] +remove pointer 48, payload 393 +Tree look: + 0.934[3] + 0.659[2] + 0.600[1] + 0.541[2] +0.177[0] + 0.118[1] + 0.59[2] + 0.0[3] +remove pointer 49, payload 934 +Tree look: +0.659[0] + 0.600[1] + 0.541[3] + 0.177[2] + 0.118[3] + 0.59[4] + 0.0[5] +remove pointer 0, payload 0 +Tree look: + 0.659[1] +0.600[0] + 0.541[3] + 0.177[2] + 0.118[1] + 0.59[2] +remove pointer 1, payload 541 +Tree look: + 0.659[2] + 0.600[1] +0.177[0] + 0.118[1] + 0.59[2] +remove pointer 2, payload 59 +Tree look: + 0.659[3] + 0.600[2] + 0.177[1] +0.118[0] +remove pointer 3, payload 600 +Tree look: + 0.659[1] +0.177[0] + 0.118[1] +remove pointer 4, payload 118 +Tree look: + 0.659[1] +0.177[0] +remove pointer 5, payload 659 +Tree look: +0.177[0] +remove pointer 6, payload 177 +</stdout> +</verify> + +</testcase> diff --git a/tests/data/test131 b/tests/data/test131 new file mode 100644 index 000000000..86501c627 --- /dev/null +++ b/tests/data/test131 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +LIST +netrc +</keywords> +</info> +# +# Server-side +<reply> +# +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP (optional .netrc; user/no pass) dir list PASV + </name> + <command> +--netrc-optional --netrc-file log/netrc131 ftp://user2@%HOSTIP:%FTPPORT/ +</command> +<file name="log/netrc131" > +# the following two lines were created while testing curl +machine %HOSTIP login user1 password passwd1 +machine %HOSTIP login user2 password passwd2 +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER user2
+PASS passwd2
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1310 b/tests/data/test1310 new file mode 100644 index 000000000..840f3c5fa --- /dev/null +++ b/tests/data/test1310 @@ -0,0 +1,125 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 34 +WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA== + +This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 32 + +Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 34 +WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA== + +HTTP/1.1 200 Things are fine in server land swsclose +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 32 + +Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM_WB +debug +</features> +<server> +http +</server> + <name> +HTTP with NTLM delegation to winbind helper + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so +# set path to fake_auth instead of real ntlm_auth to generate NTLM type1 and type 3 messages +CURL_NTLM_WB_FILE=%PWD/server/fake_ntlm +# set source directory so fake_ntlm can find the test files +CURL_NTLM_AUTH_SRCDIR=%SRCDIR +# set the test number +CURL_NTLM_AUTH_TESTNUM=1310 + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/1310 -u testuser:anypasswd --ntlm-wb +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1310 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAA
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1310 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAE8AAAAYABgAZwAAAAAAAABAAAAACAAIAEAAAAAHAAcASAAAAAAAAAAAAAAAggEAAHRlc3R1c2VyVU5LTk9XTlpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOQ==
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +# Input and output (type 1 message) for fake_ntlm +<ntlm_auth_type1> +<input> +YR +</input> +<output> +YR TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAA +</output> +</ntlm_auth_type1> +# Input and output (type 3 message) for fake_ntlm +<ntlm_auth_type3> +<input> +TT TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA== +</input> +<output> +KK TlRMTVNTUAADAAAAGAAYAE8AAAAYABgAZwAAAAAAAABAAAAACAAIAEAAAAAHAAcASAAAAAAAAAAAAAAAggEAAHRlc3R1c2VyVU5LTk9XTlpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOQ== +</output> +</ntlm_auth_type3> +</testcase> diff --git a/tests/data/test1311 b/tests/data/test1311 new file mode 100644 index 000000000..e47647c38 --- /dev/null +++ b/tests/data/test1311 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1311; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -J output in +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -J and Content-Disposition +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1311 -J -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1311 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/name1311"> +12345 +</file> + +</verify> +</testcase> diff --git a/tests/data/test1312 b/tests/data/test1312 new file mode 100644 index 000000000..92144015a --- /dev/null +++ b/tests/data/test1312 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: inline; filename="name1312;weird" + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -J output in +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -J, Content-Disposition and ; in filename +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1312 -J -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1312 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/name1312;weird"> +12345 +</file> + +</verify> +</testcase> diff --git a/tests/data/test1313 b/tests/data/test1313 new file mode 100644 index 000000000..2331ae9ee --- /dev/null +++ b/tests/data/test1313 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: inline; filename='name1313 + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -J output in +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -J, Content-Disposition, uneven quotes +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1313 -J -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1313 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/name1313"> +12345 +</file> + +</verify> +</testcase> diff --git a/tests/data/test1314 b/tests/data/test1314 new file mode 100644 index 000000000..078ada64a --- /dev/null +++ b/tests/data/test1314 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsbounce +Server: test-server/fake +Location: //somewhere.example.com/reply/1314 +Content-Length: 32 +Connection: close + +Redirect to the same URL again! +</data> + +<data1> +HTTP/1.1 200 okidoki +Server: test-server/fake +Content-Length: 4 +Connection: close + +moo +</data1> + +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsbounce +Server: test-server/fake +Location: //somewhere.example.com/reply/1314 +Content-Length: 32 +Connection: close + +HTTP/1.1 200 okidoki +Server: test-server/fake +Content-Length: 4 +Connection: close + +moo +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following a // prefixed url + </name> + <command> +http://firstplace.example.com/want/1314 -L -x http://%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://firstplace.example.com/want/1314 HTTP/1.1
+Host: firstplace.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://somewhere.example.com/reply/1314 HTTP/1.1
+Host: somewhere.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1315 b/tests/data/test1315 new file mode 100644 index 000000000..c2f158a95 --- /dev/null +++ b/tests/data/test1315 @@ -0,0 +1,83 @@ +<testcase> +# Based on tests 186 and 1053 +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP file upload +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting - -F with three files, one with explicit type + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1315 -F name=value -F 'file=@log/test1315.txt,log/test1315.txt;type=magic/content,log/test1315.txt' +</command> +# We create this file before the command is invoked! +<file name="log/test1315.txt"> +dummy data +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +(^User-Agent:.*|-----+\w+) +</strip> +<protocol> +POST /we/want/1315 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 795
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+value
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"
+Content-Type: multipart/mixed; boundary=----------------------------aaaaaaaaaaaa
+
+Content-Disposition: attachment; filename="test1315.txt"
+Content-Type: text/plain
+
+dummy data +
+------------------------------9ef8d6205763
+Content-Disposition: attachment; filename="test1315.txt"
+Content-Type: magic/content
+
+dummy data +
+------------------------------9ef8d6205763
+Content-Disposition: attachment; filename="test1315.txt"
+Content-Type: text/plain
+
+dummy data +
+------------------------------aaaaaaaaaaaa--
+------------------------------9ef8d6205763--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1316 b/tests/data/test1316 new file mode 100644 index 000000000..e65bd5f6a --- /dev/null +++ b/tests/data/test1316 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +HTTP +HTTP CONNECT +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 Mighty fine indeed
+
+total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +http-proxy +</server> + <name> +FTP LIST tunneled through HTTP proxy + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ -p -x %HOSTIP:%PROXYPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1317 b/tests/data/test1317 new file mode 100644 index 000000000..d41886a5f --- /dev/null +++ b/tests/data/test1317 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--resolve +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP with --resolve +</name> +<command> +--resolve example.com:%HTTPPORT:%HOSTIP http://example.com:%HTTPPORT/1317 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1317 HTTP/1.1
+Host: example.com:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1318 b/tests/data/test1318 new file mode 100644 index 000000000..dc182dccb --- /dev/null +++ b/tests/data/test1318 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--resolve +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 + +</data> +<data1> +HTTP/1.1 200 second version +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 + +</data1> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with --resolve and same host name using different cases + </name> + <command> +--resolve MiXeDcAsE.cOm:%HTTPPORT:%HOSTIP http://MiXeDcAsE.cOm:%HTTPPORT/1318 http://mixedcase.com:%HTTPPORT/13180001 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1318 HTTP/1.1
+Host: MiXeDcAsE.cOm:%HTTPPORT
+Accept: */*
+
+GET /13180001 HTTP/1.1
+Host: mixedcase.com:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1319 b/tests/data/test1319 new file mode 100644 index 000000000..dc46a69a5 --- /dev/null +++ b/tests/data/test1319 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +POP3 +RETR +HTTP +HTTP CONNECT +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<data> +From: me@somewhere +To: fake@nowhere + +body + +-- + yours sincerely
+</data> + +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+From: me@somewhere +To: fake@nowhere + +body + +-- + yours sincerely
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +pop3 +http-proxy +</server> + <name> +POP3 fetch tunneled through HTTP proxy + </name> + <command> +pop3://%HOSTIP:%POP3PORT/1319 -p -x %HOSTIP:%PROXYPORT -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: +</strip> +<protocol> +CAPA
+USER user
+PASS secret
+RETR 1319
+QUIT
+</protocol> +<proxy> +CONNECT %HOSTIP:%POP3PORT HTTP/1.1
+Host: %HOSTIP:%POP3PORT
+User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
+Proxy-Connection: Keep-Alive
+
+</proxy> +</verify> +</testcase> diff --git a/tests/data/test132 b/tests/data/test132 new file mode 100644 index 000000000..ed96953bb --- /dev/null +++ b/tests/data/test132 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +LIST +netrc +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP (optional .netrc; user/passwd supplied) dir list PASV + </name> + <command> +--netrc-optional --netrc-file log/netrc132 ftp://mary:mark@%HOSTIP:%FTPPORT/ +</command> +<file name="log/netrc132" > +# the following two lines were created while testing curl +machine %HOSTIP login user1 password passwd1 +machine %HOSTIP login user2 password passwd2 +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER mary
+PASS mark
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1320 b/tests/data/test1320 new file mode 100644 index 000000000..f7af40aa1 --- /dev/null +++ b/tests/data/test1320 @@ -0,0 +1,67 @@ +<testcase> +<info> +<keywords> +SMTP +HTTP +HTTP CONNECT +HTTP proxy +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +http-proxy +</server> + <name> +SMTP send tunneled trough HTTP proxy + </name> +<stdin> +From: different +To: another + +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 1320@foo --mail-rcpt 1320@foobar.example --mail-from 1320@from -T - -p -x %HOSTIP:%PROXYPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +EHLO user
+MAIL FROM:<1320@from>
+RCPT TO:<1320@foo>
+RCPT TO:<1320@foobar.example>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> +<proxy> +CONNECT %HOSTIP:%SMTPPORT HTTP/1.1
+Host: %HOSTIP:%SMTPPORT
+User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
+Proxy-Connection: Keep-Alive
+
+</proxy> +</verify> +</testcase> diff --git a/tests/data/test1321 b/tests/data/test1321 new file mode 100644 index 000000000..7d45d9640 --- /dev/null +++ b/tests/data/test1321 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +IMAP +FETCH +HTTP +HTTP CONNECT +HTTP proxy +</keywords> +</info> + +# +# Server-side +<reply> +<data> +From: me@somewhere +To: fake@nowhere + +body + +-- + yours sincerely +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+From: me@somewhere +To: fake@nowhere + +body + +-- + yours sincerely +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +imap +http-proxy +</server> + <name> +IMAP FETCH tunneled through HTTP proxy + </name> + <command> +imap://%HOSTIP:%IMAPPORT/1321 -u user:secret -p -x %HOSTIP:%PROXYPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +B LOGIN user secret
+C SELECT 1321
+D FETCH 1 BODY[TEXT]
+A LOGOUT
+</protocol> +<proxy> +CONNECT %HOSTIP:%IMAPPORT HTTP/1.1
+Host: %HOSTIP:%IMAPPORT
+User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
+Proxy-Connection: Keep-Alive
+
+</proxy> +</verify> +</testcase> diff --git a/tests/data/test1322 b/tests/data/test1322 new file mode 100644 index 000000000..996727e94 --- /dev/null +++ b/tests/data/test1322 @@ -0,0 +1,29 @@ +<testcase> +<info> +<keywords> +POP3 +CRLF-in-URL +</keywords> +</info> + +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 with URL-encoded CR LF in the URL + </name> + <command> +pop3://%HOSTIP:%POP3PORT/%0d%0a/1322 +</command> +</client> + +# +<verify> +# 3 - CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1323 b/tests/data/test1323 new file mode 100644 index 000000000..90eb88b7d --- /dev/null +++ b/tests/data/test1323 @@ -0,0 +1,29 @@ +<testcase> +<info> +<keywords> +SMTP +CRLF-in-URL +</keywords> +</info> + +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP with URL-encoded CR LF in the URL + </name> + <command> +smtp://%HOSTIP:%SMTPPORT/%0d%0a/1323 +</command> +</client> + +# +<verify> +# 3 - CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1324 b/tests/data/test1324 new file mode 100644 index 000000000..c9835efea --- /dev/null +++ b/tests/data/test1324 @@ -0,0 +1,29 @@ +<testcase> +<info> +<keywords> +IMAP +CRLF-in-URL +</keywords> +</info> + +# Client-side +<client> +<server> +imap +</server> + <name> +IMAP with URL-encoded CR LF in the URL + </name> + <command> +imap://%HOSTIP:%IMAPPORT/%0d%0a/1322 +</command> +</client> + +# +<verify> +# 3 - CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1325 b/tests/data/test1325 new file mode 100644 index 000000000..2b98d6adc --- /dev/null +++ b/tests/data/test1325 @@ -0,0 +1,80 @@ +# http://greenbytes.de/tech/webdav/draft-reschke-http-status-308-latest.html +<testcase> +<info> +<keywords> +HTTP +HTTP GET +308 +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 308 OK swsclose
+Location: 13250002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 308 OK swsclose
+Location: 13250002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 308-redirect with POST + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/1325 -L -d "moo" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /we/1325 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /we/13250002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1326 b/tests/data/test1326 new file mode 100644 index 000000000..bb0cbaccf --- /dev/null +++ b/tests/data/test1326 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +TELNET +UPLOAD +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 swsclose + +moo +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +telnet +</features> + <name> +TELNET to HTTP server + </name> +<stdin> +GET /we/want/1326 HTTP/1.0
+
+</stdin> + <command> +telnet://%HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /we/want/1326 HTTP/1.0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1327 b/tests/data/test1327 new file mode 100644 index 000000000..a6e3d4fdc --- /dev/null +++ b/tests/data/test1327 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +TELNET +UPLOAD +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +telnet +</features> + <name> +TELNET check of upload with stdout redirected + </name> +<stdin> +GET /ignore/for/1327 HTTP/1.0
+
+</stdin> +<file name="log/1327.txt"> +GET /we/want/1327 HTTP/1.0
+
+</file> + <command option="no-output"> +telnet://%HOSTIP:%HTTPPORT -T log/1327.txt +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /we/want/1327 HTTP/1.0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1328 b/tests/data/test1328 new file mode 100644 index 000000000..c3991ecb4 --- /dev/null +++ b/tests/data/test1328 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-f +</keywords> +</info> + +<reply> +<data> +HTTP/1.1 404 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Funny-head: yesyes + +-noo- +</data> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Funny-head: yesyes + +-yes- +</data1> +<datacheck> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Funny-head: yesyes + +-yes- +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET a globbed range with -f + </name> + <command> +-f 'http://%HOSTIP:%HTTPPORT/[13280000-13280001]' -o log/#1 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /13280000 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /13280001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1329 b/tests/data/test1329 new file mode 100644 index 000000000..3d2d0cb6c --- /dev/null +++ b/tests/data/test1329 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +HTTP proxy +</keywords> +</info> + +# +# Client-side +<client> +<server> +http +</server> + <name> +/-prefixed proxy name + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/1329 -x "/server" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +# 5 == CURLE_COULDNT_RESOLVE_PROXY +<errorcode> +5 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test133 b/tests/data/test133 new file mode 100644 index 000000000..085092d01 --- /dev/null +++ b/tests/data/test133 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +LIST +netrc +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP (compulsory .netrc; ignored user/passwd) dir list PASV + </name> + <command> +-n --netrc-file log/netrc133 ftp://mary:mark@%HOSTIP:%FTPPORT/ +</command> +<file name="log/netrc133" > +# the following two lines were created while testing curl +machine %HOSTIP login user1 password passwd1 +machine %HOSTIP login user2 password passwd2 +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER user1
+PASS passwd1
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1331 b/tests/data/test1331 new file mode 100644 index 000000000..406cb9e1a --- /dev/null +++ b/tests/data/test1331 @@ -0,0 +1,89 @@ +# Test case inspired by this question on stackoverflow: +# +# http://stackoverflow.com/questions/10017165/use-libcurl-with-bluecoat-cookie-proxy +# +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 407 Me not know you swsbounce
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: proxycookie=weirdo; Path=/
+Cache-control: private
+Content-Length: 62
+Proxy-Authenticate: Basic realm="moo on you"
+
+This server reply is for testing a simple cookie test case... +</data> + +<data1> +HTTP/1.1 200 Fine!
+Content-Type: text/html
+Content-Length: 6
+
+hello +</data1> + +<datacheck> +HTTP/1.1 407 Me not know you swsbounce
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: proxycookie=weirdo; Path=/
+Cache-control: private
+Content-Length: 62
+Proxy-Authenticate: Basic realm="moo on you"
+
+HTTP/1.1 200 Fine!
+Content-Type: text/html
+Content-Length: 6
+
+hello +</datacheck> + + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP --proxy-anyauth and 407 with cookies + </name> + <command> +-U myname:mypassword -x %HOSTIP:%HTTPPORT http://z.x.com/1331 --proxy-anyauth -c log/dump1331 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://z.x.com/1331 HTTP/1.1
+Host: z.x.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://z.x.com/1331 HTTP/1.1
+Proxy-Authorization: Basic bXluYW1lOm15cGFzc3dvcmQ=
+Host: z.x.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: proxycookie=weirdo
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1332 b/tests/data/test1332 new file mode 100644 index 000000000..1850ece80 --- /dev/null +++ b/tests/data/test1332 @@ -0,0 +1,80 @@ +# test case cloned from 1076 and then 302 was replaced with 303 +<testcase> +<info> +<keywords> +HTTP +HTTP POST +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 303 OK swsclose +Location: moo.html&testcase=/13320002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 303 OK swsclose +Location: moo.html&testcase=/13320002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with 303 redirect and --post303 + </name> + <command> +http://%HOSTIP:%HTTPPORT/blah/1332 -L -d "moo" --post303 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /blah/1332 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /blah/moo.html&testcase=/13320002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo +</protocol> +</verify> +</testcase> diff --git a/tests/data/test1333 b/tests/data/test1333 new file mode 100644 index 000000000..a2ea30143 --- /dev/null +++ b/tests/data/test1333 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Accept-Ranges: bytes +Content-Length: 6 +Connection: close + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST zero length, chunked-encoded + </name> + <command> +-d "" --header "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/1333 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /1333 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1334 b/tests/data/test1334 new file mode 100644 index 000000000..c4e4744e5 --- /dev/null +++ b/tests/data/test1334 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O without Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1334 -O -D log/heads1334 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1334 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1334"> +12345 +</file1> + +<file2 name="log/heads1334"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1334"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1335 b/tests/data/test1335 new file mode 100644 index 000000000..d8bc01051 --- /dev/null +++ b/tests/data/test1335 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O without Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1335 -O -D - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1335 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1335"> +12345 +</file1> + +<file2 name="log/stdout1335"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1336 b/tests/data/test1336 new file mode 100644 index 000000000..cce9fae89 --- /dev/null +++ b/tests/data/test1336 @@ -0,0 +1,81 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1336; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O and Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1336 -O -D log/heads1336 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1336 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1336 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1336"> +12345 +</file1> + +<file2 name="log/heads1336"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1336; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1336"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1337 b/tests/data/test1337 new file mode 100644 index 000000000..317cd88ad --- /dev/null +++ b/tests/data/test1337 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1337; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O and Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1337 -O -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1337 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1337 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1337"> +12345 +</file1> + +<file2 name="log/stdout1337"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1337; charset=funny; option=strange + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1338 b/tests/data/test1338 new file mode 100644 index 000000000..3c1507180 --- /dev/null +++ b/tests/data/test1338 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O and -J output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -J without Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1338 -J -O -D log/heads1338 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1338 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1338"> +12345 +</file1> + +<file2 name="log/heads1338"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1338"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1339 b/tests/data/test1339 new file mode 100644 index 000000000..d5e236a50 --- /dev/null +++ b/tests/data/test1339 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O and -J output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -J without Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1339 -J -O -D - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1339 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1339"> +12345 +</file1> + +<file2 name="log/stdout1339"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test134 b/tests/data/test134 new file mode 100644 index 000000000..8a3ba6204 --- /dev/null +++ b/tests/data/test134 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +LIST +netrc +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP (optional .netrc; programmatic user/passwd) dir list PASV + </name> + <command> +--netrc-optional --netrc-file log/netrc134 -u romulus:rhemus ftp://mary:mark@%HOSTIP:%FTPPORT/ +</command> +<file name="log/netrc134" > +# the following two lines were created while testing curl +machine %HOSTIP login user1 password passwd1 +machine %HOSTIP login user2 password passwd2 +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER romulus
+PASS rhemus
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1340 b/tests/data/test1340 new file mode 100644 index 000000000..5153889f6 --- /dev/null +++ b/tests/data/test1340 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1340; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O and -J output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -J and Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1340 -J -O -D log/heads1340 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1340 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/name1340"> +12345 +</file1> + +<file2 name="log/heads1340"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1340; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1340"> +curl: Saved to filename '%PWD/log/name1340' +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1341 b/tests/data/test1341 new file mode 100644 index 000000000..e12ee3143 --- /dev/null +++ b/tests/data/test1341 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1341; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O and -J output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -J and Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1341 -J -O -D - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1341 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/name1341"> +12345 +</file1> + +<file2 name="log/stdout1341"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1341; charset=funny; option=strange + +curl: Saved to filename '%PWD/log/name1341' +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1342 b/tests/data/test1342 new file mode 100644 index 000000000..0f1ee7771 --- /dev/null +++ b/tests/data/test1342 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i without Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1342 -i -O -D log/heads1342 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1342 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1342"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/heads1342"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1342"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1343 b/tests/data/test1343 new file mode 100644 index 000000000..cff7c8253 --- /dev/null +++ b/tests/data/test1343 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i without Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1343 -i -O -D - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1343 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1343"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/stdout1343"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1344 b/tests/data/test1344 new file mode 100644 index 000000000..b71b2c49d --- /dev/null +++ b/tests/data/test1344 @@ -0,0 +1,89 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1344; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i and Content-Disposition, -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1344 -i -O -D log/heads1344 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1344 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1344 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1344"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1344; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/heads1344"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1344; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1344"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1345 b/tests/data/test1345 new file mode 100644 index 000000000..f5e16127c --- /dev/null +++ b/tests/data/test1345 @@ -0,0 +1,86 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1345; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i and Content-Disposition, -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1345 -i -O -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1345 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1345 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1345"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1345; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/stdout1345"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1345; charset=funny; option=strange + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1346 b/tests/data/test1346 new file mode 100644 index 000000000..632e3cd15 --- /dev/null +++ b/tests/data/test1346 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i without Content-Disposition, without -D +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1346 -i -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1346 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1346"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/stdout1346"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1347 b/tests/data/test1347 new file mode 100644 index 000000000..e4a60bf10 --- /dev/null +++ b/tests/data/test1347 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1347; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +http +</server> +<name> +HTTP GET with -O -i and Content-Disposition, without -D +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1347 -i -O +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1347 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1347 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/1347"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1347; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/stdout1347"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1348 b/tests/data/test1348 new file mode 100644 index 000000000..5f374cb2f --- /dev/null +++ b/tests/data/test1348 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without Content-Disposition inside, using -O +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1348 -O +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1348
+RETR file1348
+QUIT
+</protocol> + +<file1 name="log/file1348"> +fooo +mooo +</file1> + +<file2 name="log/stdout1348"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1349 b/tests/data/test1349 new file mode 100644 index 000000000..c88eec9e0 --- /dev/null +++ b/tests/data/test1349 @@ -0,0 +1,82 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1349 -O -D log/heads1349 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1349
+RETR file1349
+QUIT
+</protocol> + +<file1 name="log/file1349"> +fooo +mooo +</file1> + +<file2 name="log/heads1349"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1349 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1349"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test135 b/tests/data/test135 new file mode 100644 index 000000000..10eb0eacd --- /dev/null +++ b/tests/data/test135 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +Range +</keywords> +</info> +# Server-side +<reply> +<data> +0123456789abcdef +0123456789abcdef +0123456789abcdef +0123456789abcdef +</data> +<datacheck nonewline="yes"> +0123456789abc +</datacheck> +<size> +64 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP retrieve a byte-range + </name> + <command> +-r 4-16 ftp://%HOSTIP:%FTPPORT/135 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 135
+REST 4
+RETR 135
+ABOR
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1350 b/tests/data/test1350 new file mode 100644 index 000000000..214289484 --- /dev/null +++ b/tests/data/test1350 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1350 -O -D - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1350
+RETR file1350
+QUIT
+</protocol> + +<file1 name="log/file1350"> +fooo +mooo +</file1> + +<file2 name="log/stdout1350"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1350 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1351 b/tests/data/test1351 new file mode 100644 index 000000000..fea442fc7 --- /dev/null +++ b/tests/data/test1351 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -J -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1351 -O -J -D log/heads1351 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1351
+RETR file1351
+QUIT
+</protocol> + +<file1 name="log/file1351"> +fooo +mooo +</file1> + +<file2 name="log/heads1351"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1351 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1351"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1352 b/tests/data/test1352 new file mode 100644 index 000000000..ca24d4911 --- /dev/null +++ b/tests/data/test1352 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -J -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1352 -O -J -D - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1352
+RETR file1352
+QUIT
+</protocol> + +<file1 name="log/file1352"> +fooo +mooo +</file1> + +<file2 name="log/stdout1352"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1352 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1353 b/tests/data/test1353 new file mode 100644 index 000000000..015f60a41 --- /dev/null +++ b/tests/data/test1353 @@ -0,0 +1,82 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -i -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1353 -O -i -D log/heads1353 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1353
+RETR file1353
+QUIT
+</protocol> + +<file1 name="log/file1353"> +fooo +mooo +</file1> + +<file2 name="log/heads1353"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1353 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1353"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1354 b/tests/data/test1354 new file mode 100644 index 000000000..cf644294c --- /dev/null +++ b/tests/data/test1354 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -i -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1354 -O -i -D - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1354
+RETR file1354
+QUIT
+</protocol> + +<file1 name="log/file1354"> +fooo +mooo +</file1> + +<file2 name="log/stdout1354"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1354 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1355 b/tests/data/test1355 new file mode 100644 index 000000000..e7a392c1d --- /dev/null +++ b/tests/data/test1355 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file without C-D inside, using -O -i, without -D +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1355 -O -i +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1355
+RETR file1355
+QUIT
+</protocol> + +<file1 name="log/file1355"> +fooo +mooo +</file1> + +<file2 name="log/stdout1355"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1356 b/tests/data/test1356 new file mode 100644 index 000000000..b1974bbbc --- /dev/null +++ b/tests/data/test1356 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1356 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1356; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with Content-Disposition inside, using -O +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1356 -O +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1356 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1356
+RETR file1356
+QUIT
+</protocol> + +<file1 name="log/file1356"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1356; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1356"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1357 b/tests/data/test1357 new file mode 100644 index 000000000..4b539ec6d --- /dev/null +++ b/tests/data/test1357 @@ -0,0 +1,100 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1357 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1357; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1357 -O -D log/heads1357 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1357 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1357
+RETR file1357
+QUIT
+</protocol> + +<file1 name="log/file1357"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1357; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1357"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1357 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1357"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1358 b/tests/data/test1358 new file mode 100644 index 000000000..081b36f1d --- /dev/null +++ b/tests/data/test1358 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1358 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1358; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1358 -O -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1358 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1358
+RETR file1358
+QUIT
+</protocol> + +<file1 name="log/file1358"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1358; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1358"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1358 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1359 b/tests/data/test1359 new file mode 100644 index 000000000..bb9747ae4 --- /dev/null +++ b/tests/data/test1359 @@ -0,0 +1,101 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +# file1359 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1359; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -J -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1359 -O -J -D log/heads1359 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1359 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1359
+RETR file1359
+QUIT
+</protocol> + +<file1 name="log/file1359"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1359; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1359"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1359 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1359"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test136 b/tests/data/test136 new file mode 100644 index 000000000..25940b50d --- /dev/null +++ b/tests/data/test136 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +0123456789abcdef +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with user and no password + </name> + <command> +-u user: ftp://%HOSTIP:%FTPPORT/136 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER user
+PASS
+PWD
+EPSV
+TYPE I
+SIZE 136
+RETR 136
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1360 b/tests/data/test1360 new file mode 100644 index 000000000..d2cb33dfc --- /dev/null +++ b/tests/data/test1360 @@ -0,0 +1,98 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +# file1360 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1360; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -J -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1360 -O -J -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1360 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1360
+RETR file1360
+QUIT
+</protocol> + +<file1 name="log/file1360"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1360; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1360"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1360 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1361 b/tests/data/test1361 new file mode 100644 index 000000000..8d3f1f53b --- /dev/null +++ b/tests/data/test1361 @@ -0,0 +1,100 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1361 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1361; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -i -D file +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1361 -O -i -D log/heads1361 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1361 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1361
+RETR file1361
+QUIT
+</protocol> + +<file1 name="log/file1361"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1361; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1361"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1361 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1361"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1362 b/tests/data/test1362 new file mode 100644 index 000000000..5dc41811c --- /dev/null +++ b/tests/data/test1362 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1362 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1362; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -i -D stdout +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1362 -O -i -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1362 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1362
+RETR file1362
+QUIT
+</protocol> + +<file1 name="log/file1362"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1362; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1362"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1362 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1363 b/tests/data/test1363 new file mode 100644 index 000000000..195ebd6af --- /dev/null +++ b/tests/data/test1363 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1363 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1363; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +# this relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable +<features> +debug +</features> +<server> +ftp +</server> +<name> +FTP download, file with C-D inside, using -O -i, without -D +</name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1363 -O -i +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/name1363 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1363
+RETR file1363
+QUIT
+</protocol> + +<file1 name="log/file1363"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1363; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1363"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1364 b/tests/data/test1364 new file mode 100644 index 000000000..fcdee484a --- /dev/null +++ b/tests/data/test1364 @@ -0,0 +1,71 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname without Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1364 -o log/outfile1364 -D log/heads1364 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1364 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1364 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1364"> +12345 +</file1> + +<file2 name="log/heads1364"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1364"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1365 b/tests/data/test1365 new file mode 100644 index 000000000..ee13165e6 --- /dev/null +++ b/tests/data/test1365 @@ -0,0 +1,68 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname without Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1365 -o log/outfile1365 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1365 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1365 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1365"> +12345 +</file1> + +<file2 name="log/stdout1365"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1366 b/tests/data/test1366 new file mode 100644 index 000000000..d8e05abfe --- /dev/null +++ b/tests/data/test1366 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1366; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname and Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1366 -o log/outfile1366 -D log/heads1366 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1366 log/name1366 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1366 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1366"> +12345 +</file1> + +<file2 name="log/heads1366"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1366; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1366"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1367 b/tests/data/test1367 new file mode 100644 index 000000000..fcb23f580 --- /dev/null +++ b/tests/data/test1367 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1367; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname and Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1367 -o log/outfile1367 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1367 log/name1367 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1367 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1367"> +12345 +</file1> + +<file2 name="log/stdout1367"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1367; charset=funny; option=strange + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1368 b/tests/data/test1368 new file mode 100644 index 000000000..37f058c22 --- /dev/null +++ b/tests/data/test1368 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -J without Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1368 -J -o log/outfile1368 -D log/heads1368 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1368 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1368 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1368"> +12345 +</file1> + +<file2 name="log/heads1368"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1368"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1369 b/tests/data/test1369 new file mode 100644 index 000000000..9b272e276 --- /dev/null +++ b/tests/data/test1369 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -J without Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1369 -J -o log/outfile1369 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1369 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1369 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1369"> +12345 +</file1> + +<file2 name="log/stdout1369"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test137 b/tests/data/test137 new file mode 100644 index 000000000..b8e2726a0 --- /dev/null +++ b/tests/data/test137 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +RETR +--data-binary +</keywords> +</info> +# Server-side +<reply> +<data> +this is file contents +</data> +<servercmd> +RETRNOSIZE +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download without size in RETR string + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/lululul/137 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 137
+RETR 137
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1370 b/tests/data/test1370 new file mode 100644 index 000000000..52cc70321 --- /dev/null +++ b/tests/data/test1370 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1370; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -J and Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1370 -J -o log/outfile1370 -D log/heads1370 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1370 log/name1370 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1370 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1370"> +12345 +</file1> + +<file2 name="log/heads1370"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1370; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1370"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1371 b/tests/data/test1371 new file mode 100644 index 000000000..081850fa5 --- /dev/null +++ b/tests/data/test1371 @@ -0,0 +1,71 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-J +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1371; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -J and Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1371 -J -o log/outfile1371 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1371 log/name1371 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1371 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1371"> +12345 +</file1> + +<file2 name="log/stdout1371"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1371; charset=funny; option=strange + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1372 b/tests/data/test1372 new file mode 100644 index 000000000..30a64aaa1 --- /dev/null +++ b/tests/data/test1372 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i without Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1372 -i -o log/outfile1372 -D log/heads1372 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1372 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1372 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1372"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/heads1372"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +<file3 name="log/stdout1372"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1373 b/tests/data/test1373 new file mode 100644 index 000000000..2ad283035 --- /dev/null +++ b/tests/data/test1373 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i without Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1373 -i -o log/outfile1373 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1373 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1373 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1373"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/stdout1373"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1374 b/tests/data/test1374 new file mode 100644 index 000000000..6ffe88d56 --- /dev/null +++ b/tests/data/test1374 @@ -0,0 +1,81 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1374; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i and Content-Disposition, -D file +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1374 -i -o log/outfile1374 -D log/heads1374 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1374 log/name1374 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1374 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1374"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1374; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/heads1374"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1374; charset=funny; option=strange + +</file2> + +<file3 name="log/stdout1374"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1375 b/tests/data/test1375 new file mode 100644 index 000000000..a1cc5a00e --- /dev/null +++ b/tests/data/test1375 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1375; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i and Content-Disposition, -D stdout +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1375 -i -o log/outfile1375 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1375 log/name1375 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1375 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1375"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1375; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/stdout1375"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1375; charset=funny; option=strange + +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1376 b/tests/data/test1376 new file mode 100644 index 000000000..3280874a6 --- /dev/null +++ b/tests/data/test1376 @@ -0,0 +1,68 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i without Content-Disposition, without -D +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1376 -i -o log/outfile1376 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1376 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1376 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1376"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html + +12345 +</file1> + +<file2 name="log/stdout1376"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1377 b/tests/data/test1377 new file mode 100644 index 000000000..735355f5f --- /dev/null +++ b/tests/data/test1377 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1377; charset=funny; option=strange + +12345 +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<name> +HTTP GET -o fname -i and Content-Disposition, without -D +</name> +<command option="no-output,no-include"> +http://%HOSTIP:%HTTPPORT/1377 -i -o log/outfile1377 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/1377 log/name1377 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1377 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<file1 name="log/outfile1377"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1377; charset=funny; option=strange + +12345 +</file1> + +<file2 name="log/stdout1377"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1378 b/tests/data/test1378 new file mode 100644 index 000000000..e004afcaf --- /dev/null +++ b/tests/data/test1378 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without Content-Disposition inside, using -o fname +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1378 -o log/download1378 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1378 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1378
+RETR file1378
+QUIT
+</protocol> + +<file1 name="log/download1378"> +fooo +mooo +</file1> + +<file2 name="log/stdout1378"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1379 b/tests/data/test1379 new file mode 100644 index 000000000..26552c8fa --- /dev/null +++ b/tests/data/test1379 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1379 -o log/download1379 -D log/heads1379 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1379 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1379
+RETR file1379
+QUIT
+</protocol> + +<file1 name="log/download1379"> +fooo +mooo +</file1> + +<file2 name="log/heads1379"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1379 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1379"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test138 b/tests/data/test138 new file mode 100644 index 000000000..4eb73e6cf --- /dev/null +++ b/tests/data/test138 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +this is file contents +</data> +<size> +-1 +</size> +<servercmd> +RETRNOSIZE +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download without size in RETR string and no SIZE command + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/lululul/138 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 138
+RETR 138
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1380 b/tests/data/test1380 new file mode 100644 index 000000000..060b4b0b8 --- /dev/null +++ b/tests/data/test1380 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1380 -o log/download1380 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1380 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1380
+RETR file1380
+QUIT
+</protocol> + +<file1 name="log/download1380"> +fooo +mooo +</file1> + +<file2 name="log/stdout1380"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1380 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1381 b/tests/data/test1381 new file mode 100644 index 000000000..c82ac745d --- /dev/null +++ b/tests/data/test1381 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -J -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1381 -o log/download1381 -J -D log/heads1381 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1381 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1381
+RETR file1381
+QUIT
+</protocol> + +<file1 name="log/download1381"> +fooo +mooo +</file1> + +<file2 name="log/heads1381"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1381 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1381"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1382 b/tests/data/test1382 new file mode 100644 index 000000000..5e5513f38 --- /dev/null +++ b/tests/data/test1382 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -J -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1382 -o log/download1382 -J -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1382 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1382
+RETR file1382
+QUIT
+</protocol> + +<file1 name="log/download1382"> +fooo +mooo +</file1> + +<file2 name="log/stdout1382"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1382 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1383 b/tests/data/test1383 new file mode 100644 index 000000000..2604faf96 --- /dev/null +++ b/tests/data/test1383 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -i -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1383 -o log/download1383 -i -D log/heads1383 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1383 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1383
+RETR file1383
+QUIT
+</protocol> + +<file1 name="log/download1383"> +fooo +mooo +</file1> + +<file2 name="log/heads1383"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1383 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1383"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1384 b/tests/data/test1384 new file mode 100644 index 000000000..289aa9bdb --- /dev/null +++ b/tests/data/test1384 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -i -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1384 -o log/download1384 -i -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1384 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1384
+RETR file1384
+QUIT
+</protocol> + +<file1 name="log/download1384"> +fooo +mooo +</file1> + +<file2 name="log/stdout1384"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 10
+150 Binary data connection for 1384 () (10 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1385 b/tests/data/test1385 new file mode 100644 index 000000000..ee35ab704 --- /dev/null +++ b/tests/data/test1385 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +fooo +mooo +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file without C-D inside, using -o fname -i, without -D +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1385 -o log/download1385 -i +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1385 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1385
+RETR file1385
+QUIT
+</protocol> + +<file1 name="log/download1385"> +fooo +mooo +</file1> + +<file2 name="log/stdout1385"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1386 b/tests/data/test1386 new file mode 100644 index 000000000..883b40883 --- /dev/null +++ b/tests/data/test1386 @@ -0,0 +1,71 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1386 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1386; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with Content-Disposition inside, using -o fname +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1386 -o log/download1386 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1386 log/name1386 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1386
+RETR file1386
+QUIT
+</protocol> + +<file1 name="log/download1386"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1386; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1386"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test1387 b/tests/data/test1387 new file mode 100644 index 000000000..6628b8963 --- /dev/null +++ b/tests/data/test1387 @@ -0,0 +1,92 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1387 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1387; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1387 -o log/download1387 -D log/heads1387 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1387 log/name1387 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1387
+RETR file1387
+QUIT
+</protocol> + +<file1 name="log/download1387"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1387; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1387"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1387 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1387"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1388 b/tests/data/test1388 new file mode 100644 index 000000000..478a2e9fa --- /dev/null +++ b/tests/data/test1388 @@ -0,0 +1,89 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1388 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1388; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1388 -o log/download1388 -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1388 log/name1388 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1388
+RETR file1388
+QUIT
+</protocol> + +<file1 name="log/download1388"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1388; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1388"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1388 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1389 b/tests/data/test1389 new file mode 100644 index 000000000..06b9c26b1 --- /dev/null +++ b/tests/data/test1389 @@ -0,0 +1,93 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +# file1389 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1389; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -J -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1389 -o log/download1389 -J -D log/heads1389 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1389 log/name1389 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1389
+RETR file1389
+QUIT
+</protocol> + +<file1 name="log/download1389"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1389; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1389"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1389 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1389"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test139 b/tests/data/test139 new file mode 100644 index 000000000..15a242b66 --- /dev/null +++ b/tests/data/test139 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-z +</keywords> +</info> +# Server-side +<reply> +<data> +this is file contents +</data> +<mdtm> +213 20030409102659 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download a newer file with -z + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/139 -z "1 jan 1989" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 139
+EPSV
+TYPE I
+SIZE 139
+RETR 139
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1390 b/tests/data/test1390 new file mode 100644 index 000000000..b5980369e --- /dev/null +++ b/tests/data/test1390 @@ -0,0 +1,90 @@ +<testcase> +<info> +<keywords> +FTP +RETR +-J +</keywords> +</info> + +# Server-side +<reply> +# file1390 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1390; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -J -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1390 -o log/download1390 -J -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1390 log/name1390 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1390
+RETR file1390
+QUIT
+</protocol> + +<file1 name="log/download1390"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1390; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1390"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1390 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1391 b/tests/data/test1391 new file mode 100644 index 000000000..fa7d89a66 --- /dev/null +++ b/tests/data/test1391 @@ -0,0 +1,92 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1391 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1391; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -i -D file +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1391 -o log/download1391 -i -D log/heads1391 +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1391 log/name1391 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1391
+RETR file1391
+QUIT
+</protocol> + +<file1 name="log/download1391"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1391; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/heads1391"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1391 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +<file3 name="log/stdout1391"> +</file3> + +</verify> +</testcase> diff --git a/tests/data/test1392 b/tests/data/test1392 new file mode 100644 index 000000000..c1e8346a2 --- /dev/null +++ b/tests/data/test1392 @@ -0,0 +1,89 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1392 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1392; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -i -D stdout +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1392 -o log/download1392 -i -D - +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1392 log/name1392 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1392
+RETR file1392
+QUIT
+</protocol> + +<file1 name="log/download1392"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1392; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1392"> +220- _ _ ____ _
+220- ___| | | | _ \| |
+220- / __| | | | |_) | |
+220- | (__| |_| | _ <| |___
+220 \___|\___/|_| \_\_____|
+331 We are happy you popped in!
+230 Welcome you silly person
+257 "/" is current directory
+250 CWD command successful.
+229 Entering Passive Mode (stripped) +200 I modify TYPE as you wanted
+213 214
+150 Binary data connection for 1392 () (214 bytes).
+226 File transfer complete
+221 bye bye baby
+</file2> +<stripfile2> +s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/ +</stripfile2> + +</verify> +</testcase> diff --git a/tests/data/test1393 b/tests/data/test1393 new file mode 100644 index 000000000..a45e291f2 --- /dev/null +++ b/tests/data/test1393 @@ -0,0 +1,71 @@ +<testcase> +<info> +<keywords> +FTP +RETR +</keywords> +</info> + +# Server-side +<reply> +# file1393 contents... +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1393; charset=funny; option=strange + +MOOOO +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP DL, file with C-D inside, using -o fname -i, without -D +</name> +<command option="no-output,no-include"> +ftp://%HOSTIP:%FTPPORT/path/file1393 -o log/download1393 -i +</command> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/file1393 log/name1393 +</postcheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE file1393
+RETR file1393
+QUIT
+</protocol> + +<file1 name="log/download1393"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name1393; charset=funny; option=strange + +MOOOO +</file1> + +<file2 name="log/stdout1393"> +</file2> + +</verify> +</testcase> diff --git a/tests/data/test14 b/tests/data/test14 new file mode 100644 index 000000000..21a4865b4 --- /dev/null +++ b/tests/data/test14 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP HEAD +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Server: thebest/1.0 +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP HEAD with Connection: close + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/14 -i --head +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +HEAD /want/14 HTTP/1.1
+User-Agent: curl/7.4.2-pre4 (sparc-sun-solaris2.7) libcurl 7.4.2-pre4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test140 b/tests/data/test140 new file mode 100644 index 000000000..4d8bc85c7 --- /dev/null +++ b/tests/data/test140 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +FTP +-z +--data-binary +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +<mdtm> +213 20030409102659 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download file with -z, expected to not transfer + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/140 -z "1 jan 2004" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 140
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1400 b/tests/data/test1400 new file mode 100644 index 000000000..72989c4c4 --- /dev/null +++ b/tests/data/test1400 @@ -0,0 +1,103 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--libcurl +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +--libcurl for simple HTTP GET + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1400 --libcurl log/test1400.c +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/1400 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stripfile> +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +<file name="log/test1400.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1400"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +</verify> +</testcase> diff --git a/tests/data/test1401 b/tests/data/test1401 new file mode 100644 index 000000000..e709c8e08 --- /dev/null +++ b/tests/data/test1401 @@ -0,0 +1,126 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP set cookie +cookies +--libcurl +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Content-Type: text/plain +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +--libcurl for GET with various options + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1401 --libcurl log/test1401.c --basic -u fake:user -H "X-Files: Mulder" -H "X-Men: cyclops, iceman" -A MyUA -b chocolate=chip --proto "=http,ftp,file" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/1401 HTTP/1.1
+User-Agent: stripped
+Authorization: Basic ZmFrZTp1c2Vy
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: chocolate=chip
+X-Files: Mulder
+X-Men: cyclops, iceman
+
+</protocol> +<stripfile> +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +<file name="log/test1401.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + struct curl_slist *slist1; + + slist1 = NULL; + slist1 = curl_slist_append(slist1, "X-Files: Mulder"); + slist1 = curl_slist_append(slist1, "X-Men: cyclops, iceman"); + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1401"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_USERPWD, "fake:user"); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "MyUA"); + curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC); + curl_easy_setopt(hnd, CURLOPT_COOKIE, "chocolate=chip"); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + curl_easy_setopt(hnd, CURLOPT_PROTOCOLS, (long)CURLPROTO_FILE | + (long)CURLPROTO_FTP | + (long)CURLPROTO_HTTP); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + curl_slist_free_all(slist1); + slist1 = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stdout> +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1402 b/tests/data/test1402 new file mode 100644 index 000000000..c3bf834bd --- /dev/null +++ b/tests/data/test1402 @@ -0,0 +1,112 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +--libcurl +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Content-Type: text/plain +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +--libcurl for simple POST + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1402 --libcurl log/test1402.c -d "foo=bar" -d "baz=quux" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /we/want/1402 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 16
+Content-Type: application/x-www-form-urlencoded
+
+foo=bar&baz=quux +</protocol> +<stripfile> +# curl's default user-agent varies with version, libraries etc. +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +<file name="log/test1402.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1402"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "foo=bar&baz=quux"); + curl_easy_setopt(hnd, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)16); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stdout> +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1403 b/tests/data/test1403 new file mode 100644 index 000000000..3ec7dd032 --- /dev/null +++ b/tests/data/test1403 @@ -0,0 +1,107 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--libcurl +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Content-Type: text/plain +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +--libcurl for GET with query + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1403 --libcurl log/test1403.c -G -d "foo=bar" -d "baz=quux" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/1403?foo=bar&baz=quux HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stripfile> +# curl's default user-agent varies with version, libraries etc. +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +<file name="log/test1403.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1403?foo=bar&baz=quux"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stdout> +</stdout> +</verify> +</testcase> diff --git a/tests/data/test1404 b/tests/data/test1404 new file mode 100644 index 000000000..88a06ba39 --- /dev/null +++ b/tests/data/test1404 @@ -0,0 +1,161 @@ +<testcase> +# Based on test 1315 +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP file upload +--libcurl +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 29 Jul 2008 14:49:00 GMT +Server: test-server/fake +Content-Length: 0 +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting - -F with three files, one with explicit type + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/1404 -F name=value -F 'file=@log/test1404.txt,log/test1404.txt;type=magic/content,log/test1404.txt' --libcurl log/test1404.c +</command> +# We create this file before the command is invoked! +<file name="log/test1404.txt"> +dummy data +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +(^User-Agent:.*|-----+\w+) +</strip> +<protocol> +POST /we/want/1404 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 795
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+value
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"
+Content-Type: multipart/mixed; boundary=----------------------------aaaaaaaaaaaa
+
+Content-Disposition: attachment; filename="test1404.txt"
+Content-Type: text/plain
+
+dummy data +
+------------------------------9ef8d6205763
+Content-Disposition: attachment; filename="test1404.txt"
+Content-Type: magic/content
+
+dummy data +
+------------------------------9ef8d6205763
+Content-Disposition: attachment; filename="test1404.txt"
+Content-Type: text/plain
+
+dummy data +
+------------------------------aaaaaaaaaaaa--
+------------------------------9ef8d6205763--
+</protocol> +<stripfile> +# curl's default user-agent varies with version, libraries etc. +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +<file name="log/test1404.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + struct curl_httppost *post1; + struct curl_httppost *postend; + + post1 = NULL; + postend = NULL; + curl_formadd(&post1, &postend, + CURLFORM_COPYNAME, "name", + CURLFORM_COPYCONTENTS, "value", + CURLFORM_END); + curl_formadd(&post1, &postend, + CURLFORM_COPYNAME, "file", + CURLFORM_FILE, "log/test1404.txt", + CURLFORM_CONTENTTYPE, "text/plain", + CURLFORM_FILE, "log/test1404.txt", + CURLFORM_CONTENTTYPE, "magic/content", + CURLFORM_FILE, "log/test1404.txt", + CURLFORM_CONTENTTYPE, "text/plain", + CURLFORM_END); + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1404"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_HTTPPOST, post1); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + curl_formfree(post1); + post1 = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +</verify> +</testcase> diff --git a/tests/data/test1405 b/tests/data/test1405 new file mode 100644 index 000000000..692bb1af7 --- /dev/null +++ b/tests/data/test1405 @@ -0,0 +1,137 @@ +<testcase> +# Derived from test227 +<info> +<keywords> +FTP +post-quote +pre-quote +quote +--libcurl +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY EPSV 500 no such command +REPLY FAIL 500 this might not be a failure! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with quote ops + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1405 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" --libcurl log/test1405.c +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+NOOP 1
+FAIL
+EPSV
+PASV
+TYPE I
+NOOP 2
+FAIL HARD
+SIZE 1405
+RETR 1405
+NOOP 3
+QUIT
+</protocol> +<file name="log/test1405.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + struct curl_slist *slist1; + struct curl_slist *slist2; + struct curl_slist *slist3; + + slist1 = NULL; + slist1 = curl_slist_append(slist1, "NOOP 1"); + slist1 = curl_slist_append(slist1, "*FAIL"); + slist2 = NULL; + slist2 = curl_slist_append(slist2, "NOOP 3"); + slist3 = NULL; + slist3 = curl_slist_append(slist3, "NOOP 2"); + slist3 = curl_slist_append(slist3, "*FAIL HARD"); + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "ftp://%HOSTIP:%FTPPORT/1405"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_QUOTE, slist1); + curl_easy_setopt(hnd, CURLOPT_POSTQUOTE, slist2); + curl_easy_setopt(hnd, CURLOPT_PREQUOTE, slist3); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + curl_slist_free_all(slist1); + slist1 = NULL; + curl_slist_free_all(slist2); + slist2 = NULL; + curl_slist_free_all(slist3); + slist3 = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stripfile> +# CURLOPT_USERAGENT and CURLOPT_MAXREDIRS requires HTTP protocol +# support, IOW depends on configuration - just ignore these. +$_ = '' if /CURLOPT_USERAGENT/ +$_ = '' if /CURLOPT_MAXREDIRS/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +</verify> +</testcase> diff --git a/tests/data/test1406 b/tests/data/test1406 new file mode 100644 index 000000000..478e45ff3 --- /dev/null +++ b/tests/data/test1406 @@ -0,0 +1,123 @@ +<testcase> +# Based on test802 +# N.B. --libcurl output not sufficient to deal with uploaded files. +<info> +<keywords> +SMTP +--libcurl +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP + </name> +<file name="log/test1406.eml"> +From: different +To: another + +body +</file> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 1406@foo --mail-rcpt 1406@foobar.example --mail-from 1406@from -T log/test1406.eml --libcurl log/test1406.c +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:<1406@from> SIZE=34
+RCPT TO:<1406@foo>
+RCPT TO:<1406@foobar.example>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> +<file name="log/test1406.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + struct curl_slist *slist1; + + slist1 = NULL; + slist1 = curl_slist_append(slist1, "1406@foo"); + slist1 = curl_slist_append(slist1, "1406@foobar.example"); + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)34); + curl_easy_setopt(hnd, CURLOPT_URL, "smtp://%HOSTIP:%SMTPPORT/user"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "1406@from"); + curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + curl_slist_free_all(slist1); + slist1 = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stripfile> +# curl's default user-agent varies with version, libraries etc. +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +</verify> +</testcase> diff --git a/tests/data/test1407 b/tests/data/test1407 new file mode 100644 index 000000000..a0c84057d --- /dev/null +++ b/tests/data/test1407 @@ -0,0 +1,102 @@ +<testcase> +# Based on test808 +<info> +<keywords> +POP3 +LIST +--libcurl +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY LIST +OK 1407 100 +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 LIST one message + </name> + <command> +pop3://%HOSTIP:%POP3PORT/1407 -l -u user:secret --libcurl log/test1407.c +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+LIST 1407
+QUIT
+</protocol> +<file name="log/test1407.c" mode="text"> +/********* Sample code generated by the curl command line tool ********** + * All curl_easy_setopt() options are documented at: + * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + ************************************************************************/ +#include <curl/curl.h> + +int main(int argc, char *argv[]) +{ + CURLcode ret; + CURL *hnd; + + hnd = curl_easy_init(); + curl_easy_setopt(hnd, CURLOPT_URL, "pop3://%HOSTIP:%POP3PORT/1407"); + curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); + curl_easy_setopt(hnd, CURLOPT_DIRLISTONLY, 1L); + curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:secret"); + curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); + curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); + + /* Here is a list of options the curl code used that cannot get generated + as source easily. You may select to either not use them or implement + them yourself. + + CURLOPT_WRITEDATA set to a objectpointer + CURLOPT_WRITEFUNCTION set to a functionpointer + CURLOPT_READDATA set to a objectpointer + CURLOPT_READFUNCTION set to a functionpointer + CURLOPT_SEEKDATA set to a objectpointer + CURLOPT_SEEKFUNCTION set to a functionpointer + CURLOPT_ERRORBUFFER set to a objectpointer + CURLOPT_STDERR set to a objectpointer + CURLOPT_DEBUGFUNCTION set to a functionpointer + CURLOPT_DEBUGDATA set to a objectpointer + CURLOPT_HEADERFUNCTION set to a functionpointer + CURLOPT_HEADERDATA set to a objectpointer + + */ + + ret = curl_easy_perform(hnd); + + curl_easy_cleanup(hnd); + hnd = NULL; + + return (int)ret; +} +/**** End of sample code ****/ +</file> +<stripfile> +# curl's default user-agent varies with version, libraries etc. +s/(USERAGENT, \")[^\"]+/${1}stripped/ +# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just +# ignore them +$_ = '' if /CURLOPT_SSL_VERIFYPEER/ +$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ +</stripfile> +</verify> +</testcase> diff --git a/tests/data/test1408 b/tests/data/test1408 new file mode 100644 index 000000000..01b2f6d76 --- /dev/null +++ b/tests/data/test1408 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +IPV6 +cookies +cookiejar +</keywords> +</info> +# +# Server-side +<reply> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Content-Type: text/html +Set-Cookie: time=1 + +-foo- +</data1> +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Content-Type: text/html +Set-Cookie: time=2 + +-foo- +</data2> + + +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP receive cookies over IPV6 + </name> + <command> +-c log/jar1408 -g http://%HOST6IP:%HTTP6PORT/path/14080001 http://%HOST6IP:%HTTP6PORT/path/14080002 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /path/14080001 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+GET /path/14080002 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+Cookie: time=1
+
+</protocol> +</verify> +</testcase> + diff --git a/tests/data/test1409 b/tests/data/test1409 new file mode 100644 index 000000000..180e03ad1 --- /dev/null +++ b/tests/data/test1409 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +cmdline +</keywords> +</info> + + +# +# Client-side +<client> +<server> +none +</server> + <name> +Pass in string to -C + </name> + <command> +http://%HOSTIP:%HTTPPORT/1409 -C wrong +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +2 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test141 b/tests/data/test141 new file mode 100644 index 000000000..694d87c38 --- /dev/null +++ b/tests/data/test141 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +NOBODY +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +<size> +42 +</size> +<mdtm> +213 20030409102659 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download info with -I + </name> + <command> +ftp://%HOSTIP:%FTPPORT/blalbla/141 -I +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 141
+TYPE I
+SIZE 141
+REST 0
+QUIT
+</protocol> +<stdout> +Last-Modified: Wed, 09 Apr 2003 10:26:59 GMT
+Content-Length: 42
+Accept-ranges: bytes
+</stdout> +</verify> +</testcase> diff --git a/tests/data/test1410 b/tests/data/test1410 new file mode 100644 index 000000000..bcc78a856 --- /dev/null +++ b/tests/data/test1410 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +cmdline +</keywords> +</info> + + +# +# Client-side +<client> +<server> +none +</server> + <name> +Pass in negative number to --max-time + </name> + <command> +http://%HOSTIP:%HTTPPORT/1410 --max-time -4 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +2 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test1411 b/tests/data/test1411 new file mode 100644 index 000000000..01bc4c2a0 --- /dev/null +++ b/tests/data/test1411 @@ -0,0 +1,61 @@ +<testcase> +# Similar to 1406 +# N.B. --libcurl output not sufficient to deal with uploaded files. +<info> +<keywords> +SMTP +--libcurl +</keywords> +</info> + +# +# Server-side +<reply> +# the key in this response is that it doesn't include SIZE support +<servercmd> +REPLY EHLO 250 mooo +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP without SIZE support + </name> +<file name="log/test1411.eml"> +From: different +To: another + +body +</file> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 1411@foo --mail-rcpt 1411@foobar.example --mail-from 1411@from -T log/test1411.eml +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:<1411@from>
+RCPT TO:<1411@foo>
+RCPT TO:<1411@foobar.example>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> + +</verify> +</testcase> diff --git a/tests/data/test1412 b/tests/data/test1412 new file mode 100644 index 000000000..e88919d0d --- /dev/null +++ b/tests/data/test1412 @@ -0,0 +1,117 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +--anyauth +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +auth_required +</servercmd> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</data1000> + +# This is the second request +<data1001> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the second real page! +</data1001> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP GET with --anyauth with two URLs (picking Digest) + </name> + <command> +http://%HOSTIP:%HTTPPORT/1412 -u testuser:testpass --anyauth http://%HOSTIP:%HTTPPORT/14120001 +</command> +<file name="log/put1412"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1412 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1412 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1412", response="0390dbe89e31adca0413d11f91f30e7f"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /14120001 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/14120001", response="0085df91870374c8bf4e94415e7fbf8e"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1413 b/tests/data/test1413 new file mode 100644 index 000000000..6e889a8a2 --- /dev/null +++ b/tests/data/test1413 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose
+Location: moo.html/14130002#fragmentpart
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose
+Location: moo.html/14130002#fragmentpart
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP redirect with fragment in new URL + </name> + <command> +http://%HOSTIP:%HTTPPORT/this/1413 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /this/1413 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /this/moo.html/14130002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test142 b/tests/data/test142 new file mode 100644 index 000000000..e26aa192a --- /dev/null +++ b/tests/data/test142 @@ -0,0 +1,190 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> +# Server-side +<reply> +<data> +many parts there are +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP URL with 150 dir levels + </name> + <command> +ftp://%HOSTIP:%FTPPORT/part1/part2/part3/part4/part5/part6/part7/part8/part9/part10/part11/part12/part13/part14/part15/part16/part17/part18/part19/part20/part21/part22/part23/part24/part25/part26/part27/part28/part29/part30/part31/part32/part33/part34/part35/part36/part37/part38/part39/part40/part41/part42/part43/part44/part45/part46/part47/part48/part49/part50/part51/part52/part53/part54/part55/part56/part57/part58/part59/part60/part61/part62/part63/part64/part65/part66/part67/part68/part69/part70/part71/part72/part73/part74/part75/part76/part77/part78/part79/part80/part81/part82/part83/part84/part85/part86/part87/part88/part89/part90/part91/part92/part93/part94/part95/part96/part97/part98/part99/part100/part101/part102/part103/part104/part105/part106/part107/part108/part109/part110/part111/part112/part113/part114/part115/part116/part117/part118/part119/part120/part121/part122/part123/part124/part125/part126/part127/part128/part129/part130/part131/part132/part133/part134/part135/part136/part137/part138/part139/part140/part141/part142/part143/part144/part145/part146/part147/part148/part149/part150/142 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD part1
+CWD part2
+CWD part3
+CWD part4
+CWD part5
+CWD part6
+CWD part7
+CWD part8
+CWD part9
+CWD part10
+CWD part11
+CWD part12
+CWD part13
+CWD part14
+CWD part15
+CWD part16
+CWD part17
+CWD part18
+CWD part19
+CWD part20
+CWD part21
+CWD part22
+CWD part23
+CWD part24
+CWD part25
+CWD part26
+CWD part27
+CWD part28
+CWD part29
+CWD part30
+CWD part31
+CWD part32
+CWD part33
+CWD part34
+CWD part35
+CWD part36
+CWD part37
+CWD part38
+CWD part39
+CWD part40
+CWD part41
+CWD part42
+CWD part43
+CWD part44
+CWD part45
+CWD part46
+CWD part47
+CWD part48
+CWD part49
+CWD part50
+CWD part51
+CWD part52
+CWD part53
+CWD part54
+CWD part55
+CWD part56
+CWD part57
+CWD part58
+CWD part59
+CWD part60
+CWD part61
+CWD part62
+CWD part63
+CWD part64
+CWD part65
+CWD part66
+CWD part67
+CWD part68
+CWD part69
+CWD part70
+CWD part71
+CWD part72
+CWD part73
+CWD part74
+CWD part75
+CWD part76
+CWD part77
+CWD part78
+CWD part79
+CWD part80
+CWD part81
+CWD part82
+CWD part83
+CWD part84
+CWD part85
+CWD part86
+CWD part87
+CWD part88
+CWD part89
+CWD part90
+CWD part91
+CWD part92
+CWD part93
+CWD part94
+CWD part95
+CWD part96
+CWD part97
+CWD part98
+CWD part99
+CWD part100
+CWD part101
+CWD part102
+CWD part103
+CWD part104
+CWD part105
+CWD part106
+CWD part107
+CWD part108
+CWD part109
+CWD part110
+CWD part111
+CWD part112
+CWD part113
+CWD part114
+CWD part115
+CWD part116
+CWD part117
+CWD part118
+CWD part119
+CWD part120
+CWD part121
+CWD part122
+CWD part123
+CWD part124
+CWD part125
+CWD part126
+CWD part127
+CWD part128
+CWD part129
+CWD part130
+CWD part131
+CWD part132
+CWD part133
+CWD part134
+CWD part135
+CWD part136
+CWD part137
+CWD part138
+CWD part139
+CWD part140
+CWD part141
+CWD part142
+CWD part143
+CWD part144
+CWD part145
+CWD part146
+CWD part147
+CWD part148
+CWD part149
+CWD part150
+EPSV
+TYPE I
+SIZE 142
+RETR 142
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test143 b/tests/data/test143 new file mode 100644 index 000000000..a4df8cbf1 --- /dev/null +++ b/tests/data/test143 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +FTP +RETR +type= +</keywords> +</info> +# Server-side +<reply> +<data> +bla bla bla +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP URL with type=a + </name> + <command> +"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/143;type=a" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD /tmp
+CWD moo
+EPSV
+TYPE A
+SIZE 143
+RETR 143
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test144 b/tests/data/test144 new file mode 100644 index 000000000..4419b09f5 --- /dev/null +++ b/tests/data/test144 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +FTP +PORT +NLST +--data-binary +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +<servercmd> +REPLY NLST 450 No files found +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP NLST dir list without contents, using PORT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ -P - -l +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+NLST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test145 b/tests/data/test145 new file mode 100644 index 000000000..1e80cf8ce --- /dev/null +++ b/tests/data/test145 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +NLST +PORT +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY NLST 550 Have a taste on this! +</servercmd> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP NLST dir list with weird reply code, using PORT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ -P - -l +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +19 +</errorcode> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+NLST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test146 b/tests/data/test146 new file mode 100644 index 000000000..3cd4bd5aa --- /dev/null +++ b/tests/data/test146 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +FTP +RETR +persistent connection +</keywords> +</info> + +# Server-side +<reply> +<data> +this is file contents +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +persistent FTP with different paths + </name> + <command> +ftp://%HOSTIP:%FTPPORT/first/dir/here/146 ftp://%HOSTIP:%FTPPORT/146 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+CWD dir
+CWD here
+EPSV
+TYPE I
+SIZE 146
+RETR 146
+CWD /
+EPSV
+SIZE 146
+RETR 146
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test147 b/tests/data/test147 new file mode 100644 index 000000000..6651df03b --- /dev/null +++ b/tests/data/test147 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data> +foo +</data> +<servercmd> +REPLY CWD 550 I won't allow this on my server +COUNT CWD 1 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with --ftp-create-dirs (failing CWD) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/first/dir/here/147 --ftp-create-dirs +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+MKD first
+CWD first
+CWD dir
+CWD here
+EPSV
+TYPE I
+SIZE 147
+RETR 147
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test148 b/tests/data/test148 new file mode 100644 index 000000000..fbac10f9c --- /dev/null +++ b/tests/data/test148 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY CWD 550 I won't allow this on my server +REPLY MKD 550 We will have no such thing +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with --ftp-create-dirs (failing MKD) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/attempt/to/get/this/148 --ftp-create-dirs +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<errorcode> +9 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD attempt
+MKD attempt
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test149 b/tests/data/test149 new file mode 100644 index 000000000..a5d149982 --- /dev/null +++ b/tests/data/test149 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with multiple uploads + </name> + <command> +-T log/upload149 ftp://%HOSTIP:%FTPPORT/dir1/149 -T log/upload149 ftp://%HOSTIP:%FTPPORT/dir2/149 +</command> +<file name="log/upload149"> +send away this contents +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD dir1
+EPSV
+TYPE I
+STOR 149
+CWD /
+CWD dir2
+EPSV
+STOR 149
+QUIT
+</protocol> +<file name="log/upload149"> +send away this contents +</file> +</verify> +</testcase> diff --git a/tests/data/test15 b/tests/data/test15 new file mode 100644 index 000000000..3b1fa4369 --- /dev/null +++ b/tests/data/test15 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--write-out +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.4 200 OK
+Fake: yes
+Fake: yes
+Fake: yes
+Content-Length: 26
+
+Repeated nonsense-headers +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +--write-out test + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/15 --write-out "%{url_effective} %{http_code} %{size_download}\n" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.4 200 OK
+Fake: yes
+Fake: yes
+Fake: yes
+Content-Length: 26
+
+Repeated nonsense-headers +http://%HOSTIP:%HTTPPORT/want/15 200 26 +</stdout> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/15 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test150 b/tests/data/test150 new file mode 100644 index 000000000..cdd4cf673 --- /dev/null +++ b/tests/data/test150 @@ -0,0 +1,94 @@ +<testcase> + +<!-- Server-side --> +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM authorization and --fail + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/150 -u testuser:testpass --ntlm --fail +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /150 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /150 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test1500 b/tests/data/test1500 new file mode 100644 index 000000000..0a5919ca8 --- /dev/null +++ b/tests/data/test1500 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 all good! +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Content-Length: 12 +Connection: close + +Hello World +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib1500 +</tool> + + <name> +curl_multi_wait + </name> + <command> +http://%HOSTIP:%HTTPPORT/1500 +</command> +</client> +</testcase> diff --git a/tests/data/test1501 b/tests/data/test1501 new file mode 100644 index 000000000..8c7e13af7 --- /dev/null +++ b/tests/data/test1501 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +RETR +multi +LIST +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +DELAY LIST 2 +DELAY TYPE 2 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib1501 +</tool> + <name> +FTP with multi interface and slow LIST response + </name> + <command> +ftp://%HOSTIP:%FTPPORT/1501/ +</command> +</client> +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD 1501
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test1502 b/tests/data/test1502 new file mode 100644 index 000000000..3e3b36552 --- /dev/null +++ b/tests/data/test1502 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +CURLOPT_RESOLVE +</keywords> +</info> + +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib1502 +</tool> + <name> +HTTP multi with CURLOPT_RESOLVE + </name> + <command> +http://google.com:%HTTPPORT/1502 %HTTPPORT %HOSTIP +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /1502 HTTP/1.1
+Host: google.com:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test151 b/tests/data/test151 new file mode 100644 index 000000000..7fb190884 --- /dev/null +++ b/tests/data/test151 @@ -0,0 +1,41 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.0 401 BAD BOY +Server: swsclose +Content-Type: text/html + +This contains a response code >= 400, so curl shouldn't display this. Even +though it's a response code that triggers authentication, we're not using +authentication so we should still fail. +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with an error code that might trick authentication + </name> + <command> +http://%HOSTIP:%HTTPPORT/151 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /151 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test152 b/tests/data/test152 new file mode 100644 index 000000000..c3f4159e8 --- /dev/null +++ b/tests/data/test152 @@ -0,0 +1,44 @@ +<testcase> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 401 BAD BOY +Server: swsclose +Content-Type: text/html + +This contains a response code >= 400, so curl shouldn't display this. Even +though it's a response code that triggers authentication, we're not using +authentication so we should still fail. +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with an error code that might trick authentication and --fail + </name> + <command> +http://%HOSTIP:%HTTPPORT/152 --fail +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /152 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<errorcode> +22 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test153 b/tests/data/test153 new file mode 100644 index 000000000..5a1db3150 --- /dev/null +++ b/tests/data/test153 @@ -0,0 +1,133 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +# reply back and ask for Digest auth +<data1> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data1> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1001> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1001> + +# +# This is the second request, and this sends back a response saying that +# the request contained stale data. We want an update. Set swsbounce to +# bounce on to data1003 on the second request. +<data1002> +HTTP/1.1 401 Authorization re-negotiation please swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 25
+
+This is not the real page +</data1002> + +# The second request to the 1002 section will bounce this one back instead +# thanks to the swsbounce keyword up there +<data1003> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 30
+
+This IS the second real page! +</data1003> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with Digest authorization with stale=true + </name> + <command> +http://%HOSTIP:%HTTPPORT/1530001 -u testuser:testpass --digest http://%HOSTIP:%HTTPPORT/1530002 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^Authorization.*cnonce +^User-Agent:.* +</strip> +<protocol> +GET /1530001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530001 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530001", response="f4f83139396995bac665f24a1f1055c7"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530002 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32"
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530002 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="999999", uri="/1530002", cnonce="MTA4MzIy", nc="00000001", qop="auth", response="25291c357671604a16c0242f56721c07", algorithm="MD5"
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +HTTP/1.1 401 Authorization re-negotiation please swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 25
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 30
+
+This IS the second real page! +</stdout> +</verify> +</testcase> diff --git a/tests/data/test154 b/tests/data/test154 new file mode 100644 index 000000000..89e2bd51f --- /dev/null +++ b/tests/data/test154 @@ -0,0 +1,108 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP Digest auth +--anyauth +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +auth_required +</servercmd> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP PUT with --anyauth authorization (picking Digest) + </name> + <command> +http://%HOSTIP:%HTTPPORT/154 -T log/put154 -u testuser:testpass --anyauth +</command> +<file name="log/put154"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /154 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+PUT /154 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/154", response="b71551e12d1c456e47d8388ecb2edeca"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test155 b/tests/data/test155 new file mode 100644 index 000000000..70ac7fd2f --- /dev/null +++ b/tests/data/test155 @@ -0,0 +1,138 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +auth_required +</servercmd> +<data> +HTTP/1.1 401 NTLM Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+moo +</data> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 401 Type-1 received, send back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Type-3 Recevied and all Things are fine swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 NTLM Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 401 Type-1 received, send back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Type-3 Recevied and all Things are fine swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP PUT with --anyauth authorization (picking NTLM) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/155 -T log/put155 -u testuser:testpass --anyauth +</command> +<precheck> +chkhostname curlhost +</precheck> +<file name="log/put155"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /155 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+PUT /155 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Expect: 100-continue
+
+PUT /155 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test156 b/tests/data/test156 new file mode 100644 index 000000000..0ff5e7e05 --- /dev/null +++ b/tests/data/test156 @@ -0,0 +1,52 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 200 No Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+PUT received fine. Thank you very much +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT with --anyauth (when the server requires none) + </name> + <command> +http://%HOSTIP:%HTTPPORT/156 -T log/put156 -u testuser:testpass --anyauth +</command> +<file name="log/put156"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /156 HTTP/1.1
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test157 b/tests/data/test157 new file mode 100644 index 000000000..872d93b86 --- /dev/null +++ b/tests/data/test157 @@ -0,0 +1,39 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 200 No Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+GET received and served just fine. Thank you very much +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with --anyauth (when the server requires none) + </name> + <command> +http://%HOSTIP:%HTTPPORT/157 -u testuser:testpass --anyauth +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /157 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test158 b/tests/data/test158 new file mode 100644 index 000000000..5cbc97ab6 --- /dev/null +++ b/tests/data/test158 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue swsclose
+Silly-header: yeeeees
+
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP multipart formpost with only a 100 reply + </name> + <command> +http://%HOSTIP:%HTTPPORT/158 -F name=daniel +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +^Content-Type: multipart/form-data.* +^---------------------------.* +</strip> +<protocol> +POST /158 HTTP/1.1
+User-Agent: curl/7.11.2-CVS (i686-pc-linux-gnu) libcurl/7.11.2-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 145
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------4f12fcdaa3bc
+
+------------------------------4f12fcdaa3bc
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------4f12fcdaa3bc--
+</protocol> +<errorcode> +52 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test159 b/tests/data/test159 new file mode 100644 index 000000000..2b9c83218 --- /dev/null +++ b/tests/data/test159 @@ -0,0 +1,93 @@ +<testcase> +# Server-side +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM authorization when talking HTTP/1.0 + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/159 -u testuser:testpass --ntlm -0 +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /159 HTTP/1.0
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /159 HTTP/1.0
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test16 b/tests/data/test16 new file mode 100644 index 000000000..98539bebd --- /dev/null +++ b/tests/data/test16 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 22
+
+the content goes here +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with proxy authorization + </name> + <command> + -U fake@user:§§§looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HTTPPORT http://we.want.that.site.com/16 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://we.want.that.site.com/16 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZUB1c2VyOqenp2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZw==
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test160 b/tests/data/test160 new file mode 100644 index 000000000..d6ead5937 --- /dev/null +++ b/tests/data/test160 @@ -0,0 +1,66 @@ +<testcase> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+
+surprise +</data> +<data1> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2 +</data1> + +<postcmd> +wait 1 +</postcmd> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with delayed close, conn reuse, connection reset and retry + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/160 http://%HOSTIP:%HTTPPORT/wantmore/1600001 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+
+surprise +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2 +</stdout> + +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/160 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/1600001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test161 b/tests/data/test161 new file mode 100644 index 000000000..045835998 --- /dev/null +++ b/tests/data/test161 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +FTP +CURLE_PARTIAL_FILE +RETR +PASV +</keywords> +</info> +<reply> +<data> +1oooooooooooooooooooooooooooooooooooooooooo2 +</data> +<size> +10928 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/161 +</command> +</client> + + +# Verify data after the test has been "shot" +<verify> +# This gets QUIT sent because CURLE_PARTIAL_FILE does NOT mark the control +# connection as bad +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 161
+RETR 161
+QUIT
+</protocol> +<errorcode> +18 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test162 b/tests/data/test162 new file mode 100644 index 000000000..9b75f7c6b --- /dev/null +++ b/tests/data/test162 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy NTLM auth +FAILURE +</keywords> +</info> + +# Server-side +<reply> +<data1001 nocheck="yes"> +HTTP/1.0 407 BAD BOY +Proxy-Authenticate: Basic realm="Squid proxy-caching web server" +Server: swsclose +Content-Type: text/html + +Even though it's the response code that triggers authentication, we're +using NTLM and the server isn't, so we should fail. We know the server +isn't because there's no Proxy-Authorization: NTLM header +</data1001> +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP GET asking for --proxy-ntlm when some other authentication is required + </name> + <command> +http://%HOSTIP:%HTTPPORT/162 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm --fail +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/162 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<errorcode> +22 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test163 b/tests/data/test163 new file mode 100644 index 000000000..9e8256d00 --- /dev/null +++ b/tests/data/test163 @@ -0,0 +1,73 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 10 + +blablabla +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP multipart formpost with contents from a file + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/163 -F "name=<log/field163" -F tool=curl +</command> +# We create this file before the command is invoked! +<file name="log/field163"> +contents +from +a +file + +newlinens? +yes please +
+[tab][CR] too +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/163 HTTP/1.1
+User-Agent: curl/7.11.2-CVS (i686-pc-linux-gnu) libcurl/7.11.2-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.0.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 304
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------c2d1767eb6ac
+
+------------------------------c2d1767eb6ac
+Content-Disposition: form-data; name="name"
+
+contents +from +a +file + +newlinens? +yes please +
+[tab][CR] too +
+------------------------------c2d1767eb6ac
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------c2d1767eb6ac--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test164 b/tests/data/test164 new file mode 100644 index 000000000..baac19626 --- /dev/null +++ b/tests/data/test164 @@ -0,0 +1,61 @@ +<testcase> +# Server-side +# This particular response is an exact excerpt from an actual Apache +# server when asked for a 0-10,12-15 range (except gt/lt changed to {} +# to avoid XML escaping problems). +<reply> +<data> +HTTP/1.1 206 Partial Content swsclose
+Date: Sat, 24 Apr 2004 09:24:49 GMT
+Server: Apache/1.3.29 (Unix) mod_throttle/3.1.2 PHP/4.3.4 mod_fastcgi/2.4.0
+Last-Modified: Tue, 23 Mar 2004 08:23:14 GMT
+ETag: "53814a-ec5-405ff3f2"
+Accept-Ranges: bytes
+Content-Length: 187
+Content-Type: multipart/byteranges; boundary=408a326132c
+
+--408a326132c
+Content-type: text/html
+Content-range: bytes 0-10/3781
+
+{html} +{hea +
+--408a326132c
+Content-type: text/html
+Content-range: bytes 12-15/3781
+
+} +{t +
+--408a326132c--
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP range with multiple ranges + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/164 -r 0-10,12-15 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/164 HTTP/1.1
+Range: bytes=0-10,12-15
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test165 b/tests/data/test165 new file mode 100644 index 000000000..ddfe1e9dc --- /dev/null +++ b/tests/data/test165 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +IDN +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +idn +</features> +<setenv> +CHARSET=ISO8859-1 +</setenv> + <name> +HTTP over proxy with IDN host name + </name> + <command> +http://www.åäö.se/page/165 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://www.xn--4cab6c.se/page/165 HTTP/1.1
+Host: www.xn--4cab6c.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test166 b/tests/data/test166 new file mode 100644 index 000000000..374be283f --- /dev/null +++ b/tests/data/test166 @@ -0,0 +1,54 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 10 + +blablabla +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP formpost a file with spaces in name + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/166 -F "name=@log/fie ld 166" +</command> +# We create this file before the command is invoked! +<file name="log/fie ld 166"> +data inside the file +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/166 HTTP/1.1
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 223
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------b0b3d6d23991
+
+------------------------------b0b3d6d23991
+Content-Disposition: form-data; name="name"; filename="fie ld 166"
+Content-Type: application/octet-stream
+
+data inside the file +
+------------------------------b0b3d6d23991--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test167 b/tests/data/test167 new file mode 100644 index 000000000..2ce968db2 --- /dev/null +++ b/tests/data/test167 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+WWW-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+</data> + +<data1000> +HTTP/1.1 200 OK swsclose
+Server: no +Content-Length: 15 +
+Nice auth sir! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+WWW-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+HTTP/1.1 200 OK swsclose
+Server: no +Content-Length: 15 +
+Nice auth sir! +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with proxy-requiring-Basic to site-requiring-Digest + </name> + <command> +http://data.from.server.requiring.digest.hohoho.com/167 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --digest --user digest:alot +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1
+Proxy-Authorization: Basic Zm9vOmJhcg==
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1
+Proxy-Authorization: Basic Zm9vOmJhcg==
+Authorization: Digest username="digest", realm="weirdorealm", nonce="12345", uri="/167", response="13c7c02a252cbe1c46d8669898a3be26"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test168 b/tests/data/test168 new file mode 100644 index 000000000..e72e93149 --- /dev/null +++ b/tests/data/test168 @@ -0,0 +1,99 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Digest auth +HTTP Digest auth +</keywords> +</info> + +# 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 swsclose
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+And you should ignore this data. +</data> + +# then this is returned since we get no server-auth +<data1000> +HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose
+WWW-Authenticate: Digest realm="realmweirdo", nonce="123456"
+
+you should ignore this data too +</data1000> + +<data1001> +HTTP/1.1 200 OK swsclose
+Server: no +Content-Length: 15 +
+Nice auth sir! +</data1001> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose
+WWW-Authenticate: Digest realm="realmweirdo", nonce="123456"
+
+HTTP/1.1 200 OK swsclose
+Server: no +Content-Length: 15 +
+Nice auth sir! +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with proxy-requiring-Digest to site-requiring-Digest + </name> + <command> +http://data.from.server.requiring.digest.hohoho.com/168 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-digest --digest --user digest:alot +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"
+Authorization: Digest username="digest", realm="realmweirdo", nonce="123456", uri="/168", response="ca87f2d768a231e2d637a55698d5c416"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test169 b/tests/data/test169 new file mode 100644 index 000000000..f7419e6d0 --- /dev/null +++ b/tests/data/test169 @@ -0,0 +1,127 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy NTLM auth +HTTP Digest auth +</keywords> +</info> + +# 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 swsclose
+Proxy-Authenticate: NTLM
+
+And you should ignore this data. +</data> + +# then this is returned since we get no server-auth +<data1000> +HTTP/1.1 200 Authorizated fine
+Content-Length: 27
+
+Welcome to the end station +</data1000> + +<data1001> +HTTP/1.1 407 NTLM type-1 received sending back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 401 You now need to authenticate with the host
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: Digest realm="r e a l m", nonce="abcdef"
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+We have not authenticated with the server yet +</data1002> + +<datacheck> +HTTP/1.1 407 NTLM type-1 received sending back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 401 You now need to authenticate with the host
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: Digest realm="r e a l m", nonce="abcdef"
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 Authorizated fine
+Content-Length: 27
+
+Welcome to the end station +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP with proxy-requiring-NTLM to site-requiring-Digest + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://data.from.server.requiring.digest.hohoho.com/169 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm --digest --user digest:alot +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAAAwADAHAAAAAIAAgAcwAAAAAAAAAAAAAABoKBAIP6B+XVQ6vQsx3DfDXUVhd9436GAxPu0IYcl2Z7LxHmNeOAWQ+vxUmhuCFJBUgXCWZvb2N1cmxob3N0
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Authorization: Digest username="digest", realm="r e a l m", nonce="abcdef", uri="/169", response="95d48591985a03c4b49cb962aa7bd3e6"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test17 b/tests/data/test17 new file mode 100644 index 000000000..259580bf5 --- /dev/null +++ b/tests/data/test17 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP custom request +config file +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Funny-head: yesyes +Content-Length: 27
+ +This is the proof it works +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with config file on stdin + </name> + <stdin> +# +# Use a silly request without '--': +request MOOO +# +# Set the user-agent using a short-option: +-A "agent007 license to drill\t" +# +# long option *with* '--': +--max-time 180 + </stdin> + <command> +-K - %HOSTIP:%HTTPPORT/that.site.com/17 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +MOOO /that.site.com/17 HTTP/1.1
+User-Agent: agent007 license to drill
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test170 b/tests/data/test170 new file mode 100644 index 000000000..a2c221792 --- /dev/null +++ b/tests/data/test170 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP POST with --proxy-ntlm and no SSL with no response + </name> + <command> +http://a.galaxy.far.far.away/170 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -F "dummy=value" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +POST http://a.galaxy.far.far.away/170 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 libidn/0.4.3
+Host: a.galaxy.far.far.away
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+
+</protocol> +# 52 is CURLE_GOT_NOTHING +<errorcode> +52 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test171 b/tests/data/test171 new file mode 100644 index 000000000..147be0a8e --- /dev/null +++ b/tests/data/test171 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: XToken=xt;Domain=.z.x.com;Path=/
+Cache-control: private
+Content-Length: 62
+
+This server reply is for testing a simple cookie test case... +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, get cookie with dot prefixed full domain + </name> + <command> +-c log/jar171 -x %HOSTIP:%HTTPPORT http://z.x.com/171 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://z.x.com/171 HTTP/1.1
+Host: z.x.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<file name="log/jar171" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +.z.x.com TRUE / FALSE 0 XToken xt +</file> +</verify> +</testcase> diff --git a/tests/data/test172 b/tests/data/test172 new file mode 100644 index 000000000..b3efae993 --- /dev/null +++ b/tests/data/test172 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Content-Length: 4
+Connection: close
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with cookies file and custom added cookie + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/172 -b log/jar172.txt -b "tool=curl; name=fool" +</command> +<file name="log/jar172.txt"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +.%HOSTIP TRUE /silly/ FALSE 0 ismatch this +.%HOSTIP TRUE / FALSE 0 partmatch present +%HOSTIP FALSE /we/want/ FALSE 1391252187 nodomain value +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/172 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: nodomain=value; partmatch=present; tool=curl; name=fool
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test173 b/tests/data/test173 new file mode 100644 index 000000000..bf6af0007 --- /dev/null +++ b/tests/data/test173 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 11 + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-formpost a file from stdin with "faked" filename + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/173 -F field1=contents1 -F "fileupload=@-;filename=/dev/null;type=text/x-null;format=x-curl" +</command> + +<stdin> +line1 +line2 +line3 +line4 +line5 +line6 +line7 +line8 +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/173 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 360
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------5dbea401cd8c
+
+------------------------------5dbea401cd8c
+Content-Disposition: form-data; name="field1"
+
+contents1
+------------------------------5dbea401cd8c
+Content-Disposition: form-data; name="fileupload"; filename="/dev/null"
+Content-Type: text/x-null;format=x-curl
+
+line1 +line2 +line3 +line4 +line5 +line6 +line7 +line8 +
+------------------------------5dbea401cd8c--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test174 b/tests/data/test174 new file mode 100644 index 000000000..9767f2f52 --- /dev/null +++ b/tests/data/test174 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 beng swsclose
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP POST --anyauth to server not requiring any auth at all + </name> + <command> +http://%HOSTIP:%HTTPPORT/174 -u testuser:testpass --anyauth -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /174 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk +</protocol> +</verify> +</testcase> diff --git a/tests/data/test175 b/tests/data/test175 new file mode 100644 index 000000000..9e005f1f5 --- /dev/null +++ b/tests/data/test175 @@ -0,0 +1,86 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page +</data> + +<data1> +HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you +</data1> + +<datacheck> +HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST --digest to server not requiring any auth at all + </name> + <command> +http://%HOSTIP:%HTTPPORT/175 -u auser:apasswd --digest -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /175 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /175 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk +</protocol> +</verify> +</testcase> diff --git a/tests/data/test176 b/tests/data/test176 new file mode 100644 index 000000000..413c14925 --- /dev/null +++ b/tests/data/test176 @@ -0,0 +1,86 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> + +# Server-side +<reply> +# the first request has NTLM type-1 included, and then the 1001 is returned +<data1001> +HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+</data1001> + +# the second request should be auth-less and then this is returned. +<data> +HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you +</data> + +<datacheck> +HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP POST --ntlm to server not requiring any auth at all + </name> + <command> +http://%HOSTIP:%HTTPPORT/176 -u auser:apasswd --ntlm -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /176 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /176 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk +</protocol> +</verify> +</testcase> diff --git a/tests/data/test177 b/tests/data/test177 new file mode 100644 index 000000000..495dea9b4 --- /dev/null +++ b/tests/data/test177 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 302 *MOVED* swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Location: /mooooo/177
+Content-Type: text/html; charset=iso-8859-1
+
+</data> +</reply> + +# Client-side +<client> +# +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST --digest to server doing a 302-location response + </name> + <command> +http://%HOSTIP:%HTTPPORT/177 -u auser:apasswd --digest -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /177 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test178 b/tests/data/test178 new file mode 100644 index 000000000..07f0566e7 --- /dev/null +++ b/tests/data/test178 @@ -0,0 +1,43 @@ +<testcase> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: -6 +Content-Type: text/html +Funny-head: yesyes + +moooooooooooo +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +simple HTTP GET with negative Content-Length + </name> + <command> +http://%HOSTIP:%HTTPPORT/178 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /178 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test179 b/tests/data/test179 new file mode 100644 index 000000000..f8f7811a7 --- /dev/null +++ b/tests/data/test179 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +cookies +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Server: Microsoft-IIS/4.0 +Date: Tue, 25 Sep 2001 19:37:44 GMT +Content-Type: text/html +Connection: close +Content-Length: 21
+ +This server says moo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP using proxy and cookies with path checks + </name> + <command> +http://supertrooper.fake/c/179 -b log/injar179 -x %HOSTIP:%HTTPPORT +</command> +<file name="log/injar179"> +supertrooper.fake FALSE /a FALSE 2139150993 mooo indeed +supertrooper.fake FALSE /b FALSE 0 moo1 indeed +supertrooper.fake FALSE /c FALSE 2139150993 moo2 indeed +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://supertrooper.fake/c/179 HTTP/1.1
+Host: supertrooper.fake
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: moo2=indeed
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test18 b/tests/data/test18 new file mode 100644 index 000000000..43e3ab39b --- /dev/null +++ b/tests/data/test18 @@ -0,0 +1,90 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +{} list +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+moo +</data> +<data2> +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+foo +</data2> +<data3> +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+hoo +</data3> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +multiple requests using {} in URL + </name> + <command> +"%HOSTIP:%HTTPPORT/{18,180002,180003}" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /18 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /180002 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /180003 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +--_curl_--%HOSTIP:%HTTPPORT/18 +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+moo +--_curl_--%HOSTIP:%HTTPPORT/180002 +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+foo +--_curl_--%HOSTIP:%HTTPPORT/180003 +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+hoo +</stdout> +</verify> +</testcase> diff --git a/tests/data/test180 b/tests/data/test180 new file mode 100644 index 000000000..c93302e75 --- /dev/null +++ b/tests/data/test180 @@ -0,0 +1,59 @@ +<testcase> +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 1.0 PUT + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/180 -T log/test180.txt --http1.0 +</command> +<file name="log/test180.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /we/want/180 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird + file + to + upload +for + testing +the + PUT + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test181 b/tests/data/test181 new file mode 100644 index 000000000..87c5701fd --- /dev/null +++ b/tests/data/test181 @@ -0,0 +1,60 @@ +<testcase> +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 1.0 POST + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/181 --data-binary @log/test181.txt --http1.0 +</command> +<file name="log/test181.txt"> +Weird + file + to + upload +for + testing +the + POST + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /we/want/181 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 79
+Content-Type: application/x-www-form-urlencoded
+
+Weird + file + to + upload +for + testing +the + POST + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test182 b/tests/data/test182 new file mode 100644 index 000000000..f640a0e1a --- /dev/null +++ b/tests/data/test182 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data sendzero="yes"> +</data> +<size> +0 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<name> +FTP download an empty file +</name> +<command> +ftp://%HOSTIP:%FTPPORT/182 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 182
+RETR 182
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test183 b/tests/data/test183 new file mode 100644 index 000000000..f34dc0c98 --- /dev/null +++ b/tests/data/test183 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +persistent connection +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET two URLs over a single proxy with persistent connection + </name> + <command> +http://deathstar.another.galaxy/183 http://a.galaxy.far.far.away/183 --proxy http://%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://deathstar.another.galaxy/183 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Host: deathstar.another.galaxy
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://a.galaxy.far.far.away/183 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6 +Host: a.galaxy.far.far.away
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test184 b/tests/data/test184 new file mode 100644 index 000000000..e42a393ea --- /dev/null +++ b/tests/data/test184 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: http://yet.another.host/184 +
+moo +</data> +<data1> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo +</data1> +<datacheck> +HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: http://yet.another.host/184 +
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP replace Host: when following Location: to new host + </name> + <command> +http://deathstar.another.galaxy/184 -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://deathstar.another.galaxy/184 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+GET http://yet.another.host/184 HTTP/1.1
+Host: yet.another.host
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test185 b/tests/data/test185 new file mode 100644 index 000000000..01a66f6db --- /dev/null +++ b/tests/data/test185 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: go/west/185
+
+moo +</data> +<data1> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo +</data1> +<datacheck> +HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: go/west/185
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP replace Host: when following Location: on the same host + </name> + <command> +http://deathstar.another.galaxy/185 -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://deathstar.another.galaxy/185 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+GET http://deathstar.another.galaxy/go/west/185 HTTP/1.1
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test186 b/tests/data/test186 new file mode 100644 index 000000000..5a1b7b9ac --- /dev/null +++ b/tests/data/test186 @@ -0,0 +1,56 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 11 + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting with types on text fields + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/186 -F "name=daniel;type=moo/foo" -F "html= <body>hello</body>;type=text/html;charset=verymoo" +</command> +# We create this file before the command is invoked! +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/186 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.1 c-ares/1.2.0 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 321
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------212d9006ceb5
+
+------------------------------212d9006ceb5
+Content-Disposition: form-data; name="name"
+Content-Type: moo/foo
+
+daniel
+------------------------------212d9006ceb5
+Content-Disposition: form-data; name="html"
+Content-Type: text/html;charset=verymoo
+
+ <body>hello</body>
+------------------------------212d9006ceb5--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test187 b/tests/data/test187 new file mode 100644 index 000000000..b82a6c60e --- /dev/null +++ b/tests/data/test187 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: /root/1870002.txt?coolsite=yes +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: /root/1870002.txt?coolsite=yes +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP redirect with bad host name separation and slash in parameters + </name> + <command> +http://%HOSTIP:%HTTPPORT?oh=what-weird=test/187 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /?oh=what-weird=test/187 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /root/1870002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test188 b/tests/data/test188 new file mode 100644 index 000000000..030354414 --- /dev/null +++ b/tests/data/test188 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Content-Range +Resume +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsbounce +Location: /188 +Content-Length: 2 + +OK +</data> +<data1> +HTTP/1.1 200 OK +Connection: close +Content-Length: 15 +Content-Range: bytes 50- + +Actual content +</data1> + +<datacheck> +HTTP/1.1 301 OK swsbounce +Location: /188 +Content-Length: 2 + +HTTP/1.1 200 OK +Connection: close +Content-Length: 15 +Content-Range: bytes 50- + +Actual content +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with resume and redirect + </name> + <command> +http://%HOSTIP:%HTTPPORT/188 -C 50 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /188 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /188 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.2 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test189 b/tests/data/test189 new file mode 100644 index 000000000..55485104f --- /dev/null +++ b/tests/data/test189 @@ -0,0 +1,69 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 301 OK swsbounce +Location: /189 +Content-Length: 2 + +OK +</data> +<data1> +HTTP/1.1 200 OK +Connection: close +Content-Length: 15 + +Actual content +</data1> + +<datacheck> +HTTP/1.1 301 OK swsbounce +Location: /189 +Content-Length: 2 + +HTTP/1.1 200 OK +Connection: close +Content-Length: 15 + +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with resume and redirect (to a page that doesn't resume) + </name> + <command> +http://%HOSTIP:%HTTPPORT/189 -C 50 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /189 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /189 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.2 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +# 33 is CURLE_RANGE_ERROR +<errorcode> +33 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test19 b/tests/data/test19 new file mode 100644 index 000000000..dd60b8cf3 --- /dev/null +++ b/tests/data/test19 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +HTTP +connect to non-listen +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> + <name> +attempt connect to non-listening socket + </name> + <command> +%HOSTIP:60000 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +7 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test190 b/tests/data/test190 new file mode 100644 index 000000000..6f5d66adf --- /dev/null +++ b/tests/data/test190 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +DELAY CWD 60 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<killserver> +ftp +</killserver> + <name> +FTP download with strict timeout and slow CWD + </name> + <command timeout="1"> +ftp://%HOSTIP:%FTPPORT/path/to/file/190 -m %FTPTIME2 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 28 is CURLE_OPERATION_TIMEDOUT +<errorcode> +28 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test191 b/tests/data/test191 new file mode 100644 index 000000000..86fa29f93 --- /dev/null +++ b/tests/data/test191 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data> +data in file +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP URL with ?-letters in username and password + </name> + <command> +"ftp://use%3fr:pass%3fword@%HOSTIP:%FTPPORT/191" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER use?r
+PASS pass?word
+PWD
+EPSV
+TYPE I
+SIZE 191
+RETR 191
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test192 b/tests/data/test192 new file mode 100644 index 000000000..5f59e1850 --- /dev/null +++ b/tests/data/test192 @@ -0,0 +1,52 @@ +<testcase> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close + +monster +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET -w num_connects with one simple connect + </name> + <command> +http://%HOSTIP:%HTTPPORT/192 -w "%{num_connects}\n" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /192 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<stdout> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close + +monster +1 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test193 b/tests/data/test193 new file mode 100644 index 000000000..c5425bb3f --- /dev/null +++ b/tests/data/test193 @@ -0,0 +1,82 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +--write-out +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 302 OK swsbounce swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close +Location: ./193 + +monster +</data> +<data1 nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close + +monster +</data1> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET -w num_connects with redirected fetch (2 connects) + </name> + <command> +http://%HOSTIP:%HTTPPORT/193 -w "%{num_connects}\n" -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /193 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /193 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<stdout> +HTTP/1.1 302 OK swsbounce swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close +Location: ./193 + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close + +monster +2 +</stdout> + +</verify> +</testcase> diff --git a/tests/data/test194 b/tests/data/test194 new file mode 100644 index 000000000..1010ee906 --- /dev/null +++ b/tests/data/test194 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Content-Range +Resume +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 416 Requested Range Not Satisfiable swsclose
+Date: Fri, 24 Oct 2003 21:33:12 GMT
+Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
+Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
+ETag: "ab57a-507-3f9968f3"
+Accept-Ranges: bytes
+Content-Length: 4
+Content-Range: bytes */87
+Content-Type: image/gif
+Connection: close
+
+bad +</data> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP resume transfer with the whole file already downloaded and --fail + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/194 -C 87 --fail +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/194 HTTP/1.1
+Range: bytes=87-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test195 b/tests/data/test195 new file mode 100644 index 000000000..3059e8d95 --- /dev/null +++ b/tests/data/test195 @@ -0,0 +1,38 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY PASS 530 temporarily not available +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP response 530 after PASS, temporarily not allowed access + </name> + <command> +ftp://%HOSTIP:%FTPPORT/195 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test196 b/tests/data/test196 new file mode 100644 index 000000000..ee9d3398a --- /dev/null +++ b/tests/data/test196 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY PASS 430 temporarily not available +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP transient error, retry request once + </name> + <command> +ftp://%HOSTIP:%FTPPORT/196 --retry 1 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 67 is CURLE_LOGIN_DENIED +<errorcode> +67 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+USER anonymous
+PASS ftp@example.com
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test197 b/tests/data/test197 new file mode 100644 index 000000000..c299a22ae --- /dev/null +++ b/tests/data/test197 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 503 OK swsbounce +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 21 + +server not available +</data> +<data1 nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 3 +Connection: close + +ok +</data1> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET --retry on 503 error with output to stdout + </name> + <command> +http://%HOSTIP:%HTTPPORT/197 --retry 1000 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /197 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /197 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<stdout> +HTTP/1.1 503 OK swsbounce +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 21 + +server not available +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 3 +Connection: close + +ok +</stdout> + +</verify> +</testcase> diff --git a/tests/data/test198 b/tests/data/test198 new file mode 100644 index 000000000..dca26b9ab --- /dev/null +++ b/tests/data/test198 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 503 OK swsbounce +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 21 + +server not available +</data> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 3 +Connection: close + +ok +</data1> + +<datacheck> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 3 +Connection: close + +ok +</datacheck> + +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET --retry on 503 error with output to file + </name> + <command> +http://%HOSTIP:%HTTPPORT/198 --retry 1000 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /198 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /198 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test199 b/tests/data/test199 new file mode 100644 index 000000000..e8df66e8f --- /dev/null +++ b/tests/data/test199 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with -d, -G and {} + </name> + <command> +-d "foo=moo&moo=poo" "http://%HOSTIP:%HTTPPORT/{199,199}" -G +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /199?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /199?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2 b/tests/data/test2 new file mode 100644 index 000000000..22b4f1860 --- /dev/null +++ b/tests/data/test2 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with user and password + </name> + <command> + -u fake:user http://%HOSTIP:%HTTPPORT/2 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<data> +[insert full protocol verifiction dump here] +</data> +</verify> +</testcase> diff --git a/tests/data/test20 b/tests/data/test20 new file mode 100644 index 000000000..57fa48dea --- /dev/null +++ b/tests/data/test20 @@ -0,0 +1,38 @@ +<testcase> +<info> +<keywords> +HTTP +FAILURE +non-existing host +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> + <name> +attempt connect to non-existing host name + </name> + <command> +non-existing-host.haxx.se. +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +6 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test200 b/tests/data/test200 new file mode 100644 index 000000000..8be1de0c7 --- /dev/null +++ b/tests/data/test200 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +FILE +</keywords> +</info> + +<reply> +<data> +foo + bar +bar + foo +moo +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +basic file:// file + </name> + <command> +file://localhost/%PWD/log/test200.txt +</command> +<file name="log/test200.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +</verify> +</testcase> diff --git a/tests/data/test2000 b/tests/data/test2000 new file mode 100644 index 000000000..d3edb16e5 --- /dev/null +++ b/tests/data/test2000 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +FTP +PASV +FILE +multiprotocol +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# +# Client-side +<client> +<server> +ftp +file +</server> + <name> +FTP RETR followed by FILE + </name> + <command> +ftp://%HOSTIP:%FTPPORT/2000 file://localhost/%PWD/log/test2000.txt +</command> +<file name="log/test2000.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 2000
+RETR 2000
+QUIT
+</protocol> +<stdout> +data + to + see +that FTP +works + so does it? +foo + bar +bar + foo +moo +</stdout> +</verify> +</testcase> diff --git a/tests/data/test2001 b/tests/data/test2001 new file mode 100644 index 000000000..68c0df784 --- /dev/null +++ b/tests/data/test2001 @@ -0,0 +1,109 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FTP +PASV +FILE +multiprotocol +</keywords> +</info> + +# +# Server-side +<reply> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +</data1> +<data2 nocheck="yes"> +data + to + see +that FTP +works + so does it? +</data2> +</reply> + +# +# Client-side +<client> +<server> +http +ftp +file +</server> + <name> +HTTP GET followed by FTP RETR followed by FILE + </name> + <command> +http://%HOSTIP:%HTTPPORT/20010001 ftp://%HOSTIP:%FTPPORT/20010002 file://localhost/%PWD/log/test2001.txt +</command> +<file name="log/test2001.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20010001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20010002
+RETR 20010002
+QUIT
+</protocol> +<stdout> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +data + to + see +that FTP +works + so does it? +foo + bar +bar + foo +moo +</stdout> +</verify> +</testcase> diff --git a/tests/data/test2002 b/tests/data/test2002 new file mode 100644 index 000000000..f39cd60f1 --- /dev/null +++ b/tests/data/test2002 @@ -0,0 +1,125 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FTP +PASV +FILE +TFTP +TFTP RRQ +multiprotocol +</keywords> +</info> + +# +# Server-side +<reply> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +</data1> +<data2 nocheck="yes"> +data + to + see +that FTP +works + so does it? +</data2> +<data3 nocheck="yes"> +a chunk of +data +returned + to TFTP client +</data3> +</reply> + +# +# Client-side +<client> +<server> +http +ftp +file +tftp +</server> + <name> +HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ + </name> + <command> +http://%HOSTIP:%HTTPPORT/20020001 ftp://%HOSTIP:%FTPPORT/20020002 file://localhost/%PWD/log/test2002.txt tftp://%HOSTIP:%TFTPPORT//20020003 +</command> +<file name="log/test2002.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20020001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20020002
+RETR 20020002
+opcode: 1 +filename: /20020003 +mode: octet +QUIT
+</protocol> +<stdout> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +data + to + see +that FTP +works + so does it? +foo + bar +bar + foo +moo +a chunk of +data +returned + to TFTP client +</stdout> +</verify> +</testcase> diff --git a/tests/data/test2003 b/tests/data/test2003 new file mode 100644 index 000000000..57c0d24e6 --- /dev/null +++ b/tests/data/test2003 @@ -0,0 +1,162 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FTP +PASV +FILE +TFTP +TFTP RRQ +multiprotocol +</keywords> +</info> + +# +# Server-side +<reply> +<data1 nocheck="yes"> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +</data1> +<data2 nocheck="yes"> +data + to + see +that FTP +works + so does it? +</data2> +<data3 nocheck="yes"> +a chunk of +data +returned + to TFTP client +</data3> +</reply> + +# +# Client-side +<client> +<server> +http +ftp +file +tftp +</server> + <name> +HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ then again in reverse order + </name> + <command> +http://%HOSTIP:%HTTPPORT/20030001 ftp://%HOSTIP:%FTPPORT/20030002 file://localhost/%PWD/log/test2003.txt tftp://%HOSTIP:%TFTPPORT//20030003 tftp://%HOSTIP:%TFTPPORT//20030003 file://localhost/%PWD/log/test2003.txt ftp://%HOSTIP:%FTPPORT/20030002 http://%HOSTIP:%HTTPPORT/20030001 +</command> +<file name="log/test2003.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20030001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20030002
+RETR 20030002
+opcode: 1 +filename: /20030003 +mode: octet +opcode: 1 +filename: /20030003 +mode: octet +EPSV
+SIZE 20030002
+RETR 20030002
+GET /20030001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+QUIT
+</protocol> +<stdout> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +data + to + see +that FTP +works + so does it? +foo + bar +bar + foo +moo +a chunk of +data +returned + to TFTP client +a chunk of +data +returned + to TFTP client +foo + bar +bar + foo +moo +data + to + see +that FTP +works + so does it? +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo- +</stdout> +</verify> +</testcase> diff --git a/tests/data/test2004 b/tests/data/test2004 new file mode 100644 index 000000000..bad6f7b90 --- /dev/null +++ b/tests/data/test2004 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +FILE +SFTP +SCP +multiprotocol +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +Test data file +for tftp test +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +sftp +</server> + <name> +TFTP RRQ followed by SFTP retrieval followed by FILE followed by SCP retrieval then again in reverse order + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: tftp://%HOSTIP:%TFTPPORT//2004 sftp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt file://localhost/%PWD/log/test2004.txt scp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt file://localhost/%PWD/log/test2004.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt tftp://%HOSTIP:%TFTPPORT//2004 --insecure +</command> +<file name="log/test2004.txt"> +This is test data +for several protocols +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /2004 +mode: octet +opcode: 1 +filename: /2004 +mode: octet +</protocol> +<stdout> +Test data file +for tftp test +This is test data +for several protocols +This is test data +for several protocols +This is test data +for several protocols +This is test data +for several protocols +This is test data +for several protocols +Test data file +for tftp test +</stdout> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test2005 b/tests/data/test2005 new file mode 100644 index 000000000..061f99b66 --- /dev/null +++ b/tests/data/test2005 @@ -0,0 +1,93 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 37 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2005; charset=funny; option=strange +Funny-head: yesyes + +Data delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, HTTP resource + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2005.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2005.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2005"> + <verification> + <hash type="sha256">a430d26389c69b7a245a9ad692cf20b4dc026fb7c2ff8a2c164c49a77130d6d9</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2005</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2005 log/name2005 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2005 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2005"> +Data delivered from an HTTP resource +</file1> +<file2 name="log/stdout2005"> +</file2> +<file3 name="log/stderr2005"> +Metalink: parsing (file://%PWD/log/test2005.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2005.metalink) OK +Metalink: fetching (log/download2005) from (http://%HOSTIP:%HTTPPORT/2005)... +Metalink: fetching (log/download2005) from (http://%HOSTIP:%HTTPPORT/2005) OK +Metalink: validating (log/download2005)... +Metalink: validating (log/download2005) [sha-256] OK +</file3> +<stripfile3> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile3> +</verify> +</testcase> diff --git a/tests/data/test2006 b/tests/data/test2006 new file mode 100644 index 000000000..e25556fcc --- /dev/null +++ b/tests/data/test2006 @@ -0,0 +1,112 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 14:49:01 GMT +Server: test-server/fake +Content-Length: 42 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2006; charset=funny; option=strange +Funny-head: yesyes + +Some data delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +# This relies on the debug feature to allow us to set directory to store the +# -O output in, using the CURL_TESTDIR variable. This test might use it upon +# failure only, successful execution won't actually use it. +<features> +debug +file +Metalink +</features> +<server> +http +</server> + <name> +Metalink local XML file, HTTP resource, using -O -D file + </name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2006.metalink -O -D log/heads2006 +</command> +# local metalink file written before test command runs +<file name="log/test2006.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2006"> + <verification> + <hash type="md5">we-only-check-the-strongest-hash-provided</hash> + <hash type="sha256">319cb6be756734b7ff689628ca3265580cdae6a0e38f42d4ac612ff4fba143b0</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2006</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2006 log/name2006 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2006 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2006"> +Some data delivered from an HTTP resource +</file1> +<file2 name="log/heads2006"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 14:49:01 GMT +Server: test-server/fake +Content-Length: 42 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2006; charset=funny; option=strange +Funny-head: yesyes + +</file2> +<file3 name="log/stdout2006"> +</file3> +<file4 name="log/stderr2006"> +Metalink: parsing (file://%PWD/log/test2006.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2006.metalink) OK +Metalink: fetching (log/download2006) from (http://%HOSTIP:%HTTPPORT/2006)... +Metalink: fetching (log/download2006) from (http://%HOSTIP:%HTTPPORT/2006) OK +Metalink: validating (log/download2006)... +Metalink: validating (log/download2006) [sha-256] OK +</file4> +<stripfile4> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile4> +</verify> +</testcase> diff --git a/tests/data/test2007 b/tests/data/test2007 new file mode 100644 index 000000000..cc4bd8c32 --- /dev/null +++ b/tests/data/test2007 @@ -0,0 +1,113 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +-J +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 14:50:02 GMT +Server: test-server/fake +Content-Length: 42 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2007; charset=funny; option=strange +Funny-head: yesyes + +Something delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +# This relies on the debug feature to allow us to set directory to store the +# -O and -J output in, using the CURL_TESTDIR variable. This test might use +# it upon failure only, successful execution won't actually use it. +<features> +debug +file +Metalink +</features> +<server> +http +</server> + <name> +Metalink local XML file, HTTP resource, using -O -J -D file + </name> +<setenv> +CURL_TESTDIR=%PWD/log +</setenv> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2007.metalink -J -O -D log/heads2007 +</command> +# local metalink file written before test command runs +<file name="log/test2007.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2007"> + <verification> + <hash type="md5">we-only-check-the-strongest-hash-provided</hash> + <hash type="sha256">52899e30f80e3490632d505653204e1fb5b02bda141048704ce9a0ed00b8a3f5</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2007</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2007 log/name2007 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2007 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2007"> +Something delivered from an HTTP resource +</file1> +<file2 name="log/heads2007"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 14:50:02 GMT +Server: test-server/fake +Content-Length: 42 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2007; charset=funny; option=strange +Funny-head: yesyes + +</file2> +<file3 name="log/stdout2007"> +</file3> +<file4 name="log/stderr2007"> +Metalink: parsing (file://%PWD/log/test2007.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2007.metalink) OK +Metalink: fetching (log/download2007) from (http://%HOSTIP:%HTTPPORT/2007)... +Metalink: fetching (log/download2007) from (http://%HOSTIP:%HTTPPORT/2007) OK +Metalink: validating (log/download2007)... +Metalink: validating (log/download2007) [sha-256] OK +</file4> +<stripfile4> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile4> +</verify> +</testcase> diff --git a/tests/data/test2008 b/tests/data/test2008 new file mode 100644 index 000000000..584379260 --- /dev/null +++ b/tests/data/test2008 @@ -0,0 +1,105 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 15:23:48 GMT +Server: test-server/fake +Content-Length: 43 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2008; charset=funny; option=strange +Funny-head: yesyes + +Some stuff delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<features> +file +Metalink +</features> +<server> +http +</server> + <name> +Metalink local XML file, HTTP resource, using -o fname -D file + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2008.metalink -o log/outfile2008 -D log/heads2008 +</command> +# local metalink file written before test command runs +<file name="log/test2008.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2008"> + <verification> + <hash type="md5">we-only-check-the-strongest-hash-provided</hash> + <hash type="sha256">711b1b566b536c5baae9b36f2f5c1830a7c8ff126d1afa2febc5b59f8d0aab54</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2008</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2008 log/name2008 log/outfile2008 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2008 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2008"> +Some stuff delivered from an HTTP resource +</file1> +<file2 name="log/heads2008"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 15:23:48 GMT +Server: test-server/fake +Content-Length: 43 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2008; charset=funny; option=strange +Funny-head: yesyes + +</file2> +<file3 name="log/stdout2008"> +</file3> +<file4 name="log/stderr2008"> +Metalink: parsing (file://%PWD/log/test2008.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2008.metalink) OK +Metalink: fetching (log/download2008) from (http://%HOSTIP:%HTTPPORT/2008)... +Metalink: fetching (log/download2008) from (http://%HOSTIP:%HTTPPORT/2008) OK +Metalink: validating (log/download2008)... +Metalink: validating (log/download2008) [sha-256] OK +</file4> +<stripfile4> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile4> +</verify> +</testcase> diff --git a/tests/data/test2009 b/tests/data/test2009 new file mode 100644 index 000000000..84482ce89 --- /dev/null +++ b/tests/data/test2009 @@ -0,0 +1,106 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +-J +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 16:27:17 GMT +Server: test-server/fake +Content-Length: 46 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2009; charset=funny; option=strange +Funny-head: yesyes + +Some contents delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<features> +file +Metalink +</features> +<server> +http +</server> + <name> +Metalink local XML file, HTTP resource, using -o fname -J -D file + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2009.metalink -J -o log/outfile2009 -D log/heads2009 +</command> +# local metalink file written before test command runs +<file name="log/test2009.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2009"> + <verification> + <hash type="md5">we-only-check-the-strongest-hash-provided</hash> + <hash type="sha256">e4c5b83384ba7d5f8e201d61747a14f29baacd7dfadce0fbd56661db4bba72b2</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2009</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2009 log/name2009 log/outfile2009 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2009 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2009"> +Some contents delivered from an HTTP resource +</file1> +<file2 name="log/heads2009"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 16:27:17 GMT +Server: test-server/fake +Content-Length: 46 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2009; charset=funny; option=strange +Funny-head: yesyes + +</file2> +<file3 name="log/stdout2009"> +</file3> +<file4 name="log/stderr2009"> +Metalink: parsing (file://%PWD/log/test2009.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2009.metalink) OK +Metalink: fetching (log/download2009) from (http://%HOSTIP:%HTTPPORT/2009)... +Metalink: fetching (log/download2009) from (http://%HOSTIP:%HTTPPORT/2009) OK +Metalink: validating (log/download2009)... +Metalink: validating (log/download2009) [sha-256] OK +</file4> +<stripfile4> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile4> +</verify> +</testcase> diff --git a/tests/data/test201 b/tests/data/test201 new file mode 100644 index 000000000..eb2422418 --- /dev/null +++ b/tests/data/test201 @@ -0,0 +1,27 @@ +<testcase> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +missing file:// file + </name> + <command> +file://localhost/%PWD/log/non-existant-file.txt +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +37 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test2010 b/tests/data/test2010 new file mode 100644 index 000000000..b8b3ddcc2 --- /dev/null +++ b/tests/data/test2010 @@ -0,0 +1,105 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 17:37:27 GMT +Server: test-server/fake +Content-Length: 41 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2010; charset=funny; option=strange +Funny-head: yesyes + +Contents delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<features> +file +Metalink +</features> +<server> +http +</server> + <name> +Metalink local XML file, HTTP resource, using -o fname -i -D file + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2010.metalink -i -o log/outfile2010 -D log/heads2010 +</command> +# local metalink file written before test command runs +<file name="log/test2010.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2010"> + <verification> + <hash type="md5">we-only-check-the-strongest-hash-provided</hash> + <hash type="sha256">19dcb4e2a99b9cd02c30b1ed6c55869b7ef8cda9f985648909c48a6dbb54356c</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2010</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2010 log/name2010 log/outfile2010 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2010 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2010"> +Contents delivered from an HTTP resource +</file1> +<file2 name="log/heads2010"> +HTTP/1.1 200 OK +Date: Thu, 21 Jun 2012 17:37:27 GMT +Server: test-server/fake +Content-Length: 41 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2010; charset=funny; option=strange +Funny-head: yesyes + +</file2> +<file3 name="log/stdout2010"> +</file3> +<file4 name="log/stderr2010"> +Metalink: parsing (file://%PWD/log/test2010.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2010.metalink) OK +Metalink: fetching (log/download2010) from (http://%HOSTIP:%HTTPPORT/2010)... +Metalink: fetching (log/download2010) from (http://%HOSTIP:%HTTPPORT/2010) OK +Metalink: validating (log/download2010)... +Metalink: validating (log/download2010) [sha-256] OK +</file4> +<stripfile4> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile4> +</verify> +</testcase> diff --git a/tests/data/test2011 b/tests/data/test2011 new file mode 100644 index 000000000..46785cf94 --- /dev/null +++ b/tests/data/test2011 @@ -0,0 +1,93 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 37 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2011; charset=funny; option=strange +Funny-head: yesyes + +Data delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, HTTP resource, hash mismatch + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2011.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2011.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2011"> + <verification> + <hash type="sha256">badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadb</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2011</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2011 log/name2011 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2011 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2011"> +Data delivered from an HTTP resource +</file1> +<file2 name="log/stdout2011"> +</file2> +<file3 name="log/stderr2011"> +Metalink: parsing (file://%PWD/log/test2011.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2011.metalink) OK +Metalink: fetching (log/download2011) from (http://%HOSTIP:%HTTPPORT/2011)... +Metalink: fetching (log/download2011) from (http://%HOSTIP:%HTTPPORT/2011) OK +Metalink: validating (log/download2011)... +Metalink: validating (log/download2011) [sha-256] FAILED (digest mismatch) +</file3> +<stripfile3> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile3> +</verify> +</testcase> diff --git a/tests/data/test2012 b/tests/data/test2012 new file mode 100644 index 000000000..59c042d12 --- /dev/null +++ b/tests/data/test2012 @@ -0,0 +1,92 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 46 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2012; charset=funny; option=strange +Funny-head: yesyes + +Some contents delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, HTTP resource, without hash + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2012.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2012.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2012"> + <verification> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2012</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2012 log/name2012 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /2012 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file1 name="log/download2012"> +Some contents delivered from an HTTP resource +</file1> +<file2 name="log/stdout2012"> +</file2> +<file3 name="log/stderr2012"> +Metalink: parsing (file://%PWD/log/test2012.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2012.metalink) WARNING (digest missing) +Metalink: fetching (log/download2012) from (http://%HOSTIP:%HTTPPORT/2012)... +Metalink: fetching (log/download2012) from (http://%HOSTIP:%HTTPPORT/2012) OK +Metalink: validating (log/download2012)... +Metalink: validating (log/download2012) FAILED (digest missing) +</file3> +<stripfile3> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile3> +</verify> +</testcase> diff --git a/tests/data/test2013 b/tests/data/test2013 new file mode 100644 index 000000000..60e85f3ea --- /dev/null +++ b/tests/data/test2013 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2013; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX absolute path + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2013.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2013.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="/tmp/download2013"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2013</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2013 log/name2013 /tmp/download2013 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2013"> +</file1> +<file2 name="log/stderr2013"> +Metalink: parsing (file://%PWD/log/test2013.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2013.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2013.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2014 b/tests/data/test2014 new file mode 100644 index 000000000..01dc8b31b --- /dev/null +++ b/tests/data/test2014 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2014; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX path relative to current + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2014.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2014.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="./log/download2014"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2014</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2014 log/name2014 log/download2014 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2014"> +</file1> +<file2 name="log/stderr2014"> +Metalink: parsing (file://%PWD/log/test2014.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2014.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2014.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2015 b/tests/data/test2015 new file mode 100644 index 000000000..e4d09d50e --- /dev/null +++ b/tests/data/test2015 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2015; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX path relative to upper + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2015.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2015.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="../tests/log/download2015"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2015</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2015 log/name2015 log/download2015 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2015"> +</file1> +<file2 name="log/stderr2015"> +Metalink: parsing (file://%PWD/log/test2015.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2015.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2015.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2016 b/tests/data/test2016 new file mode 100644 index 000000000..fbd6cd5d6 --- /dev/null +++ b/tests/data/test2016 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2016; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX path traversal + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2016.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2016.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/../log/download2016"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2016</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2016 log/name2016 log/download2016 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2016"> +</file1> +<file2 name="log/stderr2016"> +Metalink: parsing (file://%PWD/log/test2016.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2016.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2016.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2017 b/tests/data/test2017 new file mode 100644 index 000000000..52df14e38 --- /dev/null +++ b/tests/data/test2017 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2017; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX home path traversal + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2017.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2017.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="~/download2017"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2017</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2017 log/name2017 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2017"> +</file1> +<file2 name="log/stderr2017"> +Metalink: parsing (file://%PWD/log/test2017.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2017.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2017.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2018 b/tests/data/test2018 new file mode 100644 index 000000000..b76233e1a --- /dev/null +++ b/tests/data/test2018 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2018; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX questionable file name I + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2018.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2018.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/.download2018"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2018</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2018 log/name2018 log/.download2018 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2018"> +</file1> +<file2 name="log/stderr2018"> +Metalink: parsing (file://%PWD/log/test2018.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2018.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2018.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2019 b/tests/data/test2019 new file mode 100644 index 000000000..cd098040b --- /dev/null +++ b/tests/data/test2019 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2019; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX questionable file name II + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2019.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2019.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="."> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2019</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2019 log/name2019 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2019"> +</file1> +<file2 name="log/stderr2019"> +Metalink: parsing (file://%PWD/log/test2019.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2019.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2019.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test202 b/tests/data/test202 new file mode 100644 index 000000000..517847064 --- /dev/null +++ b/tests/data/test202 @@ -0,0 +1,31 @@ +<testcase> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +two file:// URLs to stdout + </name> + <command> +file://localhost/%PWD/log/test202.txt FILE://localhost/%PWD/log/test202.txt +</command> +<file name="log/test202.txt"> +contents in a single file +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout> +contents in a single file +contents in a single file +</stdout> +</verify> +</testcase> diff --git a/tests/data/test2020 b/tests/data/test2020 new file mode 100644 index 000000000..f89600b64 --- /dev/null +++ b/tests/data/test2020 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2020; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX questionable file name III + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2020.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2020.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name=".."> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2020</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2020 log/name2020 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2020"> +</file1> +<file2 name="log/stderr2020"> +Metalink: parsing (file://%PWD/log/test2020.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2020.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2020.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2021 b/tests/data/test2021 new file mode 100644 index 000000000..133eb1678 --- /dev/null +++ b/tests/data/test2021 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2021; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX questionable file name IV + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2021.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2021.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2021 >/dev/null"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2021</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2021 log/name2021 log/download2021 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2021"> +</file1> +<file2 name="log/stderr2021"> +Metalink: parsing (file://%PWD/log/test2021.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2021.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2021.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2022 b/tests/data/test2022 new file mode 100644 index 000000000..8cb0df520 --- /dev/null +++ b/tests/data/test2022 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +Metalink +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Wed, 20 Jun 2012 14:49:00 GMT +Server: test-server/fake +Content-Length: 56 +Connection: close +Content-Type: text/html +Content-Disposition: filename=name2022; charset=funny; option=strange +Funny-head: yesyes + +Data that should not be delivered from an HTTP resource +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +file +Metalink +</features> + <name> +Metalink local XML file, attempt UNIX questionable file name V + </name> +<command option="no-output,no-include"> +--metalink file://%PWD/log/test2022.metalink +</command> +# local metalink file written before test command runs +<file name="log/test2022.metalink"> +<?xml version="1.0" encoding="utf-8"?> +<metalink version="3.0" xmlns="http://www.metalinker.org/"> + <files> + <file name="log/download2022 |/dev/null"> + <verification> + <hash type="sha256">c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82</hash> + </verification> + <resources maxconnections="1"> + <url type="http" preference="90">http://%HOSTIP:%HTTPPORT/2022</url> + </resources> + </file> + </files> +</metalink> +</file> +<postcheck> +perl %SRCDIR/libtest/notexists.pl log/2022 log/name2022 log/download2022 +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file1 name="log/stdout2022"> +</file1> +<file2 name="log/stderr2022"> +Metalink: parsing (file://%PWD/log/test2022.metalink) metalink/XML... +Metalink: parsing (file://%PWD/log/test2022.metalink) WARNING (missing or invalid file name) +Metalink: parsing (file://%PWD/log/test2022.metalink) FAILED +</file2> +<stripfile2> +$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) +</stripfile2> +</verify> +</testcase> diff --git a/tests/data/test2023 b/tests/data/test2023 new file mode 100644 index 000000000..9b04ff3dd --- /dev/null +++ b/tests/data/test2023 @@ -0,0 +1,162 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +</keywords> +</info> +# Server-side +<reply> + +<!-- First request has Basic auth, wrong password --> +<data100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data100> + +<!-- Second request has Basic auth, right password --> +<data200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data200> + +<!-- Third request has Basic auth, wrong password --> +<data300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data300> + +<!-- Fourth request has Basic auth, wrong password --> +<data400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data400> + +<!-- Fifth request has Basic auth, right password --> +<data500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data500> + +<datacheck> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Basic) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2023 basic basic +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20230100 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20230200 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20230300 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20230400 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20230500 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2024 b/tests/data/test2024 new file mode 100644 index 000000000..1fbb2047b --- /dev/null +++ b/tests/data/test2024 @@ -0,0 +1,172 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Basic and Digest headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- First request has Basic auth, wrong password --> +<data100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data100> + +<!-- Second request has Digest auth, right password --> +<data1200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1200> + +<!-- Third request has Basic auth, wrong password --> +<data300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data300> + +<!-- Fourth request has Digest auth, wrong password --> +<data1400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data1400> + +<!-- Fifth request has Digest auth, right password --> +<data1500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1500> + +<datacheck> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Basic switching to Digest) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2024 basic digest +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20240100 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20240200 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20240200", response="ed646c565f79e2dd9fa37cb5a621213c"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20240300 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20240400 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20240400", response="9741ced8caacc6124770187b36f007c5"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20240500 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20240500", response="5bc77ec8c2d443b27a1b55f1fd8fbb13"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2025 b/tests/data/test2025 new file mode 100644 index 000000000..4c8df18ad --- /dev/null +++ b/tests/data/test2025 @@ -0,0 +1,271 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Basic and NTLM headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- First request has Basic auth, wrong password --> +<data100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data100> + +<!-- Second request has NTLM auth, right password --> +<data200> +HTTP/1.1 401 Need Basic or NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data200> + +<data1201> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1201> + +<data1202> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1202> + +<!-- Third request has Basic auth, wrong password --> +<data300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data300> + +<!-- Fourth request has NTLM auth, wrong password --> +<data400> +HTTP/1.1 401 Need Basic or NTLM auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data400> + +<data1401> +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1401> + +<data1402> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data1402> + +<!-- Fifth request has NTLM auth, right password --> +<data500> +HTTP/1.1 401 Need Basic or NTLM auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data500> + +<data1501> +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1501> + +<data1502> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1502> + +<datacheck> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Basic switching to NTLM) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2025 basic ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20250100 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250300 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20250500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2026 b/tests/data/test2026 new file mode 100644 index 000000000..c940b6f94 --- /dev/null +++ b/tests/data/test2026 @@ -0,0 +1,216 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Basic and Digest headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- First request has Digest auth, wrong password --> +<data100> +HTTP/1.1 401 Need Basic or Digest auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is not the real page! +</data100> + +<data1100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+
+This is a bad password page! +</data1100> + +<!-- Second request has Basic auth, right password --> +<data200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data200> + +<!-- Third request has Digest auth, wrong password --> +<data300> +HTTP/1.1 401 Need Basic or Digest auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is not the real page! +</data300> + +<data1300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+
+This is a bad password page! +</data1300> + +<!-- Fourth request has Basic auth, wrong password --> +<data400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data400> + +<!-- Fifth request has Basic auth, right password --> +<data500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data500> + +<datacheck> +HTTP/1.1 401 Need Basic or Digest auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+WWW-Authenticate: Basic realm="testrealm"
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Need Basic or Digest auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+WWW-Authenticate: Basic realm="testrealm"
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Digest switching to Basic) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2026 digest basic +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20260100 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260100 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20260100", response="5f992a2e761ab926256419f7c685f85b"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260200 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260300 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260300 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20260300", response="132242e602882251929be93228c830ae"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260400 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20260500 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2027 b/tests/data/test2027 new file mode 100644 index 000000000..c84e24b03 --- /dev/null +++ b/tests/data/test2027 @@ -0,0 +1,244 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> + +<!-- + + Explanation for the duplicate 400 requests: + + libcurl doesn't detect that a given Digest password is wrong already on the + first 401 response (as the data400 gives). libcurl will instead consider the + new response just as a duplicate and it sends another and detects the auth + problem on the second 401 response! + +--> + +<!-- First request has Digest auth, wrong password --> +<data100> +HTTP/1.1 401 Need Digest auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+
+This is not the real page! +</data100> + +<data1100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+
+This is a bad password page! +</data1100> + +<!-- Second request has Digest auth, right password --> +<data200> +HTTP/1.1 401 Need Digest auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+
+This is not the real page! +</data200> + +<data1200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1200> + +<!-- Third request has Digest auth, wrong password --> +<data300> +HTTP/1.1 401 Need Digest auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+
+This is not the real page! +</data300> + +<data1300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +</data1300> + +<!-- Fourth request has Digest auth, wrong password --> +<data400> +HTTP/1.1 401 Need Digest auth (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="6"
+
+This is not the real page! +</data400> + +<data1400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +</data1400> + +<!-- Fifth request has Digest auth, right password --> +<data1500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1500> + +<datacheck> +HTTP/1.1 401 Need Digest auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Need Digest auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Digest) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2027 digest digest +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20270100 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270100 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20270100", response="f7fd60eefaff5225971bf9b3d80d6ba6"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270200 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20270200", response="785ca3ef511999f7e9c178195f5b388c"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270300 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270300 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20270300", response="4c735d2360fd6848e7cb32a11ae3612b"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270400 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270400 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20270500 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20270500", response="8ef4d935fd964a46c3965c0863b52cf1"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2028 b/tests/data/test2028 new file mode 100644 index 000000000..793ad3e36 --- /dev/null +++ b/tests/data/test2028 @@ -0,0 +1,315 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Digest and NTLM headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- First request has Digest auth, wrong password --> +<data100> +HTTP/1.1 401 Need Digest or NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+
+This is not the real page! +</data100> + +<data1100> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1100> + +<!-- Second request has NTLM auth, right password --> +<data200> +HTTP/1.1 401 Need Digest or NTLM auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+
+This is not the real page! +</data200> + +<data1201> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1201> + +<data1202> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1202> + +<!-- Third request has Digest auth, wrong password --> +<data300> +HTTP/1.1 401 Need Digest or NTLM auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data300> + +<data1300> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +</data1300> + +<!-- Fourth request has NTLM auth, wrong password --> +<data400> +HTTP/1.1 401 Need Digest or NTLM auth (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="6"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data400> + +<data1401> +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1401> + +<data1402> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +</data1402> + +<!-- Fifth request has NTLM auth, right password --> +<data500> +HTTP/1.1 401 Need Digest or NTLM auth (5)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="8"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data500> + +<data1501> +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1501> + +<data1502> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1502> + +<datacheck> +HTTP/1.1 401 Need Digest or NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 Need Digest or NTLM auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+WWW-Authenticate: NTLM
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (Digest switching to NTLM) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2028 digest ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20280100 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280100 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20280100", response="53c80666f5e3a4a55f92a66aaf0078bb"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280300 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280300 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20280300", response="1aa5d90da9803ca12d04b24e0f19476e"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20280500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2029 b/tests/data/test2029 new file mode 100644 index 000000000..7b8a5e2c7 --- /dev/null +++ b/tests/data/test2029 @@ -0,0 +1,239 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Basic and NTLM headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- First request has NTLM auth, wrong password --> +<data100> +HTTP/1.1 401 Need Basic or NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is not the real page! +</data100> + +<data1101> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1101> + +<data1102> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1102> + +<!-- Second request has Basic auth, right password --> +<data200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data200> + +<!-- Third request has NTLM auth, wrong password --> +<data300> +HTTP/1.1 401 Need Basic or NTLM auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is not the real page! +</data300> + +<data1301> +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1301> + +<data1302> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1302> + +<!-- Fourth request has Basic auth, wrong password --> +<data400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +</data400> + +<!-- Fifth request has Basic auth, right password --> +<data500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data500> + +<datacheck> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (NTLM switching to Basic) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2029 ntlm basic +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20290100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290200 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290400 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20290500 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test203 b/tests/data/test203 new file mode 100644 index 000000000..c7cdce56e --- /dev/null +++ b/tests/data/test203 @@ -0,0 +1,36 @@ +<testcase> +# Server-side +<reply> +<data> +foo + bar +bar + foo +moo +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +file:/path URL with a single slash + </name> + <command> +file:%PWD/log/test203.txt +</command> +<file name="log/test203.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +</verify> +</testcase> diff --git a/tests/data/test2030 b/tests/data/test2030 new file mode 100644 index 000000000..8de81d094 --- /dev/null +++ b/tests/data/test2030 @@ -0,0 +1,296 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Alternate the order that Digest and NTLM headers appear in responses to +ensure that the order doesn't matter. --> + +<!-- + + Explanation for the duplicate 400 requests: + + libcurl doesn't detect that a given Digest password is wrong already on the + first 401 response (as the data400 gives). libcurl will instead consider the + new response just as a duplicate and it sends another and detects the auth + problem on the second 401 response! + +--> + + +<!-- First request has NTLM auth, wrong password --> +<data100> +HTTP/1.1 401 Need Digest or NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="1"
+
+This is not the real page! +</data100> + +<data1101> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1101> + +<data1102> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1102> + +<!-- Second request has Digest auth, right password --> +<data200> +HTTP/1.1 401 Need Digest or NTLM auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="3"
+
+This is not the real page! +</data200> + +<data1200> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1200> + +<!-- Third request has NTLM auth, wrong password --> +<data300> +HTTP/1.1 401 Need Digest or NTLM auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="4"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data300> + +<data1301> +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1301> + +<data1302> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +</data1302> + +<!-- Fourth request has Digest auth, wrong password --> +<data400> +HTTP/1.1 401 Need Digest or NTLM auth (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="6"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data400> + +<data1400> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +</data1400> + +<!-- Fifth request has Digest auth, right password --> +<data500> +HTTP/1.1 401 Need Digest or NTLM auth (5)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: Digest realm="testrealm", nonce="8"
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data500> + +<data1500> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1500> + +<datacheck> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Digest realm="testrealm", nonce="2"
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="5"
+
+This is a bad password page! +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+WWW-Authenticate: Digest realm="testrealm", nonce="7"
+
+This is a bad password page! +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (NTLM switching to Digest) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2030 ntlm digest +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20300100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300200 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20300200", response="2f2d784ba53a0a307758a90e98d25c27"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300400 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300400 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20300500 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20300500", response="198757e61163a779cf24ed4c49c1ad7d"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2031 b/tests/data/test2031 new file mode 100644 index 000000000..19f75335c --- /dev/null +++ b/tests/data/test2031 @@ -0,0 +1,320 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- First request has NTLM auth, wrong password --> +<data100> +HTTP/1.1 401 Need NTLM auth
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data100> + +<data1101> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1101> + +<data1102> +HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1102> + +<!-- Second request has NTML auth, right password --> +<data200> +HTTP/1.1 401 Need NTLM auth (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data200> + +<data1201> +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1201> + +<data1202> +HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1202> + +<!-- Third request has NTLM auth, wrong password --> +<data300> +HTTP/1.1 401 Need NTLM auth (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data300> + +<data1301> +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1301> + +<data1302> +HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1302> + +<!-- Fourth request has NTLM auth, wrong password --> +<data400> +HTTP/1.1 401 Need NTLM auth (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data400> + +<data1401> +HTTP/1.1 401 NTLM intermediate (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1401> + +<data1402> +HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +</data1402> + +<!-- Fifth request has NTLM auth, right password --> +<data500> +HTTP/1.1 401 Need NTLM auth (5)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 27
+WWW-Authenticate: NTLM
+
+This is not the real page! +</data500> + +<data1501> +HTTP/1.1 401 NTLM intermediate (5)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+This is still not the real page! +</data1501> + +<data1502> +HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1502> + +<datacheck> +HTTP/1.1 401 NTLM intermediate
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +HTTP/1.1 401 NTLM intermediate (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (4)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 401 Sorry wrong password (3)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: NTLM
+
+This is a bad password page! +HTTP/1.1 401 NTLM intermediate (5)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 33
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg=
+
+HTTP/1.1 200 Things are fine in server land (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libauthretry +</tool> + + <name> +HTTP authorization retry (NTLM) + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2031 ntlm ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20310100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310300 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310400 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /20310500 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test2032 b/tests/data/test2032 new file mode 100644 index 000000000..02aca8180 --- /dev/null +++ b/tests/data/test2032 @@ -0,0 +1,146 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- Basic auth --> +<data100> +HTTP/1.1 401 Need Basic or NTLM auth +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 29 +WWW-Authenticate: NTLM +WWW-Authenticate: Basic realm="testrealm" + +This is a bad password page! +</data100> + +<!-- NTML auth --> +<data200> +HTTP/1.1 401 Need Basic or NTLM auth (2) +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 27 +WWW-Authenticate: NTLM +WWW-Authenticate: Basic realm="testrealm" + +This is not the real page! +</data200> + +<data1201> +HTTP/1.1 401 NTLM intermediate (2) +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 33 +WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= + +This is still not the real page! +</data1201> + +<data1202> +HTTP/1.1 200 Things are fine in server land +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 32 + +Finally, this is the real page! +</data1202> + +<datacheck> +HTTP/1.1 401 Need Basic or NTLM auth +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 29 +WWW-Authenticate: NTLM +WWW-Authenticate: Basic realm="testrealm" + +This is a bad password page! +HTTP/1.1 401 Need Basic or NTLM auth +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 29 +WWW-Authenticate: NTLM +WWW-Authenticate: Basic realm="testrealm" + +This is a bad password page! +HTTP/1.1 401 NTLM intermediate (2) +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 33 +WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= + +HTTP/1.1 200 Things are fine in server land +Server: Microsoft-IIS/5.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 32 + +Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> +<tool> +libntlmconnect +</tool> + + <name> +NTLM connection mapping + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/2032 +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /20320100 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: 127.0.0.1:8990
+Accept: */*
+
+GET /20320100 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: 127.0.0.1:8990
+Accept: */*
+
+GET /20320200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: 127.0.0.1:8990
+Accept: */*
+
+GET /20320200 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=
+Host: 127.0.0.1:8990
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test204 b/tests/data/test204 new file mode 100644 index 000000000..c4e219e98 --- /dev/null +++ b/tests/data/test204 @@ -0,0 +1,34 @@ +<testcase> +# no Server-side + +# Client-side +<client> +<server> +file +</server> + <name> +"upload" with file:// + </name> + <command> +file://localhost/%PWD/log/result204.txt -T log/upload204.txt +</command> +<file name="log/upload204.txt"> +data +in +file +to +write +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<file name="log/result204.txt"> +data +in +file +to +write +</file> +</verify> +</testcase> diff --git a/tests/data/test205 b/tests/data/test205 new file mode 100644 index 000000000..edcf7fece --- /dev/null +++ b/tests/data/test205 @@ -0,0 +1,31 @@ +<testcase> +# no Server-side + +# Client-side +<client> +<server> +file +</server> + <name> +"upload" with file:// + </name> + <command> +file://localhost/%PWD/log/nonexisting/result205.txt -T log/upload205.txt +</command> +<file name="log/upload205.txt"> +data +in +file +to +write +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# 23 => CURLE_WRITE_ERROR +<errorcode> +23 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test206 b/tests/data/test206 new file mode 100644 index 000000000..9c1e0248d --- /dev/null +++ b/tests/data/test206 @@ -0,0 +1,105 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +proxytunnel +HTTP proxy Digest auth +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +connection-monitor +</servercmd> + +# 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"
+Content-Length: 33
+
+And you should ignore this data. +</data> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Content-Length: 33
+
+HTTP/1.1 200 OK swsbounce
+Server: no +
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP proxy CONNECT auth Digest + </name> + <command> +http://test.remote.haxx.se:206/path/2060002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.haxx.se:206 HTTP/1.1
+Host: test.remote.haxx.se:206
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:206 HTTP/1.1
+Host: test.remote.haxx.se:206
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:206", response="676e0836f3e1c5b31bf29770ef9d8224"
+Proxy-Connection: Keep-Alive
+
+GET /path/2060002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:206
+Accept: */*
+
+[DISCONNECT] +</protocol> +</verify> +</testcase> diff --git a/tests/data/test207 b/tests/data/test207 new file mode 100644 index 000000000..85f9af6ad --- /dev/null +++ b/tests/data/test207 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 funky chunky! swsclose +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +41
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
+</data> +<datacheck> +HTTP/1.1 200 funky chunky! swsclose +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with chunked Transfer-Encoding closed pre-maturely + </name> + <command> +http://%HOSTIP:%HTTPPORT/207 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /207 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +# curl: (18) transfer closed with outstanding read data remaining +# 18 == CURLE_PARTIAL_FILE +<errorcode> +18 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test208 b/tests/data/test208 new file mode 100644 index 000000000..a7a99b900 --- /dev/null +++ b/tests/data/test208 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +HTTP PUT +HTTP proxy +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +HTTP PUT to a FTP URL with username+password - over HTTP proxy + </name> + <command> +-x http://%HOSTIP:%HTTPPORT ftp://daniel:mysecret@host.com/we/want/208 -T log/test208.txt +</command> +<file name="log/test208.txt"> +Weird + file + to + upload +for + testing +the + PUT + feature +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT ftp://daniel:mysecret@host.com/we/want/208 HTTP/1.1
+Authorization: Basic ZGFuaWVsOm15c2VjcmV0
+Host: host.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 78
+Expect: 100-continue
+
+Weird + file + to + upload +for + testing +the + PUT + feature +</protocol> +</verify> +</testcase> diff --git a/tests/data/test209 b/tests/data/test209 new file mode 100644 index 000000000..b248faf9f --- /dev/null +++ b/tests/data/test209 @@ -0,0 +1,119 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+And you should ignore this data. +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP proxy CONNECT auth NTLM + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com:209/path/2090002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.example.com:209 HTTP/1.1
+Host: test.remote.example.com:209
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:209 HTTP/1.1
+Host: test.remote.example.com:209
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/2090002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.example.com:209
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test21 b/tests/data/test21 new file mode 100644 index 000000000..8e4e847e0 --- /dev/null +++ b/tests/data/test21 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +FAILURE +multiple HTTP requests +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +use curl with multiple request methods + </name> + <command> +-I -d FOOO -F moo=moo localhost +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +2 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test210 b/tests/data/test210 new file mode 100644 index 000000000..e90456754 --- /dev/null +++ b/tests/data/test210 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data> +data blobb +</data> + +# data is sent to stdout +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +Get two FTP files from the same remote dir: no second CWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/210 ftp://%HOSTIP:%FTPPORT/a/path/210 +</command> +<stdout> +data blobb +data blobb +</stdout> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPSV
+TYPE I
+SIZE 210
+RETR 210
+EPSV
+SIZE 210
+RETR 210
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test211 b/tests/data/test211 new file mode 100644 index 000000000..96d0573f2 --- /dev/null +++ b/tests/data/test211 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data> +data blobb +</data> +<servercmd> +REPLY EPSV 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +Get two FTP files with no remote EPSV support + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/211 ftp://%HOSTIP:%FTPPORT/a/path/211 +</command> +<stdout> +data blobb +data blobb +</stdout> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPSV
+PASV
+TYPE I
+SIZE 211
+RETR 211
+PASV
+SIZE 211
+RETR 211
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test212 b/tests/data/test212 new file mode 100644 index 000000000..8daed5538 --- /dev/null +++ b/tests/data/test212 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<data> +data blobb +</data> +<servercmd> +REPLY EPRT 500 no such command +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# EPRT is only sent when IPv6 is enabled +<features> +ipv6 +</features> + <name> +Get two FTP files with no remote EPRT support + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/212 ftp://%HOSTIP:%FTPPORT/a/path/212 -P - +</command> +<stdout> +data blobb +data blobb +</stdout> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip the addresses and port number but leave the rest +<strippart> +s/^(EPRT \|1\|)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|/$1/ +s/^(PORT )\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPRT |1|
+PORT
+TYPE I
+SIZE 212
+RETR 212
+PORT
+SIZE 212
+RETR 212
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test213 b/tests/data/test213 new file mode 100644 index 000000000..55b20b0d8 --- /dev/null +++ b/tests/data/test213 @@ -0,0 +1,122 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+And you should ignore this data. +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP 1.0 proxy CONNECT auth NTLM and then POST + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com:213/path/2130002 --proxy1.0 http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol nonewline="yes"> +CONNECT test.remote.example.com:213 HTTP/1.0
+Host: test.remote.example.com:213
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:213 HTTP/1.0
+Host: test.remote.example.com:213
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+POST /path/2130002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.example.com:213
+Accept: */*
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit +</protocol> +</verify> +</testcase> diff --git a/tests/data/test214 b/tests/data/test214 new file mode 100644 index 000000000..a9b8fcd07 --- /dev/null +++ b/tests/data/test214 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP URL with escaped { and } + </name> +<command> +"http://%HOSTIP:%HTTPPORT/\{\}\/214" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /{}\/214 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test215 b/tests/data/test215 new file mode 100644 index 000000000..8770efbc9 --- /dev/null +++ b/tests/data/test215 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> + +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +Get two FTP dir listings from the same remote dir: no second CWD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/a/path/215/ ftp://%HOSTIP:%FTPPORT/a/path/215/ +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+CWD 215
+EPSV
+TYPE A
+LIST
+EPSV
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test216 b/tests/data/test216 new file mode 100644 index 000000000..0c4de0a63 --- /dev/null +++ b/tests/data/test216 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP upload two files to the same dir + </name> + <command> +-T log/upload.216 ftp://%HOSTIP:%FTPPORT/a/path/216/ -T log/upload.216 ftp://%HOSTIP:%FTPPORT/a/path/216/%2e%2eanotherup +</command> +<file name="log/upload.216"> +upload this file twice +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+CWD 216
+EPSV
+TYPE I
+STOR upload.216
+EPSV
+STOR ..anotherup
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test217 b/tests/data/test217 new file mode 100644 index 000000000..4b1bed9c9 --- /dev/null +++ b/tests/data/test217 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +proxytunnel +followlocation +--write-out +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data nocheck="yes"> +HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data. +</data> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP proxy CONNECT to proxy returning 405 + </name> + <command> +http://test.remote.example.com:217/path/2170002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel -w "%{http_code} %{http_connect}\n" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +CONNECT test.remote.example.com:217 HTTP/1.1
+Host: test.remote.example.com:217
+Proxy-Connection: Keep-Alive
+
+</protocol> +# CURLE_RECV_ERROR +<errorcode> +56 +</errorcode> +<stdout> +HTTP/1.1 405 Method Not Allowed swsclose
+
+000 405 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test218 b/tests/data/test218 new file mode 100644 index 000000000..c201e77a3 --- /dev/null +++ b/tests/data/test218 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT from a file but enforce chunked transfer-encoding + </name> + <command> + -T log/file218 -H "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/218 +</command> +<file name="log/file218"> +just some tiny teeny contents +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /218 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+1e
+just some tiny teeny contents +
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test22 b/tests/data/test22 new file mode 100644 index 000000000..2e8bdec62 --- /dev/null +++ b/tests/data/test22 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +long URL +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 27
+
+This is the proof it works +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +get HTTP with URL > 10000 bytes + </name> + <command> +%HOSTIP:%HTTPPORT/`perl -e "print \"a\" x 10000;"`/22 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/22 HTTP/1.1
+User-Agent: curl/7.4.2 (sparc-sun-solaris2.7) libcurl 7.4.2 (SSL 0.9.6)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test220 b/tests/data/test220 new file mode 100644 index 000000000..2fb0b8a6a --- /dev/null +++ b/tests/data/test220 @@ -0,0 +1,68 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBHWklQDQpDb250ZW50LUxlbmd0aDogNDQNCg0K +H4sICHmeq0EAA2xhbGFsYQDLycxLVTDkUsgB0UZcChCGMRcACgJxYBgAAAA= +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: GZIP
+Content-Length: 44
+
+line 1 + line 2 + line 3 +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET gzip compressed content + </name> + <command> +http://%HOSTIP:%HTTPPORT/220 --compressed +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /220 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test221 b/tests/data/test221 new file mode 100644 index 000000000..95edb4990 --- /dev/null +++ b/tests/data/test221 @@ -0,0 +1,71 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBnemlwDQpDb250ZW50LUxlbmd0aDogNDENCg0K +CHmeq0EAA2xhbGFsYQDLycxLVTDkUsgB0UZcChCGMRcACgJxYBgAAAA= +</data> + +# I removed the first three bytes of the gzip compressed contents + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: gzip
+Content-Length: 41
+
+</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET gzip compressed content with broken gzip header + </name> + <command> +http://%HOSTIP:%HTTPPORT/221 --compressed +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /221 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol> +<errorcode> +61 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test222 b/tests/data/test222 new file mode 100644 index 000000000..a4594869e --- /dev/null +++ b/tests/data/test222 @@ -0,0 +1,199 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBkZWZsYXRlDQpDb250ZW50LUxlbmd0aDogMTMw +NQ0KDQp4nNxY227jNhB9N5B/YP3UArZuthM5cLQoctkEzTbB2gW6TwYt0TYbSRRIyrk89Ns7lCiJ +sRyvd4O+BEhicuacw+EMSZOZfHpKYrQhXFCWnnVdy+kikoYsounqrHszvev7/mjcd7ufgs7kl4u7 +89m3+0uUcfYPCWU/pkICEE2/TWeXX1B3LWV2attLTsQ6IVhaKZH2AocPJI3sZdLXPNF3rKEVyagL +oltaQQehyqbaTW9Oo8A9dr2JbRhKRIQlmeMoIoAYj/2+4/c9FznDU8c99cYT2/AbhDxTH1HgOc6w +7zp910eOd+rBz0BTKsSrOFKckLlYMy6DMOdxHY5hb+OXeRwXcITTCMV00aYWEB0eEaGWOmdJUlJS +giRjtQDH/BktGUdhTEkq+4JGBP319RZJjlOxhIpaMItGyFDeGQyiAuFyBKVaqXBV3yWNiTjq5EJ1 +1BjiOZX4yUI3Eok8y0BfoOvZ7L5X/J320BW0jzpXRfvi5nzWQ7PL2z8v4fP24neAXd3cXvaK4T/f +3V9ffoU2DPBIYoiplOpnTMiebubQChl7oEQU2ijPYoYjGAKWWp6QqJl1D2VYiEfGI9WEyNI8WRT2 +6fT2qBMSLumShlBXMP1BOPiYKEOBajzBCMW0IBsZeyScREedxXOVpB6Sa/JmxquyWEed2RqoCMPv +gqZqMwlIbZ1qlWAGmw55zlEnxukqxysiihhIuqGcpQkMIEBHl9BYGxsqcUzl81yEjJNgdOIPrdHJ +xN6yb4EzwkOQDAaWe2xgK/MWGubzAHttbCALk17XLMtjzJuxjkdjiGEIy3nb0yJUA7oDy3dfEV6H +YjjKYJzRK7QRDsfFueFbI2di647pmYcsB13Prbza8ApTDuIPaowxgMgXIuQ0k3BEimCgTofXphIG +pU/D9Vzt5eCCLHEey4ltGksY1H9eHWAZlD3YeWhWJ6Wt1os9sVusRmzNEvK2ECxgyksVdXjaJkPr +1gKNply9HC4HYK2kaI3I4sU7XATAWkTRGpEXmh0uAmAtomiNSLiGPUZitjpcqqZowUaikeVZcrgg +gLWUojUiEVkcLgJgLaJojQgTT4eLAFiLKJpRLxGp8/IHalYSqrppurHMcw5pEyTQ67fqGoXZiB8o +yUZUxdgIQ0TdHA5XUWgtUxAbnYRyzvjhSiVea2myWdeEBVWtoFl6YgqHHKTgy83M/hudw+kBKaN5 +gm5Lx8SuEBqvvqfknJOY1Jlrmef6/hacWK5nwQXpDfcbbHWvOjl2/FGLWF2w2hx1L9p9cdoFLOdi +75rMBM5RAhNeMzmXa/iqhpy1TCUS5xJuMqIOqexX3dqgT2CcUhKjqSQpfMOvJrbpbFGgSrvr/u8C +ryKiimwgW3TOYhLcPaaE17jCVEVqm6FWvWoJqy94ThOaYmnOTnK4IRS1gYLWnZbX8473uQd7ufuc +ru/v5bp7x4WlsT/qvW73eLjPPd5L9sd7vc5etzv6TtzfCWx/ZIPW2OX9brv8sCYyeDLBQwyuo7VO +bXxG8jkjZ11OQngdKJt6SdWLssGZG9lRQ+1y7CTqewu4T4aqGDtdO5nG46xF3X64vcWVVKoNBXa4 +s6Nf9W3qt51aJbbeaQ3i7byx4t6G4/8vac5PZ2w4eGfG1Pvq4yfK9QYj9x2ZeoGn2MfP0sBzhifv +yNI1oUmE44+fqOFwNPDekaiwD0998TN5Miz6rK//KxR0/gMAAP//gjMRo2MAAAAA//8DAN04jtE= +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: deflate
+Content-Length: 1305
+
+<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE project-listing SYSTEM "http://freshmeat.net/backend/fm-projects-0.4.dtd"> +<project-listing> + <project> + <project_id>1612</project_id> + <date_added>1998-08-21 04:01:29</date_added> + <date_updated>2004-10-18 02:22:23</date_updated> + <projectname_short>curl</projectname_short> + <projectname_full>curl and libcurl</projectname_full> + <desc_short>Command line tool and library for client-side URL transfers.</desc_short> + <desc_full>curl and libcurl is a tool for transferring files
+using URL syntax. It supports HTTP, HTTPS, FTP,
+FTPS, DICT, TELNET, LDAP, FILE, and GOPHER, as
+well as HTTP-post, HTTP-put, cookies, FTP upload,
+resumed transfers, passwords, portnumbers, SSL
+certificates, Kerberos, and proxies. It is powered
+by libcurl, the client-side URL transfer library.
+There are bindings to libcurl for over 20
+languages and environments.
+</desc_full> + <vitality_score>5784.57</vitality_score> + <vitality_percent>3.16</vitality_percent> + <vitality_rank>169</vitality_rank> + <popularity_score>6594.54</popularity_score> + <popularity_percent>13.81</popularity_percent> + <popularity_rank>105</popularity_rank> + <rating>8.50</rating> + <rating_count>21</rating_count> + <rating_rank>183</rating_rank> + <subscriptions>323</subscriptions> + <branch_name>Default</branch_name> + <url_project_page>http://freshmeat.net/projects/curl/</url_project_page> + <url_homepage>http://freshmeat.net/redir/curl/1612/url_homepage/</url_homepage> + <url_tgz>http://freshmeat.net/redir/curl/1612/url_tgz/</url_tgz> + <url_bz2>http://freshmeat.net/redir/curl/1612/url_bz2/</url_bz2> + <url_zip>http://freshmeat.net/redir/curl/1612/url_zip/</url_zip> + <url_changelog>http://freshmeat.net/redir/curl/1612/url_changelog/</url_changelog> + <url_rpm>http://freshmeat.net/redir/curl/1612/url_rpm/</url_rpm> + <url_deb>http://freshmeat.net/redir/curl/1612/url_deb/</url_deb> + <url_osx>http://freshmeat.net/redir/curl/1612/url_osx/</url_osx> + <url_bsdport>http://freshmeat.net/redir/curl/1612/url_bsdport/</url_bsdport> + <url_purchase></url_purchase> + <url_cvs>http://freshmeat.net/redir/curl/1612/url_cvs/</url_cvs> + <url_list>http://freshmeat.net/redir/curl/1612/url_list/</url_list> + <url_mirror>http://freshmeat.net/redir/curl/1612/url_mirror/</url_mirror> + <url_demo></url_demo> + <license>MIT/X Consortium License</license> + <latest_release> + <latest_release_version>7.12.2</latest_release_version> + <latest_release_id>176085</latest_release_id> + <latest_release_date>2004-10-18 02:22:23</latest_release_date> + </latest_release> + <screenshot_thumb></screenshot_thumb> + <authors> + <author> + <author_name>Daniel Stenberg</author_name> + <author_url>http://freshmeat.net/~bagder/</author_url> + <author_role>Owner</author_role> + </author> + </authors> + <descriminators> + <trove_id>12</trove_id> + <trove_id>226</trove_id> + <trove_id>3</trove_id> + <trove_id>2</trove_id> + <trove_id>188</trove_id> + <trove_id>216</trove_id> + <trove_id>200</trove_id> + <trove_id>220</trove_id> + <trove_id>164</trove_id> + <trove_id>90</trove_id> + <trove_id>89</trove_id> + <trove_id>809</trove_id> + <trove_id>150</trove_id> + <trove_id>224</trove_id> + <trove_id>900</trove_id> + <trove_id>839</trove_id> + </descriminators> + <dependencies> + <dependency type="recommended"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>7464</dependency_branch_id> + <dependency_project_id>7464</dependency_project_id> + <dependency_project_title>OpenSSL (Default)</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>7443</dependency_project_id> + <dependency_project_title>OpenLDAP</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>12351</dependency_project_id> + <dependency_project_title>zlib</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>32047</dependency_project_id> + <dependency_project_title>Heimdal</dependency_project_title> + </dependency> + <dependency type="optional"> + <dependency_release_id>0</dependency_release_id> + <dependency_branch_id>0</dependency_branch_id> + <dependency_project_id>44532</dependency_project_id> + <dependency_project_title>c-ares</dependency_project_title> + </dependency> + </dependencies> + </project> +</project-listing> +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET deflate compressed content + </name> + <command> +http://%HOSTIP:%HTTPPORT/222 --compressed +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /222 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test223 b/tests/data/test223 new file mode 100644 index 000000000..196e78c80 --- /dev/null +++ b/tests/data/test223 @@ -0,0 +1,92 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +# this deflate chunk has three bytes removed from the beginning +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBkZWZsYXRlDQpDb250ZW50LUxlbmd0aDogMTMw +NQ0KDQpY227jNhB9N5B/YP3UArZuthM5cLQoctkEzTbB2gW6TwYt0TYbSRRIyrk89Ns7lCiJsRyv +d4O+BEhicuacw+EMSZOZfHpKYrQhXFCWnnVdy+kikoYsounqrHszvev7/mjcd7ufgs7kl4u789m3 ++0uUcfYPCWU/pkICEE2/TWeXX1B3LWV2attLTsQ6IVhaKZH2AocPJI3sZdLXPNF3rKEVyagLolta +QQehyqbaTW9Oo8A9dr2JbRhKRIQlmeMoIoAYj/2+4/c9FznDU8c99cYT2/AbhDxTH1HgOc6w7zp9 +10eOd+rBz0BTKsSrOFKckLlYMy6DMOdxHY5hb+OXeRwXcITTCMV00aYWEB0eEaGWOmdJUlJSgiRj +tQDH/BktGUdhTEkq+4JGBP319RZJjlOxhIpaMItGyFDeGQyiAuFyBKVaqXBV3yWNiTjq5EJ11Bji +OZX4yUI3Eok8y0BfoOvZ7L5X/J320BW0jzpXRfvi5nzWQ7PL2z8v4fP24neAXd3cXvaK4T/f3V9f +foU2DPBIYoiplOpnTMiebubQChl7oEQU2ijPYoYjGAKWWp6QqJl1D2VYiEfGI9WEyNI8WRT26fT2 +qBMSLumShlBXMP1BOPiYKEOBajzBCMW0IBsZeyScREedxXOVpB6Sa/JmxquyWEed2RqoCMPvgqZq +MwlIbZ1qlWAGmw55zlEnxukqxysiihhIuqGcpQkMIEBHl9BYGxsqcUzl81yEjJNgdOIPrdHJxN6y +b4EzwkOQDAaWe2xgK/MWGubzAHttbCALk17XLMtjzJuxjkdjiGEIy3nb0yJUA7oDy3dfEV6HYjjK +YJzRK7QRDsfFueFbI2di647pmYcsB13Prbza8ApTDuIPaowxgMgXIuQ0k3BEimCgTofXphIGpU/D +9Vzt5eCCLHEey4ltGksY1H9eHWAZlD3YeWhWJ6Wt1os9sVusRmzNEvK2ECxgyksVdXjaJkPr1gKN +ply9HC4HYK2kaI3I4sU7XATAWkTRGpEXmh0uAmAtomiNSLiGPUZitjpcqqZowUaikeVZcrgggLWU +ojUiEVkcLgJgLaJojQgTT4eLAFiLKJpRLxGp8/IHalYSqrppurHMcw5pEyTQ67fqGoXZiB8oyUZU +xdgIQ0TdHA5XUWgtUxAbnYRyzvjhSiVea2myWdeEBVWtoFl6YgqHHKTgy83M/hudw+kBKaN5gm5L +x8SuEBqvvqfknJOY1Jlrmef6/hacWK5nwQXpDfcbbHWvOjl2/FGLWF2w2hx1L9p9cdoFLOdi75rM +BM5RAhNeMzmXa/iqhpy1TCUS5xJuMqIOqexX3dqgT2CcUhKjqSQpfMOvJrbpbFGgSrvr/u8CryKi +imwgW3TOYhLcPaaE17jCVEVqm6FWvWoJqy94ThOaYmnOTnK4IRS1gYLWnZbX8473uQd7ufucru/v +5bp7x4WlsT/qvW73eLjPPd5L9sd7vc5etzv6TtzfCWx/ZIPW2OX9brv8sCYyeDLBQwyuo7VObXxG +8jkjZ11OQngdKJt6SdWLssGZG9lRQ+1y7CTqewu4T4aqGDtdO5nG46xF3X64vcWVVKoNBXa4s6Nf +9W3qt51aJbbeaQ3i7byx4t6G4/8vac5PZ2w4eGfG1Pvq4yfK9QYj9x2ZeoGn2MfP0sBzhifvyNI1 +oUmE44+fqOFwNPDekaiwD0998TN5Miz6rK//KxR0/gMAAP//gjMRo2MAAAAA//8DAN04jtE= +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: deflate
+Content-Length: 1305
+
+</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET deflate compressed content with broken deflate header + </name> + <command> +http://%HOSTIP:%HTTPPORT/223 --compressed +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /223 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol> +<errorcode> +61 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test224 b/tests/data/test224 new file mode 100644 index 000000000..1c8ad2380 --- /dev/null +++ b/tests/data/test224 @@ -0,0 +1,104 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +compressed +</keywords> +</info> +# +# Server-side +<reply> +<data base64="yes"> +SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy +dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg +UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K +VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J +U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBnemlwDQpDb250ZW50LUxlbmd0aDogMjE4Ng0K +DQofiwgcv7yrQQIDMAB0aGlzIGlzIGFuIGV4dHJhIGZpZWxkIHRoYXQgbXVzdCBiZSByZW1vdmVk +X19fX19sb25nLWZpbGVuYW1lLXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 +eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4AHRoaXMgaXMgYSBj +b21tZW50IHRoYXQgbXVzdCBiZSBza2lwcGVkACvNS87PLShKLS5OTVFIr8osUEhJLElUKM8syVDI +yc9Lh4hlpCampBZxAQC4UJ7LLQAAAA== +</data> + +<datacheck> +HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: gzip
+Content-Length: 2186
+
+uncompressed gzip data with long gzip header +</datacheck> + +</reply> + +# +# Client-side +<client> +<features> +libz +</features> +<server> +http +</server> + <name> +HTTP GET gzip compressed content with huge comment and extra field + </name> + <command> +http://%HOSTIP:%HTTPPORT/224 --compressed +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /224 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test225 b/tests/data/test225 new file mode 100644 index 000000000..a6447125d --- /dev/null +++ b/tests/data/test225 @@ -0,0 +1,28 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP %0a-code in URL's name part + </name> + <command> +ftp://bad%0auser:passwd@%HOSTIP:%FTPPORT/225%0a +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 3 == CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test226 b/tests/data/test226 new file mode 100644 index 000000000..9fc4bda3d --- /dev/null +++ b/tests/data/test226 @@ -0,0 +1,29 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP %0d-code in URL's CWD part + </name> + <command> +ftp://%HOSTIP:%FTPPORT/226%0d +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# 3 == CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test227 b/tests/data/test227 new file mode 100644 index 000000000..523fa0253 --- /dev/null +++ b/tests/data/test227 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +post-quote +pre-quote +quote +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY EPSV 500 no such command +REPLY FAIL 500 this might not be a failure! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP with quote ops + </name> + <command> +ftp://%HOSTIP:%FTPPORT/227 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+NOOP 1
+FAIL
+EPSV
+PASV
+TYPE I
+NOOP 2
+FAIL HARD
+SIZE 227
+RETR 227
+NOOP 3
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test228 b/tests/data/test228 new file mode 100644 index 000000000..f581583f3 --- /dev/null +++ b/tests/data/test228 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +ACCT +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY PASS 332 please provide account name +REPLY ACCT 230 thank you +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR with ACCT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/228 --ftp-account "one count" +</command> +</client> + + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+ACCT one count
+PWD
+EPSV
+TYPE I
+SIZE 228
+RETR 228
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test229 b/tests/data/test229 new file mode 100644 index 000000000..d337468ac --- /dev/null +++ b/tests/data/test229 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +FTP +ACCT +FAILURE +</keywords> +</info> +# Server-side +<reply> +<servercmd> +REPLY PASS 332 please provide account name +REPLY ACCT 532 bluah! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR with bad ACCT + </name> + <command> +ftp://%HOSTIP:%FTPPORT/229 --ftp-account "one count" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+ACCT one count
+</protocol> +<errorcode> +11 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test23 b/tests/data/test23 new file mode 100644 index 000000000..46872e82e --- /dev/null +++ b/tests/data/test23 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +unsupported protocol +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +unsupported protocol:// URL + </name> + <command> +htfp://%HOSTIP:%HTTPPORT/none.htfml +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +1 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test231 b/tests/data/test231 new file mode 100644 index 000000000..8092bc518 --- /dev/null +++ b/tests/data/test231 @@ -0,0 +1,32 @@ +<testcase> +# Server-side +<reply> +# 16 bytes to check +<datacheck> +B01234567 +C01234567 +</datacheck> +</reply> + +# Client-side +<client> +<server> +file +</server> + <name> +file:// with resume + </name> + <command> +file://localhost/%PWD/log/test231.txt -C 10 +</command> +<file name="log/test231.txt"> +A01234567 +B01234567 +C01234567 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +</verify> +</testcase> diff --git a/tests/data/test233 b/tests/data/test233 new file mode 100644 index 000000000..d165da952 --- /dev/null +++ b/tests/data/test233 @@ -0,0 +1,94 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP proxy +HTTP Basic auth +HTTP proxy Basic auth +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Location: http://goto.second.host.now/2330002 +Content-Length: 8 +Connection: close + +contents +</data> +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data2> + +<datacheck> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Location: http://goto.second.host.now/2330002 +Content-Length: 8 +Connection: close + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, proxy, site+proxy auth and Location: to new host + </name> + <command> +http://first.host.it.is/we/want/that/page/233 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://first.host.it.is/we/want/that/page/233 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/2330002 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test234 b/tests/data/test234 new file mode 100644 index 000000000..d8c708109 --- /dev/null +++ b/tests/data/test234 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +followlocation +--location-trusted +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Location: http://goto.second.host.now/2340002 +Content-Length: 8 +Connection: close + +contents +</data> +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data2> + +<datacheck> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Location: http://goto.second.host.now/2340002 +Content-Length: 8 +Connection: close + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, proxy, site+proxy auth and Location: to new host using location-trusted + </name> + <command> +http://first.host.it.is/we/want/that/page/234 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location-trusted +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://first.host.it.is/we/want/that/page/234 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/2340002 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test235 b/tests/data/test235 new file mode 100644 index 000000000..625023221 --- /dev/null +++ b/tests/data/test235 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP resumed upload but no file present remotely + </name> + <command> +ftp://%HOSTIP:%FTPPORT/235 -T log/upload235 -C - +</command> +<file name="log/upload235"> +this is the *****crap******** that we're gonna upload + +worx? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 235
+STOR 235
+QUIT
+</protocol> +<upload> +this is the *****crap******** that we're gonna upload + +worx? +</upload> +</verify> +</testcase> diff --git a/tests/data/test236 b/tests/data/test236 new file mode 100644 index 000000000..9ba706f1d --- /dev/null +++ b/tests/data/test236 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY SIZE 550 access to this file is very much denied +REPLY APPE 550 I said: access to this file is very much denied +REPLY STOR 550 I said: access to this file is very much denied +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP resume upload but denied access to remote file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/236 -T log/file236.txt -C - +</command> +<file name="log/file236.txt"> +Test data +</file> +</client> + +# Verify data after the test has been "shot" +<verify> + +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 236
+STOR 236
+QUIT
+</protocol> + +# (25) Failed FTP upload: 550 +<errorcode> +25 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test237 b/tests/data/test237 new file mode 100644 index 000000000..9a40f1f6b --- /dev/null +++ b/tests/data/test237 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127) +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP getting bad host in 227-response to PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/237 --disable-epsv +</command> +</client> + +# Verify data after the test has been "shot" +# The bogus address used here is chosen specifically so that when processed on +# certain hosts with buggy resolver code, the resulting address (192.0.2.127) +# is from an address block that is guaranteed never to be assigned (RFC3330). +<verify> +# curl: (15) Can't resolve new host 1216.256.2.127:32639 +# 15 => CURLE_FTP_CANT_GET_HOST +# some systems just don't fail on the illegal host name/address but instead +# moves on and attempt to connect to... yes, to what? +# 7= CURLE_COULDNT_CONNECT +<errorcode> +15, 7 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PASV
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test238 b/tests/data/test238 new file mode 100644 index 000000000..56f21ebf8 --- /dev/null +++ b/tests/data/test238 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY EPSV 229 Entering Passiv Mode (|||1000000|) +REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127) +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP getting bad port in response to EPSV and in response to PASV + </name> + <command> +ftp://%HOSTIP:%FTPPORT/238 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# curl: (15) Can't resolve new host 1216.256.2.127:32639 +# 15 => CURLE_FTP_CANT_GET_HOST +# some systems just don't fail on the illegal host name/address but instead +# moves on and attempt to connect to... yes, to what? +# 7= CURLE_COULDNT_CONNECT +<errorcode> +7, 15 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test239 b/tests/data/test239 new file mode 100644 index 000000000..2748100fb --- /dev/null +++ b/tests/data/test239 @@ -0,0 +1,100 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP proxy-auth NTLM and then POST + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/239 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm -d "postit" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol nonewline="yes"> +POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit +</protocol> +</verify> +</testcase> diff --git a/tests/data/test24 b/tests/data/test24 new file mode 100644 index 000000000..18e7d5b8e --- /dev/null +++ b/tests/data/test24 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 404 BAD BOY +Content-Type: text/html + +This silly page doesn't reaaaaaly exist so you should not get it. +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET fail silently on HTTP error return + </name> + <command> +http://%HOSTIP:%HTTPPORT/24 --fail --silent --show-error +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /24 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<errorcode> +22 +</errorcode> +<file2 name="log/stderr24"> +curl: (22) The requested URL returned error: 404 BAD BOY +</file2> +</verify> +</testcase> diff --git a/tests/data/test240 b/tests/data/test240 new file mode 100644 index 000000000..cd8594d63 --- /dev/null +++ b/tests/data/test240 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +IPv6 +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET + </name> + <command> +-g "http://%HOST6IP:%HTTP6PORT/240" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: +</strip> +<protocol> +GET /240 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test241 b/tests/data/test241 new file mode 100644 index 000000000..46eae1f72 --- /dev/null +++ b/tests/data/test241 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +IPv6 +IPv6-hostname +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET (using ip6-localhost) + </name> + <command> +-g "http://ip6-localhost:%HTTP6PORT/241" +</command> +<precheck> +./server/resolve --ipv6 ip6-localhost +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: +</strip> +<protocol> +GET /241 HTTP/1.1
+Host: ip6-localhost:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test242 b/tests/data/test242 new file mode 100644 index 000000000..01d40bdd7 --- /dev/null +++ b/tests/data/test242 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +IPv6 +HTTP Basic auth +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close + +hello +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET with username+password in URL + </name> + <command> +-g "http://foobar:barfoo@%HOST6IP:%HTTP6PORT/242" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: +</strip> +<protocol> +GET /242 HTTP/1.1
+Authorization: Basic Zm9vYmFyOmJhcmZvbw==
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test243 b/tests/data/test243 new file mode 100644 index 000000000..d53a43798 --- /dev/null +++ b/tests/data/test243 @@ -0,0 +1,129 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy NTLM auth +--proxy-anyauth +</keywords> +</info> + +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP POST with --proxy-anyauth, picking NTLM + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/243 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth -d "postit" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol nonewline="yes"> +POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postitPOST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit +</protocol> +</verify> +</testcase> diff --git a/tests/data/test245 b/tests/data/test245 new file mode 100644 index 000000000..8ad45d3a1 --- /dev/null +++ b/tests/data/test245 @@ -0,0 +1,87 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST --digest + </name> + <command> +http://%HOSTIP:%HTTPPORT/245 -u auser:apasswd --digest -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /245 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /245 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/245", response="379a439b1737ba257c1d2f103914b18b"
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk +</protocol> +</verify> +</testcase> diff --git a/tests/data/test246 b/tests/data/test246 new file mode 100644 index 000000000..b92c17a8b --- /dev/null +++ b/tests/data/test246 @@ -0,0 +1,97 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST --digest with server doing a 100 before 401 response + </name> + <command> +http://%HOSTIP:%HTTPPORT/246 -u auser:apasswd --digest -d "junkelijunk" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /246 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /246 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/246", response="761e6fc9a760c39d587092e8d840e740"
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk +</protocol> +</verify> +</testcase> diff --git a/tests/data/test247 b/tests/data/test247 new file mode 100644 index 000000000..2720144ed --- /dev/null +++ b/tests/data/test247 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +<reply> +<mdtm> +213 20030409102659 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP upload time condition evaluates TRUE => skip upload + </name> +<file name="log/test247.txt"> +data + to + see +that FTP +works + so does it? +</file> + <command> +ftp://%HOSTIP:%FTPPORT/247 -T log/test247.txt -z "apr 1 2005 08:00:00" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 247
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test248 b/tests/data/test248 new file mode 100644 index 000000000..d254a951e --- /dev/null +++ b/tests/data/test248 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +<reply> +<mdtm> +213 20050409102659 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP upload time condition evaluates FALSE => upload anyway + </name> +<file name="log/test248.txt"> +data + to + see +that FTP +works + so does it? +</file> + <command> +ftp://%HOSTIP:%FTPPORT/248 -T log/test248.txt -z "apr 1 2005 08:00:00" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +data + to + see +that FTP +works + so does it? +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 248
+EPSV
+TYPE I
+STOR 248
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test249 b/tests/data/test249 new file mode 100644 index 000000000..4f99c2af7 --- /dev/null +++ b/tests/data/test249 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 304 Not Modified swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1910 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 677777 +Connection: close +Content-Type: text/html + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP 304 response with "illegal" Content-Length: header + </name> + <command> +http://%HOSTIP:%HTTPPORT/249 -z "dec 12 12:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /249 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test25 b/tests/data/test25 new file mode 100644 index 000000000..15030ae92 --- /dev/null +++ b/tests/data/test25 @@ -0,0 +1,116 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +--max-redirs +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +Redirect to the same URL again! +</data> +<datacheck> +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +HTTP/1.1 301 This is a weirdo text message +Server: test-server/fake +Location: data/reply/25 +Content-Length: 32 +Connection: close + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +looping HTTP Location: following with --max-redirs + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/25 -L --max-redirs 5 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /want/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<errorcode> +47 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test250 b/tests/data/test250 new file mode 100644 index 000000000..aeed13479 --- /dev/null +++ b/tests/data/test250 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +<servercmd> +SLOWDOWN +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list PASV with slow response + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test251 b/tests/data/test251 new file mode 100644 index 000000000..d50e1b3e2 --- /dev/null +++ b/tests/data/test251 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> + +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +<servercmd> +SLOWDOWN +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP dir list, PORT with specified IP and slow response + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test252 b/tests/data/test252 new file mode 100644 index 000000000..b3f4966a1 --- /dev/null +++ b/tests/data/test252 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTP-ipv6 +IPv6 +EPSV +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP IPv6 dir list PASV + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test253 b/tests/data/test253 new file mode 100644 index 000000000..9be5f3d60 --- /dev/null +++ b/tests/data/test253 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +FTP-ipv6 +IPv6 +EPRT +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP IPv6 dir list with EPRT + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" -P - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^(EPRT \|2\|::1\|)(.*)/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1| +TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test254 b/tests/data/test254 new file mode 100644 index 000000000..571b033f7 --- /dev/null +++ b/tests/data/test254 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +FTP-ipv6 +IPv6 +EPSV +--disable-epsv +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP IPv6 dir list PASV and --disable-epsv + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" --disable-epsv +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test255 b/tests/data/test255 new file mode 100644 index 000000000..cc50c95e4 --- /dev/null +++ b/tests/data/test255 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP-ipv6 +IPv6 +EPRT +--disable-eprt +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +ftp-ipv6 +</server> + <name> +FTP IPv6 dir list with EPRT and --disable-eprt + </name> + <command> +-g "ftp://%HOST6IP:%FTP6PORT/" -P - --disable-eprt +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^(EPRT \|2\|::1\|)(.*)/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1| +TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test256 b/tests/data/test256 new file mode 100644 index 000000000..5f8323b67 --- /dev/null +++ b/tests/data/test256 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +Resume +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 200 Mooo +Date: Mon, 13 Nov 2000 13:41:09 GMT +Server: myown/1.0 +Connection: close + +todelooooo lalalala yada yada, we know nothing about ranges ;-) +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP resume request over proxy with auth without server supporting it + </name> + <command option="no-output"> +-x http://%HOSTIP:%HTTPPORT http://%HOSTIP:%HTTPPORT/want/256 -C - --no-include -o log/fewl.txt -U daniel:stenberg +</command> +<file name="log/fewl.txt"> +This text is here to simulate a partly downloaded file to resume +download on. +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +33 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/want/256 HTTP/1.1
+Proxy-Authorization: Basic ZGFuaWVsOnN0ZW5iZXJn
+Range: bytes=78-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> + +# the download target file must remain untouched +<file name="log/fewl.txt"> +This text is here to simulate a partly downloaded file to resume +download on. +</file> +</verify> +</testcase> diff --git a/tests/data/test257 b/tests/data/test257 new file mode 100644 index 000000000..45642d571 --- /dev/null +++ b/tests/data/test257 @@ -0,0 +1,112 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP Basic auth +followlocation +netrc +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: http://anotherone.com/2570002 +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 302 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: http://athird.com/2570003 + +If this is received, the location following worked + +</data2> +<data3> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data3> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: http://anotherone.com/2570002 +Connection: close + +HTTP/1.1 302 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: http://athird.com/2570003 + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with --netrc-optional + </name> + <command> +http://supersite.com/want/257 -L -x http://%HOSTIP:%HTTPPORT --netrc-optional --netrc-file log/netrc257 +</command> + +# netrc auth for two out of three sites: +<file name="log/netrc257"> +machine supersite.com login user1 password passwd1 +machine anotherone.com login user2 password passwd2 +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://supersite.com/want/257 HTTP/1.1
+Authorization: Basic dXNlcjE6cGFzc3dkMQ==
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: supersite.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://anotherone.com/2570002 HTTP/1.1
+Authorization: Basic dXNlcjI6cGFzc3dkMg==
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13 +Host: anotherone.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://athird.com/2570003 HTTP/1.1
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13 +Host: athird.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test258 b/tests/data/test258 new file mode 100644 index 000000000..0d95dec0a --- /dev/null +++ b/tests/data/test258 @@ -0,0 +1,134 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP replaced headers +HTTP proxy +HTTP proxy Digest auth +--proxy-anyauth +</keywords> + +</info> +# Server-side +<reply> +# The stupid test server doesn't response anything at all until the full +# request has been sent, and then of course the full POST has already been +# sent! +<data> +HTTP/1.1 407 no, tell me who you are first swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Proxy-Authenticate: Digest realm="many secrets", nonce="911" +Proxy-Connection: close +Content-Length: 0 + +</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> +<datacheck> +HTTP/1.1 407 no, tell me who you are first swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Proxy-Authenticate: Digest realm="many secrets", nonce="911" +Proxy-Connection: close +Content-Length: 0 + +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST multipart without Expect: header using proxy anyauth (Digest) + </name> + <command> +-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/258 -F name=daniel -F tool=curl -F file=@log/test258.txt -H "Expect:" -U uuuser:pppassword --proxy-anyauth +</command> +# We create this file before the command is invoked! +<file name="log/test258.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------).* +</strip> +<protocol> +POST http://remotehost:54321/we/want/258 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test258.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------7c633d5c27ce--
+POST http://remotehost:54321/we/want/258 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/258", response="2501654ca391f0b5c8c12a1da77e34cd"
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test258.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------7c633d5c27ce--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test259 b/tests/data/test259 new file mode 100644 index 000000000..b9d8ef12b --- /dev/null +++ b/tests/data/test259 @@ -0,0 +1,132 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP proxy +HTTP proxy Digest auth +--proxy-anyauth +</keywords> +</info> +# Server-side +<reply> +# The stupid test server doesn't response anything at all until the full +# request has been sent, and then of course the full POST has already been +# sent! +<data> +HTTP/1.1 407 no, tell me who you are first +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Proxy-Authenticate: Digest realm="many secrets", nonce="911" +Content-Length: 0 + +</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> +<datacheck> +HTTP/1.1 407 no, tell me who you are first +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Proxy-Authenticate: Digest realm="many secrets", nonce="911" +Content-Length: 0 + +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP POST multipart with Expect: header using proxy anyauth (Digest) + </name> + <command> +-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/259 -F name=daniel -F tool=curl -F file=@log/test259.txt -U uuuser:pppassword --proxy-anyauth +</command> +# We create this file before the command is invoked! +<file name="log/test259.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------).* +</strip> +<protocol> +POST http://remotehost:54321/we/want/259 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test259.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------7c633d5c27ce--
+POST http://remotehost:54321/we/want/259 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/259", response="b479994d13e60f3aa192a67c5892ddc5"
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test259.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------7c633d5c27ce--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test26 b/tests/data/test26 new file mode 100644 index 000000000..072dbf7d3 --- /dev/null +++ b/tests/data/test26 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 Mooo swsclose +Server: test-server/fake +Connection: close + +*flopp* +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +specify more -o than URLs + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/26 -o - -o - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl.* +</strip> +<protocol> +GET /want/26 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test260 b/tests/data/test260 new file mode 100644 index 000000000..589e86e8a --- /dev/null +++ b/tests/data/test260 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET URL without slash but with questionmark + </name> + <command> +"http://%HOSTIP:%HTTPPORT?260" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /?260 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test261 b/tests/data/test261 new file mode 100644 index 000000000..e3639bfe9 --- /dev/null +++ b/tests/data/test261 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +EPSV +RETR +</keywords> +</info> +# +# Server-side +<reply> +<data> +hepp +</data> +<servercmd> +REPLY TYPE 226 Kind of on the positive side! +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR with 226 response code to TYPE + </name> + <command> +ftp://%HOSTIP:%FTPPORT/261 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 261
+RETR 261
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test262 b/tests/data/test262 Binary files differnew file mode 100644 index 000000000..4c28f22d7 --- /dev/null +++ b/tests/data/test262 diff --git a/tests/data/test263 b/tests/data/test263 new file mode 100644 index 000000000..5088141f5 --- /dev/null +++ b/tests/data/test263 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +IPv6 +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Content-Type: text/html + +hello +</data> +</reply> + +# +# Client-side +<client> +<features> +ipv6 +</features> +<server> +http-ipv6 +</server> + <name> +HTTP-IPv6 GET with proxy specified using IPv6-numerical address + </name> + <command> +-g -x "http://%HOST6IP:%HTTP6PORT" http://veryveryremotesite.com/263 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: +</strip> +<protocol> +GET http://veryveryremotesite.com/263 HTTP/1.1
+Host: veryveryremotesite.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test264 b/tests/data/test264 new file mode 100644 index 000000000..3cfb4d88d --- /dev/null +++ b/tests/data/test264 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 26
+
+the content would go here +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with proxy string including http:// and user+password + </name> + <command> +http://we.want.that.site.com/264 -x http://f%61ke:user@%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://we.want.that.site.com/264 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTp1c2Vy
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test265 b/tests/data/test265 new file mode 100644 index 000000000..dfac8bfaf --- /dev/null +++ b/tests/data/test265 @@ -0,0 +1,125 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP CONNECT +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.0 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 1033
+
+And you should ignore this data. +QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQz +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002> + +# this is returned when we get a GET! +<data2> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</data2> + +# then this is returned when we get proxy-auth +<data1000> +HTTP/1.1 200 OK swsbounce
+Server: no +
+Nice proxy auth sir! +</data1000> + +<datacheck> +HTTP/1.0 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 1033
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 7 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +daniel +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +NTLM +</features> + <name> +HTTP proxy CONNECT auth NTLM and then POST, response-body in the 407 + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com:265/path/2650002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol nonewline="yes"> +CONNECT test.remote.example.com:265 HTTP/1.1
+Host: test.remote.example.com:265
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.example.com:265 HTTP/1.1
+Host: test.remote.example.com:265
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+POST /path/2650002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.example.com:265
+Accept: */*
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit +</protocol> +</verify> +</testcase> diff --git a/tests/data/test266 b/tests/data/test266 new file mode 100644 index 000000000..d520be0f4 --- /dev/null +++ b/tests/data/test266 @@ -0,0 +1,78 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +chunked Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc +
+0
+chunky-trailer: header data
+
+</data> +<datacheck> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with chunked Transfer-Encoding and chunked trailer + </name> + <command> +http://%HOSTIP:%HTTPPORT/266 -D log/heads266 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /266 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/heads266"> +HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+chunky-trailer: header data
+</file> +</verify> + +</testcase> diff --git a/tests/data/test267 b/tests/data/test267 new file mode 100644 index 000000000..479031c46 --- /dev/null +++ b/tests/data/test267 @@ -0,0 +1,109 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP POST with NTLM authorization and added custom headers + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/267 -u testuser:testpass --ntlm -d "data" -H "Header1: yes" -H "Header2: no" +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /267 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header1: yes
+Header2: no
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /267 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header1: yes
+Header2: no
+Content-Length: 4
+Content-Type: application/x-www-form-urlencoded
+
+data +</protocol> +</verify> +</testcase> diff --git a/tests/data/test268 b/tests/data/test268 new file mode 100644 index 000000000..c9c7311ab --- /dev/null +++ b/tests/data/test268 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+this is data even though Content-Length is set to zero +</data> +<datacheck> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST a non-existing file + </name> + <command> + -d @nonesuchfile http://%HOSTIP:%HTTPPORT/268 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /268 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test269 b/tests/data/test269 new file mode 100644 index 000000000..6b7159b0b --- /dev/null +++ b/tests/data/test269 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Accept-Ranges: bytes +Content-Length: 677654 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +muahahaha +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP --ignore-content-length + </name> + <command> +http://%HOSTIP:%HTTPPORT/269 --ignore-content-length +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /269 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test27 b/tests/data/test27 new file mode 100644 index 000000000..5ae2ffd4f --- /dev/null +++ b/tests/data/test27 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 Mooo swsclose +Connection: close +Set-Cookie: path=/; thewinneris=nowayyouwin; +Content-Length: 8 + +*flopp* +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +Get same cookie page several times + </name> + <command> +"http://%HOSTIP:%HTTPPORT/want/{27,27,27}" -b none +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl.* +</strip> +<protocol> +GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: thewinneris=nowayyouwin
+
+GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: thewinneris=nowayyouwin
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test270 b/tests/data/test270 new file mode 100644 index 000000000..f4eea970e --- /dev/null +++ b/tests/data/test270 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +PASVBADIP +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP RETR PASV --ftp-skip-pasv-ip + </name> + <command> +ftp://%HOSTIP:%FTPPORT/270 --ftp-skip-pasv-ip --disable-epsv +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+PASV
+TYPE I
+SIZE 270
+RETR 270
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test271 b/tests/data/test271 new file mode 100644 index 000000000..af5a6c603 --- /dev/null +++ b/tests/data/test271 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +</keywords> +</info> + +# +# Server-side +<reply> +<data> +a chunk of +data +returned + to client +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve + </name> + <command> +tftp://%HOSTIP:%TFTPPORT//271 --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /271 +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test272 b/tests/data/test272 new file mode 100644 index 000000000..f728a2a8c --- /dev/null +++ b/tests/data/test272 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<mdtm> +213 20040101121212 +</mdtm> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP timed conditioned get file with identical time stamp + </name> + <command> +ftp://%HOSTIP:%FTPPORT/272 -z "2004 jan 1 12:12:12 UTC" +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 272
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test273 b/tests/data/test273 new file mode 100644 index 000000000..dc52a1054 --- /dev/null +++ b/tests/data/test273 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with two Digest authorization headers + </name> + <command> +http://%HOSTIP:%HTTPPORT/273 -u testuser:testpass --digest +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /273 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /273 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/273", response="576ae57b1db0039f8c0de43ef58e49e3"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test274 b/tests/data/test274 new file mode 100644 index 000000000..579341c82 --- /dev/null +++ b/tests/data/test274 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +--max-redirs +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Server: test-server/fake +Location: data/reply/25 +Content-Length: 0 +Connection: close + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with --max-redirs 0 + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/274 -L --max-redirs 0 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET /want/274 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +<errorcode> +47 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test275 b/tests/data/test275 new file mode 100644 index 000000000..713990544 --- /dev/null +++ b/tests/data/test275 @@ -0,0 +1,81 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP Basic auth +HTTP proxy +HTTP proxy Basic auth +proxytunnel +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Content-Length: 9 + +contents +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +http-proxy +</server> + <name> +HTTP CONNECT with proxytunnel getting two URLs from the same host + </name> + <command> +http://remotesite.com:%HTTPPORT/we/want/that/page/275 -p -x %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself http://remotesite.com:%HTTPPORT/we/want/that/page/275 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<proxy> +CONNECT remotesite.com:%HTTPPORT HTTP/1.1
+Host: remotesite.com:%HTTPPORT
+Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /we/want/that/page/275 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: remotesite.com:%HTTPPORT
+Accept: */*
+
+GET /we/want/that/page/275 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: remotesite.com:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test276 b/tests/data/test276 new file mode 100644 index 000000000..34e2235e1 --- /dev/null +++ b/tests/data/test276 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002 +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002 +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with multiple question marks in URLs + </name> + <command> +"http://%HOSTIP:%HTTPPORT/want?uri=http://anything/276?secondq/276" -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want?uri=http://anything/276?secondq/276 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test277 b/tests/data/test277 new file mode 100644 index 000000000..18e419850 --- /dev/null +++ b/tests/data/test277 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 11 + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting with custom Content-Type + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/277 -F name=daniel -H "Content-Type: text/info" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<strippart> +s/^------------------------------[a-z0-9]*/------------------------------/ +s/boundary=----------------------------[a-z0-9]*/boundary=----------------------------/ +</strippart> +<protocol> +POST /want/277 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 145
+Expect: 100-continue
+Content-Type: text/info; boundary=----------------------------
+
+------------------------------
+Content-Disposition: form-data; name="name"
+
+daniel
+--------------------------------
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test278 b/tests/data/test278 new file mode 100644 index 000000000..6c57822b7 --- /dev/null +++ b/tests/data/test278 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 27
+
+the content would go here
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with proxy string including http:// and user+empty password + </name> + <command> +http://we.want.that.site.com/278 -x http://f%61ke:@%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://we.want.that.site.com/278 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTo=
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test279 b/tests/data/test279 new file mode 100644 index 000000000..5a1938cb3 --- /dev/null +++ b/tests/data/test279 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 27
+
+the content would go here
+</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with proxy string including http:// and user only + </name> + <command> +http://we.want.that.site.com/279 -x http://f%61ke@%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://we.want.that.site.com/279 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTo=
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test28 b/tests/data/test28 new file mode 100644 index 000000000..1f80d5f48 --- /dev/null +++ b/tests/data/test28 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following with extra spaces in header + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/28 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/28 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test280 b/tests/data/test280 new file mode 100644 index 000000000..c16999376 --- /dev/null +++ b/tests/data/test280 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +--ftp-alternative-to-user +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +<servercmd> +REPLY USER 530 We don't like USER commands +COUNT USER 1 +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP --ftp-alternative-to-user on USER failure + </name> + <command> +ftp://%HOSTIP:%FTPPORT/280/ --ftp-alternative-to-user "USER replacement" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+USER replacement
+PASS ftp@example.com
+PWD
+CWD 280
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test281 b/tests/data/test281 new file mode 100644 index 000000000..d399fc05b --- /dev/null +++ b/tests/data/test281 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue + +HTTP/1.1 401 Bad Auth swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +WWW-Authenticate: Basic Realm=authenticate +Server: test-server/fake +</data> +<datacheck> +HTTP/1.1 100 Continue + +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT from file with 100 + 401 responses and -f without auth given + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/281 -f -T log/test281.txt +</command> +<file name="log/test281.txt"> +Weird + file + to + upload +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +22 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /we/want/281 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 38
+Expect: 100-continue
+
+Weird + file + to + upload +</protocol> +</verify> +</testcase> diff --git a/tests/data/test282 b/tests/data/test282 new file mode 100644 index 000000000..aa8aba5a2 --- /dev/null +++ b/tests/data/test282 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with no response body or headers + </name> + <command> +http://%HOSTIP:%HTTPPORT/282 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /282 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test283 b/tests/data/test283 new file mode 100644 index 000000000..922de51e0 --- /dev/null +++ b/tests/data/test283 @@ -0,0 +1,36 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve on invalid file + </name> + <command> +tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<errorcode> +69 +</errorcode> +<protocol> +opcode: 1 +filename: /invalid-file +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test284 b/tests/data/test284 new file mode 100644 index 000000000..0c2a66560 --- /dev/null +++ b/tests/data/test284 @@ -0,0 +1,67 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP RRQ +</keywords> +</info> + +# +# Server-side +<reply> +<data> +A chunk of data which exactly fits into +a 512 byte TFTP block, testing a boundary +condition in the TFTP receive code. +789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +</data> +</reply> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP retrieve of boundary case 512 byte file + </name> + <command> +tftp://%HOSTIP:%TFTPPORT//284 --trace-ascii log/traceit +</command> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<protocol> +opcode: 1 +filename: /284 +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test285 b/tests/data/test285 new file mode 100644 index 000000000..75a19991d --- /dev/null +++ b/tests/data/test285 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP WRQ +</keywords> +</info> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP send + </name> + <command> +-T log/test285.txt tftp://%HOSTIP:%TFTPPORT// --trace-ascii log/traceit +</command> +<file name="log/test285.txt"> +a chunk of +data +sent + to server +</file> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<upload> +a chunk of +data +sent + to server +</upload> +<protocol> +opcode: 2 +filename: /test285.txt +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test286 b/tests/data/test286 new file mode 100644 index 000000000..841ee1e2a --- /dev/null +++ b/tests/data/test286 @@ -0,0 +1,92 @@ +<testcase> +<info> +<keywords> +TFTP +TFTP WRQ +</keywords> +</info> + +# +# Client-side +<client> +<server> +tftp +</server> + <name> +TFTP send of boundary case 512 byte file + </name> + <command> +-T log/test286.txt tftp://%HOSTIP:%TFTPPORT// --trace-ascii log/traceit +</command> +<file name="log/test286.txt"> +A chunk of data which exactly fits into +a 512 byte TFTP block, testing a boundary +condition in the TFTP transmit code. +89ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +</file> +</client> + +# +# Verify pseudo protocol after the test has been "shot" +<verify> +<upload> +A chunk of data which exactly fits into +a 512 byte TFTP block, testing a boundary +condition in the TFTP transmit code. +89ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +123456789ABCDEF +</upload> +<protocol> +opcode: 2 +filename: /test286.txt +mode: octet +</protocol> +</verify> +</testcase> diff --git a/tests/data/test287 b/tests/data/test287 new file mode 100644 index 000000000..323d3f392 --- /dev/null +++ b/tests/data/test287 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP CONNECT +HTTP proxy +proxytunnel +</keywords> +</info> + +# Server-side +<reply> + +# this is returned first since we get no proxy-auth +<data nocheck="yes"> +HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data. +</data> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP proxy CONNECT with custom User-Agent header + </name> + <command> +http://test.remote.example.com:287/path/287 -H "User-Agent: looser/2007" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +CONNECT test.remote.example.com:287 HTTP/1.1
+Host: test.remote.example.com:287
+Proxy-Connection: Keep-Alive
+User-Agent: looser/2007
+
+</protocol> +# CURLE_RECV_ERROR +<errorcode> +56 +</errorcode> +<stdout> +HTTP/1.1 405 Method Not Allowed swsclose
+
+</stdout> +</verify> +</testcase> diff --git a/tests/data/test288 b/tests/data/test288 new file mode 100644 index 000000000..da691451a --- /dev/null +++ b/tests/data/test288 @@ -0,0 +1,42 @@ +<testcase> +# Server-side +<reply> +<data> +foo + bar +bar + foo +moo +</data> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +file +</features> + <name> +file:// with (unsupported) proxy, authentication and range + </name> +<setenv> +all_proxy=http://fake:user@%HOSTIP:%HTTPPORT/ +</setenv> + <command> +file://localhost/%PWD/log/test288.txt +</command> +<file name="log/test288.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +</verify> +</testcase> diff --git a/tests/data/test289 b/tests/data/test289 new file mode 100644 index 000000000..2720e2e9c --- /dev/null +++ b/tests/data/test289 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +FTP +STOR +Resume +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP resume upload but denied access to local file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/289 -T log/illegal-nonexistent-file -C - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +26 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test29 b/tests/data/test29 new file mode 100644 index 000000000..9a7bd9ef9 --- /dev/null +++ b/tests/data/test29 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +timeout +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+_data_result_data_ +</data> +<postcmd> +wait 10 +</postcmd> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with 2 secs timeout + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/29 -m 2 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/29 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<errorcode> +28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test290 b/tests/data/test290 new file mode 100644 index 000000000..6078a2ac7 --- /dev/null +++ b/tests/data/test290 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +FTP +--max-filesize +</keywords> +</info> +# Server-side +<reply> +<size> +85 +</size> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download maximum filesize exceeded + </name> + <command> +ftp://%HOSTIP:%FTPPORT/290 --max-filesize 30 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +63 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 290
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test291 b/tests/data/test291 new file mode 100644 index 000000000..18e039e4f --- /dev/null +++ b/tests/data/test291 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FTP +RETR +--max-filesize +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP download maximum filesize not exceeded + </name> + <command> +ftp://%HOSTIP:%FTPPORT/291 --max-filesize 100 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 291
+RETR 291
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test292 b/tests/data/test292 new file mode 100644 index 000000000..800e8d178 --- /dev/null +++ b/tests/data/test292 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--max-filesize +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with maximum filesize not exceeded + </name> + <command> +http://%HOSTIP:%HTTPPORT/292 --max-filesize 1000 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /292 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test293 b/tests/data/test293 new file mode 100644 index 000000000..d75fc9a3c --- /dev/null +++ b/tests/data/test293 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--max-filesize +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with maximum filesize exceeded + </name> + <command> +http://%HOSTIP:%HTTPPORT/293 --max-filesize 2 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +63 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /293 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test294 b/tests/data/test294 new file mode 100644 index 000000000..4d7f2b8e9 --- /dev/null +++ b/tests/data/test294 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +ACCT +--ftp-account +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +<servercmd> +REPLY PASS 332 Give me an ACCT now +REPLY ACCT 230 Thank-you for the ACCT +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP --ftp-account on ACCT request + </name> + <command> +ftp://%HOSTIP:%FTPPORT/294/ --ftp-account "data for acct" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+ACCT data for acct
+PWD
+CWD 294
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test295 b/tests/data/test295 new file mode 100644 index 000000000..5b1ddcf6b --- /dev/null +++ b/tests/data/test295 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +ACCT +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<servercmd> +REPLY PASS 332 Give me an ACCT now +REPLY PWD 530 No ACCT, go away +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP ACCT request without --ftp-account + </name> + <command> +ftp://%HOSTIP:%FTPPORT/295/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test296 b/tests/data/test296 new file mode 100644 index 000000000..2008c8bfd --- /dev/null +++ b/tests/data/test296 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +FTP +PASV +CWD +--ftp-method +multicwd +</keywords> +</info> +# +# Server-side +<reply> +<data> +bla bla bla +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP CWD with --ftp-method multicwd + </name> + <command> +--ftp-method multicwd ftp://%HOSTIP:%FTPPORT/first/second/third/296 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+CWD second
+CWD third
+EPSV
+TYPE I
+SIZE 296
+RETR 296
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test297 b/tests/data/test297 new file mode 100644 index 000000000..36573f8b9 --- /dev/null +++ b/tests/data/test297 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +FTP +PASV +CWD +--ftp-method +singlecwd +</keywords> +</info> +# +# Server-side +<reply> +<data> +bla bla bla +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP CWD with --ftp-method singlecwd + </name> + <command> +--ftp-method singlecwd ftp://%HOSTIP:%FTPPORT/first/second/third/297 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD first/second/third
+EPSV
+TYPE I
+SIZE 297
+RETR 297
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test298 b/tests/data/test298 new file mode 100644 index 000000000..80913e84b --- /dev/null +++ b/tests/data/test298 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +PASV +CWD +--ftp-method +nocwd +</keywords> +</info> +# +# Server-side +<reply> +<data> +bla bla bla +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP CWD with --ftp-method nocwd + </name> + <command> +--ftp-method nocwd ftp://%HOSTIP:%FTPPORT/first/second/third/298 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE first/second/third/298
+RETR first/second/third/298
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test299 b/tests/data/test299 new file mode 100644 index 000000000..a557a14c7 --- /dev/null +++ b/tests/data/test299 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +CURLOPT_USERPWD +HTTP proxy +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +FTP over HTTP proxy with user:pass not in url + </name> + <command> +-x http://%HOSTIP:%HTTPPORT -u michal:aybabtu ftp://host.com/we/want/299 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://michal:aybabtu@host.com/we/want/299 HTTP/1.1
+Authorization: Basic bWljaGFsOmF5YmFidHU=
+Host: host.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test3 b/tests/data/test3 new file mode 100644 index 000000000..2167b2a49 --- /dev/null +++ b/tests/data/test3 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Basic auth +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+this is data even though Content-Length is set to zero +</data> +<datacheck> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with auth and contents but with content-length set to 0 + </name> + <command> + -d "fooo=mooo&pooo=clue&doo=%20%20%20++++" -u "fake:-user" http://%HOSTIP:%HTTPPORT/3 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /3 HTTP/1.1
+Authorization: Basic ZmFrZTotdXNlcg==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 37
+Content-Type: application/x-www-form-urlencoded
+
+fooo=mooo&pooo=clue&doo=%20%20%20++++ +</protocol> +</verify> +</testcase> diff --git a/tests/data/test30 b/tests/data/test30 new file mode 100644 index 000000000..70b8005f5 --- /dev/null +++ b/tests/data/test30 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with no data in server reply + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/30 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/30 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<errorcode> +52 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test300 b/tests/data/test300 new file mode 100644 index 000000000..7b4222d12 --- /dev/null +++ b/tests/data/test300 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 7 + +MooMoo +</data> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +simple HTTPS GET + </name> + <command> +-k https://%HOSTIP:%HTTPSPORT/300 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /300 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test301 b/tests/data/test301 new file mode 100644 index 000000000..d5974ce69 --- /dev/null +++ b/tests/data/test301 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +HTTP Basic auth +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +HTTPS GET with user and password + </name> + <command> +-k -u fake:user https://%HOSTIP:%HTTPSPORT/301 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /301 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +<data> +[insert full protocol verifiction dump here] +</data> +</verify> +</testcase> diff --git a/tests/data/test302 b/tests/data/test302 new file mode 100644 index 000000000..1223f1c33 --- /dev/null +++ b/tests/data/test302 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +HTTP CONNECT +HTTP proxy +FAILURE +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +HTTPS GET over HTTP proxy fails + </name> + <command> +-k -U fake:user -x %HOSTIP:%HTTPPORT https://bad.fakeurl-to.test/slash/302 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +56 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<data> +</data> +</verify> +</testcase> diff --git a/tests/data/test303 b/tests/data/test303 new file mode 100644 index 000000000..01dd9ebb1 --- /dev/null +++ b/tests/data/test303 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +timeout +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+_data_result_data_ +</data> +<postcmd> +wait 20 +</postcmd> +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +HTTPS with 8 secs timeout + </name> + <command> +-k https://%HOSTIP:%HTTPSPORT/want/303 -m 8 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/303 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +<errorcode> +28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test304 b/tests/data/test304 new file mode 100644 index 000000000..fedf18ff5 --- /dev/null +++ b/tests/data/test304 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP POST +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 10
+ +blablabla +</data> +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +HTTPS multipart formpost + </name> + <command> +-k https://%HOSTIP:%HTTPSPORT/we/want/304 -F name=daniel -F tool=curl -F file=@log/test304.txt +</command> +# We create this file before the command is invoked! +<file name="log/test304.txt"> +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------).* +</strip> +<protocol> +POST /we/want/304 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+Content-Length: 1386
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------c3b2ef7f0bb8
+
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="file"; filename="test304.txt"
+Content-Type: text/plain
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
+------------------------------c3b2ef7f0bb8--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test305 b/tests/data/test305 new file mode 100644 index 000000000..858a0040e --- /dev/null +++ b/tests/data/test305 @@ -0,0 +1,35 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +FAILURE +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +insecure HTTPS without permission + </name> + <command> +https://%HOSTIP:%HTTPSPORT/want/305 --cacert moooo +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<errorcode> +77 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test306 b/tests/data/test306 new file mode 100644 index 000000000..95d4cef35 --- /dev/null +++ b/tests/data/test306 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +No headers at all, just data swsclose + +Let's get + +a little + +so that + +we + +have + +some + +test + +data to + +verify +</data> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> + <name> +HTTPS GET, receive no headers only data! + </name> + <command> +-k https://%HOSTIP:%HTTPSPORT/306 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /306 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test307 b/tests/data/test307 new file mode 100644 index 000000000..03c2b3c2d --- /dev/null +++ b/tests/data/test307 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Tue, 16 Jan 2007 18:00:14 GMT +Server: test-server/fake +Content-Length: 7 + +MooMoo +</data> +</reply> + +# +# Client-side +<client> +<features> +OpenSSL +</features> +<server> +https +</server> +<precheck> +perl %SRCDIR/libtest/test307.pl %CURL +</precheck> + + <name> +simple HTTPS GET with openssl engine + </name> + <command> +--engine openssl -k https://%HOSTIP:%HTTPSPORT/307 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /307 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test308 b/tests/data/test308 new file mode 100644 index 000000000..d20556a19 --- /dev/null +++ b/tests/data/test308 @@ -0,0 +1,34 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<features> +OpenSSL +</features> +<server> +https +</server> + <name> +simple HTTPS GET with invalid crypto engine + </name> + <command> +--engine invalid-crypto-engine-xyzzy -k https://%HOSTIP:%HTTPSPORT/308 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +53 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test309 b/tests/data/test309 new file mode 100644 index 000000000..dd0431206 --- /dev/null +++ b/tests/data/test309 @@ -0,0 +1,86 @@ +<testcase> +<info> +<keywords> +HTTP +HTTPS +HTTP GET +followlocation +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following to HTTPS URL + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +http +https +</server> + <name> +HTTP Location: redirect to HTTPS URL + </name> + <command> +-k http://%HOSTIP:%HTTPPORT/want/309 -L +</command> +# The data section doesn't do variable substitution, so we must assert this +<precheck> +perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%HTTPSPORT' ne '8991' );" +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/309 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/3090002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test31 b/tests/data/test31 new file mode 100644 index 000000000..b1171d81d --- /dev/null +++ b/tests/data/test31 @@ -0,0 +1,125 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +cookiejar +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 4
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: foobar=name; domain=anything.com; path=/ ; secure
+Set-Cookie:ismatch=this ; domain=127.0.0.1; path=/silly/
+Set-Cookie: sec1value=secure1 ; domain=127.0.0.1; path=/secure1/ ; secure
+Set-Cookie: sec2value=secure2 ; domain=127.0.0.1; path=/secure2/ ; secure=
+Set-Cookie: sec3value=secure3 ; domain=127.0.0.1; path=/secure3/ ; secure=
+Set-Cookie: sec4value=secure4 ; secure=; domain=127.0.0.1; path=/secure4/ ;
+Set-Cookie: sec5value=secure5 ; secure; domain=127.0.0.1; path=/secure5/ ;
+Set-Cookie: sec6value=secure6 ; secure ; domain=127.0.0.1; path=/secure6/ ;
+Set-Cookie: sec7value=secure7 ; secure ; domain=127.0.0.1; path=/secure7/ ;
+Set-Cookie: sec8value=secure8 ; secure= ; domain=127.0.0.1; path=/secure8/ ;
+Set-Cookie: secure=very1 ; secure=; domain=127.0.0.1; path=/secure9/;
+Set-Cookie: httpo1=value1 ; domain=127.0.0.1; path=/p1/; httponly
+Set-Cookie: httpo2=value2 ; domain=127.0.0.1; path=/p2/; httponly=
+Set-Cookie: httpo3=value3 ; httponly; domain=127.0.0.1; path=/p3/;
+Set-Cookie: httpo4=value4 ; httponly=; domain=127.0.0.1; path=/p4/;
+Set-Cookie: httponly=myvalue1 ; domain=127.0.0.1; path=/p4/; httponly
+Set-Cookie: httpandsec=myvalue2 ; domain=127.0.0.1; path=/p4/; httponly; secure
+Set-Cookie: httpandsec2=myvalue3; domain=127.0.0.1; path=/p4/; httponly=; secure
+Set-Cookie: httpandsec3=myvalue4 ; domain=127.0.0.1; path=/p4/; httponly; secure=
+Set-Cookie: httpandsec4=myvalue5 ; domain=127.0.0.1; path=/p4/; httponly=; secure=
+Set-Cookie: httpandsec5=myvalue6 ; domain=127.0.0.1; path=/p4/; secure; httponly=
+Set-Cookie: httpandsec6=myvalue7 ; domain=127.0.0.1; path=/p4/; secure=; httponly=
+Set-Cookie: httpandsec7=myvalue8 ; domain=127.0.0.1; path=/p4/; secure; httponly
+Set-Cookie: httpandsec8=myvalue9; domain=127.0.0.1; path=/p4/; secure=; httponly
+Set-Cookie: partmatch=present; domain=127.0.0.1 ; path=/;
+Set-Cookie:eat=this; domain=moo.foo.moo;
+Set-Cookie: eat=this-too; domain=.foo.moo;
+Set-Cookie: nodomainnovalue
+Set-Cookie: nodomain=value; expires=Fri Feb 2 11:56:27 GMT 2035
+Set-Cookie: novalue; domain=reallysilly
+Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: magic=yessir; path=/silly/; HttpOnly
+Set-Cookie: blexp=yesyes; domain=.0.0.1; domain=.0.0.1; expiry=totally bad;
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with weirdly formatted cookies and cookiejar storage + </name> +# Explicitly set the time zone to a known good one, in case the user is +# using one of the 'right' zones that take into account leap seconds +# which causes the cookie expiry times to be different. +<setenv> +TZ=GMT +</setenv> + <command> +http://%HOSTIP:%HTTPPORT/we/want/31 -b none -c log/jar31.txt +</command> +<precheck> +perl -e 'if ("%HOSTIP" !~ /127\.0\.0\.1$/) {print "Test only works for HOSTIP 127.0.0.1"; exit(1)}' +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/31 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/jar31.txt" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +.127.0.0.1 TRUE /silly/ FALSE 0 ismatch this +.127.0.0.1 TRUE /secure1/ TRUE 0 sec1value secure1 +.127.0.0.1 TRUE /secure2/ TRUE 0 sec2value secure2 +.127.0.0.1 TRUE /secure3/ TRUE 0 sec3value secure3 +.127.0.0.1 TRUE /secure4/ TRUE 0 sec4value secure4 +.127.0.0.1 TRUE /secure5/ TRUE 0 sec5value secure5 +.127.0.0.1 TRUE /secure6/ TRUE 0 sec6value secure6 +.127.0.0.1 TRUE /secure7/ TRUE 0 sec7value secure7 +.127.0.0.1 TRUE /secure8/ TRUE 0 sec8value secure8 +.127.0.0.1 TRUE /secure9/ TRUE 0 secure very1 +#HttpOnly_.127.0.0.1 TRUE /p1/ FALSE 0 httpo1 value1 +#HttpOnly_.127.0.0.1 TRUE /p2/ FALSE 0 httpo2 value2 +#HttpOnly_.127.0.0.1 TRUE /p3/ FALSE 0 httpo3 value3 +#HttpOnly_.127.0.0.1 TRUE /p4/ FALSE 0 httpo4 value4 +#HttpOnly_.127.0.0.1 TRUE /p4/ FALSE 0 httponly myvalue1 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec myvalue2 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec2 myvalue3 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec3 myvalue4 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec4 myvalue5 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec5 myvalue6 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec6 myvalue7 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec7 myvalue8 +#HttpOnly_.127.0.0.1 TRUE /p4/ TRUE 0 httpandsec8 myvalue9 +.127.0.0.1 TRUE / FALSE 0 partmatch present +127.0.0.1 FALSE /we/want/ FALSE 2054030187 nodomain value +#HttpOnly_127.0.0.1 FALSE /silly/ FALSE 0 magic yessir +.0.0.1 TRUE /we/want/ FALSE 0 blexp yesyes +</file> +</verify> +</testcase> diff --git a/tests/data/test310 b/tests/data/test310 new file mode 100644 index 000000000..e7a9379ab --- /dev/null +++ b/tests/data/test310 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +PEM certificate +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 7 + +MooMoo +</data> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https Server-localhost-sv.pem +</server> + <name> +simple HTTPS GET + </name> + <command> +--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/310 +</command> +# Ensure that we're running on localhost because we're checking the host name +<precheck> +perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /310 HTTP/1.1
+Host: localhost:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test311 b/tests/data/test311 new file mode 100644 index 000000000..0465ed1d3 --- /dev/null +++ b/tests/data/test311 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +PEM certificate +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https Server-localhost0h-sv.pem +</server> + <name> +HTTPS wrong subjectAltName but right CN + </name> + <command> +--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/311 +</command> +# Ensure that we're running on localhost because we're checking the host name +<precheck> +perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +51 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test312 b/tests/data/test312 new file mode 100644 index 000000000..af4422f43 --- /dev/null +++ b/tests/data/test312 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +PEM certificate +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https Server-localhost.nn-sv.pem +</server> + <name> +HTTPS GET to localhost and null-prefixed CN cert + </name> + <command> +--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/312 +</command> +# Ensure that we're running on localhost because we're checking the host name +<precheck> +perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +51 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test313 b/tests/data/test313 new file mode 100644 index 000000000..c54495a88 --- /dev/null +++ b/tests/data/test313 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +PEM certificate +CRL +</keywords> +</info> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https Server-localhost-sv.pem +</server> + <name> +CRL test + </name> + <command> +--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --crlfile %SRCDIR/certs/Server-localhost-sv.crl https://localhost:%HTTPSPORT/313 +</command> +# Ensure that we're running on localhost because we're checking the host name +<precheck> +perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );" +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +60 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test32 b/tests/data/test32 new file mode 100644 index 000000000..992ffcbcf --- /dev/null +++ b/tests/data/test32 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-G +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with -d and -G + </name> + <command> +-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/32 -G +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /32?foo=moo&moo=poo HTTP/1.1
+User-Agent: curl/7.9.5 (i686-pc-linux-gnu) libcurl 7.9.5-cvs (OpenSSL 0.9.5) (ipv6 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test320 b/tests/data/test320 new file mode 100644 index 000000000..899bec597 --- /dev/null +++ b/tests/data/test320 @@ -0,0 +1,95 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +TLS-SRP +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 200 OK
+Content-type: text/html
+
+ +<HTML><BODY> +<CENTER><H1>This is <a href="http://www.gnu.org/software/gnutls">GNUTLS</a></H1></CENTER> + + +<p>Session ID: <i>003030000100000001000000000000000030330001000000B062410001000000</i></p> +<h5>If your browser supports session resuming, then you should see the same session ID, when you press the <b>reload</b> button.</h5> +<p>Connected as user 'jsmith'.</p> +<P> +<TABLE border=1><TR><TD>Protocol version:</TD><TD>TLS1.2</TD></TR> +<TR><TD>Key Exchange:</TD><TD>SRP</TD></TR> +<TR><TD>Compression</TD><TD>NULL</TD></TR> +<TR><TD>Cipher</TD><TD>AES-128-CBC</TD></TR> +<TR><TD>MAC</TD><TD>SHA1</TD></TR> +<TR><TD>Ciphersuite</TD><TD>SRP_SHA_AES_128_CBC_SHA1</TD></TR></p></TABLE> +<hr><P>Your HTTP header was:<PRE>User-Agent: curl/7.21.4-DEV (x86_64-apple-darwin10.5.0) libcurl/7.21.4-DEV GnuTLS/2.10.4 zlib/1.2.5 libidn/1.19
+Host: localhost:9011
+Accept: */*
+
+</PRE></P> +</BODY></HTML> + +</data> +</reply> + +# Client-side +<client> +<server> +httptls+srp +</server> +<features> +TLS-SRP +</features> + <name> +simple TLS-SRP HTTPS GET, check user in response + </name> +<command> +--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword abc https://%HOSTIP:%HTTPTLSSRPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +</protocol> +<file name="log/curl320.out" mode="text"> +HTTP/1.0 200 OK
+Content-type: text/html
+
+ +<HTML><BODY> +<CENTER><H1>This is <a href="http://www.gnu.org/software/gnutls">GNUTLS</a></H1></CENTER> + + + +<h5>If your browser supports session resuming, then you should see the same session ID, when you press the <b>reload</b> button.</h5> +<p>Connected as user 'jsmith'.</p> +<P> +<TABLE border=1><TR><TD> +<TR><TD>Key Exchange:</TD><TD>SRP</TD></TR> +<TR><TD>Compression</TD><TD>NULL</TD></TR> +<TR><TD>Cipher</TD><TD>AES-128-CBC</TD></TR> +<TR><TD>MAC</TD><TD>SHA1</TD></TR> +<TR><TD>Ciphersuite</TD><TD>SRP_SHA_AES_128_CBC_SHA1</TD></TR></p></TABLE> + +Host: %HOSTIP:%HTTPTLSSRPPORT
+Accept: */*
+
+</PRE></P> +</BODY></HTML> + +</file> +<stripfile> +s/^<p>Session ID:.*// +s/^<hr><P>Your HTTP header was:.*// +s/Protocol version:.*// +</stripfile> +</verify> + +</testcase> diff --git a/tests/data/test321 b/tests/data/test321 new file mode 100644 index 000000000..ccdfb86d0 --- /dev/null +++ b/tests/data/test321 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +HTTPS +TLS-SRP +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +httptls+srp +</server> +<features> +TLS-SRP +</features> + <name> +TLS-SRP with bad username and password + </name> +<command> +--insecure --tlsauthtype SRP --tlsuser baduser --tlspassword badpass https://%HOSTIP:%HTTPTLSSRPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +35 +</errorcode> +</verify> + +</testcase> diff --git a/tests/data/test322 b/tests/data/test322 new file mode 100644 index 000000000..f35345ead --- /dev/null +++ b/tests/data/test322 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +HTTPS +TLS-SRP +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +httptls+srp +</server> +<features> +TLS-SRP +</features> + <name> +TLS-SRP with bad password + </name> +<command> +--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword badpass https://%HOSTIP:%HTTPTLSSRPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +35 +</errorcode> +</verify> + +</testcase> diff --git a/tests/data/test323 b/tests/data/test323 new file mode 100644 index 000000000..6439b4d43 --- /dev/null +++ b/tests/data/test323 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +HTTPS +TLS-SRP +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +https +</server> +<features> +TLS-SRP +</features> + <name> +TLS-SRP to non-TLS-SRP server + </name> +<command> +--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword badpass https://%HOSTIP:%HTTPSPORT/want/323 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +35 +</errorcode> +</verify> + +</testcase> diff --git a/tests/data/test324 b/tests/data/test324 new file mode 100644 index 000000000..bc1c48fea --- /dev/null +++ b/tests/data/test324 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +HTTPS +TLS-SRP +FAILURE +</keywords> +</info> + +# Client-side +<client> +<server> +httptls+srp +</server> +<features> +TLS-SRP +</features> + <name> +TLS-SRP with server cert checking + </name> +<command> # no --insecure +--tlsauthtype SRP --tlsuser jsmith --tlspassword abc https://%HOSTIP:%HTTPTLSSRPPORT/want/323 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +51 +</errorcode> +</verify> + +</testcase> diff --git a/tests/data/test33 b/tests/data/test33 new file mode 100644 index 000000000..82cf80b30 --- /dev/null +++ b/tests/data/test33 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +Resume +Content-Range +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 OK swsclose + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT with resume + </name> +<file name="log/test33.txt"> +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +012345678 +</file> + <command> +http://%HOSTIP:%HTTPPORT/33 -Tlog/test33.txt -C 50 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /33 HTTP/1.1
+Content-Range: bytes 50-99/100
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 50
+Expect: 100-continue
+
+012345678 +012345678 +012345678 +012345678 +012345678 +</protocol> +</verify> +</testcase> diff --git a/tests/data/test34 b/tests/data/test34 new file mode 100644 index 000000000..a332b8c4b --- /dev/null +++ b/tests/data/test34 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +chunked Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 funky chunky! +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc +
+0
+
+</data> +<datacheck> +HTTP/1.1 200 funky chunky! +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with chunked Transfer-Encoding + </name> + <command> +http://%HOSTIP:%HTTPPORT/34 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /34 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> + +</testcase> diff --git a/tests/data/test35 b/tests/data/test35 Binary files differnew file mode 100644 index 000000000..85733a456 --- /dev/null +++ b/tests/data/test35 diff --git a/tests/data/test350 b/tests/data/test350 new file mode 100644 index 000000000..9c22d307c --- /dev/null +++ b/tests/data/test350 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP root dir list multicwd + </name> + <command> +ftp://%HOSTIP:%FTPPORT// --ftp-method multicwd +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD /
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test351 b/tests/data/test351 new file mode 100644 index 000000000..5d44a647f --- /dev/null +++ b/tests/data/test351 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP root dir list nocwd + </name> + <command> +ftp://%HOSTIP:%FTPPORT// --ftp-method nocwd +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST /
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test352 b/tests/data/test352 new file mode 100644 index 000000000..d86889448 --- /dev/null +++ b/tests/data/test352 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP root dir list singlecwd + </name> + <command> +ftp://%HOSTIP:%FTPPORT// --ftp-method singlecwd +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD /
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test353 b/tests/data/test353 new file mode 100644 index 000000000..417b8c3ea --- /dev/null +++ b/tests/data/test353 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTP +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP home dir list singlecwd + </name> + <command> +ftp://%HOSTIP:%FTPPORT/ --ftp-method singlecwd +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test354 b/tests/data/test354 new file mode 100644 index 000000000..a6949328a --- /dev/null +++ b/tests/data/test354 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<servercmd> +REPLY USER 200 fine, proceed without password +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +FTP without password + </name> + <command> +ftp://%HOSTIP:%FTPPORT/354 +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PWD
+EPSV
+TYPE I
+SIZE 354
+RETR 354
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test36 b/tests/data/test36 new file mode 100644 index 000000000..4e3fd8c87 --- /dev/null +++ b/tests/data/test36 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +chunked Transfer-Encoding +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 funky chunky! +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +2
+a +
+ILLEGAL
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+</data> +<datacheck> +HTTP/1.1 200 funky chunky! +Server: fakeit/0.9 fakeitbad/1.0 +Transfer-Encoding: chunked +Connection: mooo + +a +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with bad chunked Transfer-Encoding + </name> + <command> +http://%HOSTIP:%HTTPPORT/36 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +56 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /36 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> + +</testcase> diff --git a/tests/data/test37 b/tests/data/test37 new file mode 100644 index 000000000..768762300 --- /dev/null +++ b/tests/data/test37 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<data> +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with nothing returned from server + </name> + <command> +http://%HOSTIP:%HTTPPORT/37 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +52 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /37 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> + +</testcase> diff --git a/tests/data/test38 b/tests/data/test38 new file mode 100644 index 000000000..75155866d --- /dev/null +++ b/tests/data/test38 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Resume +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.0 200 Mooo +Date: Mon, 13 Nov 2000 13:41:09 GMT +Server: myown/1.0 +Connection: close + +todelooooo lalalala yada yada, we know nothing about ranges ;-) +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP resume request without server supporting it + </name> + <command option="no-output"> +http://%HOSTIP:%HTTPPORT/want/38 -C - --no-include -o log/fewl.txt +</command> +<file name="log/fewl.txt"> +This text is here to simulate a partly downloaded file to resume +download on. +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +33 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/38 HTTP/1.1
+Range: bytes=78-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +# the download target file must remain untouched +<file name="log/fewl.txt"> +This text is here to simulate a partly downloaded file to resume +download on. +</file> +</verify> +</testcase> diff --git a/tests/data/test39 b/tests/data/test39 new file mode 100644 index 000000000..a2e1441d1 --- /dev/null +++ b/tests/data/test39 @@ -0,0 +1,91 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting with filename= and type= + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/39 -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@log/test39.txt;type=moo/foobar;filename=fakerfile" -F file2=@log/test39.txt +</command> +# We create this file before the command is invoked! +<file name="log/test39.txt"> +foo bar +This is a bar foo +bar +foo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|-------).* +</strip> +<protocol> +POST /we/want/39 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 810
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
+
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="str1"
+
+@literal
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="str2"
+
+<verbatim;type=xxx/yyy
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="file"; filename="fakerfile"
+Content-Type: moo/foobar
+
+foo bar +This is a bar foo +bar +foo +
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="file2"; filename="test39.txt"
+Content-Type: text/plain
+
+foo bar +This is a bar foo +bar +foo +
+------------------------------24e78000bd32--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test4 b/tests/data/test4 new file mode 100644 index 000000000..df69d3274 --- /dev/null +++ b/tests/data/test4 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP added headers +HTTP replaced headers +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +Replaced internal and added custom HTTP headers + </name> + <command> + -H "extra-header: here" -H "Accept: replaced" -H "X-Custom-Header;" -H "X-Test: foo; " -H "X-Test:" -H "X-Test2: foo;" -H "X-Test3: " -H "X-Test4; " -H "X-Test5;ignored" http://%HOSTIP:%HTTPPORT/4 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /4 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+extra-header: here
+Accept: replaced
+X-Custom-Header:
+X-Test: foo;
+X-Test2: foo;
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test40 b/tests/data/test40 new file mode 100644 index 000000000..6be0d1615 --- /dev/null +++ b/tests/data/test40 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose
+Location: ../moo.html/?name=d a niel&testcase=/400002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose
+Location: ../moo.html/?name=d a niel&testcase=/400002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP redirect with whitespace after ? (and conversion) + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/40 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/40 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/moo.html/?name=d+a+niel&testcase=/400002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test400 b/tests/data/test400 new file mode 100644 index 000000000..75d59791e --- /dev/null +++ b/tests/data/test400 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +FTPS +PASV +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTPS server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS dir list PASV unencrypted data + </name> + <command> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test401 b/tests/data/test401 new file mode 100644 index 000000000..cb01c1c2c --- /dev/null +++ b/tests/data/test401 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTPS +EPSV +STOR +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS PASV upload file + </name> +<file name="log/test401.txt"> +data + to + see +that FTPS +works + so does it? +</file> + <command> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/401 -T log/test401.txt +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +data + to + see +that FTPS +works + so does it? +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+STOR 401
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test402 b/tests/data/test402 new file mode 100644 index 000000000..272c4e309 --- /dev/null +++ b/tests/data/test402 @@ -0,0 +1,35 @@ +<testcase> +<info> +<keywords> +FTPS +FAILURE +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftp +</server> + <name> +FTP SSL required on non-SSL server + </name> + <command> +-k --ftp-ssl-reqd ftp://%HOSTIP:%FTPPORT/402 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +64 +</errorcode> +<protocol> +AUTH SSL
+AUTH TLS
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test403 b/tests/data/test403 new file mode 100644 index 000000000..2b8ff5e29 --- /dev/null +++ b/tests/data/test403 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +FTPS +PASV +LIST +CCC +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTPS server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS with CCC not supported by server + </name> + <command> +-k --ftp-ssl-control --ftp-ssl-ccc ftps://%HOSTIP:%FTPSPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+CCC
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test404 b/tests/data/test404 new file mode 100644 index 000000000..97666302b --- /dev/null +++ b/tests/data/test404 @@ -0,0 +1,31 @@ +<testcase> +<info> +<keywords> +FTPS +FAILURE +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS with invalid cacert + </name> + <command> +--ftp-ssl-control --cacert moooo ftps://%HOSTIP:%FTPSPORT/ +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +77 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test405 b/tests/data/test405 new file mode 100644 index 000000000..29e7af28e --- /dev/null +++ b/tests/data/test405 @@ -0,0 +1,34 @@ +<testcase> +<info> +<keywords> +FTPS +FAILURE +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftp +</server> + <name> +FTPS operation to FTP port + </name> + <command> +-m 5 -k ftps://%HOSTIP:%FTPPORT/path/to/file/405 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# error code 35 is CURLE_SSL_CONNECT_ERROR +# GnuTLS seems to not fail on its handshake but instead times out which gives +# error 28 +<errorcode> +35,28 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test406 b/tests/data/test406 new file mode 100644 index 000000000..3259bc6ae --- /dev/null +++ b/tests/data/test406 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +FTPS +PORT +LIST +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTPS server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS dir list, PORT with specified IP + </name> + <command> +-k --ftp-ssl-control -P %CLIENTIP ftps://%HOSTIP:%FTPSPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test407 b/tests/data/test407 new file mode 100644 index 000000000..8c14fa846 --- /dev/null +++ b/tests/data/test407 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTPS +PASV +RETR +</keywords> +</info> + +# Server-side +<reply> +<data> +data blobb +</data> + +# data is sent to stdout +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +Get two FTPS files from the same remote dir: no second CWD + </name> + <command> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/a/path/407 ftps://%HOSTIP:%FTPSPORT/a/path/407 +</command> +<stdout> +data blobb +data blobb +</stdout> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+CWD a
+CWD path
+EPSV
+TYPE I
+SIZE 407
+RETR 407
+EPSV
+SIZE 407
+RETR 407
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test408 b/tests/data/test408 new file mode 100644 index 000000000..d0aa13b8a --- /dev/null +++ b/tests/data/test408 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +FTPS +PORT +STOR +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS PORT upload with CWD + </name> + <command> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/CWD/STOR/RETR/408 -T log/upload408 -P - +</command> +<file name="log/upload408"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+CWD CWD
+CWD STOR
+CWD RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 408
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test409 b/tests/data/test409 new file mode 100644 index 000000000..d7801a841 --- /dev/null +++ b/tests/data/test409 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +FTPS +EPSV +STOR +</keywords> +</info> + +# Client-side +<client> +<features> +SSL +</features> +<server> +ftps +</server> + <name> +FTPS PASV upload file + </name> +<file name="log/test409.txt"> +data + to + see +that FTP +works + so does it? +</file> + <command> +-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/409 -T log/test409.txt +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +data + to + see +that FTP +works + so does it? +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+STOR 409
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test41 b/tests/data/test41 new file mode 100644 index 000000000..08eca38c9 --- /dev/null +++ b/tests/data/test41 @@ -0,0 +1,32 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +FAILURE +</keywords> +</info> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP formpost with missing file + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/41 -F moo=@boo +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +26 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test42 b/tests/data/test42 new file mode 100644 index 000000000..e303f3a27 --- /dev/null +++ b/tests/data/test42 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose
+Location: ../m o o.html/420002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data> +<data2> +HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose
+Location: ../m o o.html/420002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP redirect with whitespace in path (and conversion) + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/42 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/42 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/m%20o%20o.html/420002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test43 b/tests/data/test43 new file mode 100644 index 000000000..e5535bb3a --- /dev/null +++ b/tests/data/test43 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +HTTP proxy +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/430002.txt?coolsite=yes +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data/430002.txt?coolsite=yes +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP Location: following over HTTP proxy + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/43 -L -x %HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/want/43 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/want/data/430002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test44 b/tests/data/test44 new file mode 100644 index 000000000..8220a1aa1 --- /dev/null +++ b/tests/data/test44 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP replaced headers +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting without Expect: header + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/44 -F name=daniel -F tool=curl -F file=@log/test44.txt -H "Expect:" +</command> +# We create this file before the command is invoked! +<file name="log/test44.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------).* +</strip> +<protocol> +POST /we/want/44 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 408
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test44.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------7c633d5c27ce--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test45 b/tests/data/test45 new file mode 100644 index 000000000..3eb9ba943 --- /dev/null +++ b/tests/data/test45 @@ -0,0 +1,76 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data.cgi?moo=http://&/450002 +Connection: close + +This server reply is for testing a simple Location: following + +</data> +<data2> +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</data2> +<datacheck> +HTTP/1.1 301 This is a weirdo text message swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: data.cgi?moo=http://&/450002 +Connection: close + +HTTP/1.1 200 Followed here fine swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 52 + +If this is received, the location following worked + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +simple HTTP Location: without protocol in initial URL + </name> + <command> +%HOSTIP:%HTTPPORT/want/45 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/45 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data.cgi?moo=http://&/450002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test46 b/tests/data/test46 new file mode 100644 index 000000000..f73acdee1 --- /dev/null +++ b/tests/data/test46 @@ -0,0 +1,89 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +cookiejar +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: ckyPersistent=permanent; expires=Fri, 02-Feb-2035 11:56:27 GMT; path=/
+Set-Cookie: ckySession=temporary; path=/
+Set-Cookie: ASPSESSIONIDQGGQQSJJ=GKNBDIFAAOFDPDAIEAKDIBKE; path=/
+Set-Cookie: justaname=; path=/;
+Set-Cookie: simplyhuge=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+Cache-control: private
+Content-Length: 41
+
+This server reply is for testing cookies +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, get cookies and store in cookie jar + </name> +# Explicitly set the time zone to a known good one, in case the user is +# using one of the 'right' zones that take into account leap seconds +# which causes the cookie expiry times to be different from what we expect. +<setenv> +TZ=GMT +</setenv> + <command> +%HOSTIP:%HTTPPORT/want/46 -c log/jar46 -b log/injar46 +</command> +<file name="log/injar46"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This is generated by libcurl! Do not edit. + +www.fake.come FALSE / FALSE 1022144953 cookiecliente si +www.loser.com FALSE / FALSE 1139150993 UID 99 +%HOSTIP FALSE / FALSE 1439150993 mooo indeed +#HttpOnly_%HOSTIP FALSE /w FALSE 1439150993 mooo2 indeed2 +%HOSTIP FALSE /wa FALSE 0 empty +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/46 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: empty=; mooo2=indeed2; mooo=indeed
+
+</protocol> +<file name="log/jar46" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +www.fake.come FALSE / FALSE 1022144953 cookiecliente si +www.loser.com FALSE / FALSE 1139150993 UID 99 +%HOSTIP FALSE / FALSE 1439150993 mooo indeed +#HttpOnly_%HOSTIP FALSE /w FALSE 1439150993 mooo2 indeed2 +%HOSTIP FALSE /wa FALSE 0 empty +%HOSTIP FALSE / FALSE 2054030187 ckyPersistent permanent +%HOSTIP FALSE / FALSE 0 ckySession temporary +%HOSTIP FALSE / FALSE 0 ASPSESSIONIDQGGQQSJJ GKNBDIFAAOFDPDAIEAKDIBKE +%HOSTIP FALSE / FALSE 0 justaname +%HOSTIP FALSE /want/ FALSE 0 simplyhuge zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +</file> +</verify> +</testcase> diff --git a/tests/data/test47 b/tests/data/test47 new file mode 100644 index 000000000..0a6d4da3b --- /dev/null +++ b/tests/data/test47 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP/1.0 +</keywords> +</info> +# +# Server-side +<reply name="47"> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +-foo- within foo -!foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +simple HTTP 1.0 GET + </name> + <command> +http://%HOSTIP:%HTTPPORT/47 -0 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /47 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> + +</testcase> diff --git a/tests/data/test48 b/tests/data/test48 new file mode 100644 index 000000000..7ee05ad37 --- /dev/null +++ b/tests/data/test48 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP HEAD +-G +</keywords> +</info> +# +# Server-side +<reply> +<servercmd> +connection-monitor +</servercmd> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with -d and -G and -I + </name> + <command> +-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/48 -G -I http://%HOSTIP:%HTTPPORT/48 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +HEAD /48?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+HEAD /48?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+[DISCONNECT] +</protocol> +</verify> +</testcase> diff --git a/tests/data/test49 b/tests/data/test49 new file mode 100644 index 000000000..4a4175e32 --- /dev/null +++ b/tests/data/test49 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: ../moo.html/490002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: ../moo.html/490002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP follow redirect with ../ + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/49 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/49 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/moo.html/490002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test5 b/tests/data/test5 new file mode 100644 index 000000000..b62f1a127 --- /dev/null +++ b/tests/data/test5 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP over proxy + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/5#5 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/we/want/that/page/5 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test50 b/tests/data/test50 new file mode 100644 index 000000000..84b05da7b --- /dev/null +++ b/tests/data/test50 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: ../../moo.html/500002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: ../../moo.html/500002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP follow redirect with ../../ + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/50 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/50 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/moo.html/500002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test500 b/tests/data/test500 new file mode 100644 index 000000000..f9b17f37c --- /dev/null +++ b/tests/data/test500 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply name="1"> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib500 +</tool> + + <name> +simple libcurl HTTP GET tool + </name> + <command> +http://%HOSTIP:%HTTPPORT/500 log/ip500 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file name="log/ip500" mode="text"> +IP: %HOSTIP +</file> +<protocol> +GET /500 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test501 b/tests/data/test501 new file mode 100644 index 000000000..9c9dcc9e3 --- /dev/null +++ b/tests/data/test501 @@ -0,0 +1,40 @@ +<testcase> +<info> +<keywords> +missing URL +</keywords> +</info> +# +# Server-side +<reply name="1"> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib501 +</tool> + + <name> +simple libcurl attempt operation without URL set + </name> + <command> +http://%HOSTIP:%HTTPPORT/501 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test502 b/tests/data/test502 new file mode 100644 index 000000000..f73a4eb30 --- /dev/null +++ b/tests/data/test502 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +FILE +</keywords> +</info> +# +# Server-side +<reply> +<data mode="text"> +foo + bar swsclose +bar + foo +moo +</data> +</reply> + +# Client-side +<client> +<server> +file +</server> +# tool is what to use instead of 'curl' +<tool> +lib502 +</tool> + + <name> +simple multi file:// get + </name> + <command> +file://%PWD/log/test502.txt +</command> +<file name="log/test502.txt"> +foo + bar swsclose +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +</verify> +</testcase> diff --git a/tests/data/test503 b/tests/data/test503 new file mode 100644 index 000000000..2acfc4a16 --- /dev/null +++ b/tests/data/test503 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +HTTP proxy Basic auth +proxytunnel +multi +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +connection-monitor +</servercmd> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" + +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" + +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +http-proxy +</server> +# tool is what to use instead of 'curl' +<tool> +lib503 +</tool> + + <name> +simple multi http:// through proxytunnel with authentication info + </name> + <command> +http://%HOSTIP:%HTTPPORT/503 %HOSTIP:%PROXYPORT +</command> +<file name="log/test503.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<proxy> +CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Proxy-Authorization: Basic dGVzdDppbmc=
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /503 HTTP/1.1
+Authorization: Basic dGVzdDppbmc=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+[DISCONNECT] +</protocol> +</verify> +</testcase> diff --git a/tests/data/test504 b/tests/data/test504 new file mode 100644 index 000000000..2d3a3dd0d --- /dev/null +++ b/tests/data/test504 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +multi +FAILURE +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib504 +</tool> + + <name> +simple multi through local proxy without listener + </name> + <command> +http://%HOSTIP:%HTTPSPORT/504 %HOSTIP:55555 +</command> +</client> + +# Verify data after the test has been "shot" +# TEST_ERR_SUCCESS is errorcode 120 +<verify> +<errorcode> +120 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test505 b/tests/data/test505 new file mode 100644 index 000000000..d9e0fd297 --- /dev/null +++ b/tests/data/test505 @@ -0,0 +1,60 @@ +<testcase> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib505 +</tool> + + <name> +FTP upload with rename after transfer + </name> + <command> +ftp://%HOSTIP:%FTPPORT/505 log/upload505 +</command> +<file name="log/upload505"> +Contents +of +a file +to verify +ftp +upload + + +works? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +Contents +of +a file +to verify +ftp +upload + + +works? +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 505
+RNFR 505
+RNTO 505-forreal
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test506 b/tests/data/test506 new file mode 100644 index 000000000..a61e2fc00 --- /dev/null +++ b/tests/data/test506 @@ -0,0 +1,175 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +shared cookies +</keywords> +</info> + +# 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=Sat Feb 2 11:56:27 GMT 2030 +Set-Cookie: test2=two; domain=host.foo.com; expires=Sat Feb 2 11:56:27 GMT 2030 +Set-Cookie: test3=three; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030 +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=Sat Feb 2 11:56:27 GMT 2030 +Set-Cookie: test5=five; domain=host.foo.com; expires=Sat Feb 2 11:56:27 GMT 2030 +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=Sat May 5 GMT 11:56:27 2035 +Set-Cookie: test1=overwritten1; domain=foo.com; expires=Thu Mar 3 GMT 11:56:27 2033 +Content-Type: text/html +Content-Length: 32 + +run 3: overwrite cookie 1 and 4 +</data3> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +HTTP with shared cookie list (and dns cache) +</name> +# Explicitly set the time zone to a known good one, in case the user is +# using one of the 'right' zones that take into account leap seconds +# which causes the cookie expiry times to be different. +<setenv> +TZ=GMT +</setenv> +<tool> +lib506 +</tool> +<command> +http://%HOSTIP:%HTTPPORT/506 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout mode="text"> +GLOBAL_INIT +SHARE_INIT +CURLSHOPT_LOCKFUNC +CURLSHOPT_UNLOCKFUNC +CURLSHOPT_USERDATA +CURL_LOCK_DATA_COOKIE +CURL_LOCK_DATA_DNS +*** run 1 +CURLOPT_SHARE +lock: share [Pigs in space]: 0 +unlock: share [Pigs in space]: 1 +PERFORM +lock: dns [Pigs in space]: 2 +unlock: dns [Pigs in space]: 3 +lock: dns [Pigs in space]: 4 +unlock: dns [Pigs in space]: 5 +lock: cookie [Pigs in space]: 6 +unlock: cookie [Pigs in space]: 7 +lock: cookie [Pigs in space]: 8 +unlock: cookie [Pigs in space]: 9 +lock: cookie [Pigs in space]: 10 +unlock: cookie [Pigs in space]: 11 +lock: cookie [Pigs in space]: 12 +unlock: cookie [Pigs in space]: 13 +run 1: set cookie 1, 2 and 3 +lock: dns [Pigs in space]: 14 +unlock: dns [Pigs in space]: 15 +CLEANUP +lock: cookie [Pigs in space]: 16 +unlock: cookie [Pigs in space]: 17 +lock: share [Pigs in space]: 18 +unlock: share [Pigs in space]: 19 +*** run 2 +CURLOPT_SHARE +lock: share [Pigs in space]: 20 +unlock: share [Pigs in space]: 21 +PERFORM +lock: dns [Pigs in space]: 22 +unlock: dns [Pigs in space]: 23 +lock: cookie [Pigs in space]: 24 +unlock: cookie [Pigs in space]: 25 +lock: cookie [Pigs in space]: 26 +unlock: cookie [Pigs in space]: 27 +lock: cookie [Pigs in space]: 28 +unlock: cookie [Pigs in space]: 29 +run 2: set cookie 4 and 5 +lock: dns [Pigs in space]: 30 +unlock: dns [Pigs in space]: 31 +CLEANUP +lock: cookie [Pigs in space]: 32 +unlock: cookie [Pigs in space]: 33 +lock: share [Pigs in space]: 34 +unlock: share [Pigs in space]: 35 +*** run 3 +CURLOPT_SHARE +lock: share [Pigs in space]: 36 +unlock: share [Pigs in space]: 37 +CURLOPT_COOKIEJAR +PERFORM +lock: dns [Pigs in space]: 38 +unlock: dns [Pigs in space]: 39 +lock: cookie [Pigs in space]: 40 +unlock: cookie [Pigs in space]: 41 +lock: cookie [Pigs in space]: 42 +unlock: cookie [Pigs in space]: 43 +lock: cookie [Pigs in space]: 44 +unlock: cookie [Pigs in space]: 45 +run 3: overwrite cookie 1 and 4 +lock: dns [Pigs in space]: 46 +unlock: dns [Pigs in space]: 47 +try SHARE_CLEANUP... +lock: share [Pigs in space]: 48 +unlock: share [Pigs in space]: 49 +SHARE_CLEANUP failed, correct +CLEANUP +lock: cookie [Pigs in space]: 50 +unlock: cookie [Pigs in space]: 51 +lock: share [Pigs in space]: 52 +unlock: share [Pigs in space]: 53 +SHARE_CLEANUP +lock: share [Pigs in space]: 54 +unlock: share [Pigs in space]: 55 +GLOBAL_CLEANUP +</stdout> +<stderr> +http://%HOSTIP:%HTTPPORT/506 +</stderr> +<file name="log/jar506" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +.foo.com TRUE / FALSE 1993463787 test1 overwritten1 +.host.foo.com TRUE / FALSE 1896263787 test2 two +.foo.com TRUE / FALSE 1896263787 test3 three +.host.foo.com TRUE / FALSE 2061978987 test4 overwritten4 +.host.foo.com TRUE / FALSE 1896263787 test5 five +</file> +</verify> +</testcase> diff --git a/tests/data/test507 b/tests/data/test507 new file mode 100644 index 000000000..9549bd986 --- /dev/null +++ b/tests/data/test507 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +HTTP +multi +FAILURE +non-existing host +</keywords> +</info> + +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +multi interface get with non-existing host name +</name> +<tool> +lib507 +</tool> +<command> +http://non-existing-host.haxx.se/ +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +6 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test508 b/tests/data/test508 new file mode 100644 index 000000000..5cd4b8c34 --- /dev/null +++ b/tests/data/test508 @@ -0,0 +1,51 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib508 +</tool> + + <name> +send HTTP POST using read callback + </name> + <command> +http://%HOSTIP:%HTTPPORT/508 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +# remove CR that CURLOPT_TRANSFERTEXT added, when CharConv enabled: +s/^(this is what we post to the silly web server)\r\n/$1\n/ if($has_charconv) +</strippart> +<protocol> +POST /508 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 45
+Content-Type: application/x-www-form-urlencoded
+
+this is what we post to the silly web server +</protocol> +</verify> +</testcase> diff --git a/tests/data/test51 b/tests/data/test51 new file mode 100644 index 000000000..b58c3570e --- /dev/null +++ b/tests/data/test51 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: ../../../../../../../510002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: ../../../../../../../510002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP follow redirect with excessive ../ + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/51 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/51 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /510002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test510 b/tests/data/test510 new file mode 100644 index 000000000..8313f51c3 --- /dev/null +++ b/tests/data/test510 @@ -0,0 +1,57 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib510 +</tool> + + <name> +send HTTP POST using read callback, using chunked transfer-encoding + </name> + <command> +http://%HOSTIP:%HTTPPORT/510 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +POST /510 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+3
+one
+3
+two
+5
+three
+1d
+and a final longer crap: four
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test511 b/tests/data/test511 new file mode 100644 index 000000000..81fe657f9 --- /dev/null +++ b/tests/data/test511 @@ -0,0 +1,44 @@ +<testcase> +# +# Server-side +<reply> +<servercmd> +REPLY MDTM 550 bluah you f00l! +REPLY SIZE 550 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib511 +</tool> + + <name> +FTP with FILETIME and NOBODY but missing file + </name> + <command> +ftp://%HOSTIP:%FTPPORT/511 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +# CURLE_FTP_COULDNT_RETR_FILE +<errorcode> +19 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 511
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test512 b/tests/data/test512 new file mode 100644 index 000000000..516a50388 --- /dev/null +++ b/tests/data/test512 @@ -0,0 +1,46 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: yes
+Connection: close
+
+hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib512 +</tool> + + <name> +simple curl_easy_duplicate() test + </name> + <command> +http://%HOSTIP:%HTTPPORT/512 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /512 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test513 b/tests/data/test513 new file mode 100644 index 000000000..7d8e69b87 --- /dev/null +++ b/tests/data/test513 @@ -0,0 +1,42 @@ +<testcase> +# +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib513 +</tool> + + <name> +send HTTP POST using read callback that returns CURL_READFUNC_ABORT + </name> +# the 1s post-command delay helps to prevent a spurious failure on s390 + <command delay="1"> +http://%HOSTIP:%HTTPPORT/513 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +POST /513 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 1
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> +# 42 - aborted by callback +<errorcode> +42 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test514 b/tests/data/test514 new file mode 100644 index 000000000..bd6da02db --- /dev/null +++ b/tests/data/test514 @@ -0,0 +1,51 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib514 +</tool> + <name> +First set options to POST and then to make HEAD + </name> +# the 1s post-command delay helps to prevent a spurious failure on s390 + <command delay="1"> +http://%HOSTIP:%HTTPPORT/514 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +HEAD /514 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test515 b/tests/data/test515 new file mode 100644 index 000000000..9de0ac2b9 --- /dev/null +++ b/tests/data/test515 @@ -0,0 +1,48 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 3 + +OK +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib515 +</tool> + + <name> +make a POSTFIELDS set to NULL with POSTFIELDSIZE set to zero + </name> + <command> +http://%HOSTIP:%HTTPPORT/515 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /515 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test516 b/tests/data/test516 new file mode 100644 index 000000000..22c39dc5e --- /dev/null +++ b/tests/data/test516 @@ -0,0 +1,47 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 3 + +OK +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib516 +</tool> + + <name> +make a HTTPPOST set to NULL + </name> + <command> +http://%HOSTIP:%HTTPPORT/516 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +POST /516 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test517 b/tests/data/test517 new file mode 100644 index 000000000..7b703b467 --- /dev/null +++ b/tests/data/test517 @@ -0,0 +1,123 @@ +<testcase> +# +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +none +</server> +# tool is what to use instead of 'curl' +<tool> +lib517 +</tool> + + <name> +curl_getdate() testing + </name> + <command> +nothing +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<stdout mode="text"> +0: Sun, 06 Nov 1994 08:49:37 GMT => 784111777 +1: Sunday, 06-Nov-94 08:49:37 GMT => 784111777 +2: Sun Nov 6 08:49:37 1994 => 784111777 +3: 06 Nov 1994 08:49:37 GMT => 784111777 +4: 06-Nov-94 08:49:37 GMT => 784111777 +5: Nov 6 08:49:37 1994 => 784111777 +6: 06 Nov 1994 08:49:37 => 784111777 +7: 06-Nov-94 08:49:37 => 784111777 +8: 1994 Nov 6 08:49:37 => 784111777 +9: GMT 08:49:37 06-Nov-94 Sunday => 784111777 +10: 94 6 Nov 08:49:37 => 784111777 +11: 1994 Nov 6 => 784080000 +12: 06-Nov-94 => 784080000 +13: Sun Nov 6 94 => 784080000 +14: 1994.Nov.6 => 784080000 +15: Sun/Nov/6/94/GMT => 784080000 +16: Sun, 06 Nov 1994 08:49:37 CET => 784108177 +17: 06 Nov 1994 08:49:37 EST => 784129777 +18: Sun, 12 Sep 2004 15:05:58 -0700 => 1095026758 +19: Sat, 11 Sep 2004 21:32:11 +0200 => 1094931131 +20: 20040912 15:05:58 -0700 => 1095026758 +21: 20040911 +0200 => 1094853600 +22: Thu, 01-Jan-1970 00:59:59 GMT => 3599 +23: Thu, 01-Jan-1970 01:00:00 GMT => 3600 +24: Sat, 15-Apr-17 21:01:22 GMT => 1492290082 +25: Thu, 19-Apr-2007 16:00:00 GMT => 1176998400 +26: Wed, 25 Apr 2007 21:02:13 GMT => 1177534933 +27: Thu, 19/Apr\2007 16:00:00 GMT => 1176998400 +28: Fri, 1 Jan 2010 01:01:50 GMT => 1262307710 +29: Wednesday, 1-Jan-2003 00:00:00 GMT => 1041379200 +30: , 1-Jan-2003 00:00:00 GMT => 1041379200 +31: 1-Jan-2003 00:00:00 GMT => 1041379200 +32: 1-Jan-2003 00:00:00 GMT => 1041379200 +33: Wed,18-Apr-07 22:50:12 GMT => 1176936612 +34: WillyWonka , 18-Apr-07 22:50:12 GMT => -1 +35: WillyWonka , 18-Apr-07 22:50:12 => -1 +36: WillyWonka , 18-apr-07 22:50:12 => -1 +37: Mon, 18-Apr-1977 22:50:13 GMT => 230251813 +38: Mon, 18-Apr-77 22:50:13 GMT => 230251813 +39: "Sat, 15-Apr-17\"21:01:22\"GMT" => 1492290082 +40: Partyday, 18- April-07 22:50:12 => -1 +41: Partyday, 18 - Apri-07 22:50:12 => -1 +42: Wednes, 1-Januar-2003 00:00:00 GMT => -1 +43: Sat, 15-Apr-17 21:01:22 => 1492290082 +44: Sat, 15-Apr-17 21:01:22 GMT-2 => 1492290082 +45: Sat, 15-Apr-17 21:01:22 GMT BLAH => 1492290082 +46: Sat, 15-Apr-17 21:01:22 GMT-0400 => 1492290082 +47: Sat, 15-Apr-17 21:01:22 GMT-0400 (EDT) => 1492290082 +48: Sat, 15-Apr-17 21:01:22 DST => -1 +49: Sat, 15-Apr-17 21:01:22 -0400 => 1492304482 +50: Sat, 15-Apr-17 21:01:22 (hello there) => -1 +51: Sat, 15-Apr-17 21:01:22 11:22:33 => -1 +52: Sat, 15-Apr-17 ::00 21:01:22 => -1 +53: Sat, 15-Apr-17 boink:z 21:01:22 => -1 +54: Sat, 15-Apr-17 91:22:33 21:01:22 => -1 +55: Thu Apr 18 22:50:12 2007 GMT => 1176936612 +56: 22:50:12 Thu Apr 18 2007 GMT => 1176936612 +57: Thu 22:50:12 Apr 18 2007 GMT => 1176936612 +58: Thu Apr 22:50:12 18 2007 GMT => 1176936612 +59: Thu Apr 18 22:50:12 2007 GMT => 1176936612 +60: Thu Apr 18 2007 22:50:12 GMT => 1176936612 +61: Thu Apr 18 2007 GMT 22:50:12 => 1176936612 +62: Sat, 15-Apr-17 21:01:22 GMT => 1492290082 +63: 15-Sat, Apr-17 21:01:22 GMT => 1492290082 +64: 15-Sat, Apr 21:01:22 GMT 17 => 1492290082 +65: 15-Sat, Apr 21:01:22 GMT 2017 => 1492290082 +66: 15 Apr 21:01:22 2017 => 1492290082 +67: 15 17 Apr 21:01:22 => 1492290082 +68: Apr 15 17 21:01:22 => 1492290082 +69: Apr 15 21:01:22 17 => 1492290082 +70: 2017 April 15 21:01:22 => -1 +71: 15 April 2017 21:01:22 => -1 +72: 98 April 17 21:01:22 => -1 +73: Thu, 012-Aug-2008 20:49:07 GMT => 1218574147 +74: Thu, 999999999999-Aug-2007 20:49:07 GMT => -1 +75: Thu, 12-Aug-2007 20:61:99999999999 GMT => -1 +76: IAintNoDateFool => -1 +77: Thu Apr 18 22:50 2007 GMT => 1176936600 +78: 20110623 12:34:56 => 1308832496 +79: 20110632 12:34:56 => -1 +80: 20110623 56:34:56 => -1 +81: 20111323 12:34:56 => -1 +82: 20110623 12:34:79 => -1 +83: Wed, 31 Dec 2008 23:59:60 GMT => 1230768000 +</stdout> + +# This test case previously tested an overflow case ("2094 Nov 6 => +# 2147483647") for 32bit time_t, but since some systems have 64bit time_t and +# handles this (returning 3939840000), and some 64bit-time_t systems don't +# handle this and return -1 for this, it turned very tricky to write a fine +# test case and thus it is now removed until we have a way to write test cases +# for this kind of things. + +</verify> +</testcase> diff --git a/tests/data/test518 b/tests/data/test518 new file mode 100644 index 000000000..8e52615c5 --- /dev/null +++ b/tests/data/test518 @@ -0,0 +1,60 @@ +<testcase> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +getrlimit +</features> +# tool is what to use instead of 'curl' +<tool> +lib518 +</tool> +# precheck is a command line to run before the test, to see if we can execute +# the test or not +<precheck> +./libtest/lib518 check +</precheck> + + <name> +HTTP GET with more than FD_SETSIZE descriptors open + </name> + <command> +http://%HOSTIP:%HTTPPORT/518 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /518 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test519 b/tests/data/test519 new file mode 100644 index 000000000..c6bc8615b --- /dev/null +++ b/tests/data/test519 @@ -0,0 +1,71 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK swsbounce +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 8 + +content +</data> +<data1> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 + +content2 +</data1> +<datacheck> +HTTP/1.1 200 OK swsbounce +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 8 + +content +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 9 + +content2 +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib519 +</tool> + + <name> +GET same URL twice with different users + </name> + <command> +http://%HOSTIP:%HTTPPORT/519 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /519 HTTP/1.1
+Authorization: Basic bW9uc3Rlcjp1bmRlcmJlZA==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /519 HTTP/1.1
+Authorization: Basic YW5vdGhlcm1vbnN0ZXI6aW53YXJkcm9iZQ==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test52 b/tests/data/test52 new file mode 100644 index 000000000..14fa42bfd --- /dev/null +++ b/tests/data/test52 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: ./520002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: ./520002 +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Location: this should be ignored +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close + +body +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP follow redirect with ./-prefix + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/are/all/twits/52 -L +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/are/all/twits/52 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/twits/520002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test520 b/tests/data/test520 new file mode 100644 index 000000000..0938b5802 --- /dev/null +++ b/tests/data/test520 @@ -0,0 +1,47 @@ +<testcase> +# +# Server-side +<reply> +<data> +contents of file +</data> +<servercmd> +REPLY MDTM 213 20030405060708 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib520 +</tool> + + <name> +FTP RETR with FILETIME + </name> + <command> +ftp://%HOSTIP:%FTPPORT/520 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> + +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 520
+EPSV
+TYPE I
+SIZE 520
+RETR 520
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test521 b/tests/data/test521 new file mode 100644 index 000000000..9bc5501f4 --- /dev/null +++ b/tests/data/test521 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +FTP +PASV +CURLOPT_PORT +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib521 +</tool> + <name> +FTP dir list PASV with CURLOPT_PORT + </name> + <command> +ftp://%HOSTIP/521/ %FTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER xxx
+PASS yyy
+PWD
+CWD 521
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test522 b/tests/data/test522 new file mode 100644 index 000000000..4ac46ff75 --- /dev/null +++ b/tests/data/test522 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +CURLOPT_PORT +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib521 +</tool> + <name> +HTTP GET with CURLOPT_PORT + </name> + <command> +http://%HOSTIP/522 %HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /522 HTTP/1.1
+Authorization: Basic eHh4Onl5eQ==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout mode="text"> +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test523 b/tests/data/test523 new file mode 100644 index 000000000..bae7e6ffa --- /dev/null +++ b/tests/data/test523 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +CURLOPT_PORT +CURLOPT_PROXY +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib523 +</tool> + <name> +HTTP GET with proxy and CURLOPT_PORT + </name> +# first URL then proxy + <command> +http://www.example.com:999/523 http://%HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET HTTP://www.example.com:19999/523 HTTP/1.1
+Authorization: Basic eHh4Onl5eQ==
+Host: www.example.com:19999
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<stdout mode="text"> +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test524 b/tests/data/test524 new file mode 100644 index 000000000..c60946672 --- /dev/null +++ b/tests/data/test524 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +FTP +UPLOAD +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib524 +</tool> + <name> +FTP upload with target URL ending with slash + </name> +# first URL then proxy + <command> +ftp://%HOSTIP:%FTPPORT/path/to/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+</protocol> + +# 3 is CURLE_URL_MALFORMAT +<errorcode> +3 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test525 b/tests/data/test525 new file mode 100644 index 000000000..7bd494e02 --- /dev/null +++ b/tests/data/test525 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib525 +</tool> + <name> +FTP PORT upload using multi interface + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/525 log/upload525 +</command> +<file name="log/upload525"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 525
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test526 b/tests/data/test526 new file mode 100644 index 000000000..70e6dcd12 --- /dev/null +++ b/tests/data/test526 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +file contents should appear once for each file +</data> +<datacheck> +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib526 +</tool> + <name> +FTP RETR same file using different handles but same connection + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/526 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test527 b/tests/data/test527 new file mode 100644 index 000000000..98892a97e --- /dev/null +++ b/tests/data/test527 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +file contents should appear once for each file +</data> +<datacheck> +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib527 +</tool> + <name> +FTP RETR same file using different handles but same connection + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/527 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test528 b/tests/data/test528 new file mode 100644 index 000000000..0a55fd3cf --- /dev/null +++ b/tests/data/test528 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 47 + +file contents should appear once for each file +</data> +<datacheck> +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +lib526 +</tool> + <name> +HTTP GET same file using different handles but same connection + </name> + <command> +http://%HOSTIP:%HTTPPORT/path/528 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test529 b/tests/data/test529 new file mode 100644 index 000000000..16147201c --- /dev/null +++ b/tests/data/test529 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib529 +</tool> + <name> +FTP PORT upload using multi interface (weird cleanup function sequence) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/529 log/upload529 +</command> +<file name="log/upload529"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 529
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test53 b/tests/data/test53 new file mode 100644 index 000000000..679a4fa84 --- /dev/null +++ b/tests/data/test53 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Connection: close
+Content-Length: 21
+
+This server says moo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, junk session cookies + </name> + <command> +%HOSTIP:%HTTPPORT/want/53 -b log/injar53 -j +</command> +<file name="log/injar53"> +%HOSTIP FALSE / FALSE 2139150993 mooo indeed +%HOSTIP FALSE / FALSE 0 moo1 indeed +%HOSTIP FALSE / FALSE 1 moo2 indeed +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/53 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: mooo=indeed
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test530 b/tests/data/test530 new file mode 100644 index 000000000..359d04cf1 --- /dev/null +++ b/tests/data/test530 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +Pipelining +multi +</keywords> +</info> + +# Server-side +<reply> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 47 + +file contents should appear once for each file +</data1> +<data2> +HTTP/1.1 200 OK +</data2> +<data3> +Date: Thu, 09 Nov 2010 14:49:00 GMT +</data3> +<data4> +Server: test-server/fake +Content-Length: 47 + +file contents should appear once for each file +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 47 + +file contents should appear once for each file +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 47 + +file contents should appear once for each file +</data4> +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +lib530 +</tool> + <name> +HTTP GET using pipelining + </name> + <command> +http://%HOSTIP:%HTTPPORT/path/530 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /path/5300001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test531 b/tests/data/test531 new file mode 100644 index 000000000..8a7cee50a --- /dev/null +++ b/tests/data/test531 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +REPLY STOR 425 Permission Denied. File Exists. +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib525 +</tool> + <name> +FTP PORT upload using multi interface and get 425 response + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/531 log/upload531 +</command> +<file name="log/upload531"> +Moooooooooooo +don't upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip all valid kinds of PORT and EPRT that curl can send +<strip> +^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3} +^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\| +</strip> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 531
+QUIT
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test532 b/tests/data/test532 new file mode 100644 index 000000000..dc45db1d2 --- /dev/null +++ b/tests/data/test532 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +file contents should appear once for each file +</data> +<datacheck> +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +file contents should appear once for each file +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib532 +</tool> + <name> +FTP RETR same file using reset handles between each transfer + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/532 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test533 b/tests/data/test533 new file mode 100644 index 000000000..f4446cbe0 --- /dev/null +++ b/tests/data/test533 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> + +<servercmd> +REPLY RETR 550 the file doesn't exist +REPLY SIZE 550 Can't check for file existence +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib533 +</tool> + <name> +FTP RETR a non-existing file twice using the multi interface + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/533 ftp://%HOSTIP:%FTPPORT/path/533 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 533
+RETR 533
+EPSV
+SIZE 533
+RETR 533
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test534 b/tests/data/test534 new file mode 100644 index 000000000..6045dba61 --- /dev/null +++ b/tests/data/test534 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +non-existing host +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> + +<servercmd> +REPLY RETR 550 the file doesn't exist +REPLY SIZE 550 Can't check for file existence +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib533 +</tool> + <name> +FTP RETR twice using multi: non-existing host and non-existing file + </name> + <command> +ftp://non-existing-host.haxx.se/path/534 ftp://%HOSTIP:%FTPPORT/path/534 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 534
+RETR 534
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test535 b/tests/data/test535 new file mode 100644 index 000000000..85515a1b2 --- /dev/null +++ b/tests/data/test535 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +</keywords> +</info> + +<reply> +<data mode="text"> +HTTP/1.1 404 Badness +Date: Thu, 09 Nov 2010 14:49:00 GMT +ETag: "21025-dc7-39462498" +Content-Length: 6 +Content-Type: text/html +Funny-head: yesyes + +hejsan +</data> +<data1> +HTTP/1.1 200 Fine +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 13 +Connection: close +Content-Type: text/html + +fine content +</data1> + +<datacheck> +fine content +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib533 +</tool> + + <name> +HTTP GET multi two files with FAILONERROR + </name> + <command> +http://%HOSTIP:%HTTPPORT/535 http://%HOSTIP:%HTTPPORT/5350001 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /535 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /5350001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test536 b/tests/data/test536 new file mode 100644 index 000000000..334c07f06 --- /dev/null +++ b/tests/data/test536 @@ -0,0 +1,65 @@ +<testcase> +<reply> +<data mode="text"> +HTTP/1.1 404 Badness +Date: Thu, 09 Nov 2010 14:49:00 GMT +ETag: "21025-dc7-39462498" +Content-Length: 6 +Content-Type: text/html +Funny-head: yesyes + +hejsan +</data> +<data1> +HTTP/1.1 200 Fine +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 13 +Connection: close +Content-Type: text/html + +fine content +</data1> + +<datacheck> +fine content +Finished! +</datacheck> + +<servercmd> +pipe: 1 +</servercmd> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib536 +</tool> + + <name> +HTTP GET multi two files with FAILONERROR and pipelining + </name> + <command> +http://%HOSTIP:%HTTPPORT/536 http://%HOSTIP:%HTTPPORT/5360001 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /536 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /5360001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test537 b/tests/data/test537 new file mode 100644 index 000000000..ce66c409d --- /dev/null +++ b/tests/data/test537 @@ -0,0 +1,57 @@ +<testcase> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +getrlimit +</features> +# tool is what to use instead of 'curl' +<tool> +lib537 +</tool> +# precheck is a command line to run before the test, to see if we can execute +# the test or not +<precheck> +./libtest/lib537 check +</precheck> + + <name> +HTTP GET with a HUGE number of file descriptors open + </name> + <command> +http://%HOSTIP:%HTTPPORT/537 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /537 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test538 b/tests/data/test538 new file mode 100644 index 000000000..d2fecd353 --- /dev/null +++ b/tests/data/test538 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +FTP +FAILURE +multi +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY PASS 314 bluah you f00l! +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# NOTE that we use the 504 tool for this case +<tool> +lib504 +</tool> + <name> +FTP multi-interface download, failed login: PASS not valid + </name> + <command> +ftp://%HOSTIP:%FTPPORT/538 +</command> +</client> + +# Verify data after the test has been "shot" +# TEST_ERR_SUCCESS is errorcode 120 +<verify> +<errorcode> +120 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test539 b/tests/data/test539 new file mode 100644 index 000000000..2406c5473 --- /dev/null +++ b/tests/data/test539 @@ -0,0 +1,63 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +file contents +</data> + +<datacheck> +file contents +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib539 +</tool> + + <name> +Two FTP fetches using different CURLOPT_FTP_FILEMETHOD + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/to/the/file/539 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path/to/the/file
+EPSV
+TYPE I
+SIZE 539
+RETR 539
+SYST
+CWD /
+EPSV
+TYPE A
+LIST path/to/the/file/539./
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test54 b/tests/data/test54 new file mode 100644 index 000000000..66dbe9ddb --- /dev/null +++ b/tests/data/test54 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 302 This is a weirdo text message swsclose +Connection: close +Location: + +This server reply is for testing +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with blank Location: + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/54 -L +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/54 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test540 b/tests/data/test540 new file mode 100644 index 000000000..c99f9a0a8 --- /dev/null +++ b/tests/data/test540 @@ -0,0 +1,96 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Digest auth +multi +</keywords> +</info> + +# 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"
+Content-Length: 33
+
+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"
+Content-Length: 33
+
+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.example.com/path/540 http://%HOSTIP:%HTTPPORT silly:person custom.set.host.name +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://test.remote.example.com/path/540 HTTP/1.1
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+GET http://test.remote.example.com/path/540 HTTP/1.1
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+GET http://test.remote.example.com/path/540 HTTP/1.1
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test541 b/tests/data/test541 new file mode 100644 index 000000000..ce4c91116 --- /dev/null +++ b/tests/data/test541 @@ -0,0 +1,51 @@ +<testcase> +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib541 +</tool> + + <name> +FTP upload and upload same file again without rewind + </name> + <command> +ftp://%HOSTIP:%FTPPORT/541 log/upload541 +</command> +<file name="log/upload541"> +Contents +of +a file +to verify +ftp +upload + + +works? +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<upload> +</upload> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 541
+EPSV
+STOR 541
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test542 b/tests/data/test542 new file mode 100644 index 000000000..5afe12470 --- /dev/null +++ b/tests/data/test542 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> +<datacheck> +Content-Length: 51
+Accept-ranges: bytes
+</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib542 +</tool> + <name> +FTP a file with NOBODY yes and HEADER no + </name> + <command> +ftp://%HOSTIP:%FTPPORT/542 +</command> + +</client> + +# Verify data after the test has been "shot" +# +# There's no MTDM in the protocol here since this code doesn't ask for the +# time/date of the file +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+TYPE I
+SIZE 542
+REST 0
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test543 b/tests/data/test543 new file mode 100644 index 000000000..455633037 --- /dev/null +++ b/tests/data/test543 @@ -0,0 +1,35 @@ +<testcase> +<info> +<keywords> +curl_easy_escape +</keywords> +</info> +# Server-side + +# Client-side +<client> +<server> +none +</server> +<tool> +lib543 +</tool> + <name> +curl_easy_escape + </name> + <command> +- +</command> + +</client> + +# Verify data after the test has been "shot" +# +# There's no MTDM in the protocol here since this code doesn't ask for the +# time/date of the file +<verify> +<stdout> +%9C%26K%3DI%04%A1%01%E0%D8%7C%20%B7%EFS%29%FA%1DW%E1 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test544 b/tests/data/test544 new file mode 100644 index 000000000..2fa4edb1b --- /dev/null +++ b/tests/data/test544 @@ -0,0 +1,49 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 3 + +OK +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib544 +</tool> + + <name> +HTTP POST text data using CURLOPT_COPYPOSTFIELDS + </name> + <command> +http://%HOSTIP:%HTTPPORT/544 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /544 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 4
+Content-Type: application/x-www-form-urlencoded
+
+This +</protocol> +</verify> +</testcase> diff --git a/tests/data/test545 b/tests/data/test545 Binary files differnew file mode 100644 index 000000000..66ebb6119 --- /dev/null +++ b/tests/data/test545 diff --git a/tests/data/test546 b/tests/data/test546 new file mode 100644 index 000000000..12e604a0e --- /dev/null +++ b/tests/data/test546 @@ -0,0 +1,70 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +</keywords> +</info> +# Server-side +<reply> +<data nocheck="yes"> +data + to + see +that FTP +works + so does it? +</data> + +<servercmd> +REPLY RETR 550 the file doesn't exist +COUNT RETR 1 +REPLY SIZE 550 Can't check for file existence +COUNT SIZE 1 +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib533 +</tool> + <name> +FTP RETR a non-existing file then a found one using the multi interface + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/546 ftp://%HOSTIP:%FTPPORT/path/546 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 546
+RETR 546
+EPSV
+SIZE 546
+RETR 546
+QUIT
+</protocol> +<stdout> +data + to + see +that FTP +works + so does it? +</stdout> +</verify> +</testcase> diff --git a/tests/data/test547 b/tests/data/test547 new file mode 100644 index 000000000..7bcf5a4d4 --- /dev/null +++ b/tests/data/test547 @@ -0,0 +1,133 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +POST callback +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib547 +</tool> +<features> +NTLM +</features> + <name> +HTTP proxy auth NTLM with POST data from read callback + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com/path/547 http://%HOSTIP:%HTTPPORT s1lly:pers0n +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +POST http://test.remote.example.com/path/547 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +POST http://test.remote.example.com/path/547 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.example.com/path/547 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +</protocol> +</verify> +</testcase> diff --git a/tests/data/test548 b/tests/data/test548 new file mode 100644 index 000000000..a6e2a9bf2 --- /dev/null +++ b/tests/data/test548 @@ -0,0 +1,133 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib548 +</tool> +<features> +NTLM +</features> + <name> +HTTP proxy auth NTLM with POST data from CURLOPT_POSTFIELDS + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com/path/548 http://%HOSTIP:%HTTPPORT s1lly:pers0n +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +POST http://test.remote.example.com/path/548 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +POST http://test.remote.example.com/path/548 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.example.com/path/548 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +</protocol> +</verify> +</testcase> diff --git a/tests/data/test549 b/tests/data/test549 new file mode 100644 index 000000000..e4bd6bf2c --- /dev/null +++ b/tests/data/test549 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +FTP +CURLOPT_PROXY_TRANSFER_MODE +CURLOPT_PROXY +HTTP proxy +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> +<tool> +lib549 +</tool> + <name> +FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE + </name> +# first URL then proxy + <command> +ftp://www.example.com/moo/549 http://%HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://www.example.com/moo/549;type=i HTTP/1.1
+Host: www.example.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<stdout mode="text"> +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test55 b/tests/data/test55 new file mode 100644 index 000000000..662385608 --- /dev/null +++ b/tests/data/test55 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +followlocation +</keywords> +</info> +<reply> +<data> +HTTP/1.1 302 OK swsclose +Location: 550002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +</data> +<data2> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</data2> +<datacheck> +HTTP/1.1 302 OK swsclose +Location: 550002 +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:50:00 GMT +Connection: close + +body +</datacheck> +</reply> + +<client> +<server> +http +</server> + <name> +HTTP follow redirect with single slash in path + </name> + <command> +http://%HOSTIP:%HTTPPORT/55 -L +</command> +</client> + +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /55 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /550002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test550 b/tests/data/test550 new file mode 100644 index 000000000..e9605d6cd --- /dev/null +++ b/tests/data/test550 @@ -0,0 +1,65 @@ +<testcase> +<info> +<keywords> +FTP +HTTP proxy +CURLOPT_PROXY_TRANSFER_MODE +CURLOPT_PROXY +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> +<tool> +lib549 +</tool> + <name> +FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE and ASCII transfer + </name> +# first URL then proxy + <command> +ftp://www.example.com/moo/550 http://%HOSTIP:%HTTPPORT ascii +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://www.example.com/moo/550;type=a HTTP/1.1
+Host: www.example.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<stdout mode="text"> +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test551 b/tests/data/test551 new file mode 100644 index 000000000..4f5220a26 --- /dev/null +++ b/tests/data/test551 @@ -0,0 +1,98 @@ +<testcase> +<info> +# this test is meant to be exactly like 547 but using Digest instead of NTLM +<keywords> +HTTP +HTTP POST +POST callback +HTTP proxy +HTTP proxy Digest auth +</keywords> +</info> + +# Server-side +<reply> + +# as a bonus, ww use an excessive nonce length +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Digest realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets the Digest +# Authorization: line passed-in from the client +<data1000> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1000> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Digest realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib547 +</tool> +<features> +</features> + <name> +HTTP proxy auth Digest with POST data from read callback + </name> + <command> +http://test.remote.example.com/path/551 http://%HOSTIP:%HTTPPORT s1lly:pers0n +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +POST http://test.remote.example.com/path/551 HTTP/1.1
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +POST http://test.remote.example.com/path/551 HTTP/1.1
+Proxy-Authorization: Digest username="s1lly", realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", uri="/path/551", response="3325240726fbdaf1e61f3a0dd40b930c"
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +</protocol> +</verify> +</testcase> diff --git a/tests/data/test552 b/tests/data/test552 Binary files differnew file mode 100644 index 000000000..a974fc5cb --- /dev/null +++ b/tests/data/test552 diff --git a/tests/data/test553 b/tests/data/test553 new file mode 100644 index 000000000..555293621 --- /dev/null +++ b/tests/data/test553 @@ -0,0 +1,67 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +POST callback +huge request header +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 200 Fine!
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Length: 6
+
+hello +</data> + +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib553 +</tool> +<features> +</features> + <name> +HTTP post with huge request headers and post data from callback + </name> + <command> +http://%HOSTIP:%HTTPPORT/path/553 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +# We strip off a large chunk of the type-2 NTLM message since it depends on +# the local host name and thus differs on different machines! +<protocol nonewline="yes"> +POST /path/553 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header0: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header1: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header2: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header3: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header4: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header5: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header6: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header7: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Content-Length: 40960
+Content-Type: application/x-www-form-urlencoded
+
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +</protocol> +</verify> +</testcase> diff --git a/tests/data/test554 b/tests/data/test554 new file mode 100644 index 000000000..9d9bbcca7 --- /dev/null +++ b/tests/data/test554 @@ -0,0 +1,78 @@ +<testcase> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib554 +</tool> + + <name> +HTTP multi-part formpost using read callback for the file part + </name> + <command> +http://%HOSTIP:%HTTPPORT/554 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^------------------------------[a-z0-9]*/------------------------------/ +s/boundary=----------------------------[a-z0-9]*/boundary=----------------------------/ +</strippart> +# Note that the stripping above removes 12 bytes from every occurance of the +# boundary string and since 5 of them are in the body contents, we see +# (5*12) == 60 bytes less +<protocol> +POST /554 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 732
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------
+
+------------------------------
+Content-Disposition: form-data; name="sendfile"; filename="postit2.c"
+
+this is what we post to the silly web server +
+------------------------------
+Content-Disposition: form-data; name="callbackdata"
+
+this is what we post to the silly web server +
+------------------------------
+Content-Disposition: form-data; name="filename"
+
+postit2.c
+------------------------------
+Content-Disposition: form-data; name="submit"
+
+send
+------------------------------
+Content-Disposition: form-data; name="somename"; filename="somefile.txt"
+Content-Type: application/octet-stream
+
+blah blah
+--------------------------------
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test555 b/tests/data/test555 new file mode 100644 index 000000000..bf06b524d --- /dev/null +++ b/tests/data/test555 @@ -0,0 +1,142 @@ +<testcase> +# NOTE: this test case is a duplicate of 547 but the tool is built to use the +# multi interface instead of easy, but that shouldn't be noticable at all in +# this file! +<info> +<keywords> +HTTP +HTTP POST +POST callback +HTTP proxy +HTTP proxy NTLM auth +multi +</keywords> +</info> + +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib555 +</tool> +<features> +NTLM +</features> + <name> +HTTP proxy auth NTLM with POST data from read callback multi-if + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com/path/555 http://%HOSTIP:%HTTPPORT s1lly:pers0n +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<strippart> +# remove CR that CURLOPT_TRANSFERTEXT added, when CharConv enabled: +s/^(this is the blurb we want to upload)\r\n/$1\n/ if($has_charconv) +</strippart> +<protocol> +POST http://test.remote.example.com/path/555 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +POST http://test.remote.example.com/path/555 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.example.com/path/555 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload +</protocol> +</verify> +</testcase> diff --git a/tests/data/test556 b/tests/data/test556 new file mode 100644 index 000000000..998bdfb07 --- /dev/null +++ b/tests/data/test556 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +<reply> +<data> +HTTP/1.1 200 OK +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +Content-Length: 6 +Connection: close + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib556 +</tool> + <name> +send and recv HTTP + </name> + <command> +http://%HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /556 HTTP/1.2
+Host: ninja
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test557 b/tests/data/test557 new file mode 100644 index 000000000..3da67e99f --- /dev/null +++ b/tests/data/test557 @@ -0,0 +1,39 @@ +<testcase> +# +# Server-side +<reply> +</reply> + +# Client-side +<client> +<server> +none +</server> +# tool is what to use instead of 'curl' +<tool> +lib557 +</tool> + +<name> +curl_mprintf() testing +</name> +<command> +nothing +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<stdout mode="text"> +All curl_mprintf() unsigned short tests OK! +All curl_mprintf() signed short tests OK! +All curl_mprintf() unsigned int tests OK! +All curl_mprintf() signed int tests OK! +All curl_mprintf() unsigned long tests OK! +All curl_mprintf() signed long tests OK! +All curl_mprintf() curl_off_t tests OK! +</stdout> +</verify> + +</testcase> diff --git a/tests/data/test56 b/tests/data/test56 new file mode 100644 index 000000000..a97b3650e --- /dev/null +++ b/tests/data/test56 @@ -0,0 +1,61 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +chunked Transfer-Encoding +config file +-A +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Funny-head: yesyes + +This is the proof it works +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with *HUGE* request and chunked transfer-encoding + </name> + <stdin> +# +data "we post this" +# +# enforce chunky post! +header "Transfer-Encoding: chunked" +# +# Set the user-agent using a short-option: +-A "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +# + </stdin> + <command> +-K - %HOSTIP:%HTTPPORT/that.site.com/56 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +POST /that.site.com/56 HTTP/1.1
+User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+
+c
+we post this
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test560 b/tests/data/test560 new file mode 100644 index 000000000..0e991b825 --- /dev/null +++ b/tests/data/test560 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +multi +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 7 + +MooMoo +</data> +</reply> + +# +# Client-side +<client> +<features> +SSL +</features> +<server> +https +</server> +<tool> +lib560 +</tool> + <name> +simple HTTPS GET with multi interface + </name> + <command> +https://%HOSTIP:%HTTPSPORT/560 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /560 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test561 b/tests/data/test561 new file mode 100644 index 000000000..8f069e6ed --- /dev/null +++ b/tests/data/test561 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +FTP +HTTP proxy +CURLOPT_PROXY_TRANSFER_MODE +CURLOPT_PROXY +type= +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> +<tool> +lib549 +</tool> + <name> +FTP RETR with CURLOPT_PROXY_TRANSFER_MODE, ASCII transfer and type=i + </name> +# first URL then proxy + <command> +"ftp://www.example.com/moo/561;type=i" http://%HOSTIP:%HTTPPORT ascii +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://www.example.com/moo/561;type=i HTTP/1.1
+Host: www.example.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +<stdout mode="text"> +hello +</stdout> +</verify> +</testcase> diff --git a/tests/data/test562 b/tests/data/test562 new file mode 100644 index 000000000..070cf7aa1 --- /dev/null +++ b/tests/data/test562 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +</keywords> +</info> +# Server-side +<reply> +<data> +silly data +over FTP +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib562 +</tool> + <name> +FTP a type=A URL and CURLOPT_PORT set + </name> + +# note that we need quotes around the URL below to make sure the shell doesn't +# treat the semicolon as a separator! + <command> +'ftp://%HOSTIP:23456/562;type=A' %FTPPORT +</command> + +</client> + +# Verify data after the test has been "shot" +# +# There's no MTDM in the protocol here since this code doesn't ask for the +# time/date of the file +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+SIZE 562
+RETR 562
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test563 b/tests/data/test563 new file mode 100644 index 000000000..785152319 --- /dev/null +++ b/tests/data/test563 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +FTP +CURLOPT_PORT +HTTP proxy +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello +</data> +</reply> + +# Client-side +<client> +<server> +ftp +http +</server> +<tool> +lib562 +</tool> + <name> +FTP type=A URL and CURLOPT_PORT set and proxy + </name> + +<setenv> +ftp_proxy=http://%HOSTIP:%HTTPPORT/ +</setenv> +# note that we need quotes around the URL below to make sure the shell doesn't +# treat the semicolon as a separator! + <command> +"ftp://%HOSTIP:23456/563;type=A" %FTPPORT +</command> + +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +GET FTP://%HOSTIP:%FTPPORT/563;type=A HTTP/1.1
+Host: %HOSTIP:%FTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test564 b/tests/data/test564 new file mode 100644 index 000000000..72bf12919 --- /dev/null +++ b/tests/data/test564 @@ -0,0 +1,63 @@ +<testcase> +<info> +<keywords> +FTP +PASV +RETR +multi +SOCKS4 +</keywords> +</info> +# Server-side +<reply> +<data> +data + to + see +that FTP +works + so does it? +</data> + +</reply> + +# Client-side +<client> +<server> +ftp +socks4 +</server> +<tool> +lib564 +</tool> + <name> +FTP RETR a file over a SOCKS proxy using the multi interface + </name> +<command> +ftp://%HOSTIP:%FTPPORT/path/564 %HOSTIP:%SOCKSPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 564
+RETR 564
+QUIT
+</protocol> +<stdout> +data + to + see +that FTP +works + so does it? +</stdout> +</verify> +</testcase> diff --git a/tests/data/test565 b/tests/data/test565 new file mode 100644 index 000000000..b8d12b45c --- /dev/null +++ b/tests/data/test565 @@ -0,0 +1,104 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1> +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib565 +</tool> + + <name> +send HTTP POST using read callback, chunked transfer-encoding and Digest + </name> + <command> +http://%HOSTIP:%HTTPPORT/565 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +POST /565 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+
+0
+
+POST /565 HTTP/1.1
+Authorization: Digest username="foo", realm="testrealm", nonce="1053604144", uri="/565", response="877424f750af047634dbd94f9933217b"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+3
+one
+3
+two
+5
+three
+1d
+and a final longer crap: four
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test566 b/tests/data/test566 new file mode 100644 index 000000000..95da61d2d --- /dev/null +++ b/tests/data/test566 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 0 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib566 +</tool> + + <name> +HTTP GET with CURLINFO_CONTENT_LENGTH_DOWNLOAD and 0 bytes transfer + </name> + <command> +http://%HOSTIP:%HTTPPORT/566 log/ip566 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file name="log/ip566" mode="text"> +CL: 0 +</file> +<protocol> +GET /566 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test567 b/tests/data/test567 new file mode 100644 index 000000000..4fd14843c --- /dev/null +++ b/tests/data/test567 @@ -0,0 +1,50 @@ +<testcase> + +#Informational +<info> +<keywords> +RTSP +OPTIONS +</keywords> +</info> + +# Server-side +<reply> +<data> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 1 +Public: DESCRIBE, OPTIONS, SETUP, TEARDOWN, PLAY, PAUSE +Curl-Private: swsclose +</data> +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib567 +</tool> + +<name> +simple RTSP OPTIONS command +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/567 +</command> +</client> + +<verify> +<protocol> +OPTIONS rtsp://%HOSTIP:%RTSPPORT/567 RTSP/1.0
+CSeq: 1
+User-Agent: test567
+Test-Number: 567
+
+</protocol> +</verify> + +</testcase> + diff --git a/tests/data/test568 b/tests/data/test568 new file mode 100644 index 000000000..0f8440fbd --- /dev/null +++ b/tests/data/test568 @@ -0,0 +1,117 @@ +<testcase> + +#Informational +<info> +<keywords> +RTSP +ANNOUNCE +</keywords> +</info> + +# Server-side +<reply> +<data1> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Cseq: 1 + +</data1> + +<data2> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Cseq: 2 +Content-Length: 70 +Content-Type: application/sdp + +v=0 +s=rtspd SDP +i=A fake SDP reply +u=http://www.curl.example.com/fakesdp.ps +</data2> +<data3> +RTSP/1.0 200 Okie Dokie +Server: RTSPD/libcurl-test +Cseq: 3 + +</data3> +<data4> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 4 +Curl-private: swsclose +Informational: Empty Options Response + +</data4> +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib568 +</tool> + +<name> +RTSP Announce (PUT and POST style) test +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/568 +</command> +# file written before test command runs +<file name="log/file568.txt"> +v=0 +o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4 +s=SDP Seminar +i=A Seminar on the session description protocol +u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps +e=mjh@isi.edu (Mark Handley) +c=IN IP4 224.2.17.12/127 +t=2873397496 2873404696 +a=recvonly +m=audio 3456 RTP/AVP 0 +m=video 2232 RTP/AVP 31 +</file> +</client> + +<verify> +<strip> +^If-Modified-Since:.* +</strip> +<protocol> +ANNOUNCE rtsp://%HOSTIP:%RTSPPORT/5680001 RTSP/1.0
+CSeq: 1
+Content-Length: 306
+Content-Type: application/sdp
+
+v=0 +o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4 +s=SDP Seminar +i=A Seminar on the session description protocol +u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps +e=mjh@isi.edu (Mark Handley) +c=IN IP4 224.2.17.12/127 +t=2873397496 2873404696 +a=recvonly +m=audio 3456 RTP/AVP 0 +m=video 2232 RTP/AVP 31 +DESCRIBE rtsp://%HOSTIP:%RTSPPORT/5680002 RTSP/1.0
+CSeq: 2
+Accept: application/sdp
+
+ANNOUNCE rtsp://%HOSTIP:%RTSPPORT/5680003 RTSP/1.0
+CSeq: 3
+Content-Type: posty goodness
+Content-Length: 35
+
+postyfield=postystuff&project=curl +OPTIONS rtsp://%HOSTIP:%RTSPPORT/5680004 RTSP/1.0
+CSeq: 4
+
+</protocol> +</verify> + +</testcase> + diff --git a/tests/data/test569 b/tests/data/test569 new file mode 100644 index 000000000..c4c62a4c3 --- /dev/null +++ b/tests/data/test569 @@ -0,0 +1,111 @@ +<testcase> + +#Informational +<info> +<keywords> +RTSP +SESSION_ID +</keywords> +</info> + +# Server-side +<reply> +<data1> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 1 +Session: 00.+1-am-aSe55ion_id\$yes-i-am\$;timeout=60 + +</data1> +<data2> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 2 + +</data2> +<data3> +RTSP/1.0 200 OK +Session: \$extraspaces ignore-this-part-------;foo=bar +CSeq: 3 +Server: RTSPD/libcurl-test + +</data3> +<data4> +RTSP/1.0 200 OK +CSeq: 4 +Server: RTSPD/libcurl-test + +</data4> +<data5> +RTSP/1.0 200 OK +Session: A +Server: RTSPD/libcurl-test +CSeq: 5 +Informational: Single Character + +</data5> +<data6> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Curl-Private: swsclose +CSeq: 6 + +</data6> +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib569 +</tool> + +<name> +RTSP Session ID parsing +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/569 log/idfile.txt +</command> +</client> + +<verify> +<strip> +^If-Modified-Since:.* +</strip> +<protocol> +SETUP rtsp://%HOSTIP:%RTSPPORT/5690001 RTSP/1.0
+CSeq: 1
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690002 RTSP/1.0
+CSeq: 2
+Session: 00.+1-am-aSe55ion_id\$yes-i-am\$
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5690003 RTSP/1.0
+CSeq: 3
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690004 RTSP/1.0
+CSeq: 4
+Session: \$extraspaces
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5690005 RTSP/1.0
+CSeq: 5
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690006 RTSP/1.0
+CSeq: 6
+Session: A
+
+</protocol> +<file name="log/idfile.txt"> +Got Session ID: [00.+1-am-aSe55ion_id\$yes-i-am\$] +Got Session ID: [\$extraspaces] +Got Session ID: [A] +</file> +</verify> + +</testcase> + diff --git a/tests/data/test57 b/tests/data/test57 new file mode 100644 index 000000000..0724eac82 --- /dev/null +++ b/tests/data/test57 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +--write-out +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK swsclose +Funny-head: yesyes +Content-Type: text/html; charset=ISO-8859-4 + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP content-type with spaces in + </name> + <command> +-w "%{content_type}\n" http://%HOSTIP:%HTTPPORT/57 -o log/out57 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<stdout mode="text"> +text/html; charset=ISO-8859-4 +</stdout> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /57 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test570 b/tests/data/test570 new file mode 100644 index 000000000..aec863846 --- /dev/null +++ b/tests/data/test570 @@ -0,0 +1,77 @@ +<testcase> + +#Informational +<info> +<keywords> +RTSP +Mismatch checking +</keywords> +</info> + +# Server-side +<reply> +<data1> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 2 +Public: DESCRIBE, OPTIONS, SETUP, TEARDOWN, PLAY, PAUSE +Informational: CSeq Mismatch + +</data1> +<data2> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: asdf +CSeq: 999 + +</data2> +<data3> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: asdfWRONG +Informational: Session ID mismatch +Curl-Private: swsclose +CSeq: 1000 + +</data3> + +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib570 +</tool> + +<name> +RTSP CSeq and Session Mismatch checks +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/570 +</command> +</client> + +<verify> +<strip> +^If-Modified-Since:.* +</strip> +<protocol> +OPTIONS rtsp://%HOSTIP:%RTSPPORT/5700001 RTSP/1.0
+CSeq: 1
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5700002 RTSP/1.0
+CSeq: 999
+Transport: RAW/RAW/UDP;unicast;client_port=3056-3057
+
+PLAY rtsp://%HOSTIP:%RTSPPORT/5700003 RTSP/1.0
+CSeq: 1000
+Session: asdf
+
+</protocol> +</verify> + +</testcase> + diff --git a/tests/data/test571 b/tests/data/test571 new file mode 100644 index 000000000..9b263b12b --- /dev/null +++ b/tests/data/test571 @@ -0,0 +1,108 @@ +<testcase> + +# Informational +# Bang on RTP by +# 1) giving an evil payload (with $) +# 2) Giving evil content (SDP starting with $) +# 3) packing rtp after headers, after content, and at the start +<info> +<keywords> +RTSP +RTP +</keywords> +</info> + +# Server-side +<reply> +<data1> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: asdf +CSeq: 1 + +</data1> + +<data2> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +CSeq: 2 +Session: asdf + +</data2> + +<data3> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Cseq: 3 +Content-Length: 4 +Content-Type: fake/evil + +$99 +</data3> + +<data4> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: asdf +CSeq: 4 + +</data4> + +<servercmd> +rtp: part 2 channel 1 size 10 +rtp: part 2 channel 0 size 500 +rtp: part 2 channel 0 size 196 +rtp: part 2 channel 0 size 124 +rtp: part 2 channel 0 size 824 +rtp: part 3 channel 1 size 10 +rtp: part 3 channel 0 size 50 +rtp: part 4 channel 0 size 798 +rtp: part 4 channel 0 size 42 +rtp: part 4 channel 1 size 30 +rtp: part 4 channel 0 size 2048 +rtp: part 4 channel 0 size 85 +rtp: part 4 channel 1 size 24 +</servercmd> +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib571 +</tool> + +<name> +RTSP RTP Interleaving Test +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/571 log/protofile.txt +</command> +</client> + +<verify> +<stdout> +RTP: message size 10, channel 1 +RTP: message size 500, channel 0 +RTP: message size 196, channel 0 +RTP: message size 124, channel 0 +RTP: message size 824, channel 0 +RTP: message size 10, channel 1 +RTP: message size 50, channel 0 +RTP: message size 798, channel 0 +RTP: message size 42, channel 0 +RTP: message size 30, channel 1 +RTP: message size 2048, channel 0 +RTP: message size 85, channel 0 +RTP: message size 24, channel 1 +</stdout> + +<file name="log/protofile.txt"> +$99 +</file> +</verify> + +</testcase> + diff --git a/tests/data/test572 b/tests/data/test572 new file mode 100644 index 000000000..83ae646e2 --- /dev/null +++ b/tests/data/test572 @@ -0,0 +1,122 @@ +<testcase> + +#Informational +<info> +<keywords> +RTSP +GET_PARAMETER +</keywords> +</info> + +# Server-side +<reply> +<data1> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: getparams-test +CSeq: 1 + +</data1> + +<data2> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: getparams-test +Content-Type: text/parameters +Content-Length: 32 +Cseq: 2 + +scale=enormous +speed=ludicrous + +</data2> + +<data3> +RTSP/1.0 204 OK +Server: RTSPD/libcurl-test +Session: getparams-test +Cseq: 3 + +</data3> + +<data4> +RTSP/1.0 200 Okie Dokie +Server: RTSPD/libcurl-test +Session: getparams-test +Cseq: 4 +Content-Length: 37 + +packets_received: 1000 +jitter: 0.314 +</data4> +<data5> +RTSP/1.0 200 OK +Server: RTSPD/libcurl-test +Session: getparams-test +CSeq: 5 +Curl-private: swsclose +Informational: Empty Options Response + +</data5> +</reply> + +# Client-Side +<client> +<server> +rtsp +</server> +<tool> +lib572 +</tool> + +<name> +RTSP GET_PARAMETER (Put/Heartbeat/Post) +</name> +<command> +rtsp://%HOSTIP:%RTSPPORT/572 +</command> +# file written before test command runs +<file name="log/file572.txt"> +scale +speed +</file> +</client> + +<verify> +<strip> +^If-Modified-Since:.* +</strip> +<protocol> +SETUP rtsp://%HOSTIP:%RTSPPORT/5720001 RTSP/1.0
+CSeq: 1
+Transport: Planes/Trains/Automobiles
+
+GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720002 RTSP/1.0
+CSeq: 2
+Session: getparams-test
+Content-Length: 12
+Content-Type: text/parameters
+
+scale +speed +GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720003 RTSP/1.0
+CSeq: 3
+Session: getparams-test
+
+GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720004 RTSP/1.0
+CSeq: 4
+Session: getparams-test
+Content-Length: 24
+Content-Type: text/parameters
+
+packets_received +jitter +OPTIONS rtsp://%HOSTIP:%RTSPPORT/5720005 RTSP/1.0
+CSeq: 5
+Session: getparams-test
+
+</protocol> +</verify> + +</testcase> + diff --git a/tests/data/test573 b/tests/data/test573 new file mode 100644 index 000000000..54ff8fb94 --- /dev/null +++ b/tests/data/test573 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +multi +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib573 +</tool> + + <name> +verify connect time with multi interface + </name> + <command> +http://%HOSTIP:%HTTPPORT/573 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /573 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test574 b/tests/data/test574 new file mode 100644 index 000000000..1fa4654d4 --- /dev/null +++ b/tests/data/test574 @@ -0,0 +1,98 @@ +<testcase> +<info> +<keywords> +FTP +LIST +RETR +wildcardmatch +ftplistparser +</keywords> +</info> + +# +# Server-side +<reply> +<data mode="text"> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib574 +</tool> +<name> +FTP wildcard download - changed fnmatch, 2x perform (UNIX LIST response) +</name> +<command> +ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*.txt +</command> +</client> + +############################################ +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +# THERE SHOULD NOT BE "SIZE"! and one "USER/PASS" +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol> +<stdout mode="text"> +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +</stdout> +</verify> +</testcase> diff --git a/tests/data/test575 b/tests/data/test575 new file mode 100644 index 000000000..5670e6bc6 --- /dev/null +++ b/tests/data/test575 @@ -0,0 +1,121 @@ +<testcase> +<info> +<keywords> +FTP +RETR +multi +wildcardmatch +ftplistparser +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib575 +</tool> + <name> +FTP wildcard download - dup_handle and multi interface + </name> + <command> +ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/* +</command> +</client> +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol> +<stdout mode="text"> +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +This file should have permissions 444 +This file should have permissions 666 +This file should have permissions 777 +This is content of file "file.txt" +Some junk ;-) This file does not really exist. +</stdout> +</verify> +</testcase> diff --git a/tests/data/test576 b/tests/data/test576 new file mode 100644 index 000000000..4d4b90c80 --- /dev/null +++ b/tests/data/test576 @@ -0,0 +1,192 @@ +<testcase> +<info> +<keywords> +FTP +wildcardmatch +ftplistparser +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib576 +</tool> + <name> +FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (UNIX) + </name> + <command> +ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/* +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +<stdout mode="text"> +============================================================= +Remains: 14 +Filename: . +Permissions: rwxrwxrwx (parsed => 777) +Size: 20480B +User: ftp-default +Group: ftp-default +Time: Apr 27 5:12 +Filetype: directory +============================================================= +Remains: 13 +Filename: .. +Permissions: rwxrwxrwx (parsed => 777) +Size: 20480B +User: ftp-default +Group: ftp-default +Time: Apr 23 3:12 +Filetype: directory +============================================================= +Remains: 12 +Filename: chmod1 +Permissions: r--r--r-- (parsed => 444) +Size: 38B +User: ftp-default +Group: ftp-default +Time: Jan 11 10:00 +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 444 +------------------------------------------------------------- +============================================================= +Remains: 11 +Filename: chmod2 +Permissions: rw-rw-rw- (parsed => 666) +Size: 38B +User: ftp-default +Group: ftp-default +Time: Feb 1 8:00 +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 666 +------------------------------------------------------------- +============================================================= +Remains: 10 +Filename: chmod3 +Permissions: rwxrwxrwx (parsed => 777) +Size: 38B +User: ftp-default +Group: ftp-default +Time: Feb 1 8:00 +Filetype: regular file +Content: +------------------------------------------------------------- +This file should have permissions 777 +------------------------------------------------------------- +============================================================= +Remains: 9 +Filename: chmod4 +Permissions: --S--S--t (parsed => 7001) +Size: 4096B +User: ftp-default +Group: ftp-default +Time: May 4 4:31 +Filetype: directory +============================================================= +Remains: 8 +Filename: chmod5 +Permissions: --s--s--T (parsed => 7110) +Size: 4096B +User: ftp-default +Group: ftp-default +Time: May 4 4:31 +Filetype: directory +============================================================= +Remains: 7 +Filename: empty_file.dat +Permissions: rw-r--r-- (parsed => 644) +Size: 0B +User: ftp-default +Group: ftp-default +Time: Apr 27 11:01 +Filetype: regular file +Content: +------------------------------------------------------------- +------------------------------------------------------------- +============================================================= +Remains: 6 +Filename: file.txt +Permissions: rw-r--r-- (parsed => 644) +Size: 35B +User: ftp-default +Group: ftp-default +Time: Apr 27 11:01 +Filetype: regular file +Content: +------------------------------------------------------------- +This is content of file "file.txt" +------------------------------------------------------------- +============================================================= +Remains: 5 +Filename: link +Permissions: rwxrwxrwx (parsed => 777) +Size: 0B +User: ftp-default +Group: ftp-default +Time: Jan 6 4:42 +Filetype: symlink +Target: file.txt +============================================================= +Remains: 4 +Filename: link_absolute +Permissions: rwxrwxrwx (parsed => 777) +Size: 0B +User: ftp-default +Group: ftp-default +Time: Jan 6 4:45 +Filetype: symlink +Target: /data/ftp/file.txt +============================================================= +Remains: 3 +Filename: .NeXT +Permissions: rwxrwxrwx (parsed => 777) +Size: 4096B +User: ftp-default +Group: ftp-default +Time: Jan 23 2:05 +Filetype: directory +============================================================= +Remains: 2 +Filename: someothertext.txt +Permissions: rw-r--r-- (parsed => 644) +Size: 47B +User: ftp-default +Group: ftp-default +Time: Apr 27 11:01 +Filetype: regular file +Content: +------------------------------------------------------------- +# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK # +------------------------------------------------------------- +============================================================= +Remains: 1 +Filename: weirddir.txt +Permissions: rwxr-xrwx (parsed => 757) +Size: 4096B +User: ftp-default +Group: ftp-default +Time: Apr 23 3:12 +Filetype: directory +============================================================= +</stdout> +</verify> +</testcase> diff --git a/tests/data/test578 b/tests/data/test578 new file mode 100644 index 000000000..0b6a43731 --- /dev/null +++ b/tests/data/test578 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> +# +# Server-side +<reply name="1"> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib578 +</tool> + + <name> +HTTP POST lower than MAX_INITIAL_POST_SIZE with progress callback + </name> + <command> +http://%HOSTIP:%HTTPPORT/500 log/ip578 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file name="log/ip578" mode="text"> +PASSED, UL data matched data size +</file> +</verify> +</testcase> diff --git a/tests/data/test579 b/tests/data/test579 new file mode 100644 index 000000000..5f8794437 --- /dev/null +++ b/tests/data/test579 @@ -0,0 +1,85 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP Digest auth +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue +Server: Microsoft-IIS/5.0 +Date: Sun, 03 Apr 2005 14:57:45 GMT +X-Powered-By: ASP.NET + +HTTP/1.1 401 authentication please swsbounce +Server: Microsoft-IIS/6.0 +WWW-Authenticate: Digest realm="testrealm", nonce="1053604144" +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 0 + +</data> +<data1> +HTTP/1.1 200 A OK +Server: Microsoft-IIS/6.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 3 + +ok +</data1> +<datacheck> +HTTP/1.1 100 Continue +Server: Microsoft-IIS/5.0 +Date: Sun, 03 Apr 2005 14:57:45 GMT +X-Powered-By: ASP.NET + +HTTP/1.1 401 authentication please swsbounce +Server: Microsoft-IIS/6.0 +WWW-Authenticate: Digest realm="testrealm", nonce="1053604144" +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 0 + +HTTP/1.1 200 A OK +Server: Microsoft-IIS/6.0 +Content-Type: text/html; charset=iso-8859-1 +Content-Length: 3 + +ok +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib579 +</tool> + + <name> +small chunked HTTP POSTs with digest auth. and progress callback + </name> + <command> +http://%HOSTIP:%HTTPPORT/579 log/ip579 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file name="log/ip579" mode="text"> +Progress callback called with UL 0 out of 0 +Progress callback called with UL 0 out of -1 +Progress callback called with UL 8 out of -1 +Progress callback called with UL 16 out of -1 +Progress callback called with UL 26 out of -1 +Progress callback called with UL 61 out of -1 +Progress callback called with UL 66 out of -1 +</file> +</verify> +</testcase> diff --git a/tests/data/test58 b/tests/data/test58 new file mode 100644 index 000000000..1bd53fa27 --- /dev/null +++ b/tests/data/test58 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +HTTP PUT from file with weird letters +</name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/ -T log/58te[]st.txt -g +</command> +<file name="log/58te[]st.txt"> +a few bytes +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /we/want/58te%5B%5Dst.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 12
+Expect: 100-continue
+
+a few bytes +</protocol> +</verify> +</testcase> diff --git a/tests/data/test580 b/tests/data/test580 new file mode 100644 index 000000000..8256f0e2e --- /dev/null +++ b/tests/data/test580 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +Duplicate-header +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 302 eat this! +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: this-is-the-first.html +Content-Length: 0 +Connection: close +Location: and there's a second one too! / moo.html + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib507 +</tool> + + <name> +multi interface, multiple Location: headers + </name> + <command> +http://%HOSTIP:%HTTPPORT/580 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /580 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test581 b/tests/data/test581 new file mode 100644 index 000000000..acaa41b9f --- /dev/null +++ b/tests/data/test581 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +Duplicate-header +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 all good! +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Content-Length: 0 +Connection: close +Content-Type: changed/my/mind + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib507 +</tool> + + <name> +multi interface, multiple Content-Type: headers + </name> + <command> +http://%HOSTIP:%HTTPPORT/581 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /581 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test582 b/tests/data/test582 new file mode 100644 index 000000000..8881a87d7 --- /dev/null +++ b/tests/data/test582 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +SFTP +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +sftp +</server> +<tool> +lib582 +</tool> + <name> +SFTP upload using multi interface + </name> + <command> +Sftp://%HOSTIP:%SSHPORT%PWD/log/upload582.txt %PWD/log/file582.txt %USER: +</command> +<file name="log/file582.txt"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +</strip> +<protocol> +</protocol> +<file name="log/file582.txt"> +Moooooooooooo + upload this +</file> +</verify> +</testcase> diff --git a/tests/data/test583 b/tests/data/test583 new file mode 100644 index 000000000..8fca7d23c --- /dev/null +++ b/tests/data/test583 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SFTP +multi +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +sftp +</server> +<tool> +lib583 +</tool> + <name> +SFTP with multi interface, remove handle early + </name> + +# The command here uses 'localhost' just to make sure that curl_multi_perform +# won't reach too far in the first invoke. When using c-ares at least, the +# name resolve will cause it to return rather quickly and thus we could trigger +# the problem we're looking to verify. + <command> +sftp://localhost:%SSHPORT%PWD/log/upload583.txt %USER: +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +0 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test584 b/tests/data/test584 new file mode 100644 index 000000000..81d6a083d --- /dev/null +++ b/tests/data/test584 @@ -0,0 +1,102 @@ +<testcase> +<info> +<keywords> +HTTP +Pipelining +multi +</keywords> +</info> + +# Server-side +# Silly division of the first request is solely to appease the server which expects n_data_items == n_requests +<reply> +<data1> +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 4 + +584 +</data1> +<data2> +HTTP/1.1 200 OK +</data2> +<data3> +Server: test-server/fake +</data3> +<data4> +Content-Length: 0 + +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 5 + +585 + +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 4 + +586 +</data4> +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +lib530 +</tool> + <name> +HTTP GET using pipelining (nonzero length after zero length) + </name> + <command> +http://%HOSTIP:%HTTPPORT/path/584 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /path/5840001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5840002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5840003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5840004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<stdout> +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 4 + +584 +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 0 + +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 5 + +585 + +HTTP/1.1 200 OK +Server: test-server/fake +Content-Length: 4 + +586 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test585 b/tests/data/test585 new file mode 100644 index 000000000..32cb06fec --- /dev/null +++ b/tests/data/test585 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +multi +CURLOPT_OPENSOCKETFUNCTION +CURLOPT_CLOSESOCKETFUNCTION +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 302 eat this! +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: this-is-the-first.html +Content-Length: 0 +Connection: close + +</data> +<datacheck> +[OPEN] counter: 1 +HTTP/1.1 302 eat this! +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: this-is-the-first.html +Content-Length: 0 +Connection: close + +[CLOSE] counter: 1 +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +http +</features> +# tool is what to use instead of 'curl' +<tool> +lib585 +</tool> + + <name> +socket open/close callbacks + </name> + <command> +http://%HOSTIP:%HTTPPORT/585 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /585 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test586 b/tests/data/test586 new file mode 100644 index 000000000..c0857bdd8 --- /dev/null +++ b/tests/data/test586 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +FTP +PASV +CURLOPT_PORT +</keywords> +</info> +# +# Server-side +<reply> +<data> +line 1 +line 2 +last line +</data> +<datacheck> +[OPEN] counter: 1 +[OPEN] counter: 2 +line 1 +line 2 +last line +[CLOSE] counter: 2 +[CLOSE] counter: 1 +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib585 +</tool> + <name> +FTP and open/close socket callbacks + </name> + <command> +ftp://%HOSTIP:%FTPPORT/586 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 586
+RETR 586
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test587 b/tests/data/test587 new file mode 100644 index 000000000..6e1239a6a --- /dev/null +++ b/tests/data/test587 @@ -0,0 +1,51 @@ +<testcase> +# +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib587 +</tool> + + <name> +HTTP multi-part formpost with aborted read callback + </name> + <command> +http://%HOSTIP:%HTTPPORT/587 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^------------------------------[a-z0-9]*/------------------------------/ +s/boundary=----------------------------[a-z0-9]*/boundary=----------------------------/ +</strippart> +<protocol> +POST /587 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 732
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------
+
+------------------------------
+Content-Disposition: form-data; name="sendfile"; filename="postit2.c"
+
+</protocol> +# CURLE_ABORTED_BY_CALLBACK (42) +<errorcode> +42 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test588 b/tests/data/test588 new file mode 100644 index 000000000..0515b521e --- /dev/null +++ b/tests/data/test588 @@ -0,0 +1,69 @@ +# +# This test is exactly like 525 but the server rejects the EPRT command. +# Written up to make sure that there's nothing in the multi interface +# active connection case that differs between PORT and EPRT use +# +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +EPRT refused +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +REPLY EPRT 500 we don't like EPRT now +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib525 +</tool> + <name> +FTP PORT upload using multi interface, EPRT doesn't work + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/588 log/upload588 +</command> +<file name="log/upload588"> +Moooooooooooo + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip off parts of the PORT and EPRT commands that might differ +<strippart> +s/^PORT (.*)/PORT/ +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPRT |1| +PORT +TYPE I
+STOR 588
+QUIT
+</protocol> +<upload> +Moooooooooooo + upload this +</upload> +</verify> +</testcase> diff --git a/tests/data/test59 b/tests/data/test59 new file mode 100644 index 000000000..1924650f5 --- /dev/null +++ b/tests/data/test59 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# +# Server-side +<reply name="1"> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +hej +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP URL with slash but with "parameter" + </name> + <command> +"http://%HOSTIP:%HTTPPORT?mooo/59" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /?mooo/59 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test590 b/tests/data/test590 new file mode 100644 index 000000000..f50664d8f --- /dev/null +++ b/tests/data/test590 @@ -0,0 +1,123 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +POST callback +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Negotiate
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# this is returned first since we get no proxy-auth +<data1001> +HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</data1002> + +<datacheck> +HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Negotiate
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir. +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool to use +<tool> +lib590 +</tool> +<features> +NTLM +</features> + <name> +HTTP proxy offers Negotiate+NTLM, use only NTLM + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://test.remote.example.com/path/590 http://%HOSTIP:%HTTPPORT +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent: curl/.* +</strip> +<protocol> +GET http://test.remote.example.com/path/590 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://test.remote.example.com/path/590 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://test.remote.example.com/path/590 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAAAgACAHAAAAAIAAgAcgAAAAAAAAAAAAAABoKBAAQt1KW5CgG4YdWWcfXyfXBz1ZMCzYp37xYjBiAizmw58O6eQS7yR66eqYGWeSwl9W1lY3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.example.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test591 b/tests/data/test591 new file mode 100644 index 000000000..42a227112 --- /dev/null +++ b/tests/data/test591 @@ -0,0 +1,73 @@ +# +# For this test the server rejects the EPRT command, +# code in lib591 makes use of curl_multi_timeout() +# and server does not establish data connection. +# +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +EPRT refused +NODATACONN425 +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +NODATACONN425 +REPLY EPRT 500 we don't like EPRT now +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib591 +</tool> + <name> +FTP multi PORT and 425 on upload + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/591 %FTPTIME2 log/upload591 +</command> +<file name="log/upload591"> +Moooooooooooo for 591 + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip off parts of the PORT and EPRT commands that might differ +<strippart> +s/^PORT (.*)/PORT/ +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPRT |1| +PORT +TYPE I
+STOR 591
+QUIT
+</protocol> +# CURLE_UPLOAD_FAILED = 25 +<errorcode> +25 +</errorcode> +<upload> +</upload> +</verify> +</testcase> diff --git a/tests/data/test592 b/tests/data/test592 new file mode 100644 index 000000000..23aa6c465 --- /dev/null +++ b/tests/data/test592 @@ -0,0 +1,73 @@ +# +# For this test the server rejects the EPRT command, +# code in lib591 makes use of curl_multi_timeout() +# and server does not establish data connection. +# +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +EPRT refused +NODATACONN421 +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +NODATACONN421 +REPLY EPRT 500 we don't like EPRT now +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib591 +</tool> + <name> +FTP multi PORT and 421 on upload + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/592 %FTPTIME2 log/upload592 +</command> +<file name="log/upload592"> +Moooooooooooo for 592 + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip off parts of the PORT and EPRT commands that might differ +<strippart> +s/^PORT (.*)/PORT/ +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +# a 421 response must prevent further commands from being sent +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPRT |1| +PORT +TYPE I
+STOR 592
+</protocol> +# 28 == CURLE_OPERATION_TIMEDOUT +<errorcode> +28 +</errorcode> +<upload> +</upload> +</verify> +</testcase> diff --git a/tests/data/test593 b/tests/data/test593 new file mode 100644 index 000000000..c3b1f91e5 --- /dev/null +++ b/tests/data/test593 @@ -0,0 +1,72 @@ +# +# For this test the server rejects the EPRT command, +# code in lib591 makes use of curl_multi_timeout() +# and server does not establish data connection. +# +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +EPRT refused +NODATACONN150 +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +NODATACONN150 +REPLY EPRT 500 we don't like EPRT now +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib591 +</tool> + <name> +FTP multi PORT upload, no data conn and no transient neg. reply + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/593 %FTPTIME2 log/upload593 +</command> +<file name="log/upload593"> +Moooooooooooo for 593 + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip off parts of the PORT and EPRT commands that might differ +<strippart> +s/^PORT (.*)/PORT/ +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPRT |1| +PORT +TYPE I
+STOR 593
+QUIT
+</protocol> +<errorcode> +12 +</errorcode> +<upload> +</upload> +</verify> +</testcase> diff --git a/tests/data/test594 b/tests/data/test594 new file mode 100644 index 000000000..77b5864d7 --- /dev/null +++ b/tests/data/test594 @@ -0,0 +1,72 @@ +# +# For this test the server rejects the EPRT command, +# code in lib591 makes use of curl_multi_timeout() +# and server does not establish data connection. +# +<testcase> +<info> +<keywords> +FTP +PORT +STOR +multi +EPRT refused +NODATACONN +</keywords> +</info> + +# Server-side +<reply> +<data> +</data> +<servercmd> +NODATACONN +REPLY EPRT 500 we don't like EPRT now +</servercmd> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib591 +</tool> + <name> +FTP multi PORT upload, no data conn and no positive prelim. reply + </name> + <command> +ftp://%HOSTIP:%FTPPORT/path/594 %FTPTIME2 log/upload594 +</command> +<file name="log/upload594"> +Moooooooooooo for 594 + upload this +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +# Strip off parts of the PORT and EPRT commands that might differ +<strippart> +s/^PORT (.*)/PORT/ +s/^EPRT \|1\|(.*)/EPRT \|1\|/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPRT |1| +PORT +TYPE I
+STOR 594
+QUIT
+</protocol> +<errorcode> +28 +</errorcode> +<upload> +</upload> +</verify> +</testcase> diff --git a/tests/data/test595 b/tests/data/test595 new file mode 100644 index 000000000..28ff9c1a1 --- /dev/null +++ b/tests/data/test595 @@ -0,0 +1,57 @@ +# +# This test is like 585 but uses passive FTP instead of HTTP +# +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> +# +# Server-side +<reply> +<data> +moo +</data> +<datacheck> +[OPEN] counter: 1 +[OPEN] counter: 2 +moo +[CLOSE] counter: 2 +[CLOSE] counter: 1 +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib585 +</tool> + + <name> +verify close callbacks with passive FTP + </name> + <command> +ftp://%HOSTIP:%FTPPORT/595 log/ip595 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 595
+RETR 595
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test596 b/tests/data/test596 new file mode 100644 index 000000000..bb5def43f --- /dev/null +++ b/tests/data/test596 @@ -0,0 +1,60 @@ +# +# This test is like 585 but uses active FTP instead of HTTP +# +<testcase> +<info> +<keywords> +FTP +</keywords> +</info> +# +# Server-side +<reply> +<data> +moo +</data> +<datacheck> +[OPEN] counter: 1 +[OPEN] counter: 2 +[CLOSE] counter: 2 +moo +[CLOSE] counter: 1 +</datacheck> +</reply> + +# Client-side +<client> +<server> +ftp +</server> +# tool is what to use instead of 'curl' +<tool> +lib585 +</tool> + + <name> +verify close callbacks with active FTP + </name> + <command> +ftp://%HOSTIP:%FTPPORT/596 log/ip596 activeftp +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strippart> +s/^(EPRT \|1\|)(.*)/$1/ +</strippart> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1| +TYPE I
+SIZE 596
+RETR 596
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test597 b/tests/data/test597 new file mode 100644 index 000000000..458bb6453 --- /dev/null +++ b/tests/data/test597 @@ -0,0 +1,37 @@ +<testcase> +<info> +<keywords> +FTP +CONNECT_ONLY +</keywords> +</info> + +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib597 +</tool> + <name> +FTP connect only option + </name> + +<command> +ftp://%HOSTIP:%FTPPORT +</command> + +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test598 b/tests/data/test598 new file mode 100644 index 000000000..f43bbacd0 --- /dev/null +++ b/tests/data/test598 @@ -0,0 +1,80 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP set cookie +cookies +CURLOPT_REFERER +curl_easy_reset +</keywords> +</info> +# +# Server-side +<reply> +<data mode="text"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Content-Type: text/html + +-foo- +</data> + +# since the request runs twice +<datacheck> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Content-Type: text/html + +-foo- +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 6 +Connection: close +Content-Type: text/html + +-foo- +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib598 +</tool> + + <name> +curl_easy_reset with referer and other strings set + </name> + <command> +http://%HOSTIP:%HTTPPORT/598 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +GET /598 HTTP/1.1
+User-Agent: the-moo agent next generation
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Referer: http://example.com/the-moo
+Cookie: name=moo
+
+GET /598 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test599 b/tests/data/test599 new file mode 100644 index 000000000..82151372e --- /dev/null +++ b/tests/data/test599 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: 5990001 +Content-Length: 6 +Connection: close +Content-Type: text/html + +-foo- +</data> +<data1> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Transfer-Encoding: chunked +Connection: close +Content-Type: text/html + +32
+this data is slightly larger than the first piece +
+0
+
+</data1> + +<datacheck> +HTTP/1.1 302 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Location: 5990001 +Content-Length: 6 +Connection: close +Content-Type: text/html + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Transfer-Encoding: chunked +Connection: close +Content-Type: text/html + +this data is slightly larger than the first piece +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib599 +</tool> + +# Bug 3510057 pointed out that when following a location to a larger chunked +# encoded page, the first size would still be used in the progress callback + <name> +HTTP GET with progress callback and redirects changing content sizes + </name> + <command> +http://%HOSTIP:%HTTPPORT/599 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> + +</verify> +</testcase> diff --git a/tests/data/test6 b/tests/data/test6 new file mode 100644 index 000000000..0e7dc9b24 --- /dev/null +++ b/tests/data/test6 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP set cookie +cookies +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes +swsclose: booo + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with simple cookie send + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/6 -b "name=contents;name2=content2" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/that/page/6 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: name=contents;name2=content2
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test60 b/tests/data/test60 new file mode 100644 index 000000000..df9eeee15 --- /dev/null +++ b/tests/data/test60 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<name> +HTTP PUT from stdin with wrong content-length +</name> + <command> +http://%HOSTIP:%HTTPPORT/bzz/60 -T - -H "Content-Length: 1" +</command> +<stdin> +more than one byte +</stdin> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /bzz/60 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Length: 1
+Expect: 100-continue
+
+13
+more than one byte +
+0
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test600 b/tests/data/test600 new file mode 100644 index 000000000..1f3f6011c --- /dev/null +++ b/tests/data/test600 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SFTP +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Test data +for ssh test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file600.txt --insecure +</command> +<file name="log/file600.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test601 b/tests/data/test601 new file mode 100644 index 000000000..8e765a8ec --- /dev/null +++ b/tests/data/test601 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SCP +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Test data +for ssh test +</data> +</reply> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP retrieval + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file601.txt --insecure +</command> +<file name="log/file601.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test602 b/tests/data/test602 new file mode 100644 index 000000000..6b75feb63 --- /dev/null +++ b/tests/data/test602 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +SFTP +SFTP put +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP put + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file602.txt sftp://%HOSTIP:%SSHPORT%PWD/log/upload.602 --insecure +</command> +<file name="log/file602.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<upload> +Test data +for ssh upload test +</upload> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test603 b/tests/data/test603 new file mode 100644 index 000000000..efa7d2ed0 --- /dev/null +++ b/tests/data/test603 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +SCP +SCP upload +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP upload + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file603.txt scp://%HOSTIP:%SSHPORT%PWD/log/upload.603 --insecure +</command> +<file name="log/file603.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<upload> +Test data +for ssh upload test +</upload> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test604 b/tests/data/test604 new file mode 100644 index 000000000..af0259fb9 --- /dev/null +++ b/tests/data/test604 @@ -0,0 +1,30 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval of nonexistent file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +78 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test605 b/tests/data/test605 new file mode 100644 index 000000000..1c162fca5 --- /dev/null +++ b/tests/data/test605 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +SCP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP retrieval of nonexistent file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +79 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test606 b/tests/data/test606 new file mode 100644 index 000000000..80a82e9a9 --- /dev/null +++ b/tests/data/test606 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP invalid user login + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test607 b/tests/data/test607 new file mode 100644 index 000000000..e34098743 --- /dev/null +++ b/tests/data/test607 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +SCP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP invalid user login + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: scp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test608 b/tests/data/test608 new file mode 100644 index 000000000..c904bff9f --- /dev/null +++ b/tests/data/test608 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Test file for rename test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP post-quote rename + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/file608.txt %PWD/log/file608-renamed.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/file608.txt --insecure +</command> +# Verify that the file was renamed properly, then rename the file back to what +# it was so the verify section works and the file can be cleaned up. +<postcheck> +perl %SRCDIR/libtest/test610.pl gone %PWD/log/file608.txt move %PWD/log/file608-renamed.txt %PWD/log/file608.txt +</postcheck> +<file name="log/file608.txt"> +Test file for rename test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<file name="log/file608.txt"> +Test file for rename test +</file> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test609 b/tests/data/test609 new file mode 100644 index 000000000..59a217520 --- /dev/null +++ b/tests/data/test609 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Test file for mkdir test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP post-quote mkdir failure + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-mkdir %PWD/log/file609.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/file609.txt --insecure +</command> +<file name="log/file609.txt"> +Test file for mkdir test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +21 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test61 b/tests/data/test61 new file mode 100644 index 000000000..d2de2790a --- /dev/null +++ b/tests/data/test61 @@ -0,0 +1,72 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +cookiejar +HTTP replaced headers +httponly +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: test=yes; httponly; domain=foo.com; expires=Fri Feb 2 11:56:27 GMT 2035
+SET-COOKIE: test2=yes; domain=host.foo.com; expires=Fri Feb 2 11:56:27 GMT 2035
+Set-Cookie: test3=maybe; domain=foo.com; path=/moo; secure
+Set-Cookie: test4=no; domain=nope.foo.com; path=/moo; secure
+Set-Cookie: test5=name; domain=anything.com; path=/ ; secure
+Set-Cookie: fake=fooledyou; domain=..com; path=/;
+Content-Length: 4
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with various cookies and custom Host: + </name> +# Explicitly set the time zone to a known good one, in case the user is +# using one of the 'right' zones that take into account leap seconds +# which causes the cookie expiry times to be different. +<setenv> +TZ=GMT +</setenv> + <command> +http://%HOSTIP:%HTTPPORT/we/want/61 -c log/jar61.txt -H "Host: www.host.foo.com" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/61 HTTP/1.1
+Accept: */*
+Host: www.host.foo.com
+
+</protocol> +<file name="log/jar61.txt" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +#HttpOnly_.foo.com TRUE /we/want/ FALSE 2054030187 test yes +.host.foo.com TRUE /we/want/ FALSE 2054030187 test2 yes +.foo.com TRUE /moo TRUE 0 test3 maybe +</file> +</verify> +</testcase> diff --git a/tests/data/test610 b/tests/data/test610 new file mode 100644 index 000000000..a7c2ce389 --- /dev/null +++ b/tests/data/test610 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Dummy test file for rmdir test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test610.dir +</precheck> + <name> +SFTP post-quote rmdir + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rmdir %PWD/log/test610.dir" sftp://%HOSTIP:%SSHPORT%PWD/log/file610.txt --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl gone %PWD/log/test610.dir +</postcheck> +<file name="log/file610.txt"> +Dummy test file for rmdir test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test611 b/tests/data/test611 new file mode 100644 index 000000000..bfdddde3a --- /dev/null +++ b/tests/data/test611 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Dummy test file for rename test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test611.dir +</precheck> + <name> +SFTP post-quote rename + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/test611.dir %PWD/log/test611.new" sftp://%HOSTIP:%SSHPORT%PWD/log/file611.txt --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test611.new +</postcheck> +<file name="log/file611.txt"> +Dummy test file for rename test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test612 b/tests/data/test612 new file mode 100644 index 000000000..a8f2a5c0b --- /dev/null +++ b/tests/data/test612 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck="yes"> +Dummy test file for remove test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP post-quote remove file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file612.txt -Q "-rm %PWD/log/file612.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/upload.612 --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl gone %PWD/log/test612.txt +</postcheck> +<file name="log/file612.txt"> +Dummy test file for remove test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<upload> +Dummy test file for remove test +</upload> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test613 b/tests/data/test613 new file mode 100644 index 000000000..9b0b3fd35 --- /dev/null +++ b/tests/data/test613 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +SFTP +directory +</keywords> +</info> + +# +# Server-side +<reply> +<datacheck> +d????????? N U U N ??? N NN:NN . +d????????? N U U N ??? N NN:NN .. +d????????? N U U N ??? N NN:NN asubdir +-rw?rw?rw? 1 U U 37 Jan 1 2000 plainfile.txt +-r-?r-?r-? 1 U U 47 Dec 31 2000 rofile.txt +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test613.dir +</precheck> + <name> +SFTP directory retrieval + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/test613.dir/ --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test613.dir %PWD/log/curl613.out +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test614 b/tests/data/test614 new file mode 100644 index 000000000..2184a22cf --- /dev/null +++ b/tests/data/test614 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +SFTP +pre-quote +directory +</keywords> +</info> + +# +# Server-side +<reply> +<datacheck> +d????????? N U U N ??? N NN:NN . +d????????? N U U N ??? N NN:NN .. +d????????? N U U N ??? N NN:NN asubdir +-r-?r-?r-? 1 U U 37 Jan 1 2000 plainfile.txt +-r-?r-?r-? 1 U U 47 Dec 31 2000 rofile.txt +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test614.dir +</precheck> + <name> +SFTP pre-quote chmod + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "chmod 444 %PWD/log/test614.dir/plainfile.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/test614.dir/ --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test614.dir %PWD/log/curl614.out +</postcheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test615 b/tests/data/test615 new file mode 100644 index 000000000..abe9902a3 --- /dev/null +++ b/tests/data/test615 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +SFTP +SFTP put +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test615.dir +</precheck> + <name> +SFTP put remote failure + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file615.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test615.dir/rofile.txt --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test615.dir +</postcheck> +<file name="log/file615.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +9 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test616 b/tests/data/test616 new file mode 100644 index 000000000..a6a225de9 --- /dev/null +++ b/tests/data/test616 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +SFTP +zero-length +</keywords> +</info> + +# +# Server-side +<reply> +<data sendzero="yes"> +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval of empty file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file616.txt --insecure +</command> +<file name="log/file616.txt"> +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test617 b/tests/data/test617 new file mode 100644 index 000000000..4b183e4f0 --- /dev/null +++ b/tests/data/test617 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +SCP +zero-length +</keywords> +</info> + +# +# Server-side +<reply> +<data sendzero="yes"> +</data> +</reply> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP retrieval of empty file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file617.txt --insecure +</command> +<file name="log/file617.txt"> +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test618 b/tests/data/test618 new file mode 100644 index 000000000..d545d6282 --- /dev/null +++ b/tests/data/test618 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +SFTP +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval of two files + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file618.txt sftp://%HOSTIP:%SSHPORT%PWD/log/file618.txt --insecure +</command> +<file name="log/file618.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +<stdout> +Test data +for ssh test +Test data +for ssh test +</stdout> +</verify> +</testcase> diff --git a/tests/data/test619 b/tests/data/test619 new file mode 100644 index 000000000..303266fc5 --- /dev/null +++ b/tests/data/test619 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +SCP +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP retrieval of two files + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file619.txt scp://%HOSTIP:%SSHPORT%PWD/log/file619.txt --insecure +</command> +<file name="log/file619.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +<stdout> +Test data +for ssh test +Test data +for ssh test +</stdout> +</verify> +</testcase> diff --git a/tests/data/test62 b/tests/data/test62 new file mode 100644 index 000000000..19886066f --- /dev/null +++ b/tests/data/test62 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP replaced headers +cookies +httponly +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, send cookies when using custom Host: + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/62 -b log/jar62.txt -H "Host: www.host.foo.com" +</command> +<file name="log/jar62.txt"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +#HttpOnly_.foo.com TRUE /we/want/ FALSE 2054030187 test yes +.host.foo.com TRUE /we/want/ FALSE 2054030187 test2 yes +.fake.host.foo.com TRUE /we/want/ FALSE 2054030187 test4 yes + +.foo.com TRUE /moo TRUE 0 test3 maybe +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/62 HTTP/1.1
+Accept: */*
+Cookie: test2=yes; test=yes
+Host: www.host.foo.com
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test620 b/tests/data/test620 new file mode 100644 index 000000000..1750ab932 --- /dev/null +++ b/tests/data/test620 @@ -0,0 +1,38 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval of missing file followed by good file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/not-a-valid-file-moooo sftp://%HOSTIP:%SSHPORT%PWD/log/file620.txt --insecure +</command> +<file name="log/file620.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +<stdout> +Test data +for ssh test +</stdout> +</verify> +</testcase> diff --git a/tests/data/test621 b/tests/data/test621 new file mode 100644 index 000000000..c75a284ca --- /dev/null +++ b/tests/data/test621 @@ -0,0 +1,38 @@ +<testcase> +<info> +<keywords> +SCP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP retrieval of missing file followed by good file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/not-a-valid-file-moooo scp://%HOSTIP:%SSHPORT%PWD/log/file621.txt --insecure +</command> +<file name="log/file621.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +<stdout> +Test data +for ssh test +</stdout> +</verify> +</testcase> diff --git a/tests/data/test622 b/tests/data/test622 new file mode 100644 index 000000000..e5a769c1c --- /dev/null +++ b/tests/data/test622 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +SFTP +SFTP put +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP put failure + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file622.txt sftp://%HOSTIP:%SSHPORT%PWD/log/nonexistent-directory/nonexistent-file --insecure +</command> +<file name="log/file622.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +78 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test623 b/tests/data/test623 new file mode 100644 index 000000000..19e505b23 --- /dev/null +++ b/tests/data/test623 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +SCP +SCP upload +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP upload failure + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file623.txt scp://%HOSTIP:%SSHPORT%PWD/log/nonexistent-directory/nonexistent-file --insecure +</command> +<file name="log/file623.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +79 +</errorcode> + +</verify> +</testcase> diff --git a/tests/data/test624 b/tests/data/test624 new file mode 100644 index 000000000..fa4ff08d7 --- /dev/null +++ b/tests/data/test624 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +SFTP +SFTP put +--ftp-create-dirs +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP put with --ftp-create-dirs + </name> + <command> +--ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file624.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test624.dir/upload.624 --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl move %PWD/log/test624.dir/upload.624 %PWD/log/upload.624 rmdir %PWD/log/test624.dir +</postcheck> +<file name="log/file624.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<upload> +Test data +for ssh upload test +</upload> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test625 b/tests/data/test625 new file mode 100644 index 000000000..b3ec738cf --- /dev/null +++ b/tests/data/test625 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +SFTP +SFTP put +--ftp-create-dirs +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP put with --ftp-create-dirs twice + </name> + <command> +--ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file625.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test625.a/upload.625 -T log/file625.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test625.b/upload.625 --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl move %PWD/log/test625.a/upload.625 %PWD/log/upload.625 rmdir %PWD/log/test625.a rm %PWD/log/test625.b/upload.625 rmdir %PWD/log/test625.b +</postcheck> +<file name="log/file625.txt"> +Test data +for ssh upload test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<upload> +Test data +for ssh upload test +</upload> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test626 b/tests/data/test626 new file mode 100644 index 000000000..a8c2a6c22 --- /dev/null +++ b/tests/data/test626 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SFTP +pre-quote +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP invalid quote command + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "invalid-command foo bar" sftp://%HOSTIP:%SSHPORT%PWD/log/file626.txt --insecure +</command> +<file name="log/file626.txt"> +Test file for rename test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +21 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test627 b/tests/data/test627 new file mode 100644 index 000000000..ae29d9b5a --- /dev/null +++ b/tests/data/test627 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +SFTP +quote +NOBODY +</keywords> +</info> + +# +# Server-side +<reply> +<data sendzero="yes"> +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP quote remove file with NOBODY + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -I -Q "rm %PWD/log/file627.txt" sftp://%HOSTIP:%SSHPORT --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl gone %PWD/log/test627.txt +</postcheck> +<file name="log/file627.txt"> +Dummy test file for remove test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +<protocol> +</protocol> +</verify> +</testcase> diff --git a/tests/data/test628 b/tests/data/test628 new file mode 100644 index 000000000..37a6f1c64 --- /dev/null +++ b/tests/data/test628 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP invalid user login (password authentication) + </name> + <command> +-u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%PWD/irrelevant-file --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test629 b/tests/data/test629 new file mode 100644 index 000000000..0c1791494 --- /dev/null +++ b/tests/data/test629 @@ -0,0 +1,33 @@ +<testcase> +<info> +<keywords> +SCP +FAILURE +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP invalid user login (password authentication) + </name> + <command> +-u not-a-valid-user: scp://%HOSTIP:%SSHPORT%PWD/irrelevant-file --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test63 b/tests/data/test63 new file mode 100644 index 000000000..66ed1d86b --- /dev/null +++ b/tests/data/test63 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 26 +
+the content would go here +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with proxy authorization set in environment + </name> +<setenv> +http_proxy=http://fake:user@%HOSTIP:%HTTPPORT/ +</setenv> + <command> +http://we.want.that.site.com/63 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://we.want.that.site.com/63 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTp1c2Vy
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test630 b/tests/data/test630 new file mode 100644 index 000000000..e2f6ff95f --- /dev/null +++ b/tests/data/test630 @@ -0,0 +1,34 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +server key check +</keywords> +</info> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP incorrect host key + </name> + <command> +--hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +51 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test631 b/tests/data/test631 new file mode 100644 index 000000000..47b0acbb5 --- /dev/null +++ b/tests/data/test631 @@ -0,0 +1,34 @@ +<testcase> +<info> +<keywords> +SCP +FAILURE +server key check +</keywords> +</info> + +# +# Client-side +<client> +<server> +scp +</server> + <name> +SCP incorrect host key + </name> + <command> +--hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +51 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test632 b/tests/data/test632 new file mode 100644 index 000000000..2da0c798b --- /dev/null +++ b/tests/data/test632 @@ -0,0 +1,34 @@ +<testcase> +<info> +<keywords> +SFTP +FAILURE +server key check +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +sftp +</features> + <name> +SFTP syntactically invalid host key + </name> + <command> +--hostpubmd5 00 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +2 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test633 b/tests/data/test633 new file mode 100644 index 000000000..adfd109e0 --- /dev/null +++ b/tests/data/test633 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SFTP +Range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +data +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval with byte range + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file633.txt -r 5-9 --insecure +</command> +<file name="log/file633.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test634 b/tests/data/test634 new file mode 100644 index 000000000..1fbb87925 --- /dev/null +++ b/tests/data/test634 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +SFTP +Range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +data +for ssh test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval with byte range past end of file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file634.txt -r 5-99 --insecure +</command> +<file name="log/file634.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test635 b/tests/data/test635 new file mode 100644 index 000000000..a54929d4c --- /dev/null +++ b/tests/data/test635 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +SFTP +Range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +ssh test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval with byte range relative to end of file + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file635.txt -r -9 --insecure +</command> +<file name="log/file635.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test636 b/tests/data/test636 new file mode 100644 index 000000000..df4ee7e63 --- /dev/null +++ b/tests/data/test636 @@ -0,0 +1,43 @@ +<testcase> +<info> +<keywords> +SFTP +Range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +data +for ssh test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval with X- byte range + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file636.txt -r 5- --insecure +</command> +<file name="log/file636.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test637 b/tests/data/test637 new file mode 100644 index 000000000..ef0c81435 --- /dev/null +++ b/tests/data/test637 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +SFTP +Range +</keywords> +</info> + +# +# Server-side +<reply> +<data> +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> + <name> +SFTP retrieval with invalid X- range + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file637.txt -r 99- --insecure +</command> +<file name="log/file637.txt"> +Test data +for ssh test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +36 +</errorcode> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test638 b/tests/data/test638 new file mode 100644 index 000000000..c72cf636a --- /dev/null +++ b/tests/data/test638 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +acceptfail +asterisk +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Dummy test file for rename test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test638.dir +</precheck> + <name> +SFTP post-quote rename * asterisk accept-fail + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-*rename %PWD/log/test638.dir %PWD/log/test638.new" sftp://%HOSTIP:%SSHPORT%PWD/log/file638.txt --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test638.new +</postcheck> +<file name="log/file638.txt"> +Dummy test file for rename test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test639 b/tests/data/test639 new file mode 100644 index 000000000..8dfe85975 --- /dev/null +++ b/tests/data/test639 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +SFTP +post-quote +acceptfail +asterisk +</keywords> +</info> + +# +# Server-side +<reply> +<data> +Dummy test file for rename test +</data> +</reply> + +# +# Client-side +<client> +<server> +sftp +</server> +<precheck> +perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test639.dir +</precheck> + <name> +SFTP post-quote rename * asterisk accept-fail + </name> + <command> +--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-*rename %PWD/log/test639-not-exists-dir %PWD/log/test639.new" sftp://%HOSTIP:%SSHPORT%PWD/log/file639.txt --insecure +</command> +<postcheck> +perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test639.dir +</postcheck> +<file name="log/file639.txt"> +Dummy test file for rename test +</file> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<valgrind> +disable +</valgrind> +</verify> +</testcase> diff --git a/tests/data/test64 b/tests/data/test64 new file mode 100644 index 000000000..6bd82a8e2 --- /dev/null +++ b/tests/data/test64 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with Digest authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/64 -u testuser:testpass --digest +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /64 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /64 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test65 b/tests/data/test65 new file mode 100644 index 000000000..8582a0ca8 --- /dev/null +++ b/tests/data/test65 @@ -0,0 +1,83 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="2053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 401 Still a bad password you moron
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+
+This is not the real page either
+</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="2053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Still a bad password you moron
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+
+This is not the real page either
+</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with Digest authorization with bad password + </name> + <command> +http://%HOSTIP:%HTTPPORT/65 -u testuser:test2pass --digest +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /65 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /65 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/65", response="66d68d3251f1839576ba7c766cf9205b"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test66 b/tests/data/test66 new file mode 100644 index 000000000..a018d8fd4 --- /dev/null +++ b/tests/data/test66 @@ -0,0 +1,41 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> +# Server-side +<reply> +<data> +no headers swsclose +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET without headers in the response + </name> + <command> +http://%HOSTIP:%HTTPPORT/66 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /66 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test67 b/tests/data/test67 new file mode 100644 index 000000000..bfe6edd26 --- /dev/null +++ b/tests/data/test67 @@ -0,0 +1,100 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM authorization + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/67 -u testuser:testpass --ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /67 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /67 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test68 b/tests/data/test68 new file mode 100644 index 000000000..10b4429c3 --- /dev/null +++ b/tests/data/test68 @@ -0,0 +1,99 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 401 You give me wrong password
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: NTLM
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+Wrong password dude. Get it fixed and return. +</data1002> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 401 You give me wrong password
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: NTLM
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+Wrong password dude. Get it fixed and return. +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM authorization and wrong password + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/68 -u testuser:testpass --ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /68 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /68 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test69 b/tests/data/test69 new file mode 100644 index 000000000..441aed7e8 --- /dev/null +++ b/tests/data/test69 @@ -0,0 +1,121 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM, Basic or Wild-and-crazy authorization + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/69 -u testuser:testpass --anyauth +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /69 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /69 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /69 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test7 b/tests/data/test7 new file mode 100644 index 000000000..62731de13 --- /dev/null +++ b/tests/data/test7 @@ -0,0 +1,62 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +header dump +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes swsclose +Set-Cookie: foobar=name; domain=127.0.0.1; path=/; +Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/"; +Set-Cookie: partmatch=present; domain=.0.0.1; path=/; + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with cookie parser and header recording + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/7 -b none -D log/heads7.txt +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/7 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/heads7.txt"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes swsclose +Set-Cookie: foobar=name; domain=127.0.0.1; path=/; +Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/"; +Set-Cookie: partmatch=present; domain=.0.0.1; path=/; + +</file> +</verify> +</testcase> diff --git a/tests/data/test70 b/tests/data/test70 new file mode 100644 index 000000000..2fc032746 --- /dev/null +++ b/tests/data/test70 @@ -0,0 +1,87 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +--anyauth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with Digest *OR* NTLM authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/70 -u testuser:testpass --anyauth +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /70 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /70 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/70", response="2c9a6f00af0d86497b177b90e90c688a"
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test700 b/tests/data/test700 new file mode 100644 index 000000000..ce6f894fd --- /dev/null +++ b/tests/data/test700 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +SOCKS4 +</keywords> +</info> + +# +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +socks4 +</server> + <name> +HTTP GET via SOCKS4 proxy + </name> + <command> +--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/700 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /700 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test701 b/tests/data/test701 new file mode 100644 index 000000000..014aca249 --- /dev/null +++ b/tests/data/test701 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +SOCKS5 +</keywords> +</info> + +# +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +socks5 +</server> + <name> +HTTP GET via SOCKS5 proxy + </name> + <command> +--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/701 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /701 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test702 b/tests/data/test702 new file mode 100644 index 000000000..36af71328 --- /dev/null +++ b/tests/data/test702 @@ -0,0 +1,39 @@ +<testcase> +#based off 19 +<info> +<keywords> +HTTP +SOCKS4 +connect to non-listen +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +socks4 +</server> +<features> +http +</features> + <name> +Attempt connect to non-listening HTTP server via SOCKS4 proxy + </name> + <command> +--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:60000 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +7 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test703 b/tests/data/test703 new file mode 100644 index 000000000..4aa89b46a --- /dev/null +++ b/tests/data/test703 @@ -0,0 +1,39 @@ +<testcase> +#based off 19 +<info> +<keywords> +HTTP +SOCKS5 +connect to non-listen +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +socks5 +</server> +<features> +http +</features> + <name> +Attempt connect to non-listening HTTP server via SOCKS5 proxy + </name> + <command> +--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:60000 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +7 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test704 b/tests/data/test704 new file mode 100644 index 000000000..15a1b6701 --- /dev/null +++ b/tests/data/test704 @@ -0,0 +1,36 @@ +<testcase> +#based off 19 +<info> +<keywords> +HTTP +SOCKS4 +connect to non-listen +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +Attempt connect to non-listening SOCKS4 proxy + </name> + <command> +--socks4 %HOSTIP:60000 http://%HOSTIP:%HTTPPORT/704 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +7 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test705 b/tests/data/test705 new file mode 100644 index 000000000..3b904c6b1 --- /dev/null +++ b/tests/data/test705 @@ -0,0 +1,36 @@ +<testcase> +#based off 19 +<info> +<keywords> +HTTP +SOCKS5 +connect to non-listen +FAILURE +</keywords> +</info> +# Server-side +<reply> +<data> +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +Attempt connect to non-listening SOCKS5 proxy + </name> + <command> +--socks5 %HOSTIP:60000 http://%HOSTIP:%HTTPPORT/705 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<errorcode> +7 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test706 b/tests/data/test706 new file mode 100644 index 000000000..330cb2393 --- /dev/null +++ b/tests/data/test706 @@ -0,0 +1,59 @@ +<testcase> +#based off test 100 +<info> +<keywords> +FTP +PASV +LIST +SOCKS4 +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +socks4 +</server> + <name> +FTP dir list PASV via SOCKS4 + </name> + <command> +--socks4 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test707 b/tests/data/test707 new file mode 100644 index 000000000..c3a862178 --- /dev/null +++ b/tests/data/test707 @@ -0,0 +1,59 @@ +<testcase> +#based off test 100 +<info> +<keywords> +FTP +PASV +LIST +SOCKS5 +</keywords> +</info> +# +# Server-side +<reply> +# When doing LIST, we get the default list output hard-coded in the test +# FTP server +<datacheck> +total 20 +drwxr-xr-x 8 98 98 512 Oct 22 13:06 . +drwxr-xr-x 8 98 98 512 Oct 22 13:06 .. +drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT +-r--r--r-- 1 0 1 35 Jul 16 1996 README +lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin +dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev +drwxrwxrwx 2 98 98 512 May 29 16:04 download.html +dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc +drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub +dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +ftp +socks5 +</server> + <name> +FTP dir list PASV via SOCKS5 + </name> + <command> +--socks5 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/ +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test708 b/tests/data/test708 new file mode 100644 index 000000000..716d9aec0 --- /dev/null +++ b/tests/data/test708 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +SOCKS4 +</keywords> +</info> + +# +# Server-side +<reply name="1"> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +socks4 +</server> +<setenv> +all_proxy=socks4://%HOSTIP:%SOCKSPORT +</setenv> + <name> +HTTP GET via SOCKS4 proxy + </name> + <command> +http://%HOSTIP:%HTTPPORT/708 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /708 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test709 b/tests/data/test709 new file mode 100644 index 000000000..6620f89a7 --- /dev/null +++ b/tests/data/test709 @@ -0,0 +1,60 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +SOCKS5 +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +socks5 +</server> +<setenv> +http_proxy=socks5://%HOSTIP:%SOCKSPORT +</setenv> + <name> +HTTP GET via SOCKS5 set in environment + </name> + <command> +http://%HOSTIP:%HTTPPORT/709 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /709 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test71 b/tests/data/test71 new file mode 100644 index 000000000..b71f969e7 --- /dev/null +++ b/tests/data/test71 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +config file +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Length: 11 + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP and -F upload in config file + </name> +<stdin> +-F name=daniel +-F tool=curl +-F file=@log/test71.txt +</stdin> + <command> +http://%HOSTIP:%HTTPPORT/we/want/71 -K - +</command> +# We create this file before the command is invoked! +<file name="log/test71.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/71 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 408
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test71.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------9ef8d6205763--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test710 b/tests/data/test710 new file mode 100644 index 000000000..884eb50a0 --- /dev/null +++ b/tests/data/test710 @@ -0,0 +1,57 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +SOCKS5 +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +socks5 +</server> + <name> +HTTP GET via SOCKS5 set with --proxy + </name> + <command> +http://%HOSTIP:%HTTPPORT/710 --proxy socks5://%HOSTIP:%SOCKSPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /710 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test72 b/tests/data/test72 new file mode 100644 index 000000000..5c24271f8 --- /dev/null +++ b/tests/data/test72 @@ -0,0 +1,86 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Digest auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic realm="foothis"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic realm="foothis"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP with Digest *OR* Basic authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/72 -u testuser:testpass --anyauth +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /72 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /72 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/72", response="9fcd1330377365a09bbcb33b2cbb25bd"
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test73 b/tests/data/test73 new file mode 100644 index 000000000..d60ee62ad --- /dev/null +++ b/tests/data/test73 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +cookiejar +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Set-Cookie: IPCZQX01af0fca5c=000010008168c200d25dfc4b; path=/; domain=.NOT_DISCLOSED.se
+Content-Length: 4
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, receive cookies when using custom Host:, domain using only two dots + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/73 -c log/jar73.txt -H "Host: host.NOT_DISCLOSED.se" +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/73 HTTP/1.1
+Accept: */*
+Host: host.NOT_DISCLOSED.se
+
+</protocol> +<file name="log/jar73.txt" mode="text"> +# Netscape HTTP Cookie File +# http://curl.haxx.se/docs/http-cookies.html +# This file was generated by libcurl! Edit at your own risk. + +.NOT_DISCLOSED.se TRUE / FALSE 0 IPCZQX01af0fca5c 000010008168c200d25dfc4b +</file> +</verify> +</testcase> diff --git a/tests/data/test74 b/tests/data/test74 new file mode 100644 index 000000000..4c08e26eb --- /dev/null +++ b/tests/data/test74 @@ -0,0 +1,74 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +{} list +</keywords> +</info> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +<data1> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose +Connection: close + +crap data +</data1> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, urlglob {}-retrieval and -o #[num] usage + </name> + <command option="no-output"> +"http://%HOSTIP:%HTTPPORT/{74,740001}" -o "log/dumpit#1.dump" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /74 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /740001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +<file name="log/dumpit740001.dump"> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose +Connection: close + +crap data +</file> +</verify> +</testcase> diff --git a/tests/data/test75 b/tests/data/test75 new file mode 100644 index 000000000..07f6990b7 --- /dev/null +++ b/tests/data/test75 @@ -0,0 +1,49 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> + <name> +HTTP, urlglob retrieval with bad range + </name> + <command option="no-output"> +"http://%HOSTIP:%HTTPPORT/[2-1]" -o "log/weee#1.dump" --stderr - +</command> +# The error message on stdout implicitly depends on the length of the +# URL, so refuse to run if the length is unexpected. +<precheck> +perl %SRCDIR/libtest/test75.pl http://%HOSTIP:%HTTPPORT/ 22 +</precheck> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<errorcode> +3 +</errorcode> +<stdout mode="text"> +curl: (3) [globbing] error: bad range specification after pos 24 +</stdout> +</verify> +</testcase> diff --git a/tests/data/test76 b/tests/data/test76 new file mode 100644 index 000000000..ada3a3359 --- /dev/null +++ b/tests/data/test76 @@ -0,0 +1,39 @@ +<testcase> +<info> +<keywords> +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> + <name> +HTTP, -O with no file name part in the URL + </name> + <command option="no-output"> +http://%HOSTIP:%HTTPPORT/76/ -O +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<errorcode> +23 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test77 b/tests/data/test77 new file mode 100644 index 000000000..90f4563b2 --- /dev/null +++ b/tests/data/test77 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-z +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2010 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html + +-foo- +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with -z "older date" + </name> + <command> +http://%HOSTIP:%HTTPPORT/77 -z "dec 12 12:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /77 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test78 b/tests/data/test78 new file mode 100644 index 000000000..aa889c50f --- /dev/null +++ b/tests/data/test78 @@ -0,0 +1,67 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +-z +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1990 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +<datacheck> +HTTP/1.1 200 OK +Server: test-server/fake +Last-Modified: Tue, 13 Jun 1990 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with -z "newer date" + </name> + <command> +http://%HOSTIP:%HTTPPORT/78 -z "dec 12 11:00:00 1999 GMT" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /78 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test79 b/tests/data/test79 new file mode 100644 index 000000000..b2566e229 --- /dev/null +++ b/tests/data/test79 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +HTTP GET +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +contents +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +FTP over HTTP proxy + </name> + <command> +ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test8 b/tests/data/test8 new file mode 100644 index 000000000..c36408ac2 --- /dev/null +++ b/tests/data/test8 @@ -0,0 +1,66 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +cookies +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP with cookie parsing from header file + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/8 -b log/heads8.txt +</command> + +# We create this file before the command is invoked! +<file name="log/heads8.txt"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Content-Type: text/html +Funny-head: yesyes +Set-Cookie: foobar=name; domain=%HOSTIP; path=/; +Set-Cookie: mismatch=this; domain=%HOSTIP; path="/silly/"; +Set-Cookie: partmatch=present; domain=.0.0.1; path=/w; +Set-Cookie: duplicate=test; domain=.0.0.1; domain=.0.0.1; path=/donkey; +Set-Cookie: cookie=yes; path=/we; +Set-Cookie: cookie=perhaps; path=/we/want; +Set-Cookie: nocookie=yes; path=/WE; +Set-Cookie: blexp=yesyes; domain=.0.0.1; domain=.0.0.1; expiry=totally bad; + +</file> +<precheck> +perl -e 'if ("%HOSTIP" !~ /\.0\.0\.1$/) {print "Test only works for HOSTIPs ending with .0.0.1"; exit(1)}' +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /we/want/8 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: cookie=perhaps; cookie=yes; partmatch=present; foobar=name; blexp=yesyes
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test80 b/tests/data/test80 new file mode 100644 index 000000000..2fa196910 --- /dev/null +++ b/tests/data/test80 @@ -0,0 +1,79 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP Basic auth +HTTP proxy +HTTP proxy Basic auth +proxytunnel +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +http-proxy +</server> + <name> +HTTP 1.0 CONNECT with proxytunnel and proxy+host Basic authentication + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/80 -p --proxy1.0 %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<proxy> +CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /we/want/that/page/80 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test800 b/tests/data/test800 new file mode 100644 index 000000000..2b7d057aa --- /dev/null +++ b/tests/data/test800 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +POP3 +RETR +</keywords> +</info> + +# +# Server-side +<reply> +<data> +From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 RETR + </name> + <command> +pop3://%HOSTIP:%POP3PORT/800 -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+RETR 800
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test801 b/tests/data/test801 new file mode 100644 index 000000000..271d8d1f7 --- /dev/null +++ b/tests/data/test801 @@ -0,0 +1,47 @@ +<testcase> +<info> +<keywords> +IMAP +FETCH +</keywords> +</info> + +# +# Server-side +<reply> +<data> +From: me@somewhere +To: fake@nowhere + +body + +-- + yours sincerely +</data> +</reply> + +# +# Client-side +<client> +<server> +imap +</server> + <name> +IMAP FETCH + </name> + <command> +imap://%HOSTIP:%IMAPPORT/801 -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +B LOGIN user secret
+C SELECT 801
+D FETCH 1 BODY[TEXT]
+A LOGOUT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test802 b/tests/data/test802 new file mode 100644 index 000000000..12e46c9c3 --- /dev/null +++ b/tests/data/test802 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP + </name> +<stdin> +From: different +To: another + +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 802@foo --mail-rcpt 802@foobar.example --mail-from 802@from -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:<802@from>
+RCPT TO:<802@foo>
+RCPT TO:<802@foobar.example>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test803 b/tests/data/test803 new file mode 100644 index 000000000..a00ed7ab6 --- /dev/null +++ b/tests/data/test803 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP with CRLF-dot-CRLF in data + </name> +<stdin> +From: different +To: another + +
+.
+.
+
+.
+ +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 803@foo --mail-from '<803@from>' -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:<803@from>
+RCPT TO:<803@foo>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +
+..
+..
+
+..
+ +body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test804 b/tests/data/test804 new file mode 100644 index 000000000..cfacfc64f --- /dev/null +++ b/tests/data/test804 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +SMTP +SMTP HELO +RFC821 +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY EHLO 500 Command unrecognized +REPLY HELO 250 Already old but still servicing... +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +RFC821-only SMTP server (EHLO not supported) + </name> +<stdin> +From: different +To: another + +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 804@foo --mail-from 804@from -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+HELO user
+MAIL FROM:<804@from>
+RCPT TO:<804@foo>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test805 b/tests/data/test805 new file mode 100644 index 000000000..4595221c9 --- /dev/null +++ b/tests/data/test805 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +SMTP +SMTP AUTH PLAIN +RFC4616 +RFC4954 +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY EHLO 220 AUTH PLAIN +REPLY AUTH 235 Authenticated +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP plain authentication + </name> +<stdin> +mail body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 805@foo --mail-from 805@from -u test:1234 -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+AUTH PLAIN dGVzdAB0ZXN0ADEyMzQ=
+MAIL FROM:<805@from>
+RCPT TO:<805@foo>
+DATA
+QUIT
+</protocol> +<upload> +mail body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test806 b/tests/data/test806 new file mode 100644 index 000000000..b71ac5cce --- /dev/null +++ b/tests/data/test806 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +SMTP +SMTP AUTH LOGIN +RFC4954 +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY EHLO 220 AUTH LOGIN +REPLY AUTH 334 UGFzc3dvcmQ6 +REPLY MTIzNA== 235 Authenticated +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP login authentication + </name> +<stdin> +mail body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 806@foo --mail-from 806@from -u test:1234 -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+AUTH LOGIN dGVzdA==
+MTIzNA==
+MAIL FROM:<806@from>
+RCPT TO:<806@foo>
+DATA
+QUIT
+</protocol> +<upload> +mail body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test807 b/tests/data/test807 new file mode 100644 index 000000000..d171ffabc --- /dev/null +++ b/tests/data/test807 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +SMTP +SMTP AUTH CRAM-MD5 +RFC2195 +RFC4954 +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY EHLO 220 AUTH CRAM-MD5 +REPLY AUTH 334 PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+ +REPLY dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw 235 Authenticated +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> +<features> +crypto +</features> + <name> +SMTP CRAM-MD5 authentication + </name> +<stdin> +mail body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 807@foo --mail-from 807@from -u tim:tanstaaftanstaaf -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+AUTH CRAM-MD5
+dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw
+MAIL FROM:<807@from>
+RCPT TO:<807@foo>
+DATA
+QUIT
+</protocol> +<upload> +mail body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test808 b/tests/data/test808 new file mode 100644 index 000000000..2c9c11cdd --- /dev/null +++ b/tests/data/test808 @@ -0,0 +1,42 @@ +<testcase> +<info> +<keywords> +POP3 +LIST +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY LIST +OK 808 100 +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 LIST one message + </name> + <command> +pop3://%HOSTIP:%POP3PORT/808 -l -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+LIST 808
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test809 b/tests/data/test809 new file mode 100644 index 000000000..ffa9b3331 --- /dev/null +++ b/tests/data/test809 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +POP3 +LIST +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY LIST -ERR no such message +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 LIST invalid message + </name> + <command> +pop3://%HOSTIP:%POP3PORT/809 -l -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +56 +</errorcode> +<protocol> +CAPA
+USER user
+PASS secret
+LIST 809
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test81 b/tests/data/test81 new file mode 100644 index 000000000..0da0bdca0 --- /dev/null +++ b/tests/data/test81 @@ -0,0 +1,101 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy NTLM auth +</keywords> +</info> + +# Server-side +<reply> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 407 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 407 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with proxy using NTLM authorization + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/81 --proxy-user testuser:testpass -x http://%HOSTIP:%HTTPPORT --proxy-ntlm +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test810 b/tests/data/test810 new file mode 100644 index 000000000..934837f64 --- /dev/null +++ b/tests/data/test810 @@ -0,0 +1,51 @@ +<testcase> +<info> +<keywords> +POP3 +LIST +</keywords> +</info> + +# +# Server-side +<reply> +# We use SLOWDOWN to really exercise the end-of-body parsing over multiple +# packets +<servercmd> +SLOWDOWN +</servercmd> +# When doing LIST, we get the default list output hard-coded in the test +# POP3 server +<datacheck> +1 100
+2 4294967400
+4 200
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 LIST messages from *SLOW* server + </name> + <command> +pop3://%HOSTIP:%POP3PORT/ -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test811 b/tests/data/test811 new file mode 100644 index 000000000..074969a4f --- /dev/null +++ b/tests/data/test811 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +POP3 +LIST +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY LIST +OK but no messages\r\n. +</servercmd> +<datacheck> +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 LIST no messages available + </name> + <command> +pop3://%HOSTIP:%POP3PORT/ -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+LIST
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test812 b/tests/data/test812 new file mode 100644 index 000000000..dbf40c491 --- /dev/null +++ b/tests/data/test812 @@ -0,0 +1,46 @@ +<testcase> +<info> +<keywords> +POP3 +RETR +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY RETR -ERR no such message +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 RETR invalid message + </name> + <command> +pop3://%HOSTIP:%POP3PORT/812 -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +56 +</errorcode> +<protocol> +CAPA
+USER user
+PASS secret
+RETR 812
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test813 b/tests/data/test813 new file mode 100644 index 000000000..1447fa277 --- /dev/null +++ b/tests/data/test813 @@ -0,0 +1,44 @@ +<testcase> +<info> +<keywords> +POP3 +FAILURE +</keywords> +</info> + +# +# Server-side +<reply> +<servercmd> +REPLY PASS -ERR invalid login +</servercmd> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 invalid login + </name> + <command> +pop3://%HOSTIP:%POP3PORT/813 -u user:wrong +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +67 +</errorcode> +<protocol> +CAPA
+USER user
+PASS wrong
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test814 b/tests/data/test814 new file mode 100644 index 000000000..1fc060777 --- /dev/null +++ b/tests/data/test814 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP without --mail-from + </name> +<stdin> +From: different +To: another + +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 814@foo -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:<>
+RCPT TO:<814@foo>
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test815 b/tests/data/test815 new file mode 100644 index 000000000..261887f9b --- /dev/null +++ b/tests/data/test815 @@ -0,0 +1,59 @@ +<testcase> +<info> +<keywords> +POP3 +RETR +</keywords> +</info> + +# +# Server-side +<reply> +<data> +From: me@somewhere
+To: fake@nowhere
+
+..body with a single dot first
+...triple dots...
+
+--
+ yours sincerely
+</data> +<datacheck> +From: me@somewhere
+To: fake@nowhere
+
+.body with a single dot first
+..triple dots...
+
+--
+ yours sincerely
+</datacheck> +</reply> + +# +# Client-side +<client> +<server> +pop3 +</server> + <name> +POP3 RETR with dot-prefixed line + </name> + <command> +pop3://%HOSTIP:%POP3PORT/815 -u user:secret +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +CAPA
+USER user
+PASS secret
+RETR 815
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test82 b/tests/data/test82 new file mode 100644 index 000000000..9e800bb73 --- /dev/null +++ b/tests/data/test82 @@ -0,0 +1,56 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +HTTP proxy Basic auth +HTTP proxy NTLM auth +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 407 We only deal with NTLM my friend
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM +
+This is not the real page either! +</data> + +</reply> + +# Client-side +<client> +<features> +</features> +<server> +http +</server> + <name> +HTTP with proxy requiring NTLM, but we send Basic + </name> + <command> +http://%HOSTIP:%HTTPPORT/82 --proxy-user testuser:testpass -x http://%HOSTIP:%HTTPPORT +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/82 HTTP/1.1
+Proxy-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test83 b/tests/data/test83 new file mode 100644 index 000000000..3015c9ca7 --- /dev/null +++ b/tests/data/test83 @@ -0,0 +1,75 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP Basic auth +proxytunnel +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +http-proxy +</server> + <name> +HTTP over proxy-tunnel with site authentication + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%PROXYPORT --user iam:myself +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<proxy> +CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /we/want/that/page/83 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test84 b/tests/data/test84 new file mode 100644 index 000000000..4dbf16432 --- /dev/null +++ b/tests/data/test84 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes + +contents +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP over proxy with site authentication + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/84 -x %HOSTIP:%HTTPPORT --user iam:myself +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/we/want/that/page/84 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test85 b/tests/data/test85 new file mode 100644 index 000000000..a5d1a3bca --- /dev/null +++ b/tests/data/test85 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP Basic auth +HTTP proxy +HTTP proxy Basic auth +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP over proxy with site and proxy authentication + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/85 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/we/want/that/page/85 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test86 b/tests/data/test86 new file mode 100644 index 000000000..70c28e93b --- /dev/null +++ b/tests/data/test86 @@ -0,0 +1,96 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +[] range +</keywords> +</info> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Connection: close +Content-Type: text/html +Funny-head: yesyes + +-foo- +</data> +<data1> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose + +crap data +</data1> +<data2> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose + +crap data +</data2> +<data3> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose + +crap data +</data3> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP, urlglob []-retrieval and -o #[num] usage + </name> + <command option="no-output"> +"http://%HOSTIP:%HTTPPORT/[860001-860003]" -o "log/dumpit#1.dump" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /860001 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /860002 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /860003 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +# we check the second file +<file name="log/dumpit860002.dump"> +HTTP/1.0 200 OK +Content-Type: text/html +Funny-head: swsclose + +crap data +</file> +</verify> +</testcase> diff --git a/tests/data/test87 b/tests/data/test87 new file mode 100644 index 000000000..40b274b2e --- /dev/null +++ b/tests/data/test87 @@ -0,0 +1,36 @@ +<testcase> +<info> +<keywords> +[] range +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +</reply> +# +# Client-side +<client> +<server> +none +</server> +<features> +http +</features> + <name> +urlglob with bad -o #[num] usage + </name> + <command option="no-output"> +"http://%HOSTIP:%HTTPPORT/[870001-870003]" -o "log/dumpit#2.dump" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +2 +</errorcode> +</verify> +</testcase> diff --git a/tests/data/test88 b/tests/data/test88 new file mode 100644 index 000000000..2495aecfe --- /dev/null +++ b/tests/data/test88 @@ -0,0 +1,101 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +HTTP Digest auth +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +auth_required +</servercmd> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a +# Authorization: Digest line passed-in from the client +<data1000> +HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This IS the real page! +</data1000> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This IS the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +crypto +</features> + <name> +HTTP PUT with Digest authorization + </name> + <command> +http://%HOSTIP:%HTTPPORT/88 -T log/put88 -u testuser:testpass --digest +</command> +<file name="log/put88"> +This is data we upload with PUT +a second line +line three +four is the number of lines +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /88 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Expect: 100-continue
+
+PUT /88 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/88", response="78a49fa53d0c228778297687d4168e71"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT +a second line +line three +four is the number of lines +</protocol> +</verify> +</testcase> diff --git a/tests/data/test89 b/tests/data/test89 new file mode 100644 index 000000000..f348eb658 --- /dev/null +++ b/tests/data/test89 @@ -0,0 +1,145 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +followlocation +</keywords> +</info> +# Server-side +<reply> + +<!-- no <data> in this test since we have NTLM from the start + +This is supposed to be returned when the server gets a first +Authorization: NTLM line passed-in from the client --> + +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/890010
+
+</data1002> + +# This is the first reply after the redirection +<data1011> +HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1011> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1012> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1012> + +<datacheck> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/890010
+
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM and follow-location + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/89 -u testuser:testpass --ntlm -L +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /89 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /89 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/890010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/890010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test9 b/tests/data/test9 new file mode 100644 index 000000000..7905ac838 --- /dev/null +++ b/tests/data/test9 @@ -0,0 +1,73 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP FORMPOST +HTTP file upload +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP RFC1867-type formposting + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/9 -F name=daniel -F tool=curl -F file=@log/test9.txt +</command> +# We create this file before the command is invoked! +<file name="log/test9.txt"> +foo- +This is a moo- +bar +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^(User-Agent:|Content-Type: multipart/form-data;|------------).* +</strip> +<protocol> +POST /we/want/9 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 407
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test9.txt"
+Content-Type: text/plain
+
+foo- +This is a moo- +bar +
+------------------------------9ef8d6205763--
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test90 b/tests/data/test90 new file mode 100644 index 000000000..24a7ff4d2 --- /dev/null +++ b/tests/data/test90 @@ -0,0 +1,191 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +--anyauth +followlocation +</keywords> +</info> +# Server-side +<reply> + +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/900010
+
+</data1002> + +# This is the first reply after the redirection +<data10> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page +</data10> + +<data1011> +HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1011> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1012> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1012> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/900010
+
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM via --anyauth, and then follow-location with NTLM again + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/90 -u testuser:testpass --anyauth -L +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /90 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /90 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /90 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test91 b/tests/data/test91 new file mode 100644 index 000000000..e6f34aedf --- /dev/null +++ b/tests/data/test91 @@ -0,0 +1,122 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP NTLM auth +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Magic-Negotiate
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="daniel"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+Connection: close
+
+</data> + +# This is supposed to be returned when the server gets a first +# Authorization: NTLM line passed-in from the client +<data1001> +HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either! +</data1001> + +# This is supposed to be returned when the server gets the second +# Authorization: NTLM line passed-in from the client +<data1002> +HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</data1002> + +<datacheck> +HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Magic-Negotiate
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="daniel"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page! +</datacheck> + +</reply> + +# Client-side +<client> +<features> +NTLM +</features> +<server> +http +</server> + <name> +HTTP with NTLM/Negotiate/Basic, anyauth and user with domain, with size 0 + </name> + <setenv> +# we force our own host name, in order to make the test machine independent +CURL_GETHOSTNAME=curlhost +# we try to use the LD_PRELOAD hack, if not a debug build +LD_PRELOAD=%PWD/libtest/.libs/libhostname.so + </setenv> + <command> +http://%HOSTIP:%HTTPPORT/91 --anyauth -u mydomain\\myself:secret +</command> +<precheck> +chkhostname curlhost +</precheck> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /91 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /91 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /91 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAgACABwAAAABgAGAHgAAAAIAAgAfgAAAAAAAAAAAAAABoKBAMIyJpR5mHpg2FZha5kRaFZ9436GAxPu0C5llxexSQ5QzVkiLSfkcpVyRgCXXqR+Am15ZG9tYWlubXlzZWxmY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test92 b/tests/data/test92 new file mode 100644 index 000000000..bf7827651 --- /dev/null +++ b/tests/data/test92 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Content-Range +Resume +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Fri, 24 Oct 2003 21:33:12 GMT
+Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
+Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
+ETag: "ab57a-507-3f9968f3"
+Accept-Ranges: bytes
+Content-Length: 4
+Content-Range: bytes */87
+Content-Type: image/gif
+
+bad +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP resume transfer with the whole file already downloaded + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/92 -C 87 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/92 HTTP/1.1
+Range: bytes=87-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> + +</verify> +</testcase> diff --git a/tests/data/test93 b/tests/data/test93 new file mode 100644 index 000000000..138724835 --- /dev/null +++ b/tests/data/test93 @@ -0,0 +1,50 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP proxy +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 407 Needs proxy authentication +Server: test-server/fake swsclose yesyes +Proxy-Authenticate: Basic "oh please" +Connection: close + +bing +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP GET with failed proxy auth + </name> + <command> +http://%HOSTIP:%HTTPPORT/93 -x %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/93 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test94 b/tests/data/test94 new file mode 100644 index 000000000..a7bafa695 --- /dev/null +++ b/tests/data/test94 @@ -0,0 +1,58 @@ +<testcase> +<info> +<keywords> +HTTPS +HTTP GET +HTTP CONNECT +HTTP proxy +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 407 Needs proxy authentication +Server: test-server/fake swsclose yesyes +Proxy-Authenticate: Basic "oh please" +Connection: close + +bing +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<features> +SSL +</features> + <name> +HTTPS GET with failed proxy auth (CONNECT 1.0) + </name> + <command> +https://test.anything.really.com:94 --proxy1.0 %HOSTIP:%HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<errorcode> +56 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +CONNECT test.anything.really.com:94 HTTP/1.0
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4
+Host: test.anything.really.com:94
+Proxy-Connection: Keep-Alive
+
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test95 b/tests/data/test95 new file mode 100644 index 000000000..55b0e6583 --- /dev/null +++ b/tests/data/test95 @@ -0,0 +1,77 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP CONNECT +proxytunnel +</keywords> +</info> + +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Content-Type: text/html +Funny-head: yesyes +Content-Length: 9 + +contents +</datacheck> +</reply> + +# +# Client-side +<client> +<server> +http +http-proxy +</server> + <name> +HTTP over proxytunnel using POST + </name> + <command> +http://%HOSTIP:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%PROXYPORT -d "datatopost=ohthatsfunyesyes" +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<proxy> +CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol nonewline="yes"> +POST /we/want/that/page/95 HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 27
+Content-Type: application/x-www-form-urlencoded
+
+datatopost=ohthatsfunyesyes +</protocol> +</verify> +</testcase> diff --git a/tests/data/test97 b/tests/data/test97 new file mode 100644 index 000000000..c1065bb19 --- /dev/null +++ b/tests/data/test97 @@ -0,0 +1,52 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +HTTP replaced headers +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP POST with custom content-type + </name> + <command> + -d "hejsanallabarn" -H "Content-Type: silly/type" http://%HOSTIP:%HTTPPORT/97 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol nonewline="yes"> +POST /97 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Type: silly/type
+Content-Length: 14
+
+hejsanallabarn +</protocol> +</verify> +</testcase> diff --git a/tests/data/test98 b/tests/data/test98 new file mode 100644 index 000000000..b6d1182c6 --- /dev/null +++ b/tests/data/test98 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP PUT +chunked Transfer-Encoding +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> + <name> +HTTP PUT from stdin with set size, disabling chunked transfer-encoding + </name> + <command> + -T - -H "Transfer-Encoding:" -H "Content-Length: 14" http://%HOSTIP:%HTTPPORT/98 +</command> +<stdin> +data on stdin +</stdin> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +PUT /98 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 14
+Expect: 100-continue
+
+data on stdin +</protocol> +</verify> +</testcase> diff --git a/tests/data/test99 b/tests/data/test99 new file mode 100644 index 000000000..2517002f7 --- /dev/null +++ b/tests/data/test99 @@ -0,0 +1,69 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +Resume +Largefile +FAILURE +</keywords> +</info> +# +# Server-side +<reply> +<data> +HTTP/1.1 404 Nah +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close +Content-Length: 13 +Funny-head: yesyes + +0123456789123 +</data> + +<datacheck> +HTTP/1.1 404 Nah +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close +Content-Length: 13 +Funny-head: yesyes + +</datacheck> +</reply> + +# +# Client-side +<client> +<features> +large_file +</features> +<server> +http +</server> + <name> +HTTP GET with large-file resume point and failed resume + </name> + <command> +http://%HOSTIP:%HTTPPORT/99 -C 9999999999 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +# 33 is CURLE_RANGE_ERROR +<errorcode> +33 +</errorcode> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /99 HTTP/1.1
+Range: bytes=9999999999-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> |
