changeset 505:9592b440ab00

Tests: more tests for Expect header. - Expectations that cannot be met. - Case-insensitive expectation value.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 27 Nov 2014 15:39:03 +0300
parents 318f305a2014
children 5baf4b01cae4
files http_expect_100_continue.t
diffstat 1 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/http_expect_100_continue.t
+++ b/http_expect_100_continue.t
@@ -21,7 +21,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(2);
+my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(5);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -54,6 +54,11 @@ EOF
 
 like(http_100_request('/', '1.1'), qr/ 100 /, 'expect 100 continue');
 
+# Comparison of expectation values is case-insensitive for unquoted tokens.
+
+like(http_100_request('/', '1.1', '100-Continue'), qr/ 100 /,
+	'expect 100 continue case-insensitive');
+
 # From RFC 2616, 8.2.3 Use of the 100 (Continue) Status:
 #
 #      - An origin server SHOULD NOT send a 100 (Continue) response if
@@ -64,14 +69,35 @@ like(http_100_request('/', '1.1'), qr/ 1
 
 unlike(http_100_request('/', '1.0'), qr/ 100 /, 'no 100 continue via http 1.0');
 
+# From RFC 2616, 14.20 Expect:
+#
+#    A server that does not understand or is unable to comply with any of
+#    the expectation values in the Expect field of a request MUST respond
+#    with appropriate error status. The server MUST respond with a 417
+#    (Expectation Failed) status if any of the expectations cannot be met.
+#
+#    <..> If a server receives a request containing an
+#    Expect field that includes an expectation-extension that it does not
+#    support, it MUST respond with a 417 (Expectation Failed) status.
+
+TODO: {
+local $TODO = 'not yet';
+
+like(http_100_request('/', '1.1', 'unknown'), qr/ 417 /, 'unknown expectation');
+like(http_100_request('/', '1.1', 'token=param'), qr/ 417 /,
+	'unsupported expectation extension');
+
+}
+
 ###############################################################################
 
 sub http_100_request {
-	my ($url, $version) = @_;
+	my ($url, $version, $value) = @_;
+	$value = '100-continue' unless defined $value;
 	my $r = http(<<EOF);
 POST $url HTTP/$version
 Host: localhost
-Expect: 100-continue
+Expect: $value
 Content-Length: 0
 Connection: close