Developer-Dashboard

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

      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`,

META.json  view on Meta::CPAN

            "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"

META.yml  view on Meta::CPAN

---
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 )