211 lines
4.1 KiB
Perl
211 lines
4.1 KiB
Perl
|
#!/usr/bin/perl
|
||
|
#
|
||
|
# Test script for Apache::BML -- Simple functions
|
||
|
# $Id: 10_simple.t,v 1.1 2004/05/26 17:33:51 deveiant Exp $
|
||
|
#
|
||
|
# Before `make install' is performed this script should be runnable with
|
||
|
# `make test'. After `make install' it should work as `perl 00_require.t'
|
||
|
#
|
||
|
# Please do not commit any changes you make to the module without a
|
||
|
# successful 'make test'!
|
||
|
#
|
||
|
package main;
|
||
|
use strict;
|
||
|
|
||
|
BEGIN { $| = 1; }
|
||
|
|
||
|
### Load up the test framework
|
||
|
use Test::SimpleUnit qw{:functions};
|
||
|
use Apache::BML qw{};
|
||
|
use Apache::FakeRequest qw{};
|
||
|
use Fcntl qw{O_CREAT O_TRUNC O_EXCL O_WRONLY};
|
||
|
use File::Spec qw{};
|
||
|
|
||
|
my (
|
||
|
@testSuite,
|
||
|
$Output,
|
||
|
$Errout,
|
||
|
$Pnotes,
|
||
|
$Request,
|
||
|
$DataPath,
|
||
|
$NonExistantFile,
|
||
|
$ForbiddenFile,
|
||
|
$ForbiddenConfigFile,
|
||
|
$EmptyFile,
|
||
|
);
|
||
|
|
||
|
$Pnotes = {};
|
||
|
$Output = '';
|
||
|
$Errout = '';
|
||
|
|
||
|
$DataPath = File::Spec->rel2abs( "test" );
|
||
|
$NonExistantFile = "$DataPath/nonexistant.bml";
|
||
|
$ForbiddenFile = "$DataPath/forbidden.bml";
|
||
|
$ForbiddenConfigFile = "$DataPath/_config.bml";
|
||
|
$EmptyFile = "$DataPath/empty.bml";
|
||
|
|
||
|
|
||
|
# Overload Apache::FakeRequest's print to append output to a variable.
|
||
|
{
|
||
|
no warnings 'redefine';
|
||
|
*Apache::FakeRequest::print = sub {
|
||
|
my $r = shift;
|
||
|
$Output .= join('', @_)
|
||
|
};
|
||
|
*Apache::FakeRequest::log_error = sub {
|
||
|
my $r - shift;
|
||
|
print STDERR @_, "\n"; $Errout .= join('', @_)
|
||
|
};
|
||
|
*Apache::FakeRequest::pnotes = sub {
|
||
|
my ( $r, $key ) = @_;
|
||
|
return $Pnotes if !$key;
|
||
|
$Pnotes->{ $key } = shift if @_;
|
||
|
$Pnotes->{ $key };
|
||
|
};
|
||
|
}
|
||
|
|
||
|
|
||
|
# Define tests
|
||
|
@testSuite = (
|
||
|
|
||
|
{
|
||
|
name => 'setup',
|
||
|
func => sub {
|
||
|
$Output = '';
|
||
|
$Errout = '';
|
||
|
$Pnotes = {};
|
||
|
},
|
||
|
},
|
||
|
|
||
|
# Calling handler() with no args should error
|
||
|
{
|
||
|
name => 'No Args',
|
||
|
test => sub {
|
||
|
assertException {
|
||
|
Apache::BML::handler();
|
||
|
};
|
||
|
},
|
||
|
},
|
||
|
|
||
|
|
||
|
# Calling with a non-existant file should 404
|
||
|
{
|
||
|
name => "Non-existant file",
|
||
|
test => sub {
|
||
|
my $request = new Apache::FakeRequest (
|
||
|
filename => $NonExistantFile,
|
||
|
);
|
||
|
my $res;
|
||
|
|
||
|
assertNoException {
|
||
|
$res = Apache::BML::handler( $request );
|
||
|
};
|
||
|
|
||
|
assertEquals( 404, $res );
|
||
|
assertMatches( /does not exist/, $Errout );
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
name => 'teardown',
|
||
|
func => sub {
|
||
|
if ( -e $ForbiddenFile ) {
|
||
|
unlink $ForbiddenFile or die "unlink: $ForbiddenFile: $!";
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
|
||
|
# Calling with a file for which we have no permissions should 403
|
||
|
{
|
||
|
name => "Non-readable file",
|
||
|
test => sub {
|
||
|
# Create an unreadable file
|
||
|
my $fh = new IO::File $ForbiddenFile, O_CREAT|O_WRONLY
|
||
|
or die "open: $ForbiddenFile: $!";
|
||
|
close $fh;
|
||
|
chmod 0220, $ForbiddenFile
|
||
|
or die "chmod: $ForbiddenFile: $!";
|
||
|
|
||
|
my $request = new Apache::FakeRequest (
|
||
|
filename => $ForbiddenFile,
|
||
|
);
|
||
|
my $res;
|
||
|
|
||
|
assertNoException {
|
||
|
$res = Apache::BML::handler( $request );
|
||
|
};
|
||
|
|
||
|
assertEquals( 403, $res );
|
||
|
assertMatches( /File permissions deny access/, $Errout );
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
name => 'teardown',
|
||
|
func => sub {
|
||
|
if ( -e $ForbiddenConfigFile ) {
|
||
|
unlink $ForbiddenConfigFile or die "unlink: $ForbiddenConfigFile: $!";
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
|
||
|
# _config files are forbidden
|
||
|
{
|
||
|
name => "Forbidden _config file",
|
||
|
test => sub {
|
||
|
# Create a readable _config file
|
||
|
my $fh = new IO::File $ForbiddenConfigFile, O_CREAT|O_WRONLY
|
||
|
or die "open: $ForbiddenConfigFile: $!";
|
||
|
$fh->print("");
|
||
|
close $fh;
|
||
|
|
||
|
my $request = new Apache::FakeRequest (
|
||
|
filename => $ForbiddenConfigFile,
|
||
|
);
|
||
|
my $res;
|
||
|
|
||
|
assertNoException {
|
||
|
$res = Apache::BML::handler( $request );
|
||
|
};
|
||
|
|
||
|
assertEquals( 403, $res );
|
||
|
},
|
||
|
},
|
||
|
|
||
|
|
||
|
{
|
||
|
name => 'teardown',
|
||
|
func => sub {
|
||
|
if ( -e $EmptyFile ) {
|
||
|
unlink $EmptyFile or die "unlink: $EmptyFile: $!";
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
|
||
|
|
||
|
# Loading an empty file should be okay
|
||
|
{
|
||
|
name => "Empty file",
|
||
|
test => sub {
|
||
|
# Create an unreadable file
|
||
|
my $fh = new IO::File $EmptyFile, O_CREAT|O_WRONLY
|
||
|
or die "open: $EmptyFile: $!";
|
||
|
$fh->print("");
|
||
|
close $fh;
|
||
|
|
||
|
my $request = new Apache::FakeRequest (
|
||
|
filename => $EmptyFile,
|
||
|
);
|
||
|
my $res;
|
||
|
|
||
|
assertNoException { $res = Apache::BML::handler($request) };
|
||
|
assertEquals 0, $res;
|
||
|
assertEquals '', $Output;
|
||
|
},
|
||
|
}
|
||
|
|
||
|
|
||
|
);
|
||
|
|
||
|
runTests( @testSuite );
|