[2/6] testbot/build: Clean up FatalError() and stop abusing it.
Francois Gouget
fgouget at codeweavers.com
Wed Mar 13 10:51:01 CDT 2013
If not given an error file and a task it's equivalent to a simple LogMsg() + exit().
---
testbot/bin/WineRunBuild.pl | 91 +++++++++++++++++++---------------------
testbot/bin/WineRunReconfig.pl | 85 ++++++++++++++++++-------------------
testbot/bin/WineRunTask.pl | 90 ++++++++++++++++++---------------------
3 files changed, 125 insertions(+), 141 deletions(-)
diff --git a/testbot/bin/WineRunBuild.pl b/testbot/bin/WineRunBuild.pl
index 728777a..7fd87b2 100755
--- a/testbot/bin/WineRunBuild.pl
+++ b/testbot/bin/WineRunBuild.pl
@@ -4,6 +4,7 @@
# See the bin/build/Build.pl script.
#
# Copyright 2009 Ge van Geldorp
+# Copyright 2013 Francois Gouget
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -41,38 +42,29 @@ use WineTestBot::Jobs;
use WineTestBot::Log;
use WineTestBot::Engine::Notify;
-sub FatalError
+sub FatalError($$$$)
{
- my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
- my $JobKey = defined($Job) ? $Job->GetKey() : "0";
- my $StepKey = defined($Step) ? $Step->GetKey() : "0";
- my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+ my ($ErrMessage, $FullErrFileName, $Job, $Task) = @_;
+ my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
- if ($RptFileName)
- {
- my $RPTFILE;
- if (open RPTFILE, ">>$RptFileName")
- {
- print RPTFILE $ErrMessage;
- close RPTFILE;
- }
- }
- if ($Task)
+ if (open(my $ErrFile, ">>", $FullErrFileName))
{
- $Task->Status("failed");
- $Task->Ended(time);
- $Task->Save();
- $Job->UpdateStatus();
+ print $ErrFile $ErrMessage;
+ close($ErrFile);
+ }
- $Task->VM->Status('dirty');
- $Task->VM->Save();
+ $Task->Status("failed");
+ $Task->Ended(time);
+ $Task->Save();
+ $Job->UpdateStatus();
- TaskComplete($JobKey, $StepKey, $TaskKey);
- }
+ my $VM = $Task->VM;
+ $VM->Status('dirty');
+ $VM->Save();
+ TaskComplete($JobKey, $StepKey, $TaskKey);
exit 1;
}
@@ -141,7 +133,8 @@ if ($JobId =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid JobId $JobId\n";
+ LogMsg "Invalid JobId $JobId\n";
+ exit 1;
}
if ($StepNo =~ /^(\d+)$/)
{
@@ -149,7 +142,8 @@ if ($StepNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid StepNo $StepNo\n";
+ LogMsg "Invalid StepNo $StepNo\n";
+ exit 1;
}
if ($TaskNo =~ /^(\d+)$/)
{
@@ -157,23 +151,27 @@ if ($TaskNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid TaskNo $TaskNo\n";
+ LogMsg "Invalid TaskNo $TaskNo\n";
+ exit 1;
}
my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
{
- FatalError "Job $JobId doesn't exist\n";
+ LogMsg "Job $JobId doesn't exist\n";
+ exit 1;
}
my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
{
- FatalError "Step $StepNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+ exit 1;
}
my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
{
- FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ exit 1;
}
umask(002);
@@ -201,10 +199,10 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
my $OtherFileName = $OtherStep->FileName;
if ($OtherFileName =~ m/^([\w_\-]+)(|\.exe)_test(|64)\.exe$/)
{
- if (defined($BaseName) && $BaseName ne $1)
+ if (defined $BaseName && $BaseName ne $1)
{
FatalError "$1 doesn't match previously found $BaseName\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
$BaseName = $1;
if ($OtherStep->FileType eq "exe64")
@@ -216,15 +214,13 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
}
if (! defined($BaseName))
{
- FatalError "Can't determine base name\n",
- $FullErrFileName, $Job, $Step, $Task;
+ FatalError "Can't determine base name\n", $FullErrFileName, $Job, $Task;
}
my $ErrMessage = $Step->HandleStaging($JobId);
if (defined($ErrMessage))
{
- FatalError "$ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ FatalError "$ErrMessage\n", $FullErrFileName, $Job, $Task;
}
$VM->Status('running');
@@ -233,14 +229,14 @@ my $ErrProperty;
if (defined($ErrMessage))
{
FatalError "Can't set VM status to running: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
my $FileName = $Step->FileName;
if (!$TA->SendFile("$StepDir/$FileName", "staging/$FileName", 0))
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't copy patch to VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
my $Script = "#!/bin/sh\n" .
"rm -f Build.log\n" .
@@ -252,7 +248,7 @@ if (!$TA->SendFileFromString($Script, "task", $TestAgent::SENDFILE_EXE))
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't send the script to VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
my $Pid = $TA->Run(["./task"], 0);
if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
@@ -265,14 +261,14 @@ if (defined($ErrMessage))
$TA->GetFile("Build.log", $FullRawlogFileName);
ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
FatalError "Failure running script in VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
if (!$TA->GetFile("Build.log", $FullRawlogFileName))
{
$ErrMessage = $TA->GetLastError();
- FatalError "Can't copy log from VM: $ErrMessage\n", $FullErrFileName,
- $Job, $Step, $Task;
+ FatalError "Can't copy log from VM: $ErrMessage\n",
+ $FullErrFileName, $Job, $Task;
}
my $NewStatus = ProcessRawlog($FullRawlogFileName, $FullLogFileName,
$FullErrFileName) ? "completed" : "failed";
@@ -301,7 +297,7 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't copy generated executable from VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
chmod 0664, "$OtherStepDir/$OtherFileName";
}
@@ -324,5 +320,4 @@ $Job = undef;
TaskComplete($JobId, $StepNo, $TaskNo);
LogMsg "Task $JobId/$StepNo/$TaskNo completed\n";
-
-exit;
+exit 0;
diff --git a/testbot/bin/WineRunReconfig.pl b/testbot/bin/WineRunReconfig.pl
index 18d8c69..7588045 100755
--- a/testbot/bin/WineRunReconfig.pl
+++ b/testbot/bin/WineRunReconfig.pl
@@ -4,6 +4,7 @@
# See the bin/build/Reconfig.pl script.
#
# Copyright 2009 Ge van Geldorp
+# Copyright 2013 Francois Gouget
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -41,38 +42,29 @@ use WineTestBot::Jobs;
use WineTestBot::Log;
use WineTestBot::Engine::Notify;
-sub FatalError
+sub FatalError($$$$)
{
- my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
- my $JobKey = defined($Job) ? $Job->GetKey() : "0";
- my $StepKey = defined($Step) ? $Step->GetKey() : "0";
- my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+ my ($ErrMessage, $FullErrFileName, $Job, $Task) = @_;
+ my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
- if ($RptFileName)
- {
- my $RPTFILE;
- if (open RPTFILE, ">>$RptFileName")
- {
- print RPTFILE $ErrMessage;
- close RPTFILE;
- }
- }
- if ($Task)
+ if (open(my $ErrFile, ">>", $FullErrFileName))
{
- $Task->Status("failed");
- $Task->Ended(time);
- $Task->Save();
- $Job->UpdateStatus();
+ print $ErrFile $ErrMessage;
+ close($ErrFile);
+ }
- $Task->VM->Status('dirty');
- $Task->VM->Save();
+ $Task->Status("failed");
+ $Task->Ended(time);
+ $Task->Save();
+ $Job->UpdateStatus();
- TaskComplete($JobKey, $StepKey, $TaskKey);
- }
+ my $VM = $Task->VM;
+ $VM->Status('dirty');
+ $VM->Save();
+ TaskComplete($JobKey, $StepKey, $TaskKey);
exit 1;
}
@@ -141,7 +133,8 @@ if ($JobId =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid JobId $JobId\n";
+ LogMsg "Invalid JobId $JobId\n";
+ exit 1;
}
if ($StepNo =~ /^(\d+)$/)
{
@@ -149,7 +142,8 @@ if ($StepNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid StepNo $StepNo\n";
+ LogMsg "Invalid StepNo $StepNo\n";
+ exit 1;
}
if ($TaskNo =~ /^(\d+)$/)
{
@@ -157,23 +151,27 @@ if ($TaskNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid TaskNo $TaskNo\n";
+ LogMsg "Invalid TaskNo $TaskNo\n";
+ exit 1;
}
my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
{
- FatalError "Job $JobId doesn't exist\n";
+ LogMsg "Job $JobId doesn't exist\n";
+ exit 1;
}
my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
{
- FatalError "Step $StepNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+ exit 1;
}
my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
{
- FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ exit 1;
}
umask(002);
@@ -197,7 +195,7 @@ my ($ErrProperty, $ErrMessage) = $VM->Save();
if (defined($ErrMessage))
{
FatalError "Can't set VM status to running: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
my $Script = "#!/bin/sh\n" .
"rm -f Reconfig.log\n" .
@@ -206,7 +204,7 @@ if (!$TA->SendFileFromString($Script, "task", $TestAgent::SENDFILE_EXE))
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't send the script to VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
my $Pid = $TA->Run(["./task"], 0);
if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
@@ -219,14 +217,14 @@ if (defined($ErrMessage))
$TA->GetFile("Reconfig.log", $FullRawlogFileName);
ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
FatalError "Failure running script in VM: $ErrMessage\n",
- $FullErrFileName, $Job, $Step, $Task;
+ $FullErrFileName, $Job, $Task;
}
if (!$TA->GetFile("Reconfig.log", $FullRawlogFileName))
{
$ErrMessage = $TA->GetLastError();
- FatalError "Can't copy log from VM: $ErrMessage\n", $FullErrFileName,
- $Job, $Step, $Task;
+ FatalError "Can't copy log from VM: $ErrMessage\n",
+ $FullErrFileName, $Job, $Task;
}
$TA->Disconnect();
@@ -237,15 +235,15 @@ if ($Success)
$ErrMessage = $VM->RemoveSnapshot($VM->IdleSnapshot);
if (defined($ErrMessage))
{
- FatalError "Can't remove snapshot: $ErrMessage\n", $FullErrFileName,
- $Job, $Step, $Task;
+ FatalError "Can't remove snapshot: $ErrMessage\n",
+ $FullErrFileName, $Job, $Task;
}
$ErrMessage = $VM->CreateSnapshot($VM->IdleSnapshot);
if (defined($ErrMessage))
{
- FatalError "Can't take snapshot: $ErrMessage\n", $FullErrFileName,
- $Job, $Step, $Task;
+ FatalError "Can't take snapshot: $ErrMessage\n",
+ $FullErrFileName, $Job, $Task;
}
$VM->Status("idle");
@@ -270,5 +268,4 @@ $Job = undef;
TaskComplete($JobId, $StepNo, $TaskNo);
LogMsg "Task $JobId/$StepNo/$TaskNo completed\n";
-
-exit;
+exit 0;
diff --git a/testbot/bin/WineRunTask.pl b/testbot/bin/WineRunTask.pl
index 73d60ba..ffbb421 100755
--- a/testbot/bin/WineRunTask.pl
+++ b/testbot/bin/WineRunTask.pl
@@ -41,53 +41,40 @@ use WineTestBot::Jobs;
use WineTestBot::Log;
use WineTestBot::Engine::Notify;
-sub FatalError
+sub FatalError($$$$$)
{
- my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
- my $JobKey = defined($Job) ? $Job->GetKey() : "0";
- my $StepKey = defined($Step) ? $Step->GetKey() : "0";
- my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+ my ($ErrMessage, $FullErrFileName, $Job, $Step, $Task) = @_;
+ my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
- if ($Task)
+ my $OldUMask = umask(002);
+ if (open(my $ErrFile, ">>", $FullErrFileName))
{
- $Task->Status("failed");
- $Task->Ended(time);
- $Task->Save();
- $Job->UpdateStatus();
-
- if ($Task->VM->Role ne "base")
- {
- $Task->VM->PowerOff();
- }
- $Task->VM->Status('dirty');
- $Task->VM->Save();
+ print $ErrFile $ErrMessage;
+ close($ErrFile);
}
+ umask($OldUMask);
- if ($RptFileName)
+ if ($Step->Type eq "suite")
{
- my $RPTFILE;
- my $OldUMask = umask(002);
- if (open RPTFILE, ">>$RptFileName")
- {
- print RPTFILE $ErrMessage;
- close RPTFILE;
- }
- umask($OldUMask);
-
- if ($Task && $Step->Type eq "suite")
- {
- my $LatestName = "$DataDir/latest/" . $Task->VM->Name . "_" .
- ($Step->FileType eq "exe64" ? "64" : "32") . ".err";
- unlink($LatestName);
- link($RptFileName, $LatestName);
- }
+ my $LatestName = "$DataDir/latest/" . $Task->VM->Name . "_" .
+ ($Step->FileType eq "exe64" ? "64" : "32") . ".err";
+ unlink($LatestName);
+ link($FullErrFileName, $LatestName);
}
- TaskComplete($JobKey, $StepKey, $TaskKey);
+ $Task->Status("failed");
+ $Task->Ended(time);
+ $Task->Save();
+ $Job->UpdateStatus();
+
+ my $VM = $Task->VM;
+ $VM->PowerOff() if ($VM->Role ne "base");
+ $VM->Status('dirty');
+ $VM->Save();
+ TaskComplete($JobKey, $StepKey, $TaskKey);
exit 1;
}
@@ -158,7 +145,8 @@ if ($JobId =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid JobId $JobId\n";
+ LogMsg "Invalid JobId $JobId\n";
+ exit 1;
}
if ($StepNo =~ /^(\d+)$/)
{
@@ -166,7 +154,8 @@ if ($StepNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid StepNo $StepNo\n";
+ LogMsg "Invalid StepNo $StepNo\n";
+ exit 1;
}
if ($TaskNo =~ /^(\d+)$/)
{
@@ -174,23 +163,27 @@ if ($TaskNo =~ /^(\d+)$/)
}
else
{
- FatalError "Invalid TaskNo $TaskNo\n";
+ LogMsg "Invalid TaskNo $TaskNo\n";
+ exit 1;
}
my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
{
- FatalError "Job $JobId doesn't exist\n";
+ LogMsg "Job $JobId doesn't exist\n";
+ exit 1;
}
my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
{
- FatalError "Step $StepNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+ exit 1;
}
my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
{
- FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+ exit 1;
}
my $oldumask = umask(002);
@@ -333,8 +326,8 @@ if (defined($ErrMessage))
}
if (defined($LogErrMessage))
{
- FatalError "Can't copy log from VM: $LogErrMessage\n", $FullErrFileName,
- $Job, $Step, $Task;
+ FatalError "Can't copy log from VM: $LogErrMessage\n",
+ $FullErrFileName, $Job, $Step, $Task;
}
$TA->Disconnect();
@@ -370,5 +363,4 @@ $Job = undef;
TaskComplete($JobId, $StepNo, $TaskNo);
LogMsg "Task $JobId/$StepNo/$TaskNo (" . $VM->Name . ") completed\n";
-
-exit;
+exit 0;
--
1.7.10.4
More information about the wine-patches
mailing list