6 use Test::More tests => 25;
12 BEGIN { use_ok( $m = "Catalyst::Plugin::Session" ) }
15 my $log = Test::MockObject->new;
16 my $req = Test::MockObject->new;
20 $log->set_true(qw/fatal warn error/);
22 $req->set_always( address => "127.0.0.1" );
28 sub new { bless {}, $_[0] }
29 sub config { \%config }
33 sub isa { 1 } # subvert the plugin tests, we're faking them
34 sub get_session_data { \%session }
35 sub store_session_data { }
36 sub delete_session_data { }
44 ok( !$c->_session, "without a session ID prepare doesn't load a session" );
48 %config = ( session => { expires => 100 } );
51 __expires => time() + 1000,
54 __address => "127.0.0.1",
60 $c->sessionid("decafbad");
63 ok( $c->_session, 'session "restored" with session id' );
68 __expires => time() - 100, # a while ago
69 __created => time() - 1000,
70 __udpated => time() - 1000,
71 __address => "127.0.0.1",
77 $c->sessionid("decafbad");
80 ok( !$c->_session, "expired sessions are deleted" );
81 like( $c->session_delete_reason, qr/expire/i, "with appropriate reason" );
82 ok( !$c->sessionid, "sessionid is also cleared" );
87 __expires => time() + 1000,
90 __address => "unlocalhost",
96 $c->sessionid("decafbad");
99 ok( !$c->_session, "hijacked sessions are deleted" );
100 like( $c->session_delete_reason, qr/mismatch/, "with appropriate reason" );
101 ok( !$c->sessionid, "sessionid is also cleared" );
106 __expires => time() + 1000,
109 __address => "unlocalhost",
112 $config{session}{verify_address} = 0;
114 my $c = MockCxt->new;
117 $c->sessionid("decafbad");
120 ok( $c->_session, "address mismatch is OK if verify_address is disabled" );
129 my $c = MockCxt->new;
133 ok( $c->session, "creating a session works" );
134 ok( $c->sessionid, "session id generated" );
136 cmp_ok( $c->session->{__created}, ">=", $now, "__created time is logical" );
137 cmp_ok( $c->session->{__updated}, ">=", $now, "__updated time is logical" );
139 $c->session->{__expires},
141 ( $now + $config{session}{expires} ),
142 "__expires time is logical"
144 is( $c->session->{__address},
145 $c->request->address, "address is also correct" );
148 [ keys %{ $c->_session } ],
149 bag(qw/__expires __created __updated __address/),
150 "initial keys in session are all there",
156 __expires => time() + 1000,
159 __address => "127.0.0.1",
162 $config{session}{expires} = 2000;
164 my $c = MockCxt->new;
169 $c->sessionid("decafbad");
174 "session is still alive after 1/2 expired and finalized" );
177 $c->session->{__expires},
180 "session expires time extended"
185 my $c = MockCxt->new;
189 $c->sessionid("user:foo");
190 } "can't set invalid sessionid string";
205 my $c = MockCxt->new;
208 $c->sessionid("decafbad");
212 ok( !$c->session->{foo}, "foo was deleted, expired");
213 ok( $c->session->{bar}, "bar not deleted - still valid");
214 ok( $c->session->{gorch}, "gorch not deleted - no expiry");
216 is_deeply( [ sort keys %{ $c->session->{__expire_keys} } ], [qw/bar/], "expiry entry only for bar");
218 $c->session_expire_key( gorch => 10 );
220 is_deeply( [ sort keys %{ $c->session->{__expire_keys} } ], [qw/bar gorch/], "expiry entries for bar and gorch");