Skip to content

Commit

Permalink
Merge branch 'mr/gitweb-snapshot'
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Junio C Hamano committed Sep 1, 2009
2 parents d34eca0 + e39e0d3 commit 909beb8
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 68 deletions.
4 changes: 2 additions & 2 deletions gitweb/gitweb.perl
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
73 changes: 73 additions & 0 deletions t/gitweb-lib.sh
Original file line number Diff line number Diff line change
@@ -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
67 changes: 1 addition & 66 deletions t/t9500-gitweb-standalone-no-errors.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
78 changes: 78 additions & 0 deletions t/t9501-gitweb-standalone-http-status.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 909beb8

Please sign in to comment.