KinoSearch
view release on metacpan or search on metacpan
devel/bin/smoke.pl view on Meta::CPAN
#!/usr/local/bin/perl
use strict;
use warnings;
use Carp;
use SVN::Class;
use FindBin;
use JSON::XS;
use Email::Stuff;
use Sys::Hostname;
my $config = {
src => Path::Class::Dir->new( $FindBin::Bin, '../../' )->absolute->stringify,
verbose => 0,
email_to => undef,
email_from => getpwuid($<) . '@' . hostname(),
email_subject => 'KinoSearch Smoke Test Report ' . localtime(),
test_target => 'test', # could also be 'test_valgrind' if on Linux
};
if (@ARGV) {
my $config_file = Path::Class::File->new( shift @ARGV );
my $supplied_conf = decode_json( $config_file->slurp );
$config = { %$config, %$supplied_conf };
}
if (!$config->{src}) {
croak "no 'src' in config -- check your syntax";
}
if (! -d $config->{src}) {
croak "no such dir: $config->{src}";
}
my $test_target = $config->{test_target};
my $dir = svn_dir($config->{src});
my $perl_info = get_out("$^X -V");
my $sys_info = get_out('uname -a');
$dir->update or croak "can't svn update $dir:\n" . $dir->errstr;
chdir "$dir" or croak "can't chdir to $dir: $!";
chdir 'perl' or croak "can't chdir to perl: $!";
run_quiet("./Build clean") if -f 'Build';
run_quiet("$^X Build.PL");
run_quiet("$^X Build");
my $test_info = get_out("./Build $test_target");
if (should_send_smoke_signal($test_info)) {
my $msg =<<EOF;
Looks like one or more tests failed:
$test_info
$sys_info
$perl_info
EOF
$msg .= $dir->info->dump;
if ($ENV{SMOKE_TEST}) {
print $msg . "\n";
}
elsif ( $config->{email_to} ) {
Email::Stuff->from ( $config->{email_from} )
->to ( $config->{email_to} )
->subject ( $config->{email_subject} )
->text_body( $msg )
->send;
}
}
elsif ($config->{verbose}) {
print "All tests pass.\n";
print $dir->info->dump;
}
exit;
sub should_send_smoke_signal {
return 1 if $_[0] =~ m/fail/i;
return 1 if $? != 0;
( run in 2.611 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )