summaryrefslogtreecommitdiffstats
path: root/tests/Test-cookies.px
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtests/Test-cookies.px112
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/Test-cookies.px b/tests/Test-cookies.px
new file mode 100755
index 0000000..9b8f793
--- /dev/null
+++ b/tests/Test-cookies.px
@@ -0,0 +1,112 @@
+#!/usr/bin/env -S perl -I .
+
+use strict;
+use warnings;
+
+use HTTPTest;
+
+
+###############################################################################
+
+my $page1 = "Hello, world!\n";
+my $page2 = "Goodbye, Sam.\n";
+my $page3 = "Page three.\n";
+my $page4 = "Page four.\n";
+my $page5 = "Page five.\n";
+my $page6 = "Page six.\n";
+
+# code, msg, headers, content
+my %urls = (
+ '/one.txt' => {
+ code => "200",
+ msg => "Ok",
+ headers => {
+ "Content-type" => "text/plain",
+ "Set-Cookie" => "foo=bar",
+ },
+ content => $page1,
+ },
+ '/two.txt' => {
+ code => "200",
+ msg => "Ok",
+ content => $page2,
+ request_headers => {
+ "Cookie" => qr|foo=bar|,
+ },
+ },
+# remove the cookie 'foo'
+ '/three.txt' => {
+ code => "200",
+ msg => "Ok",
+ headers => {
+ "Content-type" => "text/plain",
+ "Set-Cookie" => "foo=; Expires=Sun, 06 Nov 1994 08:49:37 GMT",
+ },
+ content => $page3,
+ },
+ '/four.txt' => {
+ code => "200",
+ msg => "Ok",
+ content => $page4,
+ request_headers => {
+ "!Cookie" => qr|foo=|,
+ },
+ },
+# try to set a cookie 'foo' with mismatching domain
+# see RFC 6265 5.3.6: ignore the cookie if it doesn't domain-match
+ '/five.txt' => {
+ code => "200",
+ msg => "Ok",
+ headers => {
+ "Content-type" => "text/plain",
+ "Set-Cookie" => "foo=bar; domain=.example.com",
+ },
+ content => $page5,
+ },
+ '/six.txt' => {
+ code => "200",
+ msg => "Ok",
+ content => $page6,
+ request_headers => {
+ "!Cookie" => qr|foo=bar|,
+ },
+ },
+);
+
+my $cmdline = $WgetTest::WGETPATH . " http://localhost:{{port}}/one.txt"
+ . " http://localhost:{{port}}/two.txt" . " http://localhost:{{port}}/three.txt"
+ . " http://localhost:{{port}}/four.txt" . " http://localhost:{{port}}/five.txt"
+ . " http://localhost:{{port}}/six.txt";
+
+my $expected_error_code = 0;
+
+my %expected_downloaded_files = (
+ 'one.txt' => {
+ content => $page1,
+ },
+ 'two.txt' => {
+ content => $page2,
+ },
+ 'three.txt' => {
+ content => $page3,
+ },
+ 'four.txt' => {
+ content => $page4,
+ },
+ 'five.txt' => {
+ content => $page5,
+ },
+ 'six.txt' => {
+ content => $page6,
+ },
+);
+
+###############################################################################
+
+my $the_test = HTTPTest->new (input => \%urls,
+ cmdline => $cmdline,
+ errcode => $expected_error_code,
+ output => \%expected_downloaded_files);
+exit $the_test->run();
+
+# vim: et ts=4 sw=4