The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#use strict;
use warnings;
use Cache::Tester;
use File::Temp qw(tempdir);
use File::Find;
use Carp;

$SIG{__DIE__} = sub { confess @_; };

BEGIN { plan tests => 2 + $CACHE_TESTS + 3 }

use_ok('Cache::File');

{
    # Test basic get/set and remove

    my $tempdir = tempdir(CLEANUP => 1);
    my $cache = Cache::File->new(cache_root => $tempdir,
                                 lock_level => Cache::File::LOCK_NFS());
    ok($cache, 'Cache created');

    run_cache_tests($cache);
}

{
    # Test setting of umask
    umask 077;
    my $tempdir = tempdir(CLEANUP => 1);
    my $cache = Cache::File->new(cache_root => $tempdir, cache_umask => 070);
    ok($cache, 'Cache created');

    my $entry = $cache->set('key1', 'data1');
    is($cache->count(), 1, 'Added entry');

    my $valid = 0;

    sub wanted {
        return if $_ eq $tempdir;
        my (undef, undef, $mode) = lstat($_) or die "lstat failed";
        $mode &= 0777;
        (-d and $mode == 0707) or (not -d and $mode == 0606)
            or die 'bad permissions ('.sprintf('%04o', $mode).") on $_";
    }
    eval { File::Find::find({ wanted => \&wanted, no_chdir => 1 }, $tempdir) };
    die if ($@ and $@ !~ /^bad permissions/);
    warn $@ if $@;
    ok((not $@), "Permissions are good");
}