use Test::More tests => 35; $ENV{'lib::restrict-quiet'} = 1; my $skip = 33; my $uuid = 99; my @dirs = qw( lib_restrict_nouid lib_restrict_root lib_restrict_user lib_restrict_array_ok_x lib_restrict_array_ok_y lib_restrict_array_bad_x lib_restrict_array_bad_y lib_restrict_code_ref ); use_ok('lib::restrict', 'foo'); @lib::ORIG_INC = @lib::ORIG_INC; # to avoid warning.. is_deeply(\@lib::ORIG_INC, \@lib::restrict::ORIG_INC, 'name space ORIG_INC'); SKIP: { skip q{lib::restrict's tests need to be run as root}, $skip if $> != 0; skip q{Couldn't find valid non-root uid for testing}, $skip if !getpwuid($uuid); # setup mkdir $_ for @dirs; chown $uuid, $uuid, qw(lib_restrict_array_ok_y lib_restrict_array_bad_y lib_restrict_user); no warnings 'uninitialized'; # $INC{1} is uninit @ times below # start tests use_ok('lib::restrict', 'lib_restrict_nouid'); ok($INC[0] eq 'lib_restrict_nouid', 'no uid given'); use_ok('lib::restrict', qw(lib_restrict_root lib_restrict_user), 0); ok($INC[0] eq 'lib_restrict_root', 'one uid root valid'); ok($INC[1] ne 'lib_restrict_user', 'one uid root invalid'); use_ok('lib::restrict', qw(lib_restrict_user lib_restrict_root), $uuid); ok($INC[0] eq 'lib_restrict_user', 'one uid user valid'); ok($INC[1] ne 'lib_restrict_root', 'one uid user invalid'); use_ok('lib::restrict', 'lib_restrict_code_ref', sub { return 1 if shift eq 'lib_restrict_code_ref';return; }); ok($INC[0] eq 'lib_restrict_code_ref', 'code ref'); use_ok('lib::restrict', qw(lib_restrict_array_ok_x lib_restrict_array_ok_y), [0, $uuid]); ok($INC[0] eq 'lib_restrict_array_ok_x', 'array ref root and user - root'); ok($INC[1] eq 'lib_restrict_array_ok_y', 'array ref root and user - user'); use_ok('lib::restrict', qw(lib_restrict_array_bad_x lib_restrict_array_bad_y), ['abc', 0, 'xyz', $uuid]); ok($INC[0] eq 'lib_restrict_array_bad_x', 'array ref with invalid items - root'); ok($INC[1] eq 'lib_restrict_array_bad_y', 'array ref with invalid items - user'); eval q{ no lib::restrict 'lib_restrict_array_bad_x'; }; ok($INC[0] eq 'lib_restrict_array_bad_y', 'no lib::restrict'); BEGIN { $ENV{'lib::restrict-!-d_ok_in'} = ['lib_restrict_nouid']; } use_ok('lib::restrict', 'lib_restrict_nouid/foo'); ok($INC[0] eq 'lib_restrict_nouid/foo', '!-d parent exists nouid'); use_ok('lib::restrict', 'lib_restrict_nouid/bar', 0); ok($INC[0] eq 'lib_restrict_nouid/bar', '!-d parent exists uid'); use_ok('lib::restrict', 'lib_restrict_nouid/baz', sub { return 1; }); ok($INC[0] eq 'lib_restrict_nouid/baz', '!-d parent exists code ref true'); use_ok('lib::restrict', 'lib_restrict_nouid/wop', sub { return 0; }); ok($INC[0] eq 'lib_restrict_nouid/wop', '!-d parent exists code ref false'); use_ok('lib::restrict', 'lib_restrict_no/foo'); ok($INC[0] eq 'lib_restrict_no/foo', '!-d parent not exists nouid'); use_ok('lib::restrict', 'lib_restrict_no/bar', 0); ok($INC[0] ne 'lib_restrict_no/bar', '!-d parent not exists uid'); use_ok('lib::restrict', 'lib_restrict_no/baz', sub { return 1; }); ok($INC[0] eq 'lib_restrict_no/baz', '!-d parent not exists code ref true'); use_ok('lib::restrict', 'lib_restrict_no/wop', sub { return 0; }); ok($INC[0] ne 'lib_restrict_no/wop', '!-d parent not exists code ref false'); } END { # cleanup @INC = @lib::restrict::ORIG_INC; # just in case they need it :) rmdir $_ for @dirs; }