Perltidy + restore of lost test fixes
[catagits/Catalyst-Plugin-Session.git] / t / 02_session_data.t
CommitLineData
9e447f9d 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 19;
7use Test::MockObject;
8use Test::Deep;
9
10my $m; BEGIN { use_ok($m = "Catalyst::Plugin::Session") }
11
12my %config;
13my $log = Test::MockObject->new;
14my $req = Test::MockObject->new;
15my @mock_isa = ();
16my %session;
17
18$log->set_true(qw/fatal warn/);
19
20$req->set_always(address => "127.0.0.1");
21
22{
23 package MockCxt;
24 use base $m;
25 sub new { bless {}, $_[0] }
26 sub config { \%config };
27 sub log { $log }
28 sub request { $req }
29 sub debug { 0 }
30 sub isa { 1 } # subvert the plugin tests, we're faking them
31 sub get_session_data { \%session }
9a9252c2 32 sub store_session_data { }
9e447f9d 33 sub delete_session_data { }
34}
35
36{
37 my $c = MockCxt->new;
38 $c->setup;
39
9a9252c2 40 $c->prepare_action;
9e447f9d 41 ok(!$c->{session}, "without a session ID prepare doesn't load a session");
42}
43
44{
45 %config = (session => { expires => 100 });
46
47 %session = (
48 __expires => time() + 1000,
49 __created => time(),
50 __updated => time(),
51 __address => "127.0.0.1",
52 );
53
54 my $c = MockCxt->new;
55 $c->setup;
56
57 $c->sessionid("the_session");
9a9252c2 58 $c->prepare_action;
9e447f9d 59
60 ok($c->{session}, 'session "restored" with session id');
61}
62
63{
64 %session = (
65 __expires => time() - 100, # a while ago
66 __created => time() - 1000,
67 __udpated => time() - 1000,
68 __address => "127.0.0.1",
69 );
70
71 my $c = MockCxt->new;
72 $c->setup;
73
74 $c->sessionid("the_session");
9a9252c2 75 $c->prepare_action;
9e447f9d 76
77 ok(!$c->{session}, "expired sessions are deleted");
78 like($c->session_delete_reason, qr/expire/i, "with appropriate reason");
79 ok(!$c->sessionid, "sessionid is also cleared");
80}
81
82{
83 %session = (
84 __expires => time() + 1000,
85 __created => time(),
86 __updated => time(),
87 __address => "unlocalhost",
88 );
89
90 my $c = MockCxt->new;
91 $c->setup;
92
93 $c->sessionid("the_session");
9a9252c2 94 $c->prepare_action;
9e447f9d 95
96 ok(!$c->{session}, "hijacked sessions are deleted");
97 like($c->session_delete_reason, qr/mismatch/, "with appropriate reason");
98 ok(!$c->sessionid, "sessionid is also cleared");
99}
100
101{
102 %session = (
103 __expires => time() + 1000,
104 __created => time(),
105 __updated => time(),
106 __address => "unlocalhost",
107 );
108
109 $config{session}{verify_address} = 0;
110
111 my $c = MockCxt->new;
112 $c->setup;
113
114 $c->sessionid("the_session");
9a9252c2 115 $c->prepare_action;
9e447f9d 116
117 ok($c->{session}, "address mismatch is OK if verify_address is disabled");
118}
119
120{
121 %session = ();
122 %config = ();
123
124 my $now = time;
125
126 my $c = MockCxt->new;
127 $c->setup;
9a9252c2 128 $c->prepare_action;
9e447f9d 129
130 ok($c->session, "creating a session works");
131 ok($c->sessionid, "session id generated");
132
133 cmp_ok($c->session->{__created}, ">=", $now, "__created time is logical");
134 cmp_ok($c->session->{__updated}, ">=", $now, "__updated time is logical");
9a9252c2 135 cmp_ok($c->session->{__expires}, ">=", ($now + $config{session}{expires}), "__expires time is logical");
9e447f9d 136 is($c->session->{__address}, $c->request->address, "address is also correct");
137
138 cmp_deeply(
139 [ keys %{ $c->{session} } ],
140 bag(qw/__expires __created __updated __address/),
141 "initial keys in session are all there",
142 );
143}
144
145
146
147{
148 %session = (
149 __expires => time() + 1000,
150 __created => time(),
151 __updated => time(),
152 __address => "127.0.0.1",
153 );
154
9a9252c2 155 $config{session}{expires} = 2000;
9e447f9d 156
157 my $c = MockCxt->new;
158 $c->setup;
159
160 my $now = time();
161
162 $c->sessionid("the_session");
9a9252c2 163 $c->prepare_action;
9e447f9d 164 $c->finalize;
165
166 ok($c->{session}, "session is still alive after 1/2 expired and finalized");
167
168 cmp_ok($c->session->{__expires}, ">=", $now + 2000, "session expires time extended");
169}
170