Changelog
+Daniel Fandrich (29 Aug 2008)
+- Added tests 1071 through 1074 to test automatic downgrading from HTTP 1.1
+ to HTTP 1.0 upon receiving a response from the HTTP server. Tests 1072
+ and 1073 are similar to test 1069 in that they involve the impossible
+ scenario of sending chunked data to a HTTP 1.0 server. All these fail
+ and are added to DISABLED.
+
+- Added test 1075 to test --anyauth with Basic authentication.
+
Daniel Stenberg (29 Aug 2008)
- When libcurl was doing a HTTP POST and the server would respond with
"Connection: close" and actually close the connection after the
# per line.
# Lines starting with '#' letters are treated as comments.
1069
+1071
+1072
+1073
+1074
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
+ test1064 test1065 test1066 test1067 test1068 test1069 test1070 test1071 \
+ test1072 test1073 test1074 test1075
filecheck:
@mkdir test-place; \
<keywords>
HTTP
HTTP PUT
+HTTP/1.0
</keywords>
</info>
# Server-side
<reply>
<data>
-HTTP/1.0 200 OK swsclose\r
+HTTP/1.0 500 Impossible swsclose\r
Date: Thu, 09 Nov 2010 14:49:00 GMT\r
Server: test-server/fake\r
\r
http://%HOSTIP:%HTTPPORT/bzz/1069 -T - -0
</command>
<stdin>
-more than one byte
+this data can't be sent
</stdin>
</client>
# Verify data after the test has been "shot"
<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-PUT /bzz/1069 HTTP/1.0\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 0\r
-\r
-</protocol>
+<errorcode>
+25
+</errorcode>
</verify>
</testcase>
--- /dev/null
+<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\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"\r
+Content-Type: text/plain\r
+Content-Length: 35\r
+Connection: close\r
+\r
+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\r
+Server: testcurl\r
+Content-Type: text/plain\r
+Content-Length: 23\r
+Connection: close\r
+\r
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.0 401 Authorization Required swsclose\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"\r
+Content-Type: text/plain\r
+Content-Length: 35\r
+Connection: close\r
+\r
+HTTP/1.0 200 OK swsclose\r
+Server: testcurl\r
+Content-Type: text/plain\r
+Content-Length: 23\r
+Connection: close\r
+\r
+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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Content-Length: 85\r
+Expect: 100-continue\r
+\r
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+PUT /1071 HTTP/1.0\r
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1071", response="df4cef6b52a30e65d472dd848d2055a1"\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Content-Length: 85\r
+\r
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
--- /dev/null
+<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\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"\r
+Content-Type: text/plain\r
+Content-Length: 35\r
+Connection: close\r
+\r
+Try again on this HTTP 1.0 server!
+</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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Transfer-Encoding: chunked\r
+Expect: 100-continue\r
+\r
+7a\r
+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\r
+\r
+</protocol>
+</verify>
+</testcase>
--- /dev/null
+<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 Authorization Required swsclose\r
+Server: testcurl\r
+Content-Type: text/plain\r
+Location: /newlocation/10730002\r
+Content-Length: 0\r
+Connection: close\r
+\r
+</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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Transfer-Encoding: chunked\r
+Expect: 100-continue\r
+\r
+7a\r
+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\r
+\r
+</protocol>
+</verify>
+</testcase>
--- /dev/null
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/1.0
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="true">
+HTTP/1.0 200 OK\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Content-Length: 9\r
+Connection: Keep-Alive\r
+\r
+surprise
+</data>
+<data1>
+HTTP/1.0 200 OK swsclose\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+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\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Content-Length: 9\r
+Connection: Keep-Alive\r
+\r
+surprise
+HTTP/1.0 200 OK swsclose\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+surprise2
+</stdout>
+
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1074 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /wantmore/10740001 HTTP/1.0\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>
--- /dev/null
+<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\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"\r
+Content-Type: text/plain\r
+Content-Length: 0\r
+\r
+</data>
+<datacheck>
+HTTP/1.1 401 Authorization Required\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"\r
+Content-Type: text/plain\r
+Content-Length: 0\r
+\r
+HTTP/1.1 401 Authorization Required\r
+Server: testcurl\r
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"\r
+Content-Type: text/plain\r
+Content-Length: 0\r
+\r
+</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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Content-Length: 85\r
+Expect: 100-continue\r
+\r
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+PUT /1075 HTTP/1.1\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Content-Length: 85\r
+Expect: 100-continue\r
+\r
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>