Fix more taint.t failures under local::lib
Peter Rabbitson [Wed, 25 May 2016 15:14:23 +0000 (17:14 +0200)]
Add a CI run under l::l (when POISON_ENV is set) to weed this problem out
once and for all

Also relegate the test to xt/ - it will still run on smokers given 554484cb
and has no value failing on an end-user system (CI runs the entire suite
under prove -T anyhow)

Changes
maint/travis-ci_scripts/20_install.bash
maint/travis-ci_scripts/30_before_script.bash
t/lib/DBICTest/WithTaint.pm
xt/dist/strictures.t
xt/extra/taint.t [moved from t/54taint.t with 96% similarity]

diff --git a/Changes b/Changes
index 871b012..fb7673d 100644 (file)
--- a/Changes
+++ b/Changes
@@ -81,6 +81,7 @@ Revision history for DBIx::Class
     * Misc
         - Add explicit test for pathological example of asymmetric IC::DT setup
           working with copy() in t/icdt/engine_specific/sybase.t (GH#84)
+        - Fix t/54taint.t failing on local::lib's with upgraded Carp on 5.8.*
         - Fix invalid variable names in ResultSource::View examples
         - Typo fixes from downstream debian packagers (RT#112007)
         - Skip tests in a way more intelligent and speedy manner when optional
index d5d3481..4fc50d0 100755 (executable)
@@ -64,6 +64,13 @@ elif [[ "$CLEANTEST" == "true" ]] && [[ "$POISON_ENV" != "true" ]] ; then
   purge_sitelib
 fi
 
+if [[ "$POISON_ENV" = "true" ]] ; then
+  # create a perlbrew-specific local lib
+  perlbrew lib create travis-local
+  perlbrew use "$( perlbrew use | grep -oP '(?<=Currently using ).+' )@travis-local"
+  echo_err "POISON_ENV active - adding a local lib: $(perlbrew use)"
+fi
+
 # configure CPAN.pm - older versions go into an endless loop
 # when trying to autoconf themselves
 CPAN_CFG_SCRIPT="
index 2a8b0d7..f590ff0 100755 (executable)
@@ -35,8 +35,20 @@ if [[ "$MVDT" == "true" ]] ; then
     # the fulltest may re-upgrade DBI, be conservative only on cleantests
     # earlier DBI will not compile without PERL_POLLUTE which was gone in 5.14
     parallel_installdeps_notest T/TI/TIMB/DBI-1.614.tar.gz
+
+    # FIXME work around DBD::DB2 being silly: https://rt.cpan.org/Ticket/Display.html?id=101659
+    if [[ -n "$DBICTEST_DB2_DSN" ]] ; then
+      echo_err "Installing same DBI version into the main perl (above the current local::lib)"
+      $SHELL -lic "perlbrew use $( perlbrew use | grep -oP '(?<=Currently using )[^@]+' ) && parallel_installdeps_notest T/TI/TIMB/DBI-1.614.tar.gz"
+    fi
   else
     parallel_installdeps_notest T/TI/TIMB/DBI-1.57.tar.gz
+
+    # FIXME work around DBD::DB2 being silly: https://rt.cpan.org/Ticket/Display.html?id=101659
+    if [[ -n "$DBICTEST_DB2_DSN" ]] ; then
+      echo_err "Installing same DBI version into the main perl (above the current local::lib)"
+      $SHELL -lic "perlbrew use $( perlbrew use | grep -oP '(?<=Currently using )[^@]+' ) && parallel_installdeps_notest T/TI/TIMB/DBI-1.57.tar.gz"
+    fi
   fi
 
   # Test both minimum DBD::SQLite and minimum BigInt SQLite
index abad25d..b3cd66c 100644 (file)
@@ -1,4 +1,3 @@
-# keep stricture tests happy
-use strict;
-use warnings;
+package DBICTest::WithTaint;
+
 1;
index 93feda8..8d15f12 100644 (file)
@@ -41,6 +41,8 @@ find({
     return if m{^(?:
       maint/Makefile.PL.inc/.+                        # all the maint inc snippets are auto-strictured
         |
+      t/lib/DBICTest/WithTaint.pm                     # no stictures by design (trips up local::lib on older perls)
+        |
       t/lib/DBICTest/Util/OverrideRequire.pm          # no stictures by design (load order sensitive)
         |
       t/lib/ANFANG.pm                                 # no stictures by design (load speed sensitive)
similarity index 96%
rename from t/54taint.t
rename to xt/extra/taint.t
index fbf0286..e8c6af1 100644 (file)
@@ -1,8 +1,22 @@
 BEGIN { $ENV{DBICTEST_ANFANG_DEFANG} = 1 }
 
+# When in taint mode, PERL5LIB is ignored (but *not* unset)
+# Put it back in INC so that local-lib users can actually
+# run this test. Use lib.pm instead of an @INC unshift as
+# it will correctly add any arch subdirs encountered
+#
+# Yes, this is a lazy solution: adding -I args in the exec below is the
+# more sensible approach, but no time to properly do it at present
+use Config;
+use lib (
+  grep { length }
+    map { split /\Q$Config{path_sep}\E/, (/^(.*)$/)[0] }  # untainting regex
+      grep { defined }
+        @ENV{qw(PERL5LIB PERLLIB)}  # precedence preserved by lib
+);
+
 use strict;
 use warnings;
-use Config;
 
 # there is talk of possible perl compilations where -T is fatal or just
 # doesn't work. We don't want to have the user deal with that.
@@ -45,18 +59,6 @@ BEGIN { unless ($INC{'t/lib/DBICTest/WithTaint.pm'}) {
   exec( $perl, qw( -I. -Mt::lib::DBICTest::WithTaint -T ), __FILE__ );
 }}
 
-# When in taint mode, PERL5LIB is ignored (but *not* unset)
-# Put it back in INC so that local-lib users can actually
-# run this test. Use lib.pm instead of an @INC unshift as
-# it will correctly add any arch subdirs encountered
-
-use lib (
-  grep { length }
-    map { split /\Q$Config{path_sep}\E/, (/^(.*)$/)[0] }  # untainting regex
-      grep { defined }
-        @ENV{qw(PERL5LIB PERLLIB)}  # precedence preserved by lib
-);
-
 # We need to specify 'lib' here as well because even if it was already in
 # @INC, the above will have put our local::lib in front of it, so now an
 # installed DBIx::Class will take precedence over the one we're trying to test.