Apache2-API
view release on metacpan or search on metacpan
t/lib/Test/Apache2/API.pm view on Meta::CPAN
my $class = ref( $self );
my $api = $self->api;
my $r = $self->request;
my $debug = $self->debug;
# Borrowed from URL::Encode
my $UNRESERVED = "0123456789"
. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
. "abcdefghijklmnopqrstuvwxyz"
. "_.~-";
my @tests = (
[ "", "", "empty string" ],
[ "\x{00E5}", "%E5", "U+00E5 in native encoding" ],
[ $UNRESERVED, $UNRESERVED, "unreserved characters" ],
[ " ", "+", "U+0020 SPACE" ]
);
for my $ord ( 0x00..0x1F, 0x21..0xFF )
{
my $chr = pack( 'C', $ord );
next unless( index( $UNRESERVED, $chr ) < 0 );
my $enc = sprintf( '%%%.2X', $ord );
push @tests, [ $chr, $enc, sprintf( "ordinal %d", $ord ) ];
}
my $cnt = 0;
foreach my $test ( @tests )
{
my( $expected, $encoded, $name ) = @$test;
my $rv = $api->decode_url( $encoded ) eq $expected ? 1 : 0;
$r->log_error( "$[class}: decode_url(): $name -> ", ( $rv ? 'ok' : 'not ok' ) ) if( $debug );
$cnt++ if( $rv );
}
foreach my $test ( @tests )
{
my( $octets, $expected, $name ) = @$test;
my $rv = $api->encode_url( $octets ) eq $expected ? 1 : 0;
$r->log_error( "$[class}: encode_url(): $name -> ", ( $rv ? 'ok' : 'not ok' ) ) if( $debug );
$cnt++ if( $rv );
}
return( $self->ok( $cnt == scalar( @tests ) ) );
}
my $jwt = q{eyJleHAiOjE2MzYwNzEwMzksImFsZyI6IkhTMjU2In0.eyJqdGkiOiJkMDg2Zjk0OS1mYWJmLTRiMzgtOTE1ZC1hMDJkNzM0Y2ZmNzAiLCJmaXJzdF9uYW1lIjoiSm9obiIsImlhdCI6MTYzNTk4NDYzOSwiYXpwIjoiNGQ0YWFiYWQtYmJiMy00ODgwLThlM2ItNTA0OWMwZTczNjBlIiwiaXNzIjoiaHR0cHM6Ly9hcG...
# Need to set the Authorization header in the test unit
# $r->authorization( "Bearer ${jwt}" );
sub auth { return( shift->_test({ method => 'get_auth_bearer', expect => $jwt }) ); }
sub header_datetime { return( shift->_test({ method => 'header_datetime', expect => 'Mon, 01 Nov 2021 08:12:10 GMT' }) ); }
sub is_perl_option_enabled { return( shift->_test({ method => 'is_perl_option_enabled', expect => 1, type => 'boolean', args => ['GlobalRequest'] }) ); }
sub json { return( shift->_test({ method => 'json', expect => sub
{
my $json = shift( @_ );
return( Scalar::Util::blessed( $json ) &&
$json->isa( 'JSON' ) &&
$json->canonical &&
$json->get_relaxed &&
$json->get_utf8 &&
$json->get_allow_nonref &&
$json->get_allow_blessed &&
$json->get_convert_blessed );
}, args => [pretty => 1, ordered => 1, relaxed => 1, utf8 => 1, allow_nonref => 1, allow_blessed => 1, convert_blessed => 1] }) ); }
sub reply
{
return( shift->api->reply( Apache2::Const::HTTP_OK => {
message => "ok",
}) );
}
sub server { return( shift->_test({ method => 'server', expect => 'Apache2::ServerRec', type => 'isa' }) ); }
sub server_version { return( shift->_test({ method => 'server_version', expect => 'version', type => 'isa' }) ); }
sub _target { return( shift->api ); }
1;
# NOTE: POD
# Use this to generate the tests list:
# egrep -E '^sub ' ./t/lib/Test/Apache2/API.pm | perl -lnE 'my $m = [split(/\s+/, $_)]->[1]; say "=head2 $m\n"'
__END__
=encoding utf8
=head1 NAME
Test::Apache2::API - Apache2::API Testing Class
=head1 SYNOPSIS
In the Apache test conf:
PerlModule Apache2::API
PerlOptions +GlobalRequest
PerlSetupEnv On
<Directory "@documentroot@">
SetHandler modperl
PerlResponseHandler Test::Apache2::API
AcceptPathInfo On
</Directory>
In the test unit:
use Apache::Test;
use Apache::TestRequest;
use HTTP::Request;
my $hostport = Apache::TestRequest::hostport( $config ) || '';
my( $host, $port ) = split( ':', ( $hostport ) );
my $mp_host = 'www.example.org';
Apache::TestRequest::user_agent(reset => 1, keep_alive => 1 );
my $ua = Apache::TestRequest->new;
# To get the fingerprint for the certificate in ./t/server.crt, do:
# echo "sha1\$$(openssl x509 -noout -in ./t/server.crt -fingerprint -sha1|perl -pE 's/^.*Fingerprint=|(\w{2})(?:\:?|$)/$1/g')"
$ua->ssl_opts(
# SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
# SSL_verify_mode => 0x00
# verify_hostname => 0,
SSL_fingerprint => 'sha1$DEE8650E44870896E821AAE4A5A24382174D100E',
# SSL_version => 'SSLv3',
# SSL_verfifycn_name => 'localhost',
);
my $req = HTTP::Request->new( 'GET' => "${proto}://${hostport}/tests/api/some_method" );
my $resp = $ua->request( $req );
is( $resp->code, Apache2::Const::HTTP_OK, 'some test name' );
=head1 VERSION
v0.1.0
=head1 DESCRIPTION
This is a package for testing the L<Apache2::API> module under Apache2/modperl2
=head1 TESTS
The following tests are performed:
=head2 compression_threshold
=head2 decode_json
=head2 encode_decode_url
( run in 0.790 second using v1.01-cache-2.11-cpan-39bf76dae61 )