Net::SSL::ExpireDate + Test::Base で証明書の期限切れをチェック

拙作の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)

追記



#!/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