Apache2-ClickPath
view release on metacpan or search on metacpan
t/session/011store.t view on Meta::CPAN
local $/="\n";
my @lines=<$f>;
undef $f;
return @lines;
}
}
sub t_read_file {
local $/;
open my $f, '<'.$_[0] or die "ERROR: Cannot open $_[0]: $!\n";
return scalar <$f>;
}
plan tests => 26;
my ($res, $session, $store);
Apache::TestRequest::module('UAExceptionsFile');
t_rmtree('t/store');
$session=GET_BODY( "/TestSession__001session_generation?SESSION" );
$session=~s/SESSION=//; chomp( $session );
t_debug( "using session $session" );
t_client_log_error_is_expected(2);
t_start_error_log_watch;
$res=GET( "/store?a=set;s=$session;k=klaus;v=value" );
select undef, undef, undef, .5; # sleep for a while
my @errors=grep {/\[error\]/} t_finish_error_log_watch();
ok t_cmp( $errors[0],
qr/\[Apache2::ClickPath::Store\] Cannot create directory/,
'check for correct error message in error_log' );
ok t_cmp( $errors[1],
qr!\[Apache2::ClickPath::Store\] .*/#lastcleanup: !,
'check for correct error message in error_log' );
ok t_cmp( $res->code, 500, 'set returns code 500' );
t_mkdir('t/store');
t_start_error_log_watch;
$res=GET( "/store?a=set;s=$session;k=klaus;v=value" );
ok t_cmp( [grep /\[Apache2::ClickPath::Store\] Cannot create/, t_finish_error_log_watch()],
[],
'this time no error should occur' );
ok t_cmp( $res->content, "ok", 'set returns "ok"' );
ok t_cmp( $res->code, 200, 'set returns code 200' );
ok t_cmp( t_read_file( "t/store/$session/klaus" ), 'value',
'value stored' );
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->content, 'value', 'get stored value' );
ok t_cmp( $res->code, 200, 'get returns code 200' );
$res=GET( "/store?a=get;s=$session;k=otto" );
ok t_cmp( $res->code, 404, 'get returns code 404' );
Apache::TestRequest::user_agent( reset=>1, keep_alive=>300 );
$res=GET( "/store?a=get;s=$session;k=klaus" );
sleep 3;
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 200, 'no timeout yet' );
sleep 3;
Apache::TestRequest::user_agent( reset=>1, keep_alive=>0 );
sleep 1;
ok t_cmp( -d "t/store/#$session", 1, 'session marked for deletion (renamed)' );
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 404, 'data not accessible' );
sleep 3;
$res=GET( "/store?a=get;s=$session;k=klaus" ); # let cleanup() run once again
sleep 1; # and give it time to accomplish the task
$res=GET( "/store?a=get;s=$session;k=klaus" );
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 404, 'session store deleted => NOT_FOUND' );
ok t_cmp( -d "t/store/#$session", undef, 'session directory deleted' );
Apache::TestRequest::user_agent( reset=>1 ); # close the kept alive connection
Apache::TestRequest::module('Secret');
$session=GET_BODY( "/TestSession__001session_generation?SESSION" );
$session=~s/SESSION=//; chomp( $session );
t_debug( "using session $session" );
$res=GET( "/store?a=set;s=$session;k=klaus;v=value" );
ok t_cmp( $res->content, "ok", 'set returns "ok" (Secret)' );
ok t_cmp( $res->code, 200, 'set returns code 200 (Secret)' );
ok t_cmp( t_read_file( "t/store/$session/klaus" ), 'value',
'value stored (Secret)' );
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->content, 'value', 'get stored value (Secret)' );
ok t_cmp( $res->code, 200, 'get returns code 200 (Secret)' );
$res=GET( "/store?a=get;s=$session;k=otto" );
ok t_cmp( $res->code, 404, 'get returns code 404 (Secret)' );
Apache::TestRequest::user_agent( reset=>1, keep_alive=>300 );
$res=GET( "/store?a=get;s=$session;k=klaus" );
sleep 3;
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 200, 'no timeout yet (Secret)' );
sleep 3;
Apache::TestRequest::user_agent( reset=>1, keep_alive=>0 );
sleep 1;
ok t_cmp( -d "t/store/#$session", 1,
'session marked for deletion (renamed) (Secret)' );
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 404, 'data not accessible (Secret)' );
sleep 2;
$res=GET( "/store?a=get;s=$session;k=klaus" ); # let cleanup() run once again
sleep 1; # and give it time to accomplish the task
$res=GET( "/store?a=get;s=$session;k=klaus" );
ok t_cmp( $res->code, 404, 'session store deleted => NOT_FOUND (Secret)' );
ok t_cmp( -d "t/store/#$session", undef,
'session directory deleted (Secret)' );
Apache::TestRequest::user_agent( reset=>1 ); # close the kept alive connection
sleep 3; # and give the server time to cleanup and
# prevent a warning if t/store is removed
# before the server has finished it's cleanup
# Local Variables: #
# mode: cperl #
# End: #
( run in 1.567 second using v1.01-cache-2.11-cpan-39bf76dae61 )