OSDN Git Service

added can_ok()
[keitairc/keitairc.git] / t / 02_SessionManager.t
1 # -*- mode: perl; coding: utf-8 -*-
2 # $Id: 02_SessionManager.t,v 1.2 2008-08-05 14:08:25 morimoto Exp $
3 # $Source: /home/ishikawa/work/keitairc/tmp/keitairc/t/02_SessionManager.t,v $
4 # Copyright (c) 2003-2008 Jun Morimoto <morimoto@mrmt.net>
5 # This program is covered by the GNU General Public License 2
6 use strict;
7 use warnings;
8 use Data::Dumper;
9 use Test::More tests => 32;
10 use FindBin;
11 use lib "$FindBin::Bin/../lib";
12
13 BEGIN{
14         use_ok('Keitairc::SessionManager');
15 }
16
17 # dh() is not class method
18 can_ok('Keitairc::SessionManager',
19        qw/new verify search_by_session_id search_by_serial_key refresh
20         add garbage_collect delete normalize_user_agent/);
21
22 # every serial strings are fictitious
23 my $foma_ua = 'DoCoMo/2.0 P703imyu(c100;TB;W30H15)';
24 my $foma_ua_icc = 'DoCoMo/2.0 P703imyu(c100;TB;W30H15;ser123498761234567;icc9876543210234567890F)';
25 my $foma_icc = 'icc9876543210234567890F';
26
27 my $softbank_ua_serial = 'SoftBank/1.0/913SH/SHJ001/SN123456789012345 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1';
28 my $softbank_serial = 'SN123456789012345';
29 my $softbank_ua = 'SoftBank/1.0/913SH/SHJ001/ Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1';
30
31 use Keitairc::Log;
32
33 {
34         # create new session manager
35         my $sm = new Keitairc::SessionManager;
36         ok($sm, 'SessionManager created');
37 }
38
39 {
40         # create new session manager /w default_ttl
41         my $sm = new Keitairc::SessionManager({default_ttl => 3});
42         ok($sm->{default_ttl} == 3, 'SessionManager created with default ttl');
43 }
44
45 my $sm = new Keitairc::SessionManager;
46 my $s1;
47
48 {
49         # add new session to session manager (NTT DoCoMo FOMA)
50         my $s = $sm->add($foma_ua);
51         ok($s, 'new session added');
52         ok($s->{last_access_time}, 'session has last_access_time');
53         ok(! defined $s->{serial_key}, 'session does not have serial_key');
54         ok($s->{user_agent} eq $foma_ua, 'session has user agent');
55         ok($s->{ttl}, 'session has ttl');
56         ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
57         $s1 = $s->{id};
58 }
59
60 my $s2;
61 my $timestamp2;
62
63 {
64         # add new session to session manager (NTT DoCoMo FOMA /w ser/icc)
65         my $s = $sm->add($foma_ua_icc, $foma_icc);
66         ok($s, 'new session added');
67         ok($s->{last_access_time}, 'session has last_access_time');
68         ok($s->{serial_key} eq $foma_icc, 'session has serial_key');
69         ok($s->{user_agent} eq $foma_ua, 'session has user agent (serial removed)');
70         ok($s->{ttl}, 'session has ttl');
71         ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
72         $s2 = $s->{id};
73         $timestamp2 = $s->{last_access_time};
74 }
75
76 my $s3;
77
78 {
79         # add new session to session manager (SoftBank)
80         my $s = $sm->add($softbank_ua_serial, $softbank_serial);
81         ok($s, 'new session added');
82         ok($s->{last_access_time}, 'session has last_access_time');
83         ok($s->{serial_key} eq $softbank_serial, 'session has serial_key');
84         ok($s->{user_agent} eq $softbank_ua, 'session has user agent (serial removed)');
85         ok($s->{ttl}, 'session has ttl');
86         ok($s->{id} =~ /S[a-zA-Z]{10}/, 'session has valid session_id');
87         $s3 = $s->{id};
88 }
89
90 my $sid1;
91 my $sid2;
92 my $sid3;
93
94 {
95         my $s;
96         $s = $sm->search_by_session_id($s1, $foma_ua);
97         ok($s, 'search_by_session_id');
98         $sid1 = $s->{id};
99         $s = $sm->search_by_session_id($s2, $foma_ua);
100         ok($s, 'search_by_session_id');
101         $sid2 = $s->{id};
102         $s = $sm->search_by_session_id($s3, $softbank_ua);
103         ok($s, 'search_by_session_id');
104         $sid3 = $s->{id};
105 }
106
107 {
108         my $s;
109         $s = $sm->search_by_serial_key($foma_icc, $foma_ua);
110         ok($s->{id} eq $sid2, 'search_by_serial_key');
111         $s = $sm->search_by_serial_key($softbank_serial, $softbank_ua);
112         ok($s->{id} eq $sid3, 'search_by_serial_key');
113 }
114
115 {
116         my $s;
117         $s = $sm->delete($sid1);
118         $s = $sm->search_by_session_id($sid1, $foma_ua);
119         ok(! defined $s, 'deleted session has vanished');
120 }
121
122 {
123         my $s;
124         sleep(1);               # timestamp should be incremented
125         $s = $sm->verify({session_id => $sid2, user_agent => $foma_ua});
126         ok($s, 'verify()');
127         ok($timestamp2 < $s->{last_access_time}, 'verify() refreshed timestamp');
128
129         $s = $sm->verify({session_id => $sid2, user_agent => $softbank_ua});
130         ok(! defined $s, 'verify() reasonably failed');
131
132         $s = $sm->verify({session_id => $sid1, user_agent => $foma_ua});
133         ok(! defined $s, 'verify() reasonably failed');
134 }
135
136 exit;