App-bmkpasswd
view release on metacpan or search on metacpan
);
Test::More::plan(skip_all => 'these tests are known to fail on Windows');
}
if ($ENV{AUTOMATED_TESTING} && $^O ne 'MSWin32' && getpwuid($<) eq 'njh') {
# obnoxious and useless test noise, something's fucky with this cat's
# smokers; f.ex:
# http://www.cpantesters.org/cpan/report/82c71a7e-e6a9-11e5-8839-f3218d218ed8
require Test::More;
Test::More::plan(skip_all =>
"this looks like one of Nigel Horne's busted smokers"
)
}
}
use Test::Cmd;
use Config;
my $perl = $Config{perlpath};
if ($^O ne 'VMS') {
$perl .= $Config{_exe} unless $perl =~ /$Config{_exe}$/i
'bmkpasswd -c (tuned work cost) returned hash';
}
require App::bmkpasswd;
if (App::bmkpasswd::mkpasswd_available('sha256')) {
diag "Found SHA support";
$cmd->run(args => '-m sha256', stdin => 'foo');
is $? >> 8, 0, 'bmkpasswd (-m sha256) exit 0';
my $crypt = $cmd->stdout;
chomp $crypt;
ok index($crypt, '$5$') == 0, 'sha256 hash looks ok';
$cmd->run(args => "-c @{[quotemeta $crypt]} foo");
cmp_ok $cmd->stdout, 'eq', "Match\n$crypt\n",
'bmkpasswd -c (sha256) returned hash';
}
done_testing
t/mkpasswd.t view on Meta::CPAN
use Test::More;
use strict; use warnings;
use App::bmkpasswd -all;
subtest bcrypt => sub {
my $bc;
ok $bc = mkpasswd('snacks'), 'bcrypt crypt()';
ok index($bc, '$2a$') == 0, 'looks like bcrypt';
ok passwdcmp('snacks', $bc), 'bcrypt compare';
ok !passwdcmp('things', $bc), 'bcrypt negative compare';
$bc = undef;
ok $bc = mkpasswd('snacks', 'bcrypt', 2), 'bcrypt tuned workcost';
ok index($bc, '$2a$02') == 0, 'bcrypt tuned workcost looks ok';
ok passwdcmp('snacks', $bc), 'bcrypt tuned workcost compare';
ok ! passwdcmp('things', $bc), 'bcrypt tuned negative compare';
ok ! defined passwdcmp('things', $bc), 'failed passwdcmp returns undef';
# more hash-style opt passing tests in saltgen subtest, below
$bc = mkpasswd foo => +{ cost => 6 };
ok index($bc, '$2a$06') == 0, 'bcrypt hash-style opts generation';
ok passwdcmp('foo', $bc), 'bcrypt hash-style opts comparison';
};
subtest md5 => sub {
plan skip_all => "No MD5 support; install Crypt::Passwd::XS"
unless mkpasswd_available('md5');
my $md5;
ok $md5 = mkpasswd('snacks', 'md5'), 'MD5 crypt()';
ok index($md5, '$1$') == 0, 'looks like MD5';
ok passwdcmp('snacks', $md5), 'MD5 compare';
ok !passwdcmp('things', $md5), 'MD5 negative compare';
};
subtest sha256 => sub {
plan skip_all => "No SHA256 support; install Crypt::Passwd::XS"
unless mkpasswd_available('sha256');
diag App::bmkpasswd::have_passwd_xs() ? "Using Crypt::Passwd::XS for SHA"
: "Using system crypt() for SHA";
my $sha;
ok $sha = mkpasswd('snacks', 'sha256'), 'SHA256 crypt()';
ok index($sha, '$5$') == 0, 'looks like SHA256';
ok passwdcmp('snacks', $sha), 'SHA256 compare';
ok !passwdcmp('things', $sha), 'SHA256 negative compare';
ok $sha = mkpasswd('snacks', 'SHA-256'), 'SHA-256 crypt()';
ok index($sha, '$5$') == 0, 'looks like SHA256 ("SHA-256")';
};
subtest sha512 => sub {
plan skip_all => "No SHA512 support; install Crypt::Passwd::XS"
unless mkpasswd_available('sha512');
my $sha512;
ok $sha512 = mkpasswd('snacks', 'sha512'), 'SHA512 crypt()';
ok index($sha512, '$6$') == 0, 'looks like SHA512';
ok passwdcmp('snacks', $sha512), 'SHA512 compare';
ok !passwdcmp('things', $sha512), 'SHA512 negative compare';
ok $sha512 = mkpasswd('snacks', 'SHA-512'), 'SHA-512 crypt()';
ok index($sha512, '$6$') == 0, 'looks like SHA512 ("SHA-512")';
};
subtest mkpasswd_available => sub {
ok mkpasswd_available('bcrypt'), 'mkpasswd_available';
ok !mkpasswd_available('foo'), 'negative mkpasswd_available';
};
subtest mkpasswd_forked => sub {
my $orig_brs = App::bmkpasswd::get_brs;
ok $orig_brs == App::bmkpasswd::get_brs, 'get_brs ok';
t/mkpasswd.t view on Meta::CPAN
my $sha = mkpasswd( snacks => +{
type => 'sha256',
strong => 1,
saltgen => sub {
my ($type, $strong) = @_;
ok $strong, 'strong salt opt passed ok';
ok $type eq 'sha', 'saltgen got correct type';
return 'ababcdcd'
},
});
ok index($sha, '$5$ababcdcd$') == 0, 'sha with saltgen looks ok';
ok passwdcmp('snacks', $sha), 'sha with saltgen compares ok';
};
done_testing
( run in 0.778 second using v1.01-cache-2.11-cpan-64827b87656 )