Merge branch 'mr/gitweb-snapshot'
* mr/gitweb-snapshot: gitweb: add t9501 tests for checking HTTP status codes gitweb: split test suite into library and tests gitweb: improve snapshot error handling
This commit is contained in:
commit
909beb860b
@ -5190,10 +5190,10 @@ sub git_snapshot {
|
||||
die_error(400, "Invalid snapshot format parameter");
|
||||
} elsif (!exists($known_snapshot_formats{$format})) {
|
||||
die_error(400, "Unknown snapshot format");
|
||||
} elsif (!grep($_ eq $format, @snapshot_fmts)) {
|
||||
die_error(403, "Unsupported snapshot format");
|
||||
} elsif ($known_snapshot_formats{$format}{'disabled'}) {
|
||||
die_error(403, "Snapshot format not allowed");
|
||||
} elsif (!grep($_ eq $format, @snapshot_fmts)) {
|
||||
die_error(403, "Unsupported snapshot format");
|
||||
}
|
||||
|
||||
if (!defined $hash) {
|
||||
|
73
t/gitweb-lib.sh
Normal file
73
t/gitweb-lib.sh
Normal file
@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2007 Jakub Narebski
|
||||
#
|
||||
|
||||
gitweb_init () {
|
||||
safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
|
||||
cat >gitweb_config.perl <<EOF
|
||||
#!/usr/bin/perl
|
||||
|
||||
# gitweb configuration for tests
|
||||
|
||||
our \$version = 'current';
|
||||
our \$GIT = 'git';
|
||||
our \$projectroot = "$safe_pwd";
|
||||
our \$project_maxdepth = 8;
|
||||
our \$home_link_str = 'projects';
|
||||
our \$site_name = '[localhost]';
|
||||
our \$site_header = '';
|
||||
our \$site_footer = '';
|
||||
our \$home_text = 'indextext.html';
|
||||
our @stylesheets = ('file:///$TEST_DIRECTORY/../gitweb/gitweb.css');
|
||||
our \$logo = 'file:///$TEST_DIRECTORY/../gitweb/git-logo.png';
|
||||
our \$favicon = 'file:///$TEST_DIRECTORY/../gitweb/git-favicon.png';
|
||||
our \$projects_list = '';
|
||||
our \$export_ok = '';
|
||||
our \$strict_export = '';
|
||||
|
||||
EOF
|
||||
|
||||
cat >.git/description <<EOF
|
||||
$0 test repository
|
||||
EOF
|
||||
}
|
||||
|
||||
gitweb_run () {
|
||||
GATEWAY_INTERFACE='CGI/1.1'
|
||||
HTTP_ACCEPT='*/*'
|
||||
REQUEST_METHOD='GET'
|
||||
SCRIPT_NAME="$TEST_DIRECTORY/../gitweb/gitweb.perl"
|
||||
QUERY_STRING=""$1""
|
||||
PATH_INFO=""$2""
|
||||
export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD \
|
||||
SCRIPT_NAME QUERY_STRING PATH_INFO
|
||||
|
||||
GITWEB_CONFIG=$(pwd)/gitweb_config.perl
|
||||
export GITWEB_CONFIG
|
||||
|
||||
# some of git commands write to STDERR on error, but this is not
|
||||
# written to web server logs, so we are not interested in that:
|
||||
# we are interested only in properly formatted errors/warnings
|
||||
rm -f gitweb.log &&
|
||||
perl -- "$SCRIPT_NAME" \
|
||||
>gitweb.output 2>gitweb.log &&
|
||||
if grep '^[[]' gitweb.log >/dev/null 2>&1; then false; else true; fi
|
||||
|
||||
# gitweb.log is left for debugging
|
||||
# gitweb.output is used to parse http output
|
||||
}
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
say 'skipping gitweb tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
|
||||
say 'skipping gitweb tests, perl version is too old'
|
||||
test_done
|
||||
}
|
||||
|
||||
gitweb_init
|
@ -9,73 +9,8 @@ This test runs gitweb (git web interface) as CGI script from
|
||||
commandline, and checks that it would not write any errors
|
||||
or warnings to log.'
|
||||
|
||||
gitweb_init () {
|
||||
safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
|
||||
cat >gitweb_config.perl <<EOF
|
||||
#!/usr/bin/perl
|
||||
|
||||
# gitweb configuration for tests
|
||||
|
||||
our \$version = "current";
|
||||
our \$GIT = "git";
|
||||
our \$projectroot = "$safe_pwd";
|
||||
our \$project_maxdepth = 8;
|
||||
our \$home_link_str = "projects";
|
||||
our \$site_name = "[localhost]";
|
||||
our \$site_header = "";
|
||||
our \$site_footer = "";
|
||||
our \$home_text = "indextext.html";
|
||||
our @stylesheets = ("file:///$TEST_DIRECTORY/../gitweb/gitweb.css");
|
||||
our \$logo = "file:///$TEST_DIRECTORY/../gitweb/git-logo.png";
|
||||
our \$favicon = "file:///$TEST_DIRECTORY/../gitweb/git-favicon.png";
|
||||
our \$projects_list = "";
|
||||
our \$export_ok = "";
|
||||
our \$strict_export = "";
|
||||
|
||||
EOF
|
||||
|
||||
cat >.git/description <<EOF
|
||||
$0 test repository
|
||||
EOF
|
||||
}
|
||||
|
||||
gitweb_run () {
|
||||
GATEWAY_INTERFACE="CGI/1.1"
|
||||
HTTP_ACCEPT="*/*"
|
||||
REQUEST_METHOD="GET"
|
||||
SCRIPT_NAME="$TEST_DIRECTORY/../gitweb/gitweb.perl"
|
||||
QUERY_STRING=""$1""
|
||||
PATH_INFO=""$2""
|
||||
export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD \
|
||||
SCRIPT_NAME QUERY_STRING PATH_INFO
|
||||
|
||||
GITWEB_CONFIG=$(pwd)/gitweb_config.perl
|
||||
export GITWEB_CONFIG
|
||||
|
||||
# some of git commands write to STDERR on error, but this is not
|
||||
# written to web server logs, so we are not interested in that:
|
||||
# we are interested only in properly formatted errors/warnings
|
||||
rm -f gitweb.log &&
|
||||
perl -- "$SCRIPT_NAME" \
|
||||
>/dev/null 2>gitweb.log &&
|
||||
if grep "^[[]" gitweb.log >/dev/null 2>&1; then false; else true; fi
|
||||
|
||||
# gitweb.log is left for debugging
|
||||
}
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
say 'skipping gitweb tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
|
||||
say 'skipping gitweb tests, perl version is too old'
|
||||
test_done
|
||||
}
|
||||
|
||||
gitweb_init
|
||||
. ./gitweb-lib.sh
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# no commits (empty, just initialized repository)
|
||||
|
78
t/t9501-gitweb-standalone-http-status.sh
Normal file
78
t/t9501-gitweb-standalone-http-status.sh
Normal file
@ -0,0 +1,78 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2009 Mark Rada
|
||||
#
|
||||
|
||||
test_description='gitweb as standalone script (http status tests).
|
||||
|
||||
This test runs gitweb (git web interface) as a CGI script from the
|
||||
commandline, and checks that it returns the expected HTTP status
|
||||
code and message.'
|
||||
|
||||
|
||||
. ./gitweb-lib.sh
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# snapshot settings
|
||||
|
||||
test_commit \
|
||||
'SnapshotTests' \
|
||||
'i can has snapshot?'
|
||||
|
||||
cat >>gitweb_config.perl <<\EOF
|
||||
$feature{'snapshot'}{'override'} = 0;
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'snapshots: tgz only default format enabled' \
|
||||
'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
|
||||
grep "Status: 200 OK" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&
|
||||
grep "403 - Unsupported snapshot format" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&
|
||||
grep "403 - Snapshot format not allowed" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
|
||||
grep "403 - Unsupported snapshot format" gitweb.output'
|
||||
test_debug 'cat gitweb.output'
|
||||
|
||||
|
||||
cat >>gitweb_config.perl <<\EOF
|
||||
$feature{'snapshot'}{'default'} = ['tgz','tbz2','txz','zip'];
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'snapshots: all enabled in default, use default disabled value' \
|
||||
'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
|
||||
grep "Status: 200 OK" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&
|
||||
grep "Status: 200 OK" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&
|
||||
grep "403 - Snapshot format not allowed" gitweb.output &&
|
||||
gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
|
||||
grep "Status: 200 OK" gitweb.output'
|
||||
test_debug 'cat gitweb.output'
|
||||
|
||||
|
||||
cat >>gitweb_config.perl <<\EOF
|
||||
$known_snapshot_formats{'zip'}{'disabled'} = 1;
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'snapshots: zip explicitly disabled' \
|
||||
'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
|
||||
grep "403 - Snapshot format not allowed" gitweb.output'
|
||||
test_debug 'cat gitweb.output'
|
||||
|
||||
|
||||
cat >>gitweb_config.perl <<\EOF
|
||||
$known_snapshot_formats{'tgz'}{'disabled'} = 0;
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'snapshots: tgz explicitly enabled' \
|
||||
'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
|
||||
grep "Status: 200 OK" gitweb.output'
|
||||
test_debug 'cat gitweb.output'
|
||||
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user