use Test::More tests => 3;
use strict;
use warnings;
BEGIN { use_ok('Zabbix::API::Utils', qw/RE_FORMULA/); }
my $regexp = RE_FORMULA;
my $string_simple = q{last("alpha")+first("beta")+average("gamma")};
my @match_simple = try_regexp($string_simple);
is_deeply(\@match_simple,
[ { function_call => 'last("alpha")',
function_args => 'alpha',
function_args_quote => '"' },
{ function_call => 'first("beta")',
function_args => 'beta',
function_args_quote => '"' },
{ function_call => 'average("gamma")',
function_args => 'gamma',
function_args_quote => '"' }, ],
'... and a simple, correct formula is parsed');
my $string_complex = q{last("Zabbix Server:net.if.in[eth0,bytes]")+last("Zibbax Server:do.stuff[bytes,lo0]")-blah("Nono le Robot:reticulate.splines[eth2,clous]")};
my @match_complex = try_regexp($string_complex);
is_deeply(\@match_complex,
[ { function_call => 'last("Zabbix Server:net.if.in[eth0,bytes]")',
function_args => 'Zabbix Server:net.if.in[eth0,bytes]',
function_args_quote => '"',
host => 'Zabbix Server',
item => 'net.if.in',
item_arg => 'eth0,bytes' },
{ function_call => 'last("Zibbax Server:do.stuff[bytes,lo0]")',
function_args => 'Zibbax Server:do.stuff[bytes,lo0]',
function_args_quote => '"',
host => 'Zibbax Server',
item => 'do.stuff',
item_arg => 'bytes,lo0' },
{ function_call => 'blah("Nono le Robot:reticulate.splines[eth2,clous]")',
function_args => 'Nono le Robot:reticulate.splines[eth2,clous]',
function_args_quote => '"',
host => 'Nono le Robot',
item => 'reticulate.splines',
item_arg => 'eth2,clous' }, ],
'... and a complex, correct formula is parsed');
sub try_regexp {
my $string = shift;
my @matches;
while ($string =~ m/$regexp/g) {
my %foo = %+;
push @matches, (\%foo);
}
return @matches;
}