mirror of
https://git.openafs.org/openafs.git
synced 2025-01-19 07:20:11 +00:00
f0774acd73
Introduces the first batch of man page testing as part of the TAP tests. We would like to fail, for example, when someone has added a new command to vos but not AHEM documented it. For now, the tests consist of checking to ensure that for every subcommand listed in the output of "command help" (e.g. vos help), fail the test if there is not a man page for those (e.g. vos_delentry.1 etc). Copy any of the -man-t tests and edit to make a new one All tests make use of a simple new Perl library stored in tests-lib/perl5 (a new area, not just named 'lib' because I didn't want it to be confused with a s test for a 'lib' in the src). Change-Id: I1e07adafe718c4549f1855c5e5b0d10dd9ab5f00 Reviewed-on: http://gerrit.openafs.org/4846 Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
87 lines
2.5 KiB
Perl
87 lines
2.5 KiB
Perl
#
|
|
# This is probably horrific code to any Perl coder. I'm sorry,
|
|
# I'm not one. It runs.
|
|
#
|
|
# Proposed Coding Standard:
|
|
#
|
|
# * Subroutines starting with test_ should be TAP tests
|
|
# utilizing ok(), is(), etc... and return the number
|
|
# of tests run if they get that far (could exit early
|
|
# from a BAIL_OUT())
|
|
#
|
|
use File::Basename;
|
|
use Test::More;
|
|
|
|
sub check_command_binary {
|
|
my $c = shift(@_);
|
|
if (! -e "$c") {
|
|
BAIL_OUT("Cannot find $c");
|
|
}
|
|
}
|
|
|
|
# TAP test: test_command_man_pages
|
|
#
|
|
# Gather a list of a command's subcommands (like listvol for vos)
|
|
# by running a command with the "help" argument. From that list
|
|
# of subcommands spit out, see if a man page exists for that
|
|
# command_subcommand
|
|
#
|
|
# Arguments: two scalars:
|
|
#
|
|
# builddir : A path to the OpenAFS build directory,
|
|
# such as /tmp/1.4.14
|
|
#
|
|
# fullpathcommand : The full path to the actual command's
|
|
# binary, such as /tmp/1.4.14/src/volser/vos
|
|
#
|
|
# Returns: the number of tests run
|
|
#
|
|
sub test_command_man_pages {
|
|
my ($builddir, $fullpathcommand) = @_;
|
|
|
|
my $command = basename($fullpathcommand);
|
|
|
|
# build up our list of available commands from the help output
|
|
open(HELPOUT, "$fullpathcommand help 2>&1 |") or BAIL_OUT("can't fork: $!");
|
|
my @subcommlist;
|
|
my @comm;
|
|
while (<HELPOUT>) {
|
|
# Skip the header thingy
|
|
next if /Commands are/;
|
|
@comm = split();
|
|
push(@subcommlist, $comm[0]);
|
|
}
|
|
close HELPOUT;
|
|
@subcommlist = sort(@subcommlist);
|
|
|
|
# The following is because File::Find makes no sense to me
|
|
# for this purpose, and actually seems totally misnamed
|
|
my $found = 0;
|
|
my $subcommand = "";
|
|
my $frex = "";
|
|
# Since we don't know what man section it might be in,
|
|
# search all existing man page files for a filename match
|
|
my @mandirglob = glob("$builddir/doc/man-pages/man[1-8]/*");
|
|
# For every subcommand, see if command_subcommand.[1-8] exists
|
|
# in our man page build dir.
|
|
foreach (@subcommlist) {
|
|
my $subcommand = $_;
|
|
$found = 0;
|
|
my $frex = $command . '_' . $subcommand . '.[1-8]';
|
|
# diag("Looking for $frex");
|
|
foreach my $x (@mandirglob) {
|
|
# diag("TRYING: $x");
|
|
$x = basename($x);
|
|
if ($x =~ /$frex$/) {
|
|
# diag("FOUND");
|
|
$found = 1;
|
|
last;
|
|
}
|
|
}
|
|
$testcount = $testcount + 1;
|
|
ok($found eq 1, "existence of man page for $command" . "_$subcommand");
|
|
}
|
|
return $testcount;
|
|
}
|
|
1;
|