1 2use strict; 3use warnings; 4 5use RT::Test tests => undef; 6 7plan skip_all => 'SQLite has shared file sessions' if RT->Config->Get('DatabaseType') eq 'SQLite'; 8 9# Web server hangs when processing the same session row after tied 10# %session on Oracle with non-inline web servers :/ 11# Use file session instead for now. 12if ( RT->Config->Get('DatabaseType') eq 'Oracle' && ( $ENV{'RT_TEST_WEB_HANDLER'} || '' ) ne 'inline' ) { 13 RT->Config->Set( 'WebSessionClass', 'Apache::Session::File' ); 14} 15 16my ($baseurl, $agent) = RT::Test->started_ok; 17my $url = $agent->rt_base_url; 18 19diag "Test server running at $baseurl"; 20 21# get the top page 22{ 23 $agent->get($url); 24 is ($agent->status, 200, "Loaded a page"); 25} 26 27# test a login 28{ 29 $agent->login('root' => 'password'); 30 # the field isn't named, so we have to click link 0 31 is( $agent->status, 200, "Fetched the page ok"); 32 $agent->content_contains("Logout", "Found a logout link"); 33} 34 35my ($session_id) = $agent->cookie_jar->as_string =~ /RT_SID_[^=]+=(\w+);/; 36 37diag 'Load session for root user'; 38my %session; 39tie %session, 'RT::Interface::Web::Session', $session_id; 40is ( $session{'_session_id'}, $session_id, 'Got session id ' . $session_id ); 41is ( $session{'CurrentUser'}->Name, 'root', 'Session is for root user' ); 42 43diag 'Test queues cache'; 44my $user_id = $session{'CurrentUser'}->Id; 45ok ( $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}, 'Queues cached for create ticket'); 46is ( $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'objects'}->[0]{'Name'}, 47 'General', 'General queue is in cached list' ); 48 49my $last_updated = $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'lastupdated'}; 50ok( $last_updated, "Got a lastupdated timestamp of $last_updated"); 51 52untie(%session); 53# Wait for 1 sec so we can confirm lastupdated doesn't change 54sleep 1; 55$agent->get($url); 56is ($agent->status, 200, "Loaded a page"); 57 58tie %session, 'RT::Interface::Web::Session', $session_id; 59is ( $session{'_session_id'}, $session_id, 'Got session id ' . $session_id ); 60is ( $session{'CurrentUser'}->Name, 'root', 'Session is for root user' ); 61is ($last_updated, $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'lastupdated'}, 62 "lastupdated is still $last_updated"); 63 64done_testing; 65