From 71ce143ab1cac10b974084a21653b71bee68fe55 Mon Sep 17 00:00:00 2001 From: Ton Voon 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 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