X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=blobdiff_plain;f=t%2F01-jobs.t;h=78dc416cb5a7b4acd20e8f8002ab8fbe990c563f;hp=7001ef18b54efa2d25d9cc435b0db8a5fdd97cff;hb=fd807ac9dddfd831fc6f963fd5f6613b2e78c944;hpb=759d3ca5c69d55ebcf9a1c79a9b9030e9119069d diff --git a/t/01-jobs.t b/t/01-jobs.t index 7001ef1..78dc416 100644 --- a/t/01-jobs.t +++ b/t/01-jobs.t @@ -5,19 +5,32 @@ use warnings; use Gruntmaster::Daemon; -use Cwd qw/cwd/; +use Cwd qw/getcwd/; use File::Basename qw/fileparse/; use File::Slurp qw/read_file/; use File::Temp qw/tempdir/; +use File::Which qw/which/; use Hash::Merge qw/merge/; use List::Util qw/sum/; use Log::Log4perl; use Test::More; -use YAML::Any qw/LoadFile/; +use YAML::Tiny qw/LoadFile/; ################################################## -my $loglevel = $ENV{TEST_LOG_LEVEL} // 'OFF'; +use constant COMPILER => { + qw/C gcc + CPP g++ + MONO gmcs + JAVA javac + PASCAL fpc + GOLANG go + GCCGO gccgo + HASKELL ghc + PERL perl + PYTHON python/}; + +my $loglevel = $ENV{TEST_LOG_LEVEL} // ($ENV{TEST_VERBOSE} ? 'TRACE' : 'OFF'); my $log_conf = <init(\$log_conf); -$ENV{PATH}.=':' . cwd; +$ENV{PATH} = getcwd . ':' . $ENV{PATH}; +umask 0022; sub check_job{ my $meta = shift; if (defined $meta->{results}) { - delete $meta->{results}[$_]{time} for keys %{$meta->{results}}; + delete $meta->{results}[$_]{time} for keys @{$meta->{results}}; } is $meta->{result}, $meta->{expected_result}, "Result is correct"; is $meta->{result_text}, $meta->{expected_result_text}, "Result text is correct"; @@ -40,10 +54,13 @@ sub check_job{ } my @problems = exists $ENV{TEST_PROBLEMS} ? map {"t/problems/$_"} split ' ', $ENV{TEST_PROBLEMS} : ; +@problems = grep { $_ !~ /hello/ } @problems unless $ENV{RELEASE_TESTING} || $ENV{TEST_PROBLEMS}; + plan tests => 3 * sum map { my @temp = <$_/tests/*>; scalar @temp } @problems; note "Problems to be tested: " . join ', ', @problems; -my $tempdir = tempdir CLEANUP => 1; +my $tempdir = tempdir "gruntmasterd-testingXXXX", TMPDIR => 1, CLEANUP => 1; +chmod 0777, $tempdir; my $job = 0; @@ -58,19 +75,27 @@ for my $problem (@problems) { } TODO: { - local $TODO = $pbmeta->{todo} if exists $pbmeta->{todo}; note "Now testing problem $pbmeta->{name} ($pbmeta->{description})"; for my $source (<$problem/tests/*>) { - my $meta = LoadFile "$source/meta.yml"; - $meta->{files}{prog}{content} = read_file "$source/$meta->{files}{prog}{name}"; - $meta = merge $meta, $pbmeta; - note "Running $meta->{test_name} ($meta->{test_description})..."; - my $savedcwd = cwd; - chdir $tempdir; - Gruntmaster::Daemon::process $meta; - chdir $savedcwd; - check_job $meta; + SKIP: { + my $meta = LoadFile "$source/meta.yml"; + if ($meta->{files}{prog}) { + my $format = $meta->{files}{prog}{format}; + my $compiler = COMPILER->{$format}; + skip "$compiler not found in path", 3 unless $ENV{GRUNTMASTER_VM} || which $compiler; + skip "$format requires multiple processes. Set GRUNTMASTER_KILL_USER and GRUNTMASTER_SUDO to allow multiple processes.", 3 if !$ENV{GRUNTMASTER_KILL_USER} && $format eq 'JAVA' || $format eq 'GOLANG' || $format eq 'GCCGO'; + $meta->{files}{prog}{content} = read_file "$source/$meta->{files}{prog}{name}"; + } + $meta = merge $meta, $pbmeta; + local $TODO = $meta->{todo} if exists $meta->{todo}; + note "Running $meta->{test_name} ($meta->{test_description})..."; + my $savedcwd = getcwd; + chdir $tempdir; + Gruntmaster::Daemon::process $meta; + chdir $savedcwd; + check_job $meta; + } } } }