The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
no warnings "void";

package LWP::UserAgent::Paranoid::Test;

use Test::More;
use Test::Requires qw(
    Test::TCP
    HTTP::Server::PSGI
);
use LWP::UserAgent::Paranoid;

use base 'Exporter';
our @EXPORT = qw/ server create_ua_ok get_status_is /;

sub server {
    my $app  = shift;
    my $host = "127.0.0.1";
    my $tcp  = Test::TCP->new(
        code => sub {
            my $port = shift;
            my $server = HTTP::Server::PSGI->new(
                host    => $host,
                port    => $port,
                timeout => 20,
            );
            $server->run($app);
        }
    );
    return ("http://$host:" . $tcp->port, $tcp);
}

sub create_ua_ok {
    my $ua = LWP::UserAgent::Paranoid->new;
    ok      $ua, "Created agent object";
    isa_ok  $ua, "LWP::UserAgent::Paranoid";
    return $ua;
}

sub get_status_is {
    my ($ua, $url, $status, $desc) = @_;
    $desc ||= "GET $url";

    subtest $desc => sub {
        my $r = $ua->get($url);
        ok      $r, "Received a response";
        isa_ok  $r, "HTTP::Response";
        is      $r->code, $status, "Status is $status"
            or diag $r->status_line;
    };
}

"I want to believe.";