The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use warnings;
use Test::More;
use Test::Mock::Net::FTP;

Test::Mock::Net::FTP::mock_prepare(
    'somehost.example.com' => {
        'user1' => {
            password => 'secret',
        },
        'user2' => {
            password => 'secret2',
        }
    },
    'host2.example.com' => {
        'userX' => {
            password => 'secretX',
        }

    },
);

subtest 'invalid host', sub {
    ok( !defined Test::Mock::Net::FTP->new('invalidhost.example.com') );
    done_testing();
};

subtest 'login to somehost', sub {
    my $ftp = Test::Mock::Net::FTP->new('somehost.example.com');
    ok( defined $ftp);
    ok( $ftp->login('user1', 'secret') );
    ok( !$ftp->login('invalid', 'invalid') );
    is( $ftp->message, 'Login incorrect.');
    ok( $ftp->close );
    done_testing();
};


subtest 'login to host2', sub {
    my $ftp = Test::Mock::Net::FTP->new('host2.example.com');
    ok( defined $ftp);
    ok( $ftp->login('userX', 'secretX') );
    ok( $ftp->close );
    done_testing();
};


done_testing();