Fix the pure-perl in_global_destruction() emulation under threads
[dbsrgits/DBIx-Class-Historic.git] / t / 71mysql.t
index 3ed8493..b4f01f4 100644 (file)
@@ -299,8 +299,6 @@ NULLINSEARCH: {
       join => 'books', group_by => [ 'me.id', 'books.id' ]
     })->count();
   }, 'count on grouped columns with the same name does not throw');
-
-
 }
 
 ZEROINSEARCH: {
@@ -376,11 +374,15 @@ ZEROINSEARCH: {
 
   my $rs = $schema_autorecon->resultset('Artist');
 
+  my ($parent_in, $child_out);
+  pipe( $parent_in, $child_out ) or die "Pipe open failed: $!";
   my $pid = fork();
   if (! defined $pid ) {
     die "fork() failed: $!"
   }
   elsif ($pid) {
+    close $child_out;
+
     # sanity check
     $schema_autorecon->storage->dbh_do(sub {
       is ($_[1], $orig_dbh, 'Storage holds correct $dbh in parent');
@@ -397,18 +399,22 @@ ZEROINSEARCH: {
     }
   }
   else {
-    # wait for parent to kill its $dbh
-    sleep 1;
+    close $parent_in;
 
     #simulate a  subtest to not confuse the parent TAP emission
-    Test::More->builder->reset;
-    Test::More->builder->plan('no_plan');
-    Test::More->builder->_indent(' ' x 4);
+    my $tb = Test::More->builder;
+    $tb->reset;
+    for (qw/output failure_output todo_output/) {
+      close $tb->$_;
+      open ($tb->$_, '>&', $child_out);
+    }
+
+    # wait for parent to kill its $dbh
+    sleep 1;
 
     # try to do something dbic-esque
     $rs->create({ name => "Hardcore Forker $$" });
 
-
     TODO: {
       local $TODO = "Perl $] is known to leak like a sieve"
         if DBIx::Class::_ENV_::PEEPEENESS();
@@ -416,9 +422,13 @@ ZEROINSEARCH: {
       ok (! defined $orig_dbh, 'DBIC operation triggered reconnect - old $dbh is gone');
     }
 
+    done_testing;
     exit 0;
   }
 
+  while (my $ln = <$parent_in>) {
+    print "   $ln";
+  }
   wait;
   ok(!$?, 'Child subtests passed');