1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# Nagios::Plugin::Getopt --extra-opts tests
use strict;
use File::Spec;
use File::Basename;
use IO::File;
use Test::More qw(no_plan);
BEGIN { use_ok('Nagios::Plugin::Getopt') };
# Needed to get evals to work in testing
Nagios::Plugin::Functions::_use_die(1);
my $tdir = 'npg03';
if (! -d $tdir) {
my $ttdir = File::Spec->catdir('t', $tdir);
die "missing '$tdir' directory\n" unless -d $ttdir;
$tdir = $ttdir;
}
# Load expected files
my %EXPECTED = ();
for my $efile (glob File::Spec->catfile($tdir, 'expected', '*')) {
my $fh = IO::File->new($efile, 'r') or die "Cannot open input file '$efile': $!";
if (my $cmd = $fh->getline()) { # First line only!
chomp $cmd;
$cmd =~ s/^\s+//;
$cmd =~ s/\s+$//;
$EXPECTED{ basename($efile) } = $cmd;
}
}
# Override NAGIOS_CONFIG_PATH to use our test plugins.ini file
$ENV{NAGIOS_CONFIG_PATH} = "/random/bogus/path:$tdir";
my %PARAM = (
version => '0.01',
blurb => 'This plugin tests various stuff.',
usage => "Usage: %s -H <host> -w <warning_threshold>
-c <critical threshold>",
);
sub ng_setup
{
my $arg = shift;
# Instantiate object
my $ng = Nagios::Plugin::Getopt->new(%PARAM);
if (ref $arg eq 'ARRAY' && @$arg) {
$ng->arg(%$_) foreach @$arg;
}
return $ng;
}
# Setup our Nagios::Plugin::Getopt object
my $ng;
my $arg = [
{ spec => 'S', help => '-S' },
{ spec => 'H=s', help => '-H' },
{ spec => 'p=s@', help => '-p' },
{ spec => 'path=s@', help => '--path' },
{ spec => 'username|u=s', help => '--username' },
{ spec => 'password=s', help => '--password' },
{ spec => 'critical=s', help => '--critical' },
{ spec => 'warning=s', help => '--warning' },
{ spec => 'expect=s', help => '--expect' },
{ spec => 'units=s', help => '--units' },
];
#my %SKIP = map { $_ => 1 } qw(05_singlechar1 07_singlechar3);
#my %SKIP = map { $_ => 1 } qw(06_singlechar2);
my %SKIP = ();
# Process all test cases in $tdir/input
my $glob = $ARGV[0] || '*';
for my $infile (glob File::Spec->catfile($tdir, 'input', $glob)) {
$ng = ng_setup($arg);
my $fh = IO::File->new($infile, 'r') or die "Cannot open input file '$infile': $!";
$infile = basename($infile);
if (my $cmd = $fh->getline()) { # First line only!
$cmd =~ s/^\s+//;
my ($plugin, @args) = split /\s+/, $cmd;
# Fake out the plugin name
$ng->{_attr}->{plugin} = $plugin;
# Parse the options
SKIP: {
skip "Skipping ..." if $SKIP{$infile};
@ARGV = @args;
eval { $ng->getopts };
if ($@) {
chomp $@;
ok($infile =~ m/_dies?$/, "$infile ($@)");
}
else {
is($plugin . ' ' . $ng->_cmdline, $EXPECTED{$infile}, $infile);
}
}
}
}
|