Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Germann <Ulrich.Germann@gmail.com>2015-11-20 17:47:59 +0300
committerUlrich Germann <Ulrich.Germann@gmail.com>2015-11-20 17:47:59 +0300
commit752ac68d08fe3dcede6f4a382034d2a4bebf6241 (patch)
tree529bd4324bab017467c158ebc794625c57a8adb4 /regression-testing
parentc6eca2ec87d9bb88e92bebf7957333ad9d369347 (diff)
parent42c57d077b6090dff58a74023eb05e1c7161b04f (diff)
Merge branch 'moses-server-placeholder-patch' of https://github.com/ebay-hlt/mosesdecoder into ebay-hlt-moses-server-placeholder-patch
Conflicts: regression-testing/Jamfile run-regtests.sh
Diffstat (limited to 'regression-testing')
-rw-r--r--regression-testing/Jamfile7
-rwxr-xr-xregression-testing/run-single-test.perl79
2 files changed, 83 insertions, 3 deletions
diff --git a/regression-testing/Jamfile b/regression-testing/Jamfile
index a6834b805..97e21927e 100644
--- a/regression-testing/Jamfile
+++ b/regression-testing/Jamfile
@@ -1,6 +1,7 @@
import option path ;
with-regtest = [ option.get "with-regtest" ] ;
+with-xmlrpc = [ option.get "with-xmlrpc-c" ] ;
if $(with-regtest) {
with-regtest = [ path.root $(with-regtest) [ path.pwd ] ] ;
@@ -24,6 +25,12 @@ if $(with-regtest) {
actions reg_test_decode {
$(TOP)/regression-testing/run-single-test.perl --decoder=$(>) --test=$(<:B) --data-dir=$(with-regtest) --test-dir=$(test-dir) && touch $(<)
}
+
+ if $(with-xmlrpc) {
+ actions reg_test_decode_server {
+ $(TOP)/regression-testing/run-single-test.perl --server --decoder=$(>) --test=$(<:B) --data-dir=$(with-regtest) --test-dir=$(test-dir) && touch $(<)
+ }
+ reg_test phrase-server : [ glob $(test-dir)/phrase-server.* ] : ../moses-cmd//moses : @reg_test_decode_server ;
reg_test phrase : [ glob $(test-dir)/phrase.* : $(test-dir)/*withDALM ] : ../moses-cmd//moses : @reg_test_decode ;
reg_test chart : [ glob $(test-dir)/chart.* : $(test-dir)/*withDALM ] : ../moses-cmd//moses : @reg_test_decode ;
if [ option.get "with-dalm" : : "yes" ] {
diff --git a/regression-testing/run-single-test.perl b/regression-testing/run-single-test.perl
index 94a247e46..c99165247 100755
--- a/regression-testing/run-single-test.perl
+++ b/regression-testing/run-single-test.perl
@@ -2,6 +2,8 @@
# $Id$
+use Encode;
+use utf8;
use warnings;
use strict;
my $script_dir; BEGIN { use Cwd qw/ abs_path /; use File::Basename; $script_dir = dirname(abs_path($0)); push @INC, $script_dir; }
@@ -9,6 +11,7 @@ use MosesRegressionTesting;
use Getopt::Long;
use File::Temp qw ( tempfile );
use POSIX qw ( strftime );
+use POSIX ":sys_wait_h";
my @SIGS = qw ( SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGABRT SIGIOT SIGBUS SIGFPE SIGKILL SIGUSR1 SIGSEGV SIGUSR2 SIGPIPE SIGALRM SIGTERM SIGSTKFLT SIGCHLD SIGCONT SIGSTOP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGXCPU SIGXFSZ SIGVTALRM SIGPROF SIGWINCH SIGIO SIGPWR SIGSYS SIGUNUSED SIGRTMIN );
my ($decoder, $test_name);
@@ -17,14 +20,31 @@ my $data_dir;
my $BIN_TEST = $script_dir;
my $results_dir;
my $NBEST = 0;
-
+my $run_server_test = 0;
+my $serverport = int(rand(9999)) + 10001;
+my $url = "http://localhost:$serverport/RPC2";
+my $startupTest = 0;
GetOptions("decoder=s" => \$decoder,
"test=s" => \$test_name,
"data-dir=s"=> \$data_dir,
"test-dir=s"=> \$test_dir,
"results-dir=s"=> \$results_dir,
+ "server"=> \$run_server_test,
+ "startuptest"=> \$startupTest
) or exit 1;
+if($run_server_test)
+{
+ eval {
+ require XMLRPC::Lite;
+ import XMLRPC::Lite;
+ };
+ if ($@) {
+ die "Error: XMLRPC::Lite not installed, moses server regression tests will not be run. $@";
+ }
+ exit(0) if($startupTest);
+}
+
die "Please specify a decoder with --decoder\n" unless $decoder;
die "Please specify a test to run with --test\n" unless $test_name;
@@ -72,8 +92,13 @@ if (!-d $truth) {
}
print "RESULTS AVAILABLE IN: $results\n\n";
-
-my ($o, $elapsed, $ec, $sig) = exec_moses($decoder, $local_moses_ini, $input, $results);
+my ($o, $elapsed, $ec, $sig);
+if($run_server_test) {
+ ($o, $elapsed, $ec, $sig) = exec_moses_server($decoder, $local_moses_ini, $input, $results);
+}
+else {
+ ($o, $elapsed, $ec, $sig) = exec_moses($decoder, $local_moses_ini, $input, $results);
+}
my $error = ($sig || $ec > 0);
if ($error) {
open OUT, ">$results/Summary";
@@ -139,6 +164,54 @@ sub exec_moses {
return ($o, $elapsed, $ec, $sig);
}
+sub exec_moses_server {
+ my ($decoder, $conf, $input, $results) = @_;
+ my $start_time = time;
+ my ($o, $ec, $sig);
+ $ec = 0; $sig = 0; $o = 0;
+ my $pid = fork();
+ if (not defined $pid) {
+ warn "resources not avilable to fork Moses server\n";
+ $ec = 1; # to generate error
+ } elsif ($pid == 0) {
+ setpgrp(0, 0);
+ warn "Starting Moses server on port $serverport ...\n";
+ ($o, $ec, $sig) = run_command("$decoder --server --server-port $serverport -f $conf -verbose 2 --server-log $results/run.stderr.server 2> $results/run.stderr ");
+ exit;
+ # this should not be reached unless the server fails to start
+ }
+ while( 1==1 ) # wait until the server is listening for requests
+ {
+ sleep 5;
+ my $str = `grep "Listening on port $serverport" $results/run.stderr`;
+ last if($str =~ /Listening/);
+ }
+ my $proxy = XMLRPC::Lite->proxy($url);
+ warn "Opening file $input to write to $results\n";
+ open(TEXTIN, "$input") or die "Can not open the input file to translate with Moses server\n";
+ binmode TEXTIN, ':utf8';
+ open(TEXTOUT, ">$results/run.stdout");
+ binmode TEXTOUT, ':utf8';
+ while(<TEXTIN>)
+ {
+ chop;
+ my $encoded = SOAP::Data->type(string => $_); # NOTE: assuming properly encoded UTF-8 input: check tests before adding them!
+ my %param = ("text" => $encoded);
+ my $result = $proxy->call("translate",\%param)->result;
+ print TEXTOUT $result->{'text'} . "\n";
+ }
+ close(TEXTIN);
+ close(TEXTOUT);
+ my $elapsed = time - $start_time;
+ print STDERR "Finished translating file $input\n";
+ if(waitpid($pid, WNOHANG) <= 0)
+ {
+ warn "Killing process group $pid of the $decoder --server ... \n";
+ kill 9, -$pid;
+ }
+ return ($o, $elapsed, $ec, $sig);
+}
+
sub run_command {
my ($cmd) = @_;
my $o = `$cmd`;