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 currently
fail and are added to DISABLED.

Added test 1075 to test --anyauth with Basic authentication.
This commit is contained in:
Dan Fandrich 2008-08-29 23:42:39 +00:00
parent d24465b79a
commit 85a79f9d67
9 changed files with 453 additions and 13 deletions

View File

@ -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

View File

@ -4,3 +4,7 @@
# per line.
# Lines starting with '#' letters are treated as comments.
1069
1071
1072
1073
1074

View 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; \

View File

@ -3,13 +3,14 @@
<keywords>
HTTP
HTTP PUT
HTTP/1.0
</keywords>
</info>
# Server-side
<reply>
<data>
HTTP/1.0 200 OK swsclose
HTTP/1.0 500 Impossible swsclose
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@ -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
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
</protocol>
<errorcode>
25
</errorcode>
</verify>
</testcase>

113
tests/data/test1071 Normal file
View File

@ -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>

78
tests/data/test1072 Normal file
View File

@ -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: 35
Connection: close
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
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>

71
tests/data/test1073 Normal file
View File

@ -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
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>

76
tests/data/test1074 Normal file
View File

@ -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
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>

94
tests/data/test1075 Normal file
View File

@ -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>