Fix tests
authorMarius Gavrilescu <marius@ieval.ro>
Wed, 23 Apr 2014 08:23:30 +0000 (11:23 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Wed, 23 Apr 2014 08:23:30 +0000 (11:23 +0300)
lib/Gruntmaster/Daemon.pm
t/01-jobs.t
t/problems/increment/meta.yml

index 7fef7f68dd6334508d1fe09732aa61c4557b4a08..6cc6431d050cd858ee8cad47a2c6528f6f6973c7 100644 (file)
@@ -32,7 +32,7 @@ use constant FORMAT_EXTENSION => {
 
 ##################################################
 
-my $db = Gruntmaster::Data->connect('dbi:Pg:');
+my $db;
 my $ua = LWP::UserAgent->new;
 my @purge_hosts = exists $ENV{PURGE_HOSTS} ? split ' ', $ENV{PURGE_HOSTS} : ();
 
@@ -68,24 +68,28 @@ sub process{
        my $meta;
        our $errors = '';
        try {
-               $meta = {
-                       problem => $jobr->problem->id,
-                       files => {
-                               prog => {
-                                       name => 'prog.' . $jobr->extension,
-                                       format => $jobr->format,
-                                       content => $jobr->source,
+               if (ref $job) {
+                       $meta = $job;
+               } else {
+                       $meta = {
+                               problem => $jobr->problem->id,
+                               files => {
+                                       prog => {
+                                               name => 'prog.' . $jobr->extension,
+                                               format => $jobr->format,
+                                               content => $jobr->source,
+                                       },
                                },
-                       },
-                       map { $_ => $jobr->problem->get_column($_) } qw/generator runner judge testcnt timeout olimit/
-               };
-               $meta->{tests} = decode_json $jobr->problem->tests if $meta->{runner} eq 'File';
+                               map { $_ => $jobr->problem->get_column($_) } qw/generator runner judge testcnt timeout olimit/
+                       };
+                       $meta->{tests} = decode_json $jobr->problem->tests if $meta->{runner} eq 'File';
 
-               $meta->{files}{ver} = {
-                       name => 'ver.' . FORMAT_EXTENSION->{$jobr->problem->verformat},
-                       format => $jobr->problem->verformat,
-                       content => $jobr->problem->versource,
-               } if $jobr->problem->verformat;
+                       $meta->{files}{ver} = {
+                               name => 'ver.' . FORMAT_EXTENSION->{$jobr->problem->verformat},
+                               format => $jobr->problem->verformat,
+                               content => $jobr->problem->versource,
+                       } if $jobr->problem->verformat;
+               }
 
                prepare_files $meta;
                chomp $errors;
@@ -123,6 +127,7 @@ sub process{
 
                my %results = $judge->(@results);
                $meta->{$_} = $results{$_} for keys %results;
+               $meta->{results} = \@full_results
        } catch {
                s,(.*) at .*,$1,;
                chomp;
@@ -131,10 +136,11 @@ sub process{
        };
 
        get_logger->info("Job result: " . $meta->{result_text});
+       return unless $jobr;
        $jobr->update({
                result => $meta->{result},
                result_text => $meta->{result_text},
-               results => encode_json \@full_results,
+               results => encode_json $meta->{results},
                $errors ? (errors => $errors) : ()
        });
 
@@ -164,6 +170,7 @@ sub got_job{
 }
 
 sub run{
+       $db = Gruntmaster::Data->connect('dbi:Pg:');
        Log::Log4perl->init('/etc/gruntmasterd/gruntmasterd-log.conf');
        get_logger->info("gruntmasterd $VERSION started");
        chdir tempdir 'gruntmasterd.XXXX', CLEANUP => 1, TMPDIR => 1;
index 23a6c35b1280b6b6035490e2aefde735b047f31a..16a88247a67010d64ba9c56e9dcf6cff9cc6c13d 100644 (file)
@@ -11,6 +11,7 @@ use Cwd qw/cwd/;
 use File::Basename qw/fileparse/;
 use File::Slurp qw/read_file/;
 use File::Temp qw/tempdir/;
+use Hash::Merge qw/merge/;
 use List::Util qw/sum/;
 use Log::Log4perl;
 use Test::More;
@@ -31,12 +32,7 @@ Log::Log4perl->init(\$log_conf);
 $ENV{PATH}.=':' . cwd;
 
 sub check_job{
-       my $job = shift;
-       my $jobh = get_job $job;
-       my $meta = job_inmeta $job;
-       $meta->{result} = $jobh->{result};
-       $meta->{result_text} = $jobh->{result_text};
-       $meta->{results} = $jobh->{results};
+       my $meta = shift;
        if (defined $meta->{results}) {
                delete $meta->{results}[$_]{time} for keys $meta->{results};
        }
@@ -54,32 +50,29 @@ my $tempdir = tempdir CLEANUP => 1;
 my $job = 0;
 
 for my $problem (@problems) {
-       my $meta = LoadFile "$problem/meta.yml";
-       for (1 .. $meta->{testcnt}) {
-               $meta->{infile}[$_ - 1] = read_file "$problem/$_.in" if $meta->{generator} eq 'File';
-               $meta->{okfile}[$_ - 1] = read_file "$problem/$_.ok" if $meta->{runner} eq 'File';
+       my $pbmeta = LoadFile "$problem/meta.yml";
+       for (1 .. $pbmeta->{testcnt}) {
+               $pbmeta->{infile}[$_ - 1] = read_file "$problem/$_.in" if $pbmeta->{generator} eq 'File';
+               $pbmeta->{okfile}[$_ - 1] = read_file "$problem/$_.ok" if $pbmeta->{runner} eq 'File';
        }
-       if (exists $meta->{files}) {
-               $_->{content} = read_file "$problem/$_->{name}" for values $meta->{files}
+       if (exists $pbmeta->{files}) {
+               $_->{content} = read_file "$problem/$_->{name}" for values $pbmeta->{files}
        }
-       set_problem_meta scalar fileparse($problem), $meta;
 
   TODO: {
-               local $TODO = $meta->{todo} if exists $meta->{todo};
-               note "Now testing problem $meta->{name} ($meta->{description})";
+               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}";
-                       $job++;
-                       set_job_inmeta $job, $meta;
-                       set_job_problem $job, scalar fileparse $problem;
+                       $meta = merge $meta, $pbmeta;
                        note "Running $meta->{test_name} ($meta->{test_description})...";
                        my $savedcwd = cwd;
                        chdir $tempdir;
-                       Gruntmaster::Daemon::process $job;
-                       check_job $job;
+                       Gruntmaster::Daemon::process $meta;
                        chdir $savedcwd;
+                       check_job $meta;
                }
        }
 }
index dc011590d54a076a8ccf2138a8dfe54bb5306430..ebf126a690c24b466c557a95d5b5e94d8f385d15 100644 (file)
@@ -8,6 +8,6 @@ timeout: 1
 mlimit: 20971520
 description: A trivial interactive problem
 files:
-  int:
+  ver:
     format: CPP
     name: int.cpp
This page took 0.014845 seconds and 4 git commands to generate.