4
0

check_dbi.t 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #! /usr/bin/perl -w -I ..
  2. #
  3. # Database Server Tests via check_dbi
  4. #
  5. #
  6. # Uses the 'sqlite3' DBD driver and command line utility.
  7. use strict;
  8. use Test::More;
  9. use NPTest;
  10. use File::Temp;
  11. use vars qw($tests);
  12. plan skip_all => "check_dbi not compiled" unless (-x "check_dbi");
  13. $tests = 20;
  14. plan tests => $tests;
  15. my $missing_driver_output = "failed to open DBI driver 'sqlite3'";
  16. my $bad_driver_output = "/failed to open DBI driver 'nodriver'/";
  17. my $conn_time_output = "/OK - connection time: [0-9\.]+s \|/";
  18. my $missing_query_output = "/Must specify a query to execute/";
  19. my $no_rows_output = "/WARNING - no rows returned/";
  20. my $not_numeric_output = "/CRITICAL - result value is not a numeric:/";
  21. my $query_time_output = "/OK - connection time: [0-9\.]+s, 'SELECT 1' returned 1.000000 in [0-9\.]+s \|/";
  22. my $syntax_error_output = "/CRITICAL - failed to execute query 'GET ALL FROM test': 1: near \"GET\": syntax error/";
  23. my $result;
  24. SKIP: {
  25. my $sqlite3 = qx(which sqlite3 2> /dev/null);
  26. chomp($sqlite3);
  27. skip "No Sqlite3 found", $tests unless $sqlite3;
  28. my $sqlite3_check = qx(./check_dbi -d sqlite3 -q '');
  29. if ($sqlite3_check =~ m/$missing_driver_output/) {
  30. skip "No 'sqlite3' DBD driver found", $tests;
  31. }
  32. my $fh = File::Temp->new(
  33. TEMPLATE => "/tmp/check_dbi_sqlite3.XXXXXXX",
  34. UNLINK => 1,
  35. );
  36. my $filename = $fh->filename;
  37. $filename =~ s/^\/tmp\///;
  38. system("$sqlite3 /tmp/$filename 'CREATE TABLE test(a INT, b TEXT)'");
  39. system("$sqlite3 /tmp/$filename 'INSERT INTO test VALUES (1, \"text1\")'");
  40. system("$sqlite3 /tmp/$filename 'INSERT INTO test VALUES (2, \"text2\")'");
  41. my $check_cmd = "./check_dbi -d sqlite3 -o sqlite3_dbdir=/tmp -o dbname=$filename";
  42. $result = NPTest->testCmd("$check_cmd -q 'SELECT 1'");
  43. cmp_ok($result->return_code, '==', 0, "Sqlite3 login okay and can run query");
  44. $result = NPTest->testCmd("$check_cmd");
  45. cmp_ok($result->return_code, '==', 3, "Missing query parameter");
  46. like($result->output, $missing_query_output, "Missing query parameter error message");
  47. $result = NPTest->testCmd("$check_cmd -q 'GET ALL FROM test'");
  48. cmp_ok($result->return_code, '==', 2, "Invalid query");
  49. like($result->output, $syntax_error_output, "Syntax error message");
  50. $result = NPTest->testCmd("$check_cmd -q 'SELECT 2.71828' -w 2 -c 3");
  51. cmp_ok($result->return_code, '==', 1, "Got warning");
  52. $result = NPTest->testCmd("$check_cmd -q 'SELECT 3.1415' -w 2 -c 3");
  53. cmp_ok($result->return_code, '==', 2, "Got critical");
  54. $result = NPTest->testCmd("$check_cmd -q ''");
  55. cmp_ok($result->return_code, '==', 1, "No rows returned");
  56. like($result->output, $no_rows_output, "Now rows returned warning message");
  57. $result = NPTest->testCmd("$check_cmd -q 'SELECT b FROM test'");
  58. cmp_ok($result->return_code, '==', 2, "Value is not a numeric");
  59. like($result->output, $not_numeric_output, "Value is not a numeric error message");
  60. $result = NPTest->testCmd("$check_cmd -m QUERY_RESULT -q 'SELECT b FROM test' -e text1");
  61. cmp_ok($result->return_code, '==', 0, "Query result string comparison okay");
  62. $result = NPTest->testCmd("$check_cmd -q 'SELECT b FROM test' -r 'eXt[0-9]'");
  63. cmp_ok($result->return_code, '==', 2, "Query result case-insensitive regex failure");
  64. $result = NPTest->testCmd("$check_cmd -q 'SELECT b FROM test' -R 'eXt[0-9]'");
  65. cmp_ok($result->return_code, '==', 0, "Query result case-sensitive regex okay");
  66. $result = NPTest->testCmd("$check_cmd -m CONN_TIME -w 0.5 -c 0.7");
  67. cmp_ok($result->return_code, '==', 0, "CONN_TIME metric okay");
  68. like($result->output, $conn_time_output, "CONN_TIME metric output okay");
  69. $result = NPTest->testCmd("$check_cmd -m QUERY_TIME -q 'SELECT 1'");
  70. cmp_ok($result->return_code, '==', 0, "QUERY_TIME metric okay");
  71. like($result->output, $query_time_output, "QUERY_TIME metric output okay");
  72. $result = NPTest->testCmd("./check_dbi -d nodriver -q ''");
  73. cmp_ok($result->return_code, '==', 3, "Unknown DBI driver");
  74. like($result->output, $bad_driver_output, "Correct error message");
  75. }