96 lines
3.5 KiB
Perl
96 lines
3.5 KiB
Perl
#!/usr/bin/env perl
|
|
|
|
#########################
|
|
|
|
use strict;
|
|
use Test::More;
|
|
use Data::Dumper;
|
|
|
|
if ( ! defined $ENV{TEST_SOCKET} or !defined $ENV{TEST_SERVER} ) {
|
|
my $msg = 'Author test. Set $ENV{TEST_SOCKET} and $ENV{TEST_SERVER} to run';
|
|
plan( skip_all => $msg );
|
|
} else {
|
|
plan( tests => 22 );
|
|
}
|
|
|
|
use_ok('Monitoring::Livestatus::MULTI');
|
|
|
|
#########################
|
|
# create new test object
|
|
my $objects_to_test = {
|
|
'multi_one' => Monitoring::Livestatus::MULTI->new( peer => [ $ENV{TEST_SERVER} ], warnings => 0 ),
|
|
'multi_two' => Monitoring::Livestatus::MULTI->new( peer => [ $ENV{TEST_SERVER}, $ENV{TEST_SOCKET} ], warnings => 0 ),
|
|
'multi_three' => Monitoring::Livestatus::MULTI->new(
|
|
'verbose' => '0',
|
|
'warnings' => '0',
|
|
'timeout' => '10',
|
|
'peer' => [
|
|
{ 'name' => 'Mon 1', 'peer' => $ENV{TEST_SERVER} },
|
|
{ 'name' => 'Mon 2', 'peer' => $ENV{TEST_SOCKET} },
|
|
],
|
|
'keepalive' => '1'
|
|
),
|
|
};
|
|
|
|
# dont die on errors
|
|
#$ml->errors_are_fatal(0);
|
|
|
|
for my $key (keys %{$objects_to_test}) {
|
|
my $ml = $objects_to_test->{$key};
|
|
isa_ok($ml, 'Monitoring::Livestatus::MULTI') or BAIL_OUT("no need to continue without a proper Monitoring::Livestatus::MULTI object");
|
|
|
|
#########################
|
|
# DATA INTEGRITY
|
|
#########################
|
|
|
|
my $statement = "GET hosts\nColumns: state name alias\nLimit: 1";
|
|
my $data1 = $ml->selectall_arrayref($statement, {Slice => 1});
|
|
my $data2 = $ml->selectall_arrayref($statement, {Slice => 1, AddPeer => 1});
|
|
for my $data (@{$data2}) {
|
|
delete $data->{'peer_name'};
|
|
delete $data->{'peer_addr'};
|
|
delete $data->{'peer_key'};
|
|
}
|
|
is_deeply($data1, $data2, "data integrity with peers added and Column");
|
|
|
|
$statement = "GET hosts\nLimit: 1";
|
|
$data1 = $ml->selectall_arrayref($statement, {Slice => 1, Deepcopy => 1});
|
|
$data2 = $ml->selectall_arrayref($statement, {Slice => 1, AddPeer => 1, Deepcopy => 1});
|
|
for my $data (@{$data2}) {
|
|
delete $data->{'peer_name'};
|
|
delete $data->{'peer_addr'};
|
|
delete $data->{'peer_key'};
|
|
}
|
|
is_deeply($data1, $data2, "data integrity with peers added without Columns");
|
|
|
|
#########################
|
|
# try to change result set to scalar
|
|
for my $data (@{$data1}) { $data->{'peer_name'} = 1; }
|
|
for my $data (@{$data2}) { $data->{'peer_name'} = 1; }
|
|
is_deeply($data1, $data2, "data integrity with changed result set");
|
|
|
|
#########################
|
|
# try to change result set to hash
|
|
for my $data (@{$data1}) { $data->{'peer_name'} = {}; }
|
|
for my $data (@{$data2}) { $data->{'peer_name'} = {}; }
|
|
is_deeply($data1, $data2, "data integrity with changed result set");
|
|
|
|
#########################
|
|
# BACKENDS
|
|
#########################
|
|
my @backends = $ml->peer_key();
|
|
$data1 = $ml->selectall_arrayref($statement, {Slice => 1});
|
|
$data2 = $ml->selectall_arrayref($statement, {Slice => 1, Backend => \@backends });
|
|
is_deeply($data1, $data2, "data integrity with backends");
|
|
|
|
#########################
|
|
# BUGS
|
|
#########################
|
|
|
|
#########################
|
|
# Bug: Can't use string ("flap") as an ARRAY ref while "strict refs" in use at Monitoring/Livestatus/MULTI.pm line 206.
|
|
$statement = "GET servicegroups\nColumns: name alias\nFilter: name = flap\nLimit: 1";
|
|
$data1 = $ml->selectrow_array($statement);
|
|
isnt($data1, undef, "bug check: Can't use string (\"group\")...");
|
|
}
|