6 use Test::More tests => 19;
10 my $m; BEGIN { use_ok($m = "Catalyst::Plugin::Session") }
13 my $log = Test::MockObject->new;
14 my $req = Test::MockObject->new;
18 $log->set_true(qw/fatal warn/);
20 $req->set_always(address => "127.0.0.1");
25 sub new { bless {}, $_[0] }
26 sub config { \%config };
30 sub isa { 1 } # subvert the plugin tests, we're faking them
31 sub get_session_data { \%session }
32 sub delete_session_data { }
40 ok(!$c->{session}, "without a session ID prepare doesn't load a session");
44 %config = (session => { expires => 100 });
47 __expires => time() + 1000,
50 __address => "127.0.0.1",
56 $c->sessionid("the_session");
59 ok($c->{session}, 'session "restored" with session id');
64 __expires => time() - 100, # a while ago
65 __created => time() - 1000,
66 __udpated => time() - 1000,
67 __address => "127.0.0.1",
73 $c->sessionid("the_session");
76 ok(!$c->{session}, "expired sessions are deleted");
77 like($c->session_delete_reason, qr/expire/i, "with appropriate reason");
78 ok(!$c->sessionid, "sessionid is also cleared");
83 __expires => time() + 1000,
86 __address => "unlocalhost",
92 $c->sessionid("the_session");
95 ok(!$c->{session}, "hijacked sessions are deleted");
96 like($c->session_delete_reason, qr/mismatch/, "with appropriate reason");
97 ok(!$c->sessionid, "sessionid is also cleared");
102 __expires => time() + 1000,
105 __address => "unlocalhost",
108 $config{session}{verify_address} = 0;
110 my $c = MockCxt->new;
113 $c->sessionid("the_session");
116 ok($c->{session}, "address mismatch is OK if verify_address is disabled");
125 my $c = MockCxt->new;
129 ok($c->session, "creating a session works");
130 ok($c->sessionid, "session id generated");
132 cmp_ok($c->session->{__created}, ">=", $now, "__created time is logical");
133 cmp_ok($c->session->{__updated}, ">=", $now, "__updated time is logical");
134 cmp_ok($c->session->{__expires}, ">=", ($now + $config{session}{expire}), "__expires time is logical");
135 is($c->session->{__address}, $c->request->address, "address is also correct");
138 [ keys %{ $c->{session} } ],
139 bag(qw/__expires __created __updated __address/),
140 "initial keys in session are all there",
148 __expires => time() + 1000,
151 __address => "127.0.0.1",
154 $config{session}{expire} = 2000;
156 my $c = MockCxt->new;
161 $c->sessionid("the_session");
165 ok($c->{session}, "session is still alive after 1/2 expired and finalized");
167 cmp_ok($c->session->{__expires}, ">=", $now + 2000, "session expires time extended");