Module: tools
Branch: master
Commit: 5eae1aa1c9875e783a52603c42d1e5d61a0d46bb
URL: https://source.winehq.org/git/tools.git/?a=commit;h=5eae1aa1c9875e783a52603…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Wed Jan 31 21:14:45 2018 +0100
testbot: Better wrap the database backend code.
ObjectModel::BackEnd no longer exposes its global active backends
variable.
Also provide a way to close all database connections so the code does
not have to assume we only have the 'WineTestBot' one which would defeat
the point of the BackEnd module.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
testbot/bin/Engine.pl | 4 ++--
testbot/lib/ObjectModel/BackEnd.pm | 33 +++++++++++++++++++++++++--
testbot/lib/ObjectModel/DBIBackEnd.pm | 16 ++++++-------
testbot/lib/WineTestBot/VMs.pm | 4 ++--
testbot/lib/WineTestBot/WineTestBotObjects.pm | 4 ++--
5 files changed, 45 insertions(+), 16 deletions(-)
diff --git a/testbot/bin/Engine.pl b/testbot/bin/Engine.pl
index 827879c..d637564 100755
--- a/testbot/bin/Engine.pl
+++ b/testbot/bin/Engine.pl
@@ -309,8 +309,8 @@ sub HandleJobStatusChange($$$)
if ($OldStatus eq "running" && $NewStatus ne "running")
{
- # Make sure the child process does not inherit the database connection
- $ActiveBackEnds{'WineTestBot'}->Close();
+ # Make sure the child process does not inherit the database connections
+ CloseAllDBBackEnds();
my $Pid = fork;
if (!defined $Pid)
diff --git a/testbot/lib/ObjectModel/BackEnd.pm b/testbot/lib/ObjectModel/BackEnd.pm
index 6c5c813..0bb48cf 100644
--- a/testbot/lib/ObjectModel/BackEnd.pm
+++ b/testbot/lib/ObjectModel/BackEnd.pm
@@ -30,11 +30,11 @@ should provide.
=cut
-use vars qw(@ISA @EXPORT %ActiveBackEnds);
+use vars qw(@ISA @EXPORT);
require Exporter;
@ISA = qw(Exporter);
-@EXPORT = qw(%ActiveBackEnds);
+@EXPORT = qw(&AddDBBackEnd &GetDBBackEnd &RemoveDBBackEnd &CloseAllDBBackEnds);
sub new($@)
{
@@ -51,4 +51,33 @@ sub _initialize($)
#my ($self) = @_;
}
+
+my %_ActiveBackEnds;
+
+sub AddDBBackEnd($$)
+{
+ my ($Name, $BackEnd) = @_;
+ $_ActiveBackEnds{$Name} = $BackEnd;
+}
+
+sub GetDBBackEnd($)
+{
+ my ($Name) = @_;
+ return $_ActiveBackEnds{$Name};
+}
+
+sub RemoveDBBackEnd($)
+{
+ my ($Name) = @_;
+ delete $_ActiveBackEnds{$Name};
+}
+
+sub CloseAllDBBackEnds()
+{
+ foreach my $BackEnd (values %_ActiveBackEnds)
+ {
+ $BackEnd->Close();
+ }
+}
+
1;
diff --git a/testbot/lib/ObjectModel/DBIBackEnd.pm b/testbot/lib/ObjectModel/DBIBackEnd.pm
index 565d4a8..b5bb485 100644
--- a/testbot/lib/ObjectModel/DBIBackEnd.pm
+++ b/testbot/lib/ObjectModel/DBIBackEnd.pm
@@ -18,9 +18,6 @@
use strict;
-use DBI;
-use ObjectModel::BackEnd;
-
package ObjectModel::DBIBackEnd;
=head1 NAME
@@ -33,8 +30,11 @@ ObjectModel::BackEnd
=cut
+use DBI;
use Time::Local;
+use ObjectModel::BackEnd;
+
use vars qw(@ISA @EXPORT);
require Exporter;
@@ -604,12 +604,12 @@ sub Close($)
}
}
-sub UseDBIBackEnd($$@)
+sub UseDBIBackEnd($$$$$$)
{
- my $class = shift;
- my $DbSelector = shift;
+ my ($class, $DbSelector, $DbSource, $DbUser, $DbPassword, $DbArgs) = @_;
- $ObjectModel::BackEnd::ActiveBackEnds{$DbSelector} = $class->new();
- $ObjectModel::BackEnd::ActiveBackEnds{$DbSelector}->{ConnectArgs} = \@_;
+ my $BackEnd = $class->new();
+ $BackEnd->{ConnectArgs} = [$DbSource, $DbUser, $DbPassword, $DbArgs];
+ AddDBBackEnd($DbSelector, $BackEnd);
}
1;
diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm
index 2ba6b4b..bb9a832 100644
--- a/testbot/lib/WineTestBot/VMs.pm
+++ b/testbot/lib/WineTestBot/VMs.pm
@@ -344,8 +344,8 @@ sub Run($$$$$)
# So set ChildPid in the parent and synchronize with the child so it only
# starts once this is done.
- # Make sure the child process will use its own database connection
- $self->GetBackEnd()->Close();
+ # Make sure the child process will use its own database connections
+ CloseAllDBBackEnds();
use Fcntl;
my ($fd_read, $fd_write);
diff --git a/testbot/lib/WineTestBot/WineTestBotObjects.pm b/testbot/lib/WineTestBot/WineTestBotObjects.pm
index b46fa41..20ff6b1 100644
--- a/testbot/lib/WineTestBot/WineTestBotObjects.pm
+++ b/testbot/lib/WineTestBot/WineTestBotObjects.pm
@@ -37,7 +37,7 @@ require Exporter;
sub GetBackEnd($)
{
#my ($self) = @_;
- return $ActiveBackEnds{'WineTestBot'};
+ return GetDBBackEnd('WineTestBot');
}
@@ -61,7 +61,7 @@ require Exporter;
sub GetBackEnd($)
{
#my ($self) = @_;
- return $ActiveBackEnds{'WineTestBot'};
+ return GetDBBackEnd('WineTestBot');
}
1;