initial commit
This commit is contained in:
106
api/perl/t/32-Monitoring-Livestatus-backend-test.t
Normal file
106
api/perl/t/32-Monitoring-Livestatus-backend-test.t
Normal file
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
#########################
|
||||
|
||||
use strict;
|
||||
use Carp;
|
||||
use Test::More;
|
||||
use Data::Dumper;
|
||||
|
||||
if ( ! defined $ENV{TEST_SOCKET} or !defined $ENV{TEST_SERVER} or !defined $ENV{TEST_BACKEND} ) {
|
||||
my $msg = 'Author test. Set $ENV{TEST_SOCKET} and $ENV{TEST_SERVER} and $ENV{TEST_BACKEND} to run';
|
||||
plan( skip_all => $msg );
|
||||
} else {
|
||||
# we dont know yet how many tests we got
|
||||
plan( tests => 55237 );
|
||||
}
|
||||
|
||||
# set an alarm
|
||||
my $lastquery;
|
||||
$SIG{ALRM} = sub {
|
||||
my @caller = caller;
|
||||
$lastquery =~ s/\n+/\n/g;
|
||||
print STDERR 'last query: '.$lastquery."\n" if defined $lastquery;
|
||||
confess "timeout reached:".Dumper(\@caller)."\n"
|
||||
};
|
||||
|
||||
use_ok('Monitoring::Livestatus');
|
||||
|
||||
#########################
|
||||
my $objects_to_test = {
|
||||
# UNIX
|
||||
'01 unix_single_arg' => Monitoring::Livestatus::UNIX->new( $ENV{TEST_SOCKET} ),
|
||||
|
||||
# TCP
|
||||
'02 inet_single_arg' => Monitoring::Livestatus::INET->new( $ENV{TEST_SERVER} ),
|
||||
|
||||
# MULTI
|
||||
'03 multi_keepalive' => Monitoring::Livestatus->new( [ $ENV{TEST_SERVER}, $ENV{TEST_SOCKET} ] ),
|
||||
};
|
||||
|
||||
for my $key (sort keys %{$objects_to_test}) {
|
||||
my $ml = $objects_to_test->{$key};
|
||||
isa_ok($ml, 'Monitoring::Livestatus') or BAIL_OUT("no need to continue without a proper Monitoring::Livestatus object: ".$key);
|
||||
|
||||
# dont die on errors
|
||||
$ml->errors_are_fatal(0);
|
||||
$ml->warnings(0);
|
||||
|
||||
#########################
|
||||
# get tables
|
||||
my $data = $ml->selectall_hashref("GET columns\nColumns: table", 'table');
|
||||
my @tables = sort keys %{$data};
|
||||
|
||||
#########################
|
||||
# check keys
|
||||
for my $type (@tables) {
|
||||
alarm(120);
|
||||
my $filter = "";
|
||||
$filter = "Filter: time > ".(time() - 86400)."\n" if $type eq 'log';
|
||||
$filter .= "Filter: time < ".(time())."\n" if $type eq 'log';
|
||||
my $statement = "GET $type\n".$filter."Limit: 1";
|
||||
$lastquery = $statement;
|
||||
my $keys = $ml->selectrow_hashref($statement );
|
||||
undef $lastquery;
|
||||
is(ref $keys, 'HASH', $type.' keys are a hash');# or BAIL_OUT('keys are not in hash format, got '.Dumper($keys));
|
||||
|
||||
# status has no filter implemented
|
||||
next if $type eq 'status';
|
||||
|
||||
for my $key (keys %{$keys}) {
|
||||
my $value = $keys->{$key};
|
||||
if(index($value, ',') > 0) { my @vals = split /,/, $value; $value = $vals[0]; }
|
||||
my $typefilter = "Filter: $key >= $value\n";
|
||||
if($value eq '') {
|
||||
$typefilter = "Filter: $key =\n";
|
||||
}
|
||||
my $statement = "GET $type\n".$filter.$typefilter."Limit: 1";
|
||||
$lastquery = $statement;
|
||||
my $hash_ref = $ml->selectrow_hashref($statement );
|
||||
undef $lastquery;
|
||||
is($Monitoring::Livestatus::ErrorCode, 0, "GET ".$type." Filter: ".$key." >= ".$value) or BAIL_OUT("query failed: ".$statement);
|
||||
#isnt($hash_ref, undef, "GET ".$type." Filter: ".$key." >= ".$value);# or BAIL_OUT("got undef for ".$statement);
|
||||
|
||||
# send test stats query
|
||||
my $stats_query = [ $key.' = '.$value, 'std '.$key, 'min '.$key, 'max '.$key, 'avg '.$key, 'sum '.$key ];
|
||||
for my $stats_part (@{$stats_query}) {
|
||||
my $statement = "GET $type\n".$filter.$typefilter."\nStats: $stats_part";
|
||||
$lastquery = $statement;
|
||||
my $hash_ref = $ml->selectrow_hashref($statement );
|
||||
undef $lastquery;
|
||||
is($Monitoring::Livestatus::ErrorCode, 0, "GET ".$type." Filter: ".$key." >= ".$value." Stats: $stats_part") or BAIL_OUT("query failed:\n".$statement);
|
||||
|
||||
$statement = "GET $type\n".$filter.$typefilter."\nStats: $stats_part\nStatsGroupBy: $key";
|
||||
$lastquery = $statement;
|
||||
$hash_ref = $ml->selectrow_hashref($statement );
|
||||
undef $lastquery;
|
||||
is($Monitoring::Livestatus::ErrorCode, 0, "GET ".$type." Filter: ".$key." >= ".$value." Stats: $stats_part StatsGroupBy: $key") or BAIL_OUT("query failed:\n".$statement);
|
||||
}
|
||||
|
||||
# wait till backend is started up again
|
||||
if(!defined $hash_ref and $Monitoring::Livestatus::ErrorCode > 200) {
|
||||
sleep(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user