diff options
-rw-r--r-- | NPTest.pm | 4 | ||||
-rw-r--r-- | plugins/check_mysql.c | 16 | ||||
-rw-r--r-- | plugins/t/check_mysql.t | 53 |
3 files changed, 57 insertions, 16 deletions
@@ -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 3194eced..45f86a9c 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 b29c5c6a..764db72c 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" ); +} |