From 0e41613e9f547ab97365329572555936e84f77b2 Mon Sep 17 00:00:00 2001 From: Gavin Carr Date: Thu, 8 Feb 2007 05:18:06 +0000 Subject: Add initial --default-opts implementation to Nagios::Plugin::Getopt (II). git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/Nagios-Plugin/trunk@1617 f882894a-f735-0410-b71e-b25c423dba1c diff --git a/t/Nagios-Plugin-Getopt-03.t b/t/Nagios-Plugin-Getopt-03.t new file mode 100644 index 0000000..9dc39da --- /dev/null +++ b/t/Nagios-Plugin-Getopt-03.t @@ -0,0 +1,99 @@ +# Nagios::Plugin::Getopt --default-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') }; + +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; + } +} + +$Nagios::Plugin::Getopt::DEFAULT_CONFIG_FILE = File::Spec->catfile($tdir, 'plugins.cfg'); + +my %PARAM = ( + version => '0.01', + blurb => 'This plugin tests various stuff.', + usage => "Usage: %s -H -w + -c ", +); + +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 => 'username|u=s', help => '--username' }, + { spec => 'password=s', help => '--password' }, + { spec => 'critical=i', help => '--critical' }, + { spec => 'warning=i', help => '--warning' }, + { spec => 'expect=s', help => '--expect' }, +]; + +my %SKIP = map { $_ => 1 } qw(05_singlechar1 07_singlechar3); + +# 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 "Still discussing how overrides with multiple arguments should work ...", 1 if $SKIP{$infile}; + + @ARGV = @args; + eval { $ng->getopts }; + if ($@) { + chomp $@; + ok($infile =~ m/_dies?$/, "$infile ($@)"); + } + else { + is($plugin . ' ' . $ng->_cmdline, $EXPECTED{$infile}, $infile); + } + } + } +} + diff --git a/t/npg03/README b/t/npg03/README new file mode 100644 index 0000000..a19f263 --- /dev/null +++ b/t/npg03/README @@ -0,0 +1,13 @@ +Nagios-Plugin-Getopt-03.t automatically tests all cases defined in the 'input' directory +and expects the output to match the corresponding file in the 'expected' directory. To +define a new test case, just create a new file in the 'input' directory containing the +input command line, and a corresponding file in the 'expected' directory containing +what you think the expanded command line should be. Note that this expansion is normalised +as follows: + +- command line arguments are reported in alphabetical order +- extraneous white space is removed + +Also, if you use a completely new argument than those defined in Nagios-Plugin-Getopt-03.t +you will need to define it there as well. + diff --git a/t/npg03/expected/00_basic b/t/npg03/expected/00_basic new file mode 100644 index 0000000..9707dbd --- /dev/null +++ b/t/npg03/expected/00_basic @@ -0,0 +1 @@ +check_mysql -H localhost -S --critical=15 --password=secret --username=altinity --warning=10 diff --git a/t/npg03/expected/01_override1 b/t/npg03/expected/01_override1 new file mode 100644 index 0000000..8288914 --- /dev/null +++ b/t/npg03/expected/01_override1 @@ -0,0 +1 @@ +check_mysql --critical=15 --username=admin --warning=5 diff --git a/t/npg03/expected/02_override2 b/t/npg03/expected/02_override2 new file mode 100644 index 0000000..7946308 --- /dev/null +++ b/t/npg03/expected/02_override2 @@ -0,0 +1 @@ +check_mysql --password=secret --username=admin diff --git a/t/npg03/expected/05_singlechar1 b/t/npg03/expected/05_singlechar1 new file mode 100644 index 0000000..13a3f9b --- /dev/null +++ b/t/npg03/expected/05_singlechar1 @@ -0,0 +1 @@ +check_disk -p /home diff --git a/t/npg03/expected/06_singlechar2 b/t/npg03/expected/06_singlechar2 new file mode 100644 index 0000000..8f9df5e --- /dev/null +++ b/t/npg03/expected/06_singlechar2 @@ -0,0 +1 @@ +check_disk -p /var diff --git a/t/npg03/expected/07_singlechar3 b/t/npg03/expected/07_singlechar3 new file mode 100644 index 0000000..f4e6ed7 --- /dev/null +++ b/t/npg03/expected/07_singlechar3 @@ -0,0 +1 @@ +check_disk -p /home -p /users diff --git a/t/npg03/expected/09_funnystuff b/t/npg03/expected/09_funnystuff new file mode 100644 index 0000000..6d510b8 --- /dev/null +++ b/t/npg03/expected/09_funnystuff @@ -0,0 +1 @@ +check_disk --expect=" space in front" -p "" --username="Ton Voon" diff --git a/t/npg03/expected/12_nosection_implicit b/t/npg03/expected/12_nosection_implicit new file mode 100644 index 0000000..7bb6136 --- /dev/null +++ b/t/npg03/expected/12_nosection_implicit @@ -0,0 +1 @@ +check_no_section -H localhost diff --git a/t/npg03/input/00_basic b/t/npg03/input/00_basic new file mode 100644 index 0000000..4c16788 --- /dev/null +++ b/t/npg03/input/00_basic @@ -0,0 +1 @@ +check_mysql -S --default-opts= --default-opts=more_options -H localhost diff --git a/t/npg03/input/01_override1 b/t/npg03/input/01_override1 new file mode 100644 index 0000000..9e051e9 --- /dev/null +++ b/t/npg03/input/01_override1 @@ -0,0 +1 @@ +check_mysql --username=admin --default-opts=more_options --warning=5 diff --git a/t/npg03/input/02_override2 b/t/npg03/input/02_override2 new file mode 100644 index 0000000..ceabe55 --- /dev/null +++ b/t/npg03/input/02_override2 @@ -0,0 +1 @@ +check_mysql --default-opts= -u admin diff --git a/t/npg03/input/05_singlechar1 b/t/npg03/input/05_singlechar1 new file mode 100644 index 0000000..1edb8bf --- /dev/null +++ b/t/npg03/input/05_singlechar1 @@ -0,0 +1 @@ +check_disk --default-opts= -p /home diff --git a/t/npg03/input/06_singlechar2 b/t/npg03/input/06_singlechar2 new file mode 100644 index 0000000..24965c7 --- /dev/null +++ b/t/npg03/input/06_singlechar2 @@ -0,0 +1 @@ +check_disk --default-opts=check_2_disks diff --git a/t/npg03/input/07_singlechar3 b/t/npg03/input/07_singlechar3 new file mode 100644 index 0000000..0abc70f --- /dev/null +++ b/t/npg03/input/07_singlechar3 @@ -0,0 +1 @@ +check_disk --default-opts= -p /home -p /users diff --git a/t/npg03/input/09_funnystuff b/t/npg03/input/09_funnystuff new file mode 100644 index 0000000..c2d6160 --- /dev/null +++ b/t/npg03/input/09_funnystuff @@ -0,0 +1 @@ +check_disk --default-opts=funny_stuff diff --git a/t/npg03/input/12_nosection_implicit b/t/npg03/input/12_nosection_implicit new file mode 100644 index 0000000..7bb6136 --- /dev/null +++ b/t/npg03/input/12_nosection_implicit @@ -0,0 +1 @@ +check_no_section -H localhost diff --git a/t/npg03/input/13_nosection_explicit_dies b/t/npg03/input/13_nosection_explicit_dies new file mode 100644 index 0000000..90aab51 --- /dev/null +++ b/t/npg03/input/13_nosection_explicit_dies @@ -0,0 +1 @@ +check_no_section --default-opts= -H localhost diff --git a/t/npg03/input/14_badsection_dies b/t/npg03/input/14_badsection_dies new file mode 100644 index 0000000..70815a9 --- /dev/null +++ b/t/npg03/input/14_badsection_dies @@ -0,0 +1 @@ +check_no_section --default-opts=bad_section diff --git a/t/npg03/plugins.cfg b/t/npg03/plugins.cfg new file mode 100644 index 0000000..f893a21 --- /dev/null +++ b/t/npg03/plugins.cfg @@ -0,0 +1,21 @@ +[check_mysql] +username=tonvoon +password=secret + +[more_options] +username=altinity +warning=10 +critical=15 + +[check_disk] +p=/tmp + +[check_2_disks] +p=/tmp +p=/var + +[funny_stuff] +username="Ton Voon" +p= +expect=" space in front" + -- cgit v0.10-9-g596f