OSDN Git Service

Fix for perl 5.26.
[keitairc/keitairc.git] / t / 02_SessionManager.t
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
4 use strict;
5 use warnings;
6 use Test::More tests => 32;
7 use FindBin;
8 use lib "$FindBin::Bin/../lib";
9
10 BEGIN{
11         use_ok('Keitairc::SessionManager');
12 }
13
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/);
18
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';
23
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';
27
28 use Keitairc::Log;
29
30 {
31         # create new session manager
32         my $sm = new Keitairc::SessionManager;
33         ok($sm, 'SessionManager created');
34 }
35
36 {
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');
40 }
41
42 my $sm = new Keitairc::SessionManager;
43 my $s1;
44
45 {
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');
54         $s1 = $s->{id};
55 }
56
57 my $s2;
58 my $timestamp2;
59
60 {
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');
69         $s2 = $s->{id};
70         $timestamp2 = $s->{last_access_time};
71 }
72
73 my $s3;
74
75 {
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');
84         $s3 = $s->{id};
85 }
86
87 my $sid1;
88 my $sid2;
89 my $sid3;
90
91 {
92         my $s;
93         $s = $sm->search_by_session_id($s1, $foma_ua);
94         ok($s, 'search_by_session_id');
95         $sid1 = $s->{id};
96         $s = $sm->search_by_session_id($s2, $foma_ua);
97         ok($s, 'search_by_session_id');
98         $sid2 = $s->{id};
99         $s = $sm->search_by_session_id($s3, $softbank_ua);
100         ok($s, 'search_by_session_id');
101         $sid3 = $s->{id};
102 }
103
104 {
105         my $s;
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');
110 }
111
112 {
113         my $s;
114         $s = $sm->delete($sid1);
115         $s = $sm->search_by_session_id($sid1, $foma_ua);
116         ok(! defined $s, 'deleted session has vanished');
117 }
118
119 {
120         my $s;
121         sleep(1);               # timestamp should be incremented
122         $s = $sm->verify({session_id => $sid2, user_agent => $foma_ua});
123         ok($s, 'verify()');
124         ok($timestamp2 < $s->{last_access_time}, 'verify() refreshed timestamp');
125
126         $s = $sm->verify({session_id => $sid2, user_agent => $softbank_ua});
127         ok(! defined $s, 'verify() reasonably failed');
128
129         $s = $sm->verify({session_id => $sid1, user_agent => $foma_ua});
130         ok(! defined $s, 'verify() reasonably failed');
131 }
132
133 exit;