use Test::More; use Test::Deep; use Test::Exception; use File::Temp qw[tempdir]; use Cwd qw[getcwd]; plan skip_all => "Not running RDBM tests without APACHE_SESSION_MAINTAINER=1" unless $ENV{APACHE_SESSION_MAINTAINER}; plan skip_all => "Optional modules (DBD::mysql, DBI) not installed" unless eval { require DBI; require DBD::mysql; }; plan tests => 13; my $package = 'Apache::Session::MySQL'; use_ok $package; #my $origdir = getcwd; #my $tempdir = tempdir( DIR => '.', CLEANUP => 1 ); #chdir( $tempdir ); my $session = {}; tie %{$session}, $package, undef, { DataSource => 'dbi:mysql:sessions', UserName => 'test', Password => '', LockDataSource => 'dbi:mysql:sessions', LockUserName => 'test', LockPassword => '' }; ok tied(%{$session}), 'session tied'; ok exists($session->{_session_id}), 'session id exists'; my $id = $session->{_session_id}; my $foo = $session->{foo} = 'bar'; my $baz = $session->{baz} = ['tom', 'dick', 'harry']; untie %{$session}; undef $session; $session = {}; tie %{$session}, $package, $id, { DataSource => 'dbi:mysql:sessions', UserName => 'test', Password => '', LockDataSource => 'dbi:mysql:sessions', LockUserName => 'test', LockPassword => '' }; ok tied(%{$session}), 'session tied'; is $session->{_session_id}, $id, 'id retrieved matches one stored'; cmp_deeply $session->{foo}, $foo, "Foo matches"; cmp_deeply $session->{baz}, $baz, "Baz matches"; untie %{$session}; undef $session; $session = {}; tie %{$session}, $package, undef, { DataSource => 'dbi:mysql:sessions', UserName => 'test', Password => '', TableName => 's', LockDataSource => 'dbi:mysql:sessions', LockUserName => 'test', LockPassword => '' }; ok tied(%{$session}), 'session tied'; ok exists($session->{_session_id}), 'session id exists'; untie %{$session}; undef $session; $session = {}; my $dbh = DBI->connect('dbi:mysql:sessions', 'test', '', {RaiseError => 1}); tie %{$session}, $package, $id, { Handle => $dbh, LockHandle => $dbh, }; ok tied(%{$session}), 'session tied'; is $session->{_session_id}, $id, 'id retrieved matches one stored'; cmp_deeply $session->{foo}, $foo, "Foo matches"; cmp_deeply $session->{baz}, $baz, "Baz matches"; tied(%{$session})->delete; untie %{$session}; $dbh->disconnect; #chdir( $origdir );