The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/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