summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-03-07 18:18:29 +0100
committerGitHub <noreply@github.com>2025-03-07 18:18:29 +0100
commit03b09f7ce06f25b5ccdbd685d8f25931dff41cc8 (patch)
tree80b6ccdcb7f3e492c22b8c53c33184ad139cf5a8
parent9e1c72ac154d44f561635f1754103dac75cffb99 (diff)
parentf2275431783a5aaed25c35b5deec37c244872a7a (diff)
downloadmonitoring-plugins-03b09f7ce06f25b5ccdbd685d8f25931dff41cc8.tar.gz
Merge pull request #2076 from RincewindsHat/feature/json_parsing_in_tests
Implement JSON output parsing for tests
-rw-r--r--NPTest.pm8
-rw-r--r--plugins/t/check_swap.t35
2 files changed, 22 insertions, 21 deletions
diff --git a/NPTest.pm b/NPTest.pm
index 9b25ac3e..987d3b71 100644
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -15,6 +15,10 @@ use warnings;
15use Cwd; 15use Cwd;
16use File::Basename; 16use File::Basename;
17 17
18use JSON;
19
20use Try::Tiny;
21
18use IO::File; 22use IO::File;
19use Data::Dumper; 23use Data::Dumper;
20 24
@@ -617,6 +621,10 @@ sub testCmd {
617 chomp $output; 621 chomp $output;
618 $object->output($output); 622 $object->output($output);
619 623
624 try {
625 $object->{'mp_test_result'} = decode_json($output);
626 };
627
620 alarm(0); 628 alarm(0);
621 629
622 my ($pkg, $file, $line) = caller(0); 630 my ($pkg, $file, $line) = caller(0);
diff --git a/plugins/t/check_swap.t b/plugins/t/check_swap.t
index 7e61b766..68946f6d 100644
--- a/plugins/t/check_swap.t
+++ b/plugins/t/check_swap.t
@@ -17,42 +17,35 @@ my $message = '/^[0-9]+\% free \([0-9]+MiB out of [0-9]+MiB\)/';
17 17
18$result = NPTest->testCmd( "./check_swap $outputFormat" ); # Always OK 18$result = NPTest->testCmd( "./check_swap $outputFormat" ); # Always OK
19cmp_ok( $result->return_code, "==", 0, "Always OK" ); 19cmp_ok( $result->return_code, "==", 0, "Always OK" );
20$output = decode_json($result->output); 20is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
21is($output->{'state'}, "OK", "State was correct"); 21like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
22like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
23 22
24$result = NPTest->testCmd( "./check_swap -w 1048576 -c 1048576 $outputFormat" ); # 1 MB free 23$result = NPTest->testCmd( "./check_swap -w 1048576 -c 1048576 $outputFormat" ); # 1 MB free
25cmp_ok( $result->return_code, "==", 0, "Always OK" ); 24cmp_ok( $result->return_code, "==", 0, "Always OK" );
26$output = decode_json($result->output); 25is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
27is($output->{'state'}, "OK", "State was correct"); 26like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
28like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
29 27
30$result = NPTest->testCmd( "./check_swap -w 1% -c 1% $outputFormat" ); # 1% free 28$result = NPTest->testCmd( "./check_swap -w 1% -c 1% $outputFormat" ); # 1% free
31cmp_ok( $result->return_code, "==", 0, "Always OK" ); 29cmp_ok( $result->return_code, "==", 0, "Always OK" );
32$output = decode_json($result->output); 30is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
33is($output->{'state'}, "OK", "State was correct"); 31like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
34like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
35 32
36$result = NPTest->testCmd( "./check_swap -w 100% -c 100% $outputFormat" ); # 100% (always critical) 33$result = NPTest->testCmd( "./check_swap -w 100% -c 100% $outputFormat" ); # 100% (always critical)
37cmp_ok( $result->return_code, "==", 0, "Always OK" ); 34cmp_ok( $result->return_code, "==", 0, "Always OK" );
38$output = decode_json($result->output); 35is($result->{'mp_test_result'}->{'state'}, "CRITICAL", "State was correct");
39is($output->{'state'}, "CRITICAL", "State was correct"); 36like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
40like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
41 37
42$result = NPTest->testCmd( "./check_swap -w 100% -c 1% $outputFormat" ); # 100% (always warn) 38$result = NPTest->testCmd( "./check_swap -w 100% -c 1% $outputFormat" ); # 100% (always warn)
43cmp_ok( $result->return_code, "==", 0, "Always OK" ); 39cmp_ok( $result->return_code, "==", 0, "Always OK" );
44$output = decode_json($result->output); 40is($result->{'mp_test_result'}->{'state'}, "WARNING", "State was correct");
45is($output->{'state'}, "WARNING", "State was correct"); 41like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
46like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
47 42
48$result = NPTest->testCmd( "./check_swap -w 100% $outputFormat" ); # 100% (single threshold, always warn) 43$result = NPTest->testCmd( "./check_swap -w 100% $outputFormat" ); # 100% (single threshold, always warn)
49cmp_ok( $result->return_code, "==", 0, "Always OK" ); 44cmp_ok( $result->return_code, "==", 0, "Always OK" );
50$output = decode_json($result->output); 45is($result->{'mp_test_result'}->{'state'}, "WARNING", "State was correct");
51is($output->{'state'}, "WARNING", "State was correct"); 46like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
52like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
53 47
54$result = NPTest->testCmd( "./check_swap -c 100% $outputFormat" ); # 100% (single threshold, always critical) 48$result = NPTest->testCmd( "./check_swap -c 100% $outputFormat" ); # 100% (single threshold, always critical)
55cmp_ok( $result->return_code, "==", 0, "Always OK" ); 49cmp_ok( $result->return_code, "==", 0, "Always OK" );
56$output = decode_json($result->output); 50is($result->{'mp_test_result'}->{'state'}, "CRITICAL", "State was correct");
57is($output->{'state'}, "CRITICAL", "State was correct"); 51like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
58like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");