Răsfoiți Sursa

Fix tests and update NEWS file

Thomas Guyot-Sionnest 16 ani în urmă
părinte
comite
00bf32bb60
2 a modificat fișierele cu 50 adăugiri și 4 ștergeri
  1. 1 0
      NEWS
  2. 49 4
      plugins/tests/check_snmp.t

+ 1 - 0
NEWS

@@ -22,6 +22,7 @@ This file documents the major additions and syntax changes between releases.
 	Fix compilation error of pst3 in Solaris 8
 	Fix compilation error of pst3 in Solaris 8
 	Fix check_radius returning OK on unexpected results (Craig Leres - #2911752)
 	Fix check_radius returning OK on unexpected results (Craig Leres - #2911752)
 	Fix translations when extra-opts aren't enabled (Jan Wagner - #2832884)
 	Fix translations when extra-opts aren't enabled (Jan Wagner - #2832884)
+	Fix parsing of multi-line strings in check_snmp (broken in 1.4.14) and enhance output in such case (#2832451)
 	WARNINGS
 	WARNINGS
 	Updated developer documentation to say that performance labels should not have an equals sign or
 	Updated developer documentation to say that performance labels should not have an equals sign or
 	single quote in the label
 	single quote in the label

+ 49 - 4
plugins/tests/check_snmp.t

@@ -8,8 +8,18 @@ use Test::More;
 use NPTest;
 use NPTest;
 use FindBin qw($Bin);
 use FindBin qw($Bin);
 
 
+# Check that all dependent modules are available
+eval {
+	require NetSNMP::OID;
+	require NetSNMP::agent;
+	require NetSNMP::ASN;
+};
+
+if ($@) {
+	plan skip_all => "Missing required module for test: $@";
+}
+
 my $port_snmp = 16100 + int(rand(100));
 my $port_snmp = 16100 + int(rand(100));
-my $running = 1;
 
 
 
 
 # Start up server
 # Start up server
@@ -41,7 +51,7 @@ if ($ARGV[0] && $ARGV[0] eq "-d") {
 	}
 	}
 }
 }
 
 
-my $tests = 3;
+my $tests = 9;
 if (-x "./check_snmp") {
 if (-x "./check_snmp") {
 	plan tests => $tests;
 	plan tests => $tests;
 } else {
 } else {
@@ -53,11 +63,46 @@ my $res;
 $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.0");
 $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.0");
 cmp_ok( $res->return_code, '==', 0, "Exit OK when querying a multi-line string" );
 cmp_ok( $res->return_code, '==', 0, "Exit OK when querying a multi-line string" );
 like($res->output, '/^SNMP OK - /', "String contains SNMP OK");
 like($res->output, '/^SNMP OK - /', "String contains SNMP OK");
-like($res->output, '/'.quotemeta('SNMP OK - "Cisco Internetwork Operating System SoftwareIOS (tm) Catalyst 4000 L3 Switch Software (cat4000-I9K91S-M), Version
+like($res->output, '/'.quotemeta('SNMP OK - Cisco Internetwork Operating System Software | 
+.1.3.6.1.4.1.8072.3.2.67.0:
+"Cisco Internetwork Operating System Software
+IOS (tm) Catalyst 4000 \"L3\" Switch Software (cat4000-I9K91S-M), Version
 12.2(20)EWA, RELEASE SOFTWARE (fc1)
 12.2(20)EWA, RELEASE SOFTWARE (fc1)
 Technical Support: http://www.cisco.com/techsupport
 Technical Support: http://www.cisco.com/techsupport
 Copyright (c) 1986-2004 by cisco Systems, Inc.
 Copyright (c) 1986-2004 by cisco Systems, Inc.
 "').'/m', "String contains all lines");
 "').'/m', "String contains all lines");
 
 
-print $res->output;
+# sysContact.0 is "Alice" (from our snmpd.conf)
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.0 -o sysContact.0 -o .1.3.6.1.4.1.8072.3.2.67.1");
+cmp_ok( $res->return_code, '==', 0, "Exit OK when querying multi-line OIDs" );
+like($res->output, '/^SNMP OK - /', "String contains SNMP OK");
+like($res->output, '/'.quotemeta('SNMP OK - Cisco Internetwork Operating System Software Alice Kisco Outernetwork Oserating Gystem Totware | 
+.1.3.6.1.4.1.8072.3.2.67.0:
+"Cisco Internetwork Operating System Software
+IOS (tm) Catalyst 4000 \"L3\" Switch Software (cat4000-I9K91S-M), Version
+12.2(20)EWA, RELEASE SOFTWARE (fc1)
+Technical Support: http://www.cisco.com/techsupport
+Copyright (c) 1986-2004 by cisco Systems, Inc.
+"
+.1.3.6.1.4.1.8072.3.2.67.1:
+"Kisco Outernetwork Oserating Gystem Totware
+Copyleft (c) 2400-2689 by kisco Systrems, Inc."').'/m', "String contains all lines with multiple OIDs");
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.2");
+like($res->output, '/'.quotemeta('SNMP OK - This should not confuse check_snmp \"parser\" | 
+.1.3.6.1.4.1.8072.3.2.67.2:
+"This should not confuse check_snmp \"parser\"
+into thinking there is no 2nd line"').'/m', "Attempt to confuse parser No.1");
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.3");
+like($res->output, '/'.quotemeta('SNMP OK - It\'s getting even harder if the line | 
+.1.3.6.1.4.1.8072.3.2.67.3:
+"It\'s getting even harder if the line
+ends with with this: C:\\\\"').'/m', "Attempt to confuse parser No.2");
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.4");
+like($res->output, '/'.quotemeta('SNMP OK - And now have fun with with this: \"C:\\\\\" | 
+.1.3.6.1.4.1.8072.3.2.67.4:
+"And now have fun with with this: \"C:\\\\\"
+because we\'re not done yet!"').'/m', "Attempt to confuse parser No.3");