From 71ce143ab1cac10b974084a21653b71bee68fe55 Mon Sep 17 00:00:00 2001
From: Ton Voon <tonvoon@users.sourceforge.net>
Date: Thu, 15 Dec 2005 17:06:55 +0000
Subject: Display errors with slave queries correctly. Added extra tests for
 slaves

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1299 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/NPTest.pm b/NPTest.pm
index 4036a9d..7ecf743 100644
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -46,6 +46,8 @@ default via the C<use NPTest;> statement.
 
 =item getTestParameter( "ENV_VARIABLE", $brief_description, $default )
 
+$default is optional.
+
 This function allows the test harness
 developer to interactively request test parameter information from the
 user. The user can accept the developer's default value or reply "none"
@@ -302,7 +304,7 @@ sub getTestParameter
 {
   my( $param, $envvar, $default, $brief, $scoped );
   my $new_style;
-  if (scalar @_ == 3) {
+  if (scalar @_ <= 3) {
 	($param, $brief, $default) = @_;
 	$envvar = $param;
 	$new_style = 1;
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c
index 3194ece..45f86a9 100644
--- a/plugins/check_mysql.c
+++ b/plugins/check_mysql.c
@@ -53,6 +53,7 @@ main (int argc, char **argv)
 	/* should be status */
 	
 	char *result = NULL;
+	char *error = NULL;
 	char slaveresult[SLAVERESULTSIZE];
 
 	setlocale (LC_ALL, "");
@@ -99,21 +100,30 @@ main (int argc, char **argv)
 	if(check_slave) {
 		/* check the slave status */
 		if (mysql_query (&mysql, "show slave status") != 0) {
+			error = strdup(mysql_error(&mysql));
 			mysql_close (&mysql);
-			die (STATE_CRITICAL, _("slave query error: %s\n"), mysql_error (&mysql));
+			die (STATE_CRITICAL, _("slave query error: %s\n"), error);
 		}
 
 		/* store the result */
 		if ( (res = mysql_store_result (&mysql)) == NULL) {
+			error = strdup(mysql_error(&mysql));
 			mysql_close (&mysql);
-			die (STATE_CRITICAL, _("slave store_result error: %s\n"), mysql_error (&mysql));
+			die (STATE_CRITICAL, _("slave store_result error: %s\n"), error);
+		}
+
+		/* Check there is some data */
+		if (mysql_num_rows(res) == 0) {
+			mysql_close(&mysql);
+			die (STATE_WARNING, "%s\n", _("No slaves defined"));
 		}
 
 		/* fetch the first row */
 		if ( (row = mysql_fetch_row (res)) == NULL) {
+			error = strdup(mysql_error(&mysql));
 			mysql_free_result (res);
 			mysql_close (&mysql);
-			die (STATE_CRITICAL, _("slave fetch row error: %s\n"), mysql_error (&mysql));
+			die (STATE_CRITICAL, _("slave fetch row error: %s\n"), error);
 		}
 
 		if (mysql_field_count (&mysql) == 12) {
diff --git a/plugins/t/check_mysql.t b/plugins/t/check_mysql.t
index b29c5c6..764db72 100644
--- a/plugins/t/check_mysql.t
+++ b/plugins/t/check_mysql.t
@@ -13,20 +13,49 @@ use vars qw($tests);
 
 plan skip_all => "check_mysql not compiled" unless (-x "check_mysql");
 
-plan tests => 3;
-
-my $failureOutput = '/Access denied for user /';
-my $mysqlserver = getTestParameter( "mysql_server", "NP_MYSQL_SERVER", undef,
-		"A MySQL Server");
-my $mysql_login_details = getTestParameter( "mysql_login_details", "MYSQL_LOGIN_DETAILS", undef, 
-		"Command line parameters to specify login access");
+plan tests => 7;
+
+my $bad_login_output = '/Access denied for user /';
+my $mysqlserver = getTestParameter( 
+		"NP_MYSQL_SERVER", 
+		"A MySQL Server with no slaves setup"
+		);
+my $mysql_login_details = getTestParameter( 
+		"MYSQL_LOGIN_DETAILS", 
+		"Command line parameters to specify login access",
+		"-u user -ppw",
+		);
+my $with_slave = getTestParameter( 
+		"NP_MYSQL_WITH_SLAVE", 
+		"MySQL server with slaves setup"
+		);
+my $with_slave_login = getTestParameter( 
+		"NP_MYSQL_WITH_SLAVE_LOGIN", 
+		"Login details for server with slave", 
+		"-uroot -ppw"
+		);
 
 my $result;
 
-$result = NPTest->testCmd("./check_mysql -H $mysqlserver $mysql_login_details");
-cmp_ok( $result->return_code, '==', 0, "Login okay");
+SKIP: {
+	skip "No mysql server defined", 5 unless $mysqlserver;
+	$result = NPTest->testCmd("./check_mysql -H $mysqlserver $mysql_login_details");
+	cmp_ok( $result->return_code, '==', 0, "Login okay");
+
+	$result = NPTest->testCmd("./check_mysql -H $mysqlserver -u dummy");
+	cmp_ok( $result->return_code, '==', 2, "Login failure");
+	like( $result->output, $bad_login_output, "Expected login failure message");
+
+	$result = NPTest->testCmd("./check_mysql -S -H $mysqlserver $mysql_login_details");
+	cmp_ok( $result->return_code, "==", 1, "No slaves defined" );
+	like( $result->output, "/No slaves defined/", "Correct error message");
+}
 
-$result = NPTest->testCmd("./check_mysql -H $mysqlserver -u dummy");
-cmp_ok( $result->return_code, '==', 2, "Login expected failure");
-like( $result->output, $failureOutput, "Error string as expected");
+SKIP: {
+	skip "No mysql server with slaves defined", 2 unless $with_slave;
+	$result = NPTest->testCmd("./check_mysql -H $with_slave $with_slave_login");
+	cmp_ok( $result->return_code, '==', 0, "Login okay");
 
+	$result = NPTest->testCmd("./check_mysql -S -H $with_slave $with_slave_login");
+	cmp_ok( $result->return_code, "==", 0, "Slaves okay" );
+}
-- 
cgit v0.10-9-g596f

