Committed by Greg Sabino Mullane <[email protected]>

Subject: [DBD::Pg 2/2] For testing setup:
* don't try so hard for a default connection: use initdb instead
* use pg_resetxlog to boost the oids super high
* handle case where the postgres user does not exist

---
 t/dbdpg_test_setup.pl |   42 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/t/dbdpg_test_setup.pl b/t/dbdpg_test_setup.pl
index 877e0ab..a49a37c 100644
--- a/t/dbdpg_test_setup.pl
+++ b/t/dbdpg_test_setup.pl
@@ -210,7 +210,7 @@ version: $version
 
        if (! $testdsn) {
                $helpconnect = 1;
-               $testdsn = $^O =~ /Win32/ ? 'dbi:Pg:host=localhost' : 'dbi:Pg:';
+#              $testdsn = $^O =~ /Win32/ ? 'dbi:Pg:host=localhost' : 'dbi:Pg:';
        }
        if (! $testuser) {
                $testuser = 'postgres';
@@ -223,7 +223,6 @@ version: $version
                                                                {RaiseError => 
1, PrintError => 0, AutoCommit => 1});
                };
                last GETHANDLE if ! $@; ## Made it!
-
                ## If the error was because of the user, try a few others
                if ($@ =~ /postgres/) {
 
@@ -395,6 +394,20 @@ version: $version
                        last GETHANDLE; ## Fail - bad output
                }
 
+               ## Attempt to boost the system oids above an int for certain 
testing
+               (my $resetxlog = $initdb) =~ s/initdb/pg_resetxlog/;
+               eval {
+                       $info = qx{$resetxlog --help};
+               };
+               if (! $@ and $info =~ /XID/) {
+                       if (! -e "$testdir/data/postmaster.pid") {
+                               eval {
+                                       $info = qx{ $resetxlog -o 2222333344 
$testdir/data };
+                               };
+                               ## We don't really care if it worked or not!
+                       }
+               }
+
                ## Which user do we connect as?
                if (!$su and $info =~ /owned by user "(.+?)"/) {
                        $testuser = $1;
@@ -531,8 +544,10 @@ version: $version
                        };
                        ## Regardless of the error, try again.
                        ## We used to check the message, but LANG problems may 
complicate that.
-
                        if ($@) {
+
+                               $debug and diag qq{Connection error: $@\n};
+
                                if ($@ =~ /database "postgres" does not exist/) 
{
                                        ## Old server, so let's create a 
postgres database manually
                                        sleep 2;
@@ -541,12 +556,29 @@ version: $version
                                                $dbh = DBI->connect($tempdsn, 
$testuser, '',
                                                                                
        {RaiseError => 1, PrintError => 0, AutoCommit => 1});
                                        };
-                                       $dbh->do('CREATE DATABASE postgres');
-                                       $dbh->disconnect();
                                        if ($@) {
                                                die "Could not connect: $@\n";
                                        }
+                                       $dbh->do('CREATE DATABASE postgres');
+                                       $dbh->disconnect();
+                               }
+
+                               if ($@ =~ /role "postgres" does not exist/) {
+                                       ## Probably just created with the 
current user, so use that
+                                       if (exists $ENV{USER} and length 
$ENV{USER}) {
+                                               $debug and diag qq{Switched to 
new user: $testuser\n};
+                                               eval {
+                                                       $dbh = 
DBI->connect($testdsn, $ENV{USER}, '',
+                                                                               
                {RaiseError => 1, PrintError => 0, AutoCommit => 1});
+                                               };
+                                               if ($@) {
+                                                       die "Could not connect: 
$@\n";
+                                               }
+                                               $dbh->do('CREATE USER postgres 
SUPERUSER');
+                                               $dbh->disconnect();
+                                       }
                                }
+
                                if ($loop++ < 5) {
                                        sleep 1;
                                        redo STARTUP;
-- 
1.7.1

Reply via email to