Sys-Export
view release on metacpan or search on metacpan
t/03-userdb.t view on Meta::CPAN
my $save_dir = catdir($tmp, 'save_test');
mkdir $save_dir;
$db->save($save_dir);
ok(-f catfile($save_dir, 'passwd'), 'passwd file created');
ok(-f catfile($save_dir, 'group'), 'group file created');
ok(-f catfile($save_dir, 'shadow'), 'shadow file created');
my $saved_passwd = slurp(catfile($save_dir, 'passwd'));
like($saved_passwd, qr/testuser:x:1001:1001/, 'saved passwd contains testuser');
my $saved_group = slurp(catfile($save_dir, 'group'));
like($saved_group, qr/testgroup:.*?:1001:alice/, 'saved group contains membership');
};
subtest 'roundtrip load and save' => sub {
# Create original test data
my $orig_dir = catdir($tmp, 'orig');
mkdir $orig_dir;
my $passwd_data = <<~'END';
root:*:0:0:root:/root:/bin/bash
testuser:x:1001:1001:Test User:/home/testuser:/bin/bash
alice:x:1002:1002:Alice:/home/alice:/bin/bash
END
mkfile(catfile($orig_dir, 'passwd'), $passwd_data);
my $group_data = <<~'END';
root:*:0:
wheel:*:10:alice
users:*:100:alice,testuser
testuser:*:1001:
alice:*:1002:
END
mkfile(catfile($orig_dir, 'group'), $group_data);
my $shadow_data = <<~'END';
testuser:$6$salt$hash:19000:0:99999:7:::
alice:!:19001::::::
END
mkfile(catfile($orig_dir, 'shadow'), $shadow_data);
# Load, then save
my $db = Sys::Export::Unix::UserDB->new;
$db->load($orig_dir);
my $save_dir = catdir($tmp, 'roundtrip');
mkdir $save_dir;
$db->save($save_dir);
is( slurp(catfile($save_dir, 'passwd')), $passwd_data, 'passwd' );
is( slurp(catfile($save_dir, 'group')), $group_data, 'group' );
is( slurp(catfile($save_dir, 'shadow')), $shadow_data, 'shadow' );
};
subtest 'auto import from host' => sub {
my ($user0, $group0);
# presume every host has a 'root' user and group
# This always throws an exception on Win32 "The getpwman function is unimplemented"
unless (eval {
$user0= getpwuid 0;
$group0= getgrgid 0;
0 == (getpwnam($user0)//-1) && 0 == (getgrnam($group0)//-1)
}) {
note "error checking uid/gid 0: $@";
skip_all "This host doesn't have a root user?";
}
my $db = Sys::Export::Unix::UserDB->new(auto_import => 1);
is( $db->user($user0),
object {
call uid => 0;
call group => $group0;
},
"auto-loaded user '$user0'"
);
is( $db->group($group0),
object {
call gid => 0;
},
"auto-loaded group '$group0'"
);
};
done_testing;
( run in 0.731 second using v1.01-cache-2.11-cpan-39bf76dae61 )