拙作のNet::SSL::ExpireDateとTest::Baseとで証明書の期限切れをチェック。
こんな感じの出力。
$ prove -v sample/cert-expire.t sample/cert-expire....1..2 ok 1 - rt.cpan.org ok 2 - www.google.com ok All tests successful. Files=1, Tests=2, 5 wallclock secs ( 0.33 cusr + 0.03 csys = 0.36 CPU)
で、期限切れのがいるとこんな感じに。
$ prove -v sample/cert-expire.t sample/cert-expire....1..2 # Failed test 'rt.cpan.org' # in sample/cert-expire.t at line 27. # got: '2015-04-14T05:12:17' # expected: undef not ok 1 - rt.cpan.org (snip)
追記
- Test::*を使う着想はid:kdaiba:20061120:p1からいただきましたー
- Regexp::Assembleを使ったdispatch tableは、Perl Hacks: Tips & Tools for Programming, Debugging, and SurvivingのHack 98. Improve Your Dispatch Tablesからいただきましたー
- やっぱ、Regexp::Assemble使うのやめた。Regexp::Common::netとか使ってベタに書いた。
#!/usr/bin/env perl # -*- mode: cperl; -*- use Test::Base; use Net::SSL::ExpireDate; use Regexp::Common qw(net); my $Check_Duration; # $Check_Duration = '15 years'; plan tests => 1 * blocks; run { my $block = shift; my $ed = Net::SSL::ExpireDate->new( build_arg($block->name) ); is($ed->is_expired($Check_Duration) && $ed->expire_date->iso8601, undef, $block->name); }; sub build_arg { my ($v) = @_; if ($v =~ m{^(file)://(.+)}) { return $1 => $2; } elsif ($v =~ m{^(https)://([^/]+)}) { return $1 => $2; } elsif ($v =~ m{^$RE{net}{domain}{-nospace}{-keep}$}) { return 'https' => $1; } elsif (-r $v) { return 'file' => $v; } else { croak "$v: assume file. but cannot read."; } } __END__ === rt.cpan.org === www.google.com