Added tests 1071 through 1074 to test automatic downgrading from HTTP 1.1
authorDan Fandrich <dan@coneharvesters.com>
Fri, 29 Aug 2008 23:42:39 +0000 (23:42 +0000)
committerDan Fandrich <dan@coneharvesters.com>
Fri, 29 Aug 2008 23:42:39 +0000 (23:42 +0000)
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 currently
fail and are added to DISABLED.

Added test 1075 to test --anyauth with Basic authentication.

CHANGES
tests/data/DISABLED
tests/data/Makefile.am
tests/data/test1069
tests/data/test1071 [new file with mode: 0644]
tests/data/test1072 [new file with mode: 0644]
tests/data/test1073 [new file with mode: 0644]
tests/data/test1074 [new file with mode: 0644]
tests/data/test1075 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 8b7b527..9fbc130 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,15 @@
 
                                   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
index 87d3355..dc68bd9 100644 (file)
@@ -4,3 +4,7 @@
 # per line.
 # Lines starting with '#' letters are treated as comments.
 1069
+1071
+1072
+1073
+1074
index 3cdfa63..185d385 100644 (file)
@@ -56,7 +56,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46           \
  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; \
index 11b2ce6..5b0b1fa 100644 (file)
@@ -3,13 +3,14 @@
 <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
@@ -30,21 +31,14 @@ HTTP 1.0 PUT from stdin with no content length
 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>
diff --git a/tests/data/test1071 b/tests/data/test1071
new file mode 100644 (file)
index 0000000..758457a
--- /dev/null
@@ -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\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>
diff --git a/tests/data/test1072 b/tests/data/test1072
new file mode 100644 (file)
index 0000000..9a04224
--- /dev/null
@@ -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\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>
diff --git a/tests/data/test1073 b/tests/data/test1073
new file mode 100644 (file)
index 0000000..00e7feb
--- /dev/null
@@ -0,0 +1,71 @@
+<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>
diff --git a/tests/data/test1074 b/tests/data/test1074
new file mode 100644 (file)
index 0000000..bb710ce
--- /dev/null
@@ -0,0 +1,76 @@
+<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>
diff --git a/tests/data/test1075 b/tests/data/test1075
new file mode 100644 (file)
index 0000000..5b8f186
--- /dev/null
@@ -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\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>