Developer-Dashboard
view release on metacpan or search on metacpan
path resolver can run; the smoke now falls back through PowerShell
command metadata and `where.exe` before deriving Strawberry runtime
paths
- hardened the Windows QEMU/Dockur smoke flow so the host stages the
Strawberry Perl MSI into the OEM bundle, the launcher supports
configurable retained web/RDP ports plus reusable cached ISO workdirs,
and the Windows guest can install the built tarball with `cpanm --no-wget --notest`
during the dependency layer while still running the full dashboard
runtime smoke afterward
- fixed `t/17-web-server-ssl.t` so an intermittent live TLS connect
failure reports the underlying `IO::Socket::SSL` error and fails the
remaining HTTPS assertions cleanly instead of crashing the test file on
an undefined socket handle
- updated the Windows verification docs, release metadata guard, main POD,
and software spec so the checked-in verification path matches the
shipped Windows smoke helpers and the verified Ubuntu blank-environment
tarball install path
1.77 2026-04-06
- added a rerunnable Windows VM verification path with
`integration/windows/run-host-windows-smoke.sh`,
"strict" : "0",
"utf8" : "0",
"warnings" : "0"
}
},
"test" : {
"requires" : {
"Archive::Tar" : "0",
"HTTP::Request::Common" : "0",
"HTTP::Response" : "0",
"IO::Socket::SSL" : "0",
"Plack::Test" : "0",
"Test::More" : "0",
"Test::Pod" : "0"
}
}
},
"provides" : {
"Developer::Dashboard" : {
"file" : "lib/Developer/Dashboard.pm",
"version" : "3.14"
---
abstract: 'a local home for development work'
author:
- 'Developer Dashboard Contributors'
build_requires:
Archive::Tar: '0'
HTTP::Request::Common: '0'
HTTP::Response: '0'
IO::Socket::SSL: '0'
Plack::Test: '0'
Test::More: '0'
Test::Pod: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
File::ShareDir::Install: '0.06'
dynamic_config: 0
generated_by: 'Dist::Zilla version 6.037, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
Makefile.PL view on Meta::CPAN
"YAML::XS" => 0,
"lib" => 0,
"strict" => 0,
"utf8" => 0,
"warnings" => 0
},
"TEST_REQUIRES" => {
"Archive::Tar" => 0,
"HTTP::Request::Common" => 0,
"HTTP::Response" => 0,
"IO::Socket::SSL" => 0,
"Plack::Test" => 0,
"Test::More" => 0,
"Test::Pod" => 0
},
"VERSION" => "3.14",
"test" => {
"TESTS" => "t/*.t"
}
);
Makefile.PL view on Meta::CPAN
"File::Temp" => 0,
"FindBin" => 0,
"Getopt::Long" => 0,
"HTTP::Request" => 0,
"HTTP::Request::Common" => 0,
"HTTP::Response" => 0,
"IO::Compress::Gzip" => 0,
"IO::Handle" => 0,
"IO::Select" => 0,
"IO::Socket::INET" => 0,
"IO::Socket::SSL" => 0,
"IO::Uncompress::Gunzip" => 0,
"IPC::Open3" => 0,
"JSON::XS" => 0,
"LWP::Protocol::https" => 0,
"LWP::UserAgent" => 0,
"MIME::Base64" => 0,
"POSIX" => 0,
"Plack" => 0,
"Plack::Runner" => 0,
"Plack::Test" => 0,
t/17-web-server-ssl.t view on Meta::CPAN
return if $msg =~ m{Plack/Runner\.pm|Getopt/Long\.pm};
warn $msg;
};
}
use Capture::Tiny qw(capture);
use File::Path qw(make_path remove_tree);
use File::Spec;
use File::Temp qw(tempdir tempfile);
use IO::Socket::INET;
use IO::Socket::SSL ();
use HTTP::Request::Common qw(GET);
use LWP::UserAgent;
use Plack::Test;
use Socket qw(AF_UNIX PF_UNSPEC SOCK_STREAM);
use Test::More;
use Time::HiRes qw(sleep);
use lib 'lib';
use Developer::Dashboard::Web::Server;
t/17-web-server-ssl.t view on Meta::CPAN
my $http_response = $http->get("http://127.0.0.1:$port/live-check?mode=http");
is( $http_response->code, 307, 'live SSL frontend redirects plain HTTP on the public port' );
is(
$http_response->header('Location'),
"https://127.0.0.1:$port/live-check?mode=http",
'live SSL frontend redirects plain HTTP to the equivalent HTTPS URL on the same public port'
);
my $https_socket;
for ( 1 .. 50 ) {
$https_socket = IO::Socket::SSL->new(
PeerHost => '127.0.0.1',
PeerPort => $port,
SSL_verify_mode => 0,
Timeout => 5,
);
last if $https_socket;
sleep 0.1;
}
ok( $https_socket, 'live SSL frontend accepts a direct TLS client on the public port' );
my $https_raw = '';
t/17-web-server-ssl.t view on Meta::CPAN
or die "Unable to write HTTPS test request: $!";
$https_raw = do {
local $/;
<$https_socket>;
};
close $https_socket;
like( $https_raw, qr/^HTTP\/1\.1 200 OK\r\n/, 'live SSL frontend still serves HTTPS on the public port' );
like( $https_raw, qr/\r\n\r\nOK\z/s, 'live SSL frontend preserves the HTTPS app response body' );
}
else {
diag( 'IO::Socket::SSL connect error: ' . ( IO::Socket::SSL::errstr() || 'unknown SSL error' ) );
fail('live SSL frontend still serves HTTPS on the public port');
fail('live SSL frontend preserves the HTTPS app response body');
}
kill 'TERM', $pid;
waitpid( $pid, 0 );
}
done_testing();
( run in 1.882 second using v1.01-cache-2.11-cpan-39bf76dae61 )