package t::Crypt::Perl::PKCS10::Attribute::extensionRequest;

use strict;
use warnings;

BEGIN {
    if ( $^V ge v5.10.1 ) {
        require autodie;
    }
}

use FindBin;
use lib "$FindBin::Bin/../lib";

use Test::More;
use Test::FailWarnings;
use Test::Deep;
use Test::Exception;

use lib "$FindBin::Bin/lib";

use parent qw(
    TestClass
);

use Crypt::Perl::X509::Extension::subjectAltName ();

use Crypt::Perl::PKCS10::Attribute::extensionRequest ();

__PACKAGE__->new()->runtests() if !caller;

#----------------------------------------------------------------------

sub test_encode : Tests(2) {
    my $vector_str = '30.1d.30.1b.06.03.55.1d.11.04.14.30.12.82.07.66.6f.6f.2e.63.6f.6d.82.07.62.61.72.2e.63.6f.6d';

    my $san_obj = Crypt::Perl::X509::Extension::subjectAltName->new(
        [ dNSName => 'foo.com' ],
        [ dNSName => 'bar.com' ],
    );

    my $ext_r_obj = Crypt::Perl::PKCS10::Attribute::extensionRequest->new($san_obj);

    my $ext_r_enc = $ext_r_obj->encode();

    is(
        sprintf( '%v.02x', $ext_r_enc ),
        $vector_str,
        'encode() as expected - subjectAltName with two dNSName entries',
    );

    #----------------------------------------------------------------------

    $vector_str = '30.20.30.1e.06.03.55.1d.11.01.01.ff.04.14.30.12.82.07.66.6f.6f.2e.63.6f.6d.82.07.62.61.72.2e.63.6f.6d';

    my $crit_obj = Crypt::Perl::PKCS10::Attribute::extensionRequest->new(
        {
            extension => $san_obj,
            critical => 1,
        },
    );

    my $crit_enc = $crit_obj->encode();

    is(
        sprintf( '%v.02x', $crit_enc ),
        $vector_str,
        'encode() as expected - critical subjectAltName with two dNSName entries',
    );

    return;
}

1;