1 # -*- mode: perl; coding: utf-8 -*-
2 # Copyright (c) 2003-2008 Jun Morimoto <morimoto@mrmt.net>
3 # This program is covered by the GNU General Public License 2
6 use Test::More tests => 32;
8 use lib "$FindBin::Bin/../lib";
11 use_ok('Keitairc::SessionManager');
14 # dh() is not class method
15 can_ok('Keitairc::SessionManager',
16 qw/new verify search_by_session_id search_by_serial_key refresh
17 add garbage_collect delete normalize_user_agent/);
19 # every serial strings are fictitious
20 my $foma_ua = 'DoCoMo/2.0 P703imyu(c100;TB;W30H15)';
21 my $foma_ua_icc = 'DoCoMo/2.0 P703imyu(c100;TB;W30H15;ser123498761234567;icc9876543210234567890F)';
22 my $foma_icc = 'icc9876543210234567890F';
24 my $softbank_ua_serial = 'SoftBank/1.0/913SH/SHJ001/SN123456789012345 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1';
25 my $softbank_serial = 'SN123456789012345';
26 my $softbank_ua = 'SoftBank/1.0/913SH/SHJ001/ Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1';
31 # create new session manager
32 my $sm = new Keitairc::SessionManager;
33 ok($sm, 'SessionManager created');
37 # create new session manager /w default_ttl
38 my $sm = new Keitairc::SessionManager({default_ttl => 3});
39 ok($sm->{default_ttl} == 3, 'SessionManager created with default ttl');
42 my $sm = new Keitairc::SessionManager;
46 # add new session to session manager (NTT DoCoMo FOMA)
47 my $s = $sm->add($foma_ua);
48 ok($s, 'new session added');
49 ok($s->{last_access_time}, 'session has last_access_time');
50 ok(! defined $s->{serial_key}, 'session does not have serial_key');
51 ok($s->{user_agent} eq $foma_ua, 'session has user agent');
52 ok($s->{ttl}, 'session has ttl');
53 ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
61 # add new session to session manager (NTT DoCoMo FOMA /w ser/icc)
62 my $s = $sm->add($foma_ua_icc, $foma_icc);
63 ok($s, 'new session added');
64 ok($s->{last_access_time}, 'session has last_access_time');
65 ok($s->{serial_key} eq $foma_icc, 'session has serial_key');
66 ok($s->{user_agent} eq $foma_ua, 'session has user agent (serial removed)');
67 ok($s->{ttl}, 'session has ttl');
68 ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
70 $timestamp2 = $s->{last_access_time};
76 # add new session to session manager (SoftBank)
77 my $s = $sm->add($softbank_ua_serial, $softbank_serial);
78 ok($s, 'new session added');
79 ok($s->{last_access_time}, 'session has last_access_time');
80 ok($s->{serial_key} eq $softbank_serial, 'session has serial_key');
81 ok($s->{user_agent} eq $softbank_ua, 'session has user agent (serial removed)');
82 ok($s->{ttl}, 'session has ttl');
83 ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
93 $s = $sm->search_by_session_id($s1, $foma_ua);
94 ok($s, 'search_by_session_id');
96 $s = $sm->search_by_session_id($s2, $foma_ua);
97 ok($s, 'search_by_session_id');
99 $s = $sm->search_by_session_id($s3, $softbank_ua);
100 ok($s, 'search_by_session_id');
106 $s = $sm->search_by_serial_key($foma_icc, $foma_ua);
107 ok($s->{id} eq $sid2, 'search_by_serial_key');
108 $s = $sm->search_by_serial_key($softbank_serial, $softbank_ua);
109 ok($s->{id} eq $sid3, 'search_by_serial_key');
114 $s = $sm->delete($sid1);
115 $s = $sm->search_by_session_id($sid1, $foma_ua);
116 ok(! defined $s, 'deleted session has vanished');
121 sleep(1); # timestamp should be incremented
122 $s = $sm->verify({session_id => $sid2, user_agent => $foma_ua});
124 ok($timestamp2 < $s->{last_access_time}, 'verify() refreshed timestamp');
126 $s = $sm->verify({session_id => $sid2, user_agent => $softbank_ua});
127 ok(! defined $s, 'verify() reasonably failed');
129 $s = $sm->verify({session_id => $sid1, user_agent => $foma_ua});
130 ok(! defined $s, 'verify() reasonably failed');