The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 10;
use Net::Proxy::Connector;
use Net::Proxy::Connector::dual;

my $c;
my $args = {};

eval { $c = Net::Proxy::Connector::dual->new($args); };
like( $@, qr/^'client_first' connector required /, 'No client_first' );
$args->{client_first} = 1;

eval { $c = Net::Proxy::Connector::dual->new($args); };
like(
    $@,
    qr/^'client_first' connector must be a HASHREF /,
    'client_first not HASHREF'
);
$args->{client_first} = {};

eval { $c = Net::Proxy::Connector::dual->new($args); };
like(
    $@,
    qr/^'type' key required for 'client_first' connector /,
    'No type for client_first'
);
$args->{client_first} = { type => 'zlonk' };

eval { $c = Net::Proxy::Connector::dual->new($args); };
like(
    $@,
    qr/^Couldn't load Net::Proxy::Connector::zlonk for 'client_first' connector: /,
    'Bad connector type for client_first'
);
$args->{client_first} = { type => 'tcp' };
$args->{_proxy_} = bless {}, 'Net::Proxy';

eval { $c = Net::Proxy::Connector::dual->new( $args ); };
like( $@, qr/^'server_first' connector required /, 'No server_first' );
$args->{server_first} = 1;

eval { $c = Net::Proxy::Connector::dual->new($args); };
like(
    $@,
    qr/^'server_first' connector must be a HASHREF /,
    'server_first not HASHREF'
);
$args->{server_first} = { type => 'zowie' };

eval { $c = Net::Proxy::Connector::dual->new($args); };
like(
    $@,
    qr/^Couldn't load Net::Proxy::Connector::zowie for 'server_first' connector: /,
    'Bad connector type for server_first'
);
$args->{server_first} = { type => 'tcp' };

eval { $c = Net::Proxy::Connector::dual->new( $args ); };
like( $@, qr/^Parameter 'port' is required /, 'No port' );
$args->{port} = 444;

eval { $c = Net::Proxy::Connector::dual->new( $args ); };
is( $@, '', 'dual object created');
isa_ok( $c, 'Net::Proxy::Connector::dual' );