App-CamelPKI
view release on metacpan or search on metacpan
t/lib/App/CamelPKI/Test.pm view on Meta::CPAN
=head2 Synopsis tests
=cut
test "synopsis" => sub {
# Thank you Test::Group for being fully reflexive!
eval My::Tests::Below->pod_code_snippet("synopsis");
die $@ if $@;
};
test "synopsis asn1" => sub {
my $synopsis = My::Tests::Below->pod_code_snippet("synopsis-asn1");
ok(defined(my $dn_der =
$App::CamelPKI::Test::test_der_DNs{"CN=Zoinx,C=fr"}),
"\$dn_der defined");
eval $synopsis; die $@ if $@;
pass;
};
=head2 Sample Input Validation
=cut
test "test_simple_utf8 and test_bmp_utf8" => sub {
is(length(App::CamelPKI::Test->test_simple_utf8()), 6);
ok(utf8::is_utf8(App::CamelPKI::Test->test_simple_utf8()));
is(length(App::CamelPKI::Test->test_bmp_utf8()), 3);
ok(utf8::is_utf8(App::CamelPKI::Test->test_bmp_utf8()));
};
test "%test_keys_plaintext and %test_keys_password" => sub {
is_deeply
([sort keys %App::CamelPKI::Test::test_keys_plaintext],
[sort keys %App::CamelPKI::Test::test_keys_password],
"same keys in both");
if (defined(my $openssl_bin = openssl_path)) {
while(my ($k, $v) =
each %App::CamelPKI::Test::test_keys_password) {
my ($out, $err) = run_thru_openssl
($v, qw(rsa -passin pass:secret));
is($out,
$App::CamelPKI::Test::test_keys_plaintext{$k});
}
}
};
test "certificate_chain_ok and test certificates" => sub {
my @keyids = keys %App::CamelPKI::Test::test_rootca_certs;
foreach my $id (@keyids) {
certificate_chain_ok
($App::CamelPKI::Test::test_entity_certs{$id},
[ $App::CamelPKI::Test::test_rootca_certs{$id} ]);
certificate_chain_ok
($App::CamelPKI::Test::test_entity_certs{"${id}_sha256"},
[ $App::CamelPKI::Test::test_rootca_certs{$id} ]);
}
my ($snippet_ok, $snippet_not_ok) =
map { My::Tests::Below->pod_code_snippet($_) }
(qw(certificate_chain_ok certificate_chain_notok));
my $out = run_perl(<<"SCRIPT");
use Test::More qw(no_plan);
use App::CamelPKI::Test qw(certificate_chain_ok
%test_rootca_certs %test_self_signed_certs %test_entity_certs);
foreach my \$key (qw(${\join(" ", @keyids)})) {
$snippet_ok
$snippet_not_ok
}
SCRIPT
for my $i (0..$#keyids) {
my $success = 2 * $i + 1;
my $failure = 2 * $i + 2;
like($out, qr/^ok $success/m);
like($out, qr/^not ok $failure/m);
}
};
test "no collisions in the entity certificates' serial numbers" => sub {
my %serialz;
foreach my $certpem (values %App::CamelPKI::Test::test_entity_certs) {
my ($out, $err) =
run_thru_openssl($certpem, qw(x509 -noout -text));
(my ($serial) = $out =~ m/Serial Number:\n?\s+(.*)\n/)
or die $out;
ok(! $serialz{$serial}++, "duplicate serial $serial");
}
};
use App::CamelPKI::Test qw(server_start server_stop server_port);
sub server_can_connect {
my $ua = LWP::UserAgent->new;
my $port = server_port;
my $response = $ua->get("https://127.0.0.1:$port/");
# TODO : find a solution
# A small bug prevent this from working, no time
# to worry about it, just adapt the test
# In a perfect world, it should be :
# return ($response->is_success);
if ($response->status_line =~ qr/404/){
return 1;
}
return ($response->is_success);
}
SKIP: {
use App::CamelPKI;
my $webserver = App::CamelPKI->model("WebServer")->apache;
skip "Apache is not installed or Key Ceremony has not been done",
1 unless ($webserver->is_installed_and_has_perl_support && $webserver->is_operational);
test "server_start and server_stop" => sub {
server_start();
ok(server_can_connect());
server_stop();
ok(! server_can_connect());
};
};
SKIP:{
skip "php-cli not installed",1
unless is_php_cli_present();
test "run_php" => sub {
my $phpout = run_php(<<"SCRIPT");
( run in 0.746 second using v1.01-cache-2.11-cpan-5a3173703d6 )