#!/usr/bin/perl
=head1 NAME
sites-ok.t - check web sites
=head SYNOPSIS
cat >> test-server.yaml << __YAML_END__
cmd-output:
-
cmd : echo hell world!
desc : hello printing
output: hello? world
-
cmd : date
desc : if date command is there
output: '[0-9]{2}:[0-9]{2}:[0-9]{2}'
-
cmd : perl -e 'print "hi"; exit 1'
desc : check perl exit 1 return value and hi
output: hi
exit : 1
-
cmd : perl -e 'exit 1'
desc : check perl exit != 0
exit : '!= 0'
__YAML_END__
=cut
use strict;
use warnings;
use Test::More;
use Test::Differences;
use YAML::Syck 'LoadFile';
use FindBin '$Bin';
my $config = LoadFile($Bin.'/test-server.yaml');
plan 'skip_all' => "no configuration sections for 'cmd-output'"
if (not $config or not $config->{'cmd-output'});
exit main();
sub main {
my $tests = 0;
foreach my $cmd (@{$config->{'cmd-output'}}) {
$tests++;
$tests++ if defined $cmd->{'output'};
$tests++ if defined $cmd->{'exit'};
}
plan 'tests' => $tests;
foreach my $cmd (@{$config->{'cmd-output'}}) {
my $output = `$cmd->{'cmd'}`;
my $exit_value = $? >> 8;
SKIP: {
ok(defined $output, 'executing "'.$cmd->{'cmd'}.'"')
or skip 'no output', 1;
like($output, qr/$cmd->{'output'}/, $cmd->{'desc'})
if defined $cmd->{'output'};
my $expected_exit_value = $cmd->{'exit'};
if (defined $expected_exit_value) {
my $cmp_operator = '==';
if ($expected_exit_value =~ m{^(!=|==|>|<|>=|<=)\s([0-9]+)$}) {
$cmp_operator = $1;
$expected_exit_value = $2;
}
cmp_ok($exit_value, $cmp_operator, $expected_exit_value, $cmd->{'desc'});
}
}
}
return 0;
}
__END__
=head1 AUTHOR
Jozef Kutej
for the idea thanks to Aldo Calpini.
=cut