[PATCH v2] testbot: Better wrap the database backend code.

Francois Gouget fgouget at codeweavers.com
Wed Jan 31 14:14:45 CST 2018


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 at codeweavers.com>
---

I moved the use ObjectModel::BackEnd after the package statement in this 
patch (that bit was in a later patch).

 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 827879cf..d6375647 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 6c5c813d..0bb48cf7 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);
- at EXPORT = qw(%ActiveBackEnds);
+ at 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 565d4a8e..b5bb485e 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 2ba6b4b5..bb9a8328 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 b46fa41d..20ff6b1e 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;
-- 
2.15.1



More information about the wine-devel mailing list