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 store_session_data { }
33 sub delete_session_data { }
41 ok(!$c->{session}, "without a session ID prepare doesn't load a session");
45 %config = (session => { expires => 100 });
48 __expires => time() + 1000,
51 __address => "127.0.0.1",
57 $c->sessionid("the_session");
60 ok($c->{session}, 'session "restored" with session id');
65 __expires => time() - 100, # a while ago
66 __created => time() - 1000,
67 __udpated => time() - 1000,
68 __address => "127.0.0.1",
74 $c->sessionid("the_session");
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");
84 __expires => time() + 1000,
87 __address => "unlocalhost",
93 $c->sessionid("the_session");
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");
103 __expires => time() + 1000,
106 __address => "unlocalhost",
109 $config{session}{verify_address} = 0;
111 my $c = MockCxt->new;
114 $c->sessionid("the_session");
117 ok($c->{session}, "address mismatch is OK if verify_address is disabled");
126 my $c = MockCxt->new;
130 ok($c->session, "creating a session works");
131 ok($c->sessionid, "session id generated");
133 cmp_ok($c->session->{__created}, ">=", $now, "__created time is logical");
134 cmp_ok($c->session->{__updated}, ">=", $now, "__updated time is logical");
135 cmp_ok($c->session->{__expires}, ">=", ($now + $config{session}{expires}), "__expires time is logical");
136 is($c->session->{__address}, $c->request->address, "address is also correct");
139 [ keys %{ $c->{session} } ],
140 bag(qw/__expires __created __updated __address/),
141 "initial keys in session are all there",
149 __expires => time() + 1000,
152 __address => "127.0.0.1",
155 $config{session}{expires} = 2000;
157 my $c = MockCxt->new;
162 $c->sessionid("the_session");
166 ok($c->{session}, "session is still alive after 1/2 expired and finalized");
168 cmp_ok($c->session->{__expires}, ">=", $now + 2000, "session expires time extended");