#!/use/bin/perl -w

use strict;
use diagnostics;


print "1..8\n";


eval 'require IPC::ShareLite';

unless ($@) {
	print "ok 1\n";
}else
{
	print "not ok 1 : you haven't installed IPC::ShareLite\n"
}

eval 'require IPC::Cache';

unless ($@) {
	print "ok 2\n";
}else
{
	print "not ok 2 : you haven't installed IPC::Cache\n"
}



use Apache::Session::SharedMem;


my $s = {};

tie %$s, 'Apache::Session::SharedMem', undef, {};

if (tied %$s) {
    print "ok 3\n";
}
else {
    print "not ok 3 : couldn't tie Apache::Session::SharedMem to hash\n";
}

if (exists $s->{_session_id}) {
    print "ok 4\n";
}
else {
    print "not ok 4 : sessionid not set;  session has not initialised properly\n";
}

my $id = $s->{_session_id};

$s->{foo} = 'bar';
$s->{baz} = ['tom', 'dick', 'harry'];

untie %$s;
undef $s;
$s = {};

tie %$s, 'Apache::Session::SharedMem', $id, {};

if (tied %$s) {
    print "ok 5\n";
}else
{
	print "not ok 5 : couldn't retie session\n";
}
 

if ($s->{_session_id} eq $id) {
    print "ok 6\n";
}
else {
    print "not ok 6 : session not retied properly (sessionids not the same)\n";
}

if ($s->{foo} eq 'bar' && $s->{baz}->[0] eq 'tom' && $s->{baz}->[2] eq 'harry'){
    print "ok 7\n";
}
else {
    print "not ok 7 : data not serialized into session properly\n";
}

tied(%$s)->delete();
untie %$s;
undef $s;


my $cache = new IPC::Cache { namespace => $id };

unless  (defined $cache->get($id)) {
	print "ok 8\n";
}
else{
	print "not ok 8 : session not deleted properly - you might want to use ipcs and ipcrm to delete the sharedmem segment\n";
}
	



