From 5f5a0a34556d0ae739f79d7c148d24fcf3ff8557 Mon Sep 17 00:00:00 2001 From: Kent Fredric Date: Wed, 3 Aug 2016 01:26:17 +1200 Subject: [PATCH] Fence of Network IO with NO_NETWORK_TESTING This is a workaround for #477 but doesn't actually fix the underlying issue, merely recognises that some vendors are smart enough to anticipate Network IO will fail and integrate this ENV var to quickly avoid it. This precedent was established by Test::RequiresInternet as a result of a CPANworkers discussion, and Gentoo is known to export this variable within its tooling by default as a result. This doesn't actually test that binding a socket/IP will work, but this fence should be tested anyway, because security measures could result in attempted socket/IP binds getting SIGKILLed ( Sandbox ) This commit hence addresses/fences only the problem cases listed in bug in depth. However, this commit targets to simply solve the known parts of the problem in the simplest way possible without any extra dependencies. The application of a BEGIN { } block and `print` was a design decision instead of using `Test::More` and `skip`, because the overhead of loading Test::More is quite high when you have lots of .t files, and Test2 further increases the load time. This load time is generally acceptable if you're actually running a dozen tests, but spinning up a full suite of Test::More to only then immediately exit with a skip is a lot of CPU load for relatively little benefit. --- t/Plack-Handler/standalone.t | 6 ++++++ t/Plack-Loader/shotgun.t | 6 ++++++ t/Plack-Middleware/component-leak.t | 7 +++++++ t/Plack-Middleware/error_document_streaming_app.t | 7 +++++++ t/Plack-Middleware/stacktrace/sigdie.t | 7 +++++++ t/Plack-Middleware/stacktrace/utf8.t | 7 +++++++ t/Plack-Middleware/urlmap_ports.t | 6 ++++++ t/Plack-Test/2args.t | 7 +++++++ t/Plack-Test/hello_server.t | 7 +++++++ t/Plack-Util/response_cb.t | 7 +++++++ 10 files changed, 67 insertions(+) diff --git a/t/Plack-Handler/standalone.t b/t/Plack-Handler/standalone.t index f5fcf266f..b42de16de 100644 --- a/t/Plack-Handler/standalone.t +++ b/t/Plack-Handler/standalone.t @@ -1,3 +1,9 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} use strict; use warnings; use Test::More; diff --git a/t/Plack-Loader/shotgun.t b/t/Plack-Loader/shotgun.t index cb7b95a7c..d9fe148ff 100644 --- a/t/Plack-Loader/shotgun.t +++ b/t/Plack-Loader/shotgun.t @@ -1,3 +1,9 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} use strict; use warnings; use Test::More; diff --git a/t/Plack-Middleware/component-leak.t b/t/Plack-Middleware/component-leak.t index 7cdab9914..2acedd017 100644 --- a/t/Plack-Middleware/component-leak.t +++ b/t/Plack-Middleware/component-leak.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + package MyComponent; use strict; use warnings; diff --git a/t/Plack-Middleware/error_document_streaming_app.t b/t/Plack-Middleware/error_document_streaming_app.t index b177c536f..c893e7bfc 100644 --- a/t/Plack-Middleware/error_document_streaming_app.t +++ b/t/Plack-Middleware/error_document_streaming_app.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use strict; use warnings; use FindBin; diff --git a/t/Plack-Middleware/stacktrace/sigdie.t b/t/Plack-Middleware/stacktrace/sigdie.t index dc82b2c74..28747cf1e 100644 --- a/t/Plack-Middleware/stacktrace/sigdie.t +++ b/t/Plack-Middleware/stacktrace/sigdie.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use strict; use warnings; use Test::More; diff --git a/t/Plack-Middleware/stacktrace/utf8.t b/t/Plack-Middleware/stacktrace/utf8.t index 6d2f51fff..77849dc8d 100644 --- a/t/Plack-Middleware/stacktrace/utf8.t +++ b/t/Plack-Middleware/stacktrace/utf8.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use strict; use warnings; use Test::More; diff --git a/t/Plack-Middleware/urlmap_ports.t b/t/Plack-Middleware/urlmap_ports.t index 9a0a9c0a6..4ff4ba517 100644 --- a/t/Plack-Middleware/urlmap_ports.t +++ b/t/Plack-Middleware/urlmap_ports.t @@ -1,3 +1,9 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} use strict; use Test::More; use Plack::App::URLMap; diff --git a/t/Plack-Test/2args.t b/t/Plack-Test/2args.t index 2942f93b3..a68481d61 100644 --- a/t/Plack-Test/2args.t +++ b/t/Plack-Test/2args.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use Plack::Test; use Test::More; use HTTP::Request::Common; diff --git a/t/Plack-Test/hello_server.t b/t/Plack-Test/hello_server.t index 47ffb75bc..dc9f4bd0e 100644 --- a/t/Plack-Test/hello_server.t +++ b/t/Plack-Test/hello_server.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use Test::More; use Plack::Test; diff --git a/t/Plack-Util/response_cb.t b/t/Plack-Util/response_cb.t index 813dc871a..5cb31baf2 100644 --- a/t/Plack-Util/response_cb.t +++ b/t/Plack-Util/response_cb.t @@ -1,3 +1,10 @@ +BEGIN { + if ( $ENV{NO_NETWORK_TESTING} ) { + print '1..0 # SKIP Network connections required for this test'; + exit; + } +} + use strict; use warnings; use Plack::Util;