File: 10_cookie_expiry.t

package info (click to toggle)
libapache2-mod-auth-tkt 2.1.0%2Bdfsg-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 976 kB
  • ctags: 709
  • sloc: ansic: 2,178; perl: 1,595; makefile: 91; sh: 88; php: 88; ruby: 59; python: 48
file content (167 lines) | stat: -rw-r--r-- 6,686 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/usr/bin/perl
#
# Cookie expiry testing
#

use strict;
use warnings FATAL => 'all';

use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest qw(GET);
use HTTP::Cookies;
use lib "cgi";
use Apache::AuthTkt;
use DateTime;

plan tests => 28, need 'LWP', need_apache 2;

ok 1;   # simple load test

my $jar = HTTP::Cookies->new;
my ($url, $res, $cookie, $expires, $calc);

# Reset the TestRequest user_agent to use our cookie jar
Apache::TestRequest::user_agent(
  cookie_jar => $jar,
  requests_redirectable => 0,
  reset => 1, 
);

# Test cookie expiry with no units
$jar->clear;
undef $expires;
$url = '/secret_cookie_expiry1/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n" if $expires;
$calc = DateTime->now(time_zone => 'GMT')->add(days => 1)->strftime('%Y-%m-%d');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field bare ok');

# Test cookie expiry with seconds (86400s)
$jar->clear;
undef $expires;
$url = '/secret_cookie_expiry2/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n" if $expires;
$calc = DateTime->now(time_zone => 'GMT')->add(days => 1)->strftime('%Y-%m-%d');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field seconds ok');

# Test cookie expiry with minutes (120m)
$jar->clear;
$url = '/secret_cookie_expiry3/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(minutes => 120)->strftime('%Y-%m-%d %H:%M');
print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field minutes ok');

# Test cookie expiry with hours (3h)
$jar->clear;
$url = '/secret_cookie_expiry4/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(hours => 3)->strftime('%Y-%m-%d %H');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field hours ok');

# Test cookie expiry with days (2d)
$jar->clear;
$url = '/secret_cookie_expiry5/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(days => 2)->strftime('%Y-%m-%d');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field days ok');

# Test cookie expiry with weeks (3w)
$jar->clear;
$url = '/secret_cookie_expiry6/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(weeks => 3)->strftime('%Y-%m-%d');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field weeks ok');

# Test cookie expiry with months (3M)
$jar->clear;
$url = '/secret_cookie_expiry7/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(days => 90)->strftime('%Y-%m-%d');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field months ok');

# Test cookie expiry with years (1y)
$jar->clear;
$url = '/secret_cookie_expiry8/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
#print "expires: $expires\n";
$calc = DateTime->now(time_zone => 'GMT')->add(days => 365)->strftime('%Y-%m');
#print "calc: $calc\n";
ok t_cmp($expires, qr/^$calc/, 'cookie expires field years ok');

# Test cookie expiry with multiple units (2y 1m 3w 4d)
$jar->clear;
$url = '/secret_cookie_expiry9/index.cgi';
$res = GET $url;
ok t_cmp($res->code, 200, 'accepted without valid ticket');
ok t_cmp($res->content, qr/^This is secret_guest, you are guest/i, 'accepted as guest');
#print "jar: " . $jar->as_string;
($cookie) = ($jar->as_string =~ m/^(Set-Cookie3: auth_tkt=.*)$/);
($expires) = ($cookie =~ m/expires="?([^;]*?)"?;/) if $cookie;
$expires =~ s/\s.*//;
my @expires = split /-/, $expires;
my $expires_dt = DateTime->new(year => $expires[0], month => $expires[1], day => $expires[2]);
printf "expires: %s\n", $expires_dt->strftime("%Y-%m-%d");
$calc = DateTime->now(time_zone => 'GMT')->add(years => 2, months => 1, weeks => 3, days => 4);
printf "calc: %s\n", $calc->strftime("%Y-%m-%d");
my $diff = $expires_dt - $calc;
printf "diff: %s\n", $diff->delta_days;
ok t_cmp(abs $diff->delta_days, qr/^[012]$/, 'cookie expires field years ok (' . $diff->delta_days . ')');
#ok t_cmp($expires, qr/^$calc/, 'cookie expires field years ok');


# vim:sw=2:et:sm:smartindent:ft=perl