[monitoring-plugins] Implement JSON output parsing for tests

Lorenz Kästle git at monitoring-plugins.org
Fri Mar 7 18:20:11 CET 2025


 Module: monitoring-plugins
 Branch: master
 Commit: 5ad1c0e821a5aaafe47dbe79d5f69820fde798bd
 Author: Lorenz Kästle <12514511+RincewindsHat at users.noreply.github.com>
   Date: Fri Mar  7 09:09:45 2025 +0100
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5ad1c0e8

Implement JSON output parsing for tests

---

 NPTest.pm              |  4 ++++
 plugins/t/check_swap.t | 35 ++++++++++++++---------------------
 2 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/NPTest.pm b/NPTest.pm
index 9b25ac3e..47773acc 100644
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -15,6 +15,8 @@ use warnings;
 use Cwd;
 use File::Basename;
 
+use JSON;
+
 use IO::File;
 use Data::Dumper;
 
@@ -617,6 +619,8 @@ sub testCmd {
     chomp $output;
     $object->output($output);
 
+    $object->{'mp_test_result'} = decode_json($output);
+
     alarm(0);
 
     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\)/';
 
 $result = NPTest->testCmd( "./check_swap $outputFormat" );					# Always OK
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "OK", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -w 1048576 -c 1048576 $outputFormat" );		# 1 MB free
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "OK", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -w 1% -c 1% $outputFormat" );			# 1% free
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "OK", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "OK", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -w 100% -c 100% $outputFormat" );			# 100% (always critical)
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "CRITICAL", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "CRITICAL", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -w 100% -c 1% $outputFormat" );			# 100% (always warn)
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "WARNING", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "WARNING", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -w 100% $outputFormat" );				# 100% (single threshold, always warn)
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "WARNING", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "WARNING", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");
 
 $result = NPTest->testCmd( "./check_swap -c 100% $outputFormat" );				# 100% (single threshold, always critical)
 cmp_ok( $result->return_code, "==", 0, "Always OK" );
-$output = decode_json($result->output);
-is($output->{'state'}, "CRITICAL", "State was correct");
-like($output->{'checks'}->[0]->{'output'}, $message, "Output was correct");
+is($result->{'mp_test_result'}->{'state'}, "CRITICAL", "State was correct");
+like($result->{'mp_test_result'}->{'checks'}->[0]->{'output'}, $message, "Output was correct");



More information about the Commits mailing list