Commit | Line | Data |
db1cda22 |
1 | use strict; |
2 | use warnings; |
3 | |
602b9593 |
4 | use FindBin qw/$Bin/; |
5 | use lib "$Bin/lib"; |
6 | |
db1cda22 |
7 | use Test::More; |
8 | |
92927909 |
9 | use HTTP::Cookies; |
10 | use Catalyst::Utils (); |
11 | |
12 | use Catalyst::Test qw(CookieTestApp); |
13 | |
14 | my $jar = HTTP::Cookies->new; |
15 | my %cookie; |
16 | my $get = sub { |
17 | my $url = shift; |
18 | my $req = Catalyst::Utils::request($url); |
19 | $jar->add_cookie_header($req); |
20 | my $res = request($req); |
21 | $jar->extract_cookies($res); |
22 | |
23 | $jar->scan( sub { |
24 | if ($_[1] eq 'cookietestapp_session') { |
25 | @cookie{qw( |
26 | version |
27 | key |
28 | val |
29 | path |
30 | domain |
31 | port |
32 | path_spec |
33 | secure |
34 | expires |
35 | discard |
36 | hash |
37 | )} = @_; |
38 | } |
39 | } ); |
40 | |
41 | return $res; |
42 | }; |
43 | |
44 | my $res; |
45 | |
46 | $res = $get->('/stream'); |
47 | ok $res->is_success, 'get page'; |
48 | like $res->content, qr/hit number 1/, 'session data created'; |
49 | |
50 | my $expired = $cookie{expires}; |
51 | |
52 | $res = $get->('/page'); |
53 | ok $res->is_success, 'get page'; |
54 | like $res->content, qr/hit number 2/, 'session data restored'; |
55 | |
56 | $res = $get->('/page'); |
57 | ok $res->is_success, 'get page'; |
58 | like $res->content, qr/hit number 3/, 'session data restored'; |
db1cda22 |
59 | |
92927909 |
60 | sleep 1; |
db1cda22 |
61 | |
92927909 |
62 | $res = $get->('/page'); |
63 | ok $res->is_success, 'get page'; |
64 | like $res->content, qr/hit number 4/, 'session data restored'; |
db1cda22 |
65 | |
92927909 |
66 | cmp_ok $expired, '<', $cookie{expires}, 'cookie expiration was extended'; |
67 | $expired = $cookie{expires}; |
db1cda22 |
68 | |
92927909 |
69 | $res = $get->('/page'); |
70 | ok $res->is_success, 'get page'; |
71 | like $res->content, qr/hit number 5/, 'session data restored'; |
db1cda22 |
72 | |
a79a56a8 |
73 | sleep 1; |
db1cda22 |
74 | |
92927909 |
75 | $res = $get->('/stream'); |
76 | ok $res->is_success, 'get stream'; |
77 | like $res->content, qr/hit number 6/, 'session data restored'; |
db1cda22 |
78 | |
92927909 |
79 | cmp_ok $expired, '<', $cookie{expires}, 'streaming also extends cookie'; |
dbec0a9d |
80 | |
92927909 |
81 | $res = $get->('/deleteme'); |
82 | ok $res->is_success, 'get page'; |
83 | is $res->content, '1', 'session id changed'; |
9013c08b |
84 | |
92927909 |
85 | $res = $get->('https://localhost/page'); |
86 | ok $res->is_success, 'get page over HTTPS - init session'; |
87 | like $res->content, qr/hit number 1/, 'first hit'; |
9013c08b |
88 | |
92927909 |
89 | $res = $get->('http://localhost/page'); |
90 | ok $res->is_success, 'get page again over HTTP'; |
91 | like $res->content, qr/hit number 1/, 'first hit again - cookie not sent'; |
9013c08b |
92 | |
92927909 |
93 | $res = $get->('https://localhost/page'); |
94 | ok $res->is_success, 'get page over HTTPS'; |
95 | like $res->content, qr/hit number 2/, 'second hit'; |
6a9ca807 |
96 | |
92927909 |
97 | done_testing; |