From e172b8d90d22950ff496364fd06a6c2e9b33eb61 Mon Sep 17 00:00:00 2001 From: Marius Gavrilescu Date: Thu, 13 Apr 2017 19:53:10 +0300 Subject: [PATCH 1/6] Fix purging of standings --- lib/Gruntmaster/Daemon.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Gruntmaster/Daemon.pm b/lib/Gruntmaster/Daemon.pm index 7a9dea6..1c820db 100644 --- a/lib/Gruntmaster/Daemon.pm +++ b/lib/Gruntmaster/Daemon.pm @@ -129,8 +129,8 @@ sub process_job { my $timeout_override = db()->query('SELECT timeout FROM limits WHERE problem=? AND format=?', $job->{problem}, $job->{format})->list; $meta->{timeout} = $timeout_override if defined $timeout_override; $meta->{tests} = decode_json $pb->{tests} if $meta->{runner} eq 'File'; - $job->{contest} &&= contest_entry($job->{contest}); - delete $meta->{precnt} unless $job->{contest} && $job->{contest}{started} && !$job->{contest}{finished}; ## no critic (ProhibitNegativeExpressionsInUnlessAndUntilConditions) + my $contest = $job->{contest} && contest_entry($job->{contest}); + delete $meta->{precnt} unless $contest && $contest->{started} && !$contest->{finished}; ## no critic (ProhibitNegativeExpressionsInUnlessAndUntilConditions) $meta->{testcnt} = $meta->{precnt} if $meta->{precnt}; $meta->{files}{ver} = { -- 2.30.2 From f58c979a7df8f6cb6b61ba680d4d09e5b0fb41ba Mon Sep 17 00:00:00 2001 From: AndreiTocu Date: Fri, 2 Oct 2020 14:13:12 +0300 Subject: [PATCH 2/6] Send POST request to remote address with job result --- lib/Gruntmaster/Daemon.pm | 3 +++ lib/Gruntmaster/SendResults.pm | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 lib/Gruntmaster/SendResults.pm diff --git a/lib/Gruntmaster/Daemon.pm b/lib/Gruntmaster/Daemon.pm index 1c820db..ef24364 100644 --- a/lib/Gruntmaster/Daemon.pm +++ b/lib/Gruntmaster/Daemon.pm @@ -8,6 +8,7 @@ our $VERSION = '5999.000_005'; use Gruntmaster::Daemon::Constants qw/ERR/; use Gruntmaster::Daemon::Format qw/prepare_files stopvms/; +use Gruntmaster::SendResults qw/send_results_request/; use File::Slurp qw/read_file/; use File::Temp qw/tempdir/; @@ -110,6 +111,7 @@ sub process{ $meta->{errors} = $errors; get_logger->info('Job result: ' . $meta->{result_text}); + send_results_request($meta->{job_id}, $meta->{result}, $meta->{result_text}); } sub process_job { @@ -138,6 +140,7 @@ sub process_job { format => $pb->{verformat}, content => $pb->{versource}, } if $pb->{verformat}; + $meta->{job_id} = $job->{id}; process $meta; diff --git a/lib/Gruntmaster/SendResults.pm b/lib/Gruntmaster/SendResults.pm new file mode 100644 index 0000000..e01a9a6 --- /dev/null +++ b/lib/Gruntmaster/SendResults.pm @@ -0,0 +1,36 @@ +package Gruntmaster::SendResults; + +use 5.014000; +use strict; +use warnings; +use parent qw/Exporter/; + +use HTTP::Request; +use JSON qw/encode_json decode_json/; +use LWP::UserAgent; + +our $VERSION = '5999.000_005'; +our @EXPORT_OK = qw/send_results_request/; + +sub send_results_request { + my ($job_id, $result, $result_text) = @_; + + my $url = $ENV{REMOTE_ADDRESS}; + my $header = [ + 'Content-Type' => 'application/json' + ]; + my $data = { + gm_id => $job_id, + result => $result, + result_text => $result_text + }; + + my $encoded_data = encode_json($data); + my $request = HTTP::Request->new(POST => $url, $header, $encoded_data); + my $ua = LWP::UserAgent->new(); + my $response = $ua->request($request); + + return $response; +} + +1; -- 2.30.2 From 8d32c68b6a3511ebfb5bb3b2be518988d3900065 Mon Sep 17 00:00:00 2001 From: andreisamoila74 Date: Mon, 9 Nov 2020 12:32:10 +0200 Subject: [PATCH 3/6] Add test for SendResults --- t/02-send-results-request.t | 68 +++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 t/02-send-results-request.t diff --git a/t/02-send-results-request.t b/t/02-send-results-request.t new file mode 100644 index 0000000..816e991 --- /dev/null +++ b/t/02-send-results-request.t @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w +use v5.14; +use strict; +use warnings; + +use Gruntmaster::Daemon qw/process/; + +use Cwd qw/getcwd/; +use File::Slurp qw/read_file/; +use File::Temp qw/tempdir/; +use HTTP::Tiny; +use Hash::Merge qw/merge/; +use JSON qw/encode_json decode_json/; +use Log::Log4perl; +use Test::HTTP::LocalServer; +use Test::More; +use YAML::Tiny qw/LoadFile/; + +my $server = Test::HTTP::LocalServer->spawn; +my $response = HTTP::Tiny->new->get( $server->url ); +$ENV{REMOTE_ADDRESS} = $server->url; + +my $loglevel = $ENV{TEST_LOG_LEVEL} // ($ENV{TEST_VERBOSE} ? 'TRACE' : 'OFF'); +my $log_conf = <init(\$log_conf); + +my $tempdir = tempdir "gruntmasterd-testingXXXX", TMPDIR => 1, CLEANUP => 1; +chmod 0777, $tempdir; + +sub process_meta() { + my $pbmeta = LoadFile "t/problems/aplusb/meta.yml"; + for (1 .. $pbmeta->{testcnt}) { + $pbmeta->{infile}[$_ - 1] = read_file "t/problems/aplusb/$_.in" + if $pbmeta->{generator} eq 'File'; + $pbmeta->{okfile}[$_ - 1] = read_file "t/problems/aplusb/$_.ok" + if $pbmeta->{runner} && $pbmeta->{runner} eq 'File'; + } + my $source = ; + my $meta = LoadFile "$source/meta.yml"; + $meta->{files}{prog}{content} = read_file "$source/$meta->{files}{prog}{name}"; + $meta = merge $meta, $pbmeta; + my $savedcwd = getcwd; + chdir $tempdir; + $meta->{job_id} = 1; + Gruntmaster::Daemon::process($meta); + chdir $savedcwd; +} + +sub send_request() { + process_meta(); + + my $requests = $server->get_log; + is $requests =~ qr/"result_text":"40 points"/, 1; + is $requests =~ qr/"result":10/, 1; + is $requests =~ qr/"gm_id":1/, 1; +} + +send_request(); + +$server->stop; + +done_testing(); -- 2.30.2 From ecc543574d5a3f9551e9a45994b4413d7b9cdbbf Mon Sep 17 00:00:00 2001 From: Marius Gavrilescu Date: Sun, 15 Nov 2020 11:21:05 +0000 Subject: [PATCH 4/6] Small fixes for previous commit * Add current directory to $PATH so the new test passes * Add Test::HTTP::LocalServer to build dependencies * Plan for 3 tests instead of using [done_testing] --- Makefile.PL | 1 + t/02-send-results-request.t | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index 46c5cb5..adc109a 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -18,6 +18,7 @@ WriteMakefile( Hash::Merge 0 List::Util 0 Log::Log4perl 0 + Test::HTTP::LocalServer 0 Test::More 0 YAML::Tiny 0/, }, diff --git a/t/02-send-results-request.t b/t/02-send-results-request.t index 816e991..6d6eff8 100644 --- a/t/02-send-results-request.t +++ b/t/02-send-results-request.t @@ -13,7 +13,7 @@ use Hash::Merge qw/merge/; use JSON qw/encode_json decode_json/; use Log::Log4perl; use Test::HTTP::LocalServer; -use Test::More; +use Test::More tests => 3; use YAML::Tiny qw/LoadFile/; my $server = Test::HTTP::LocalServer->spawn; @@ -30,6 +30,7 @@ log4perl.appender.stderr.layout.ConversionPattern = [\%d] [\%F{1}:\%M{1}:\%L] [\ CONF Log::Log4perl->init(\$log_conf); +$ENV{PATH} = getcwd . ':' . $ENV{PATH}; my $tempdir = tempdir "gruntmasterd-testingXXXX", TMPDIR => 1, CLEANUP => 1; chmod 0777, $tempdir; @@ -64,5 +65,3 @@ sub send_request() { send_request(); $server->stop; - -done_testing(); -- 2.30.2 From 7aa03ec19ba9d88c2c22ab5d678c159bcc18e48f Mon Sep 17 00:00:00 2001 From: Petru Trimbitas Date: Thu, 14 Apr 2022 13:31:24 +0300 Subject: [PATCH 5/6] Some test fixing on os x --- t/00-compile.t | 8 ++++++-- t/01-jobs.t | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/t/00-compile.t b/t/00-compile.t index 28dd755..eaa82ca 100644 --- a/t/00-compile.t +++ b/t/00-compile.t @@ -1,7 +1,11 @@ -#!/usr/bin/perl -w use v5.14; use strict; use warnings; +use FindBin; + use Test::More tests => 1; -BEGIN { use_ok('Gruntmaster::Daemon') }; +BEGIN { + $ENV{PATH} = "$FindBin::Bin/../blib/script:" . $ENV{PATH}; + use_ok('Gruntmaster::Daemon') +}; diff --git a/t/01-jobs.t b/t/01-jobs.t index 3f00b3d..0bb2350 100644 --- a/t/01-jobs.t +++ b/t/01-jobs.t @@ -1,4 +1,3 @@ -#!/usr/bin/perl -w use v5.14; use strict; use warnings; @@ -10,6 +9,7 @@ use File::Basename qw/fileparse/; use File::Slurp qw/read_file/; use File::Temp qw/tempdir/; use File::Which qw/which/; +use FindBin; use Hash::Merge qw/merge/; use List::Util qw/sum/; use Log::Log4perl; @@ -53,6 +53,7 @@ CONF Log::Log4perl->init(\$log_conf); $ENV{PATH} = getcwd . ':' . $ENV{PATH}; +$ENV{PATH} = "$FindBin::Bin/../blib/script:" . $ENV{PATH}; umask 0022; sub check_job{ -- 2.30.2 From 0ad36cae798f1d0698bfea2130f29707ee2a47e9 Mon Sep 17 00:00:00 2001 From: Petru Trimbitas Date: Fri, 15 Apr 2022 21:26:23 +0300 Subject: [PATCH 6/6] Add javascript --- README | 40 ---------------------- gruntmaster-compile | 3 +- lib/Gruntmaster/Daemon.pm | 1 + t/01-jobs.t | 3 +- t/problems/hello/tests/javascript/meta.yml | 7 ++++ t/problems/hello/tests/javascript/prog.js | 1 + 6 files changed, 13 insertions(+), 42 deletions(-) delete mode 100644 README create mode 100644 t/problems/hello/tests/javascript/meta.yml create mode 100644 t/problems/hello/tests/javascript/prog.js diff --git a/README b/README deleted file mode 100644 index 1b0e7ab..0000000 --- a/README +++ /dev/null @@ -1,40 +0,0 @@ -Gruntmaster-Daemon version 0.001 -================================ - -The README is used to introduce the module and provide instructions on -how to install the module, any machine dependencies it may have (for -example C compilers and installed libraries) and any other information -that should be provided before the module is installed. - -A README file is required for CPAN modules since CPAN extracts the -README file from a module distribution so that people browsing the -archive can use it get an idea of the modules uses. It is usually a -good idea to provide version information here so that people can -decide whether fixes for the module are worth downloading. - -INSTALLATION - -To install this module type the following: - - perl Makefile.PL - make - make test - make install - -DEPENDENCIES - -This module requires these other modules and libraries: - - blah blah blah - -COPYRIGHT AND LICENCE - -Put the correct copyright and licence information here. - -Copyright (C) 2013 by Marius Gavrilescu - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself, either Perl version 5.18.1 or, -at your option, any later version of Perl 5 you may have available. - - diff --git a/gruntmaster-compile b/gruntmaster-compile index 2538cde..3599621 100755 --- a/gruntmaster-compile +++ b/gruntmaster-compile @@ -41,11 +41,12 @@ given ($format){ exit } - when ([qw/GOLFSCRIPT JULIA PERL PHP PYTHON PYTHON3 RUBY SBCL/]){ + when ([qw/GOLFSCRIPT JAVASCRIPT JULIA PERL PHP PYTHON PYTHON3 RUBY SBCL/]){ open IN, '<', $name; open OUT, '>', $basename; print OUT "#!/usr/bin/golfscript\n" if $_ eq 'GOLFSCRIPT'; print OUT "#!/usr/bin/julia -O\n" if $_ eq 'JULIA'; + print OUT "#!/usr/bin/node\n" if $_ eq 'JAVASCRIPT'; print OUT "#!/usr/bin/perl\n" if $_ eq 'PERL'; print OUT "#!/usr/bin/php -d ONLINE_JUDGE=true\n" if $_ eq 'PHP'; print OUT "#!/usr/bin/python2.7\n" if $_ eq 'PYTHON'; diff --git a/lib/Gruntmaster/Daemon.pm b/lib/Gruntmaster/Daemon.pm index ef24364..9597572 100644 --- a/lib/Gruntmaster/Daemon.pm +++ b/lib/Gruntmaster/Daemon.pm @@ -27,6 +27,7 @@ use constant FORMAT_EXTENSION => { GOLFSCRIPT => 'gs', HASKELL => 'hs', JAVA => 'java', + JAVASCRIPT => 'js', JULIA => 'jl', MONO => 'cs', OBERON => 'm', diff --git a/t/01-jobs.t b/t/01-jobs.t index 0bb2350..c37e081 100644 --- a/t/01-jobs.t +++ b/t/01-jobs.t @@ -26,6 +26,7 @@ use constant COMPILER => { GOLFSCRIPT golfscript MONO gmcs JAVA javac + JAVASCRIPT node JULIA julia PASCAL fpc GOLANG go @@ -40,7 +41,7 @@ use constant COMPILER => { OCAML ocaml SBCL sbcl/}; -my %needs_fork = map { $_ => 1 } qw/GOLANG GOLFSCRIPT GCCGO JAVA JULIA RUBY/; +my %needs_fork = map { $_ => 1 } qw/GOLANG GOLFSCRIPT GCCGO JAVA JAVASCRIPT JULIA RUBY SBCL/; my $loglevel = $ENV{TEST_LOG_LEVEL} // ($ENV{TEST_VERBOSE} ? 'TRACE' : 'OFF'); my $log_conf = <