check_disk.t 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #! /usr/bin/perl -w -I ..
  2. #
  3. # Disk Space Tests via check_disk
  4. #
  5. # $Id$
  6. #
  7. use strict;
  8. use Test::More tests => 24;
  9. use NPTest;
  10. use POSIX qw(ceil floor);
  11. my $successOutput = '/^DISK OK - /';
  12. my $failureOutput = '/^DISK CRITICAL - /';
  13. my $warningOutput = '/^DISK WARNING - /';
  14. my $result;
  15. my $mountpoint_valid = getTestParameter( "mountpoint_valid", "NP_MOUNTPOINT_VALID", "/",
  16. "The path to a valid mountpoint" );
  17. my $mountpoint2_valid = getTestParameter( "mountpoint2_valid", "NP_MOUNTPOINT2_VALID", "/var",
  18. "The path to another valid mountpoint. Must be different from 1st one." );
  19. my $free_regex = '^DISK OK - free space: '.$mountpoint_valid.' .* MB \((\d+)%[\)]*\); '.$mountpoint2_valid.' .* MB \((\d+)%[\)]*\);|';
  20. $result = NPTest->testCmd( "./check_disk 100 100 ".${mountpoint_valid} ); # 100 free
  21. cmp_ok( $result->return_code, "==", 0, "At least 100 free" );
  22. like( $result->output, $successOutput, "Right output" );
  23. $result = NPTest->testCmd( "./check_disk -w 0 -c 0 ".${mountpoint_valid} ); # 0 free
  24. cmp_ok( $result->return_code, "==", 0, "At least 0 free" );
  25. like( $result->output, $successOutput, "Right output" );
  26. $result = NPTest->testCmd( "./check_disk -w 1% -c 1% ".${mountpoint_valid} ); # 1% free
  27. cmp_ok( $result->return_code, "==", 0, "At least 1% free" );
  28. like( $result->output, $successOutput, "Right output" );
  29. $result = NPTest->testCmd( "./check_disk -w 1% -c 1% -p ".${mountpoint_valid}." -w 1% -c 1% -p ".$mountpoint2_valid ); # MP1 1% free MP2 100% free
  30. cmp_ok( $result->return_code, "==", 0, "At least 1% free on mountpoint_1, 1% free on mountpoint_2" );
  31. like( $result->output, $successOutput, "Right output" );
  32. # Get free diskspace on NP_MOUNTPOINT_VALID and NP_MOUNTPOINT2_VALID
  33. my $free_space_output = $result->output;
  34. #$free_space_output =~ m/$free_regex/;
  35. my ($free_on_mp1, $free_on_mp2) = ($free_space_output =~ m/\((\d+)%.*\((\d+)%/);
  36. die "Cannot read free_on_mp1" unless $free_on_mp1;
  37. die "Cannot read free_on_mp2" unless $free_on_mp2;
  38. my $average = ceil(($free_on_mp1+$free_on_mp2)/2);
  39. my ($larger, $smaller);
  40. if ($free_on_mp1 > $free_on_mp2) {
  41. $larger = $mountpoint_valid;
  42. $smaller = $mountpoint2_valid;
  43. } else {
  44. $larger = $mountpoint2_valid;
  45. $smaller = $mountpoint_valid;
  46. }
  47. $result = NPTest->testCmd( "./check_disk -w 1% -c 1% -p ".${larger}." -w 100% -c 100% -p ".$smaller ); # MP1 1% free MP2 100% free
  48. cmp_ok( $result->return_code, "==", 2, "At least 1% free on $larger, 100% free on $smaller" );
  49. like( $result->output, $failureOutput, "Right output" );
  50. $result = NPTest->testCmd( "./check_disk -w ".$average."% -c 0% -p ".${larger}." -w ".$average."% -c ".$average."% -p ".${smaller} ); # Average free
  51. cmp_ok( $result->return_code, "==", 2, "At least ".$average."% free on $larger" );
  52. like( $result->output, $failureOutput, "Right output" );
  53. $result = NPTest->testCmd( "./check_disk -w ".$average."% -c ".$average."% -p ".${larger}." -w ".$average."% -c 0% -p ".${smaller} ); # Average free
  54. cmp_ok( $result->return_code, "==", 1, "At least ".$average."% free on $smaller" );
  55. like( $result->output, $warningOutput, "Right output" );
  56. TODO: {
  57. local $TODO = "We have a bug in check_disk - -p must come after -w and -c";
  58. $result = NPTest->testCmd( "./check_disk -p ".${mountpoint_valid}." -w ".$average."% -c 0% -p ".${mountpoint_valid}." -w ".$average."% -c ".$average."%" ); # Average free
  59. cmp_ok( $result->return_code, "==", 2, "At least ".$average."% free on mountpoint_1" );
  60. like( $result->output, $failureOutput, "Right output" );
  61. $result = NPTest->testCmd( "./check_disk -p ".${mountpoint_valid}." -w ".$average."% -c ".$average."% -p ".${mountpoint_valid}." -w ".$average."% -c 0%" ); # Average free
  62. cmp_ok( $result->return_code, "==", 1, "At least ".$average."% free on mountpoint_2" );
  63. like( $result->output, $warningOutput, "Right output" );
  64. }
  65. $result = NPTest->testCmd( "./check_disk -w 100% -c 100% ".${mountpoint_valid} ); # 100% empty
  66. cmp_ok( $result->return_code, "==", 2, "100% empty" );
  67. like( $result->output, $failureOutput, "Right output" );
  68. TODO: {
  69. local $TODO = "-u GB sometimes does not work?";
  70. $result = NPTest->testCmd( "./check_disk -w 100 -c 100 -u GB ".${mountpoint_valid} ); # 100 GB empty
  71. cmp_ok( $result->return_code, "==", 2, "100 GB empty" );
  72. like( $result->output, $failureOutput, "Right output" );
  73. }
  74. $result = NPTest->testCmd( "./check_disk 0 0 ".${mountpoint_valid} ); # 0 critical
  75. cmp_ok( $result->return_code, "==", 2, "No empty space" );
  76. like( $result->output, $failureOutput, "Right output" );