Blame t/10_chmod.t

Packit 0bf95d
#!/usr/bin/perl
Packit 0bf95d
Packit 0bf95d
use strict;
Packit 0bf95d
Packit 0bf95d
BEGIN {
Packit 0bf95d
    $|  = 1;
Packit 0bf95d
    $^W = 1;
Packit 0bf95d
}
Packit 0bf95d
use Test::More;
Packit 0bf95d
use File::Spec;
Packit 0bf95d
use File::Path;
Packit 0bf95d
use Archive::Zip;
Packit 0bf95d
Packit 0bf95d
use lib 't';
Packit 0bf95d
use common;
Packit 0bf95d
Packit 0bf95d
sub get_perm {
Packit 0bf95d
    my $filename = shift;
Packit 0bf95d
Packit 0bf95d
    return (((stat($filename))[2]) & 07777);
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
sub test_if_chmod_is_working {
Packit 0bf95d
    my $test_dir = File::Spec->rel2abs(File::Spec->catdir(TESTDIR, "chtest"));
Packit 0bf95d
Packit 0bf95d
    my $test_file = File::Spec->catfile($test_dir, "test.file");
Packit 0bf95d
Packit 0bf95d
    mkdir($test_dir, 0755);
Packit 0bf95d
Packit 0bf95d
    open my $out, ">$test_file";
Packit 0bf95d
    print {$out} "Foobar.";
Packit 0bf95d
    close($out);
Packit 0bf95d
Packit 0bf95d
    my $test_perm = sub {
Packit 0bf95d
        my $perm = shift;
Packit 0bf95d
Packit 0bf95d
        chmod($perm, $test_file);
Packit 0bf95d
Packit 0bf95d
        return (get_perm($test_file) == $perm);
Packit 0bf95d
    };
Packit 0bf95d
Packit 0bf95d
    my $verdict = $test_perm->(0444) && $test_perm->(0666);
Packit 0bf95d
Packit 0bf95d
    # Clean up
Packit 0bf95d
    rmtree($test_dir);
Packit 0bf95d
Packit 0bf95d
    return $verdict;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
if (!test_if_chmod_is_working()) {
Packit 0bf95d
    plan skip_all => "chmod() is not working on this machine.";
Packit 0bf95d
} else {
Packit 0bf95d
    plan tests => 1;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
my $zip = Archive::Zip->new();
Packit 0bf95d
Packit 0bf95d
$zip->read(File::Spec->catfile(File::Spec->curdir(), "t", "data", "chmod.zip"));
Packit 0bf95d
Packit 0bf95d
my $test_dir = File::Spec->catdir(File::Spec->curdir(), "testdir", "chtest");
Packit 0bf95d
Packit 0bf95d
mkdir($test_dir, 0777);
Packit 0bf95d
Packit 0bf95d
my $test_file = File::Spec->catfile($test_dir, "test_file");
Packit 0bf95d
Packit 0bf95d
$zip->memberNamed("test_dir/test_file")->extractToFileNamed($test_file);
Packit 0bf95d
Packit 0bf95d
# TEST
Packit 0bf95d
is(get_perm($test_file), 0444, "File permission is OK.");
Packit 0bf95d
Packit 0bf95d
# Clean up.
Packit 0bf95d
rmtree($test_dir);
Packit 0bf95d