1use strict; 2use Test::More tests => 4; 3use POSIX qw(dup2); 4use IO::Handle; 5use FileHandle; 6 7use Net::FTPServer::InMem::Server; 8 9pipe INFD0, OUTFD0 or die "pipe: $!"; 10pipe INFD1, OUTFD1 or die "pipe: $!"; 11my $pid = fork (); 12die unless defined $pid; 13unless ($pid) { # Child process (the server). 14 POSIX::dup2 (fileno INFD0, 0); 15 POSIX::dup2 (fileno OUTFD1, 1); 16 close INFD0; 17 close OUTFD0; 18 close INFD1; 19 close OUTFD1; 20 my $ftps = Net::FTPServer::InMem::Server->run 21 (['--test', '-d', '-C', '/dev/null']); 22 exit; 23} 24 25# Parent process (the test script). 26close INFD0; 27close OUTFD1; 28OUTFD0->autoflush (1); 29 30$_ = <INFD1>; 31print OUTFD0 "USER rich\r\n"; 32$_ = <INFD1>; 33ok (/^331/); 34 35print OUTFD0 "PASS 123456\r\n"; 36$_ = <INFD1>; 37ok (/^230 Welcome rich\./); 38 39# Set the idle timeout to 2 seconds and wait. 40print OUTFD0 "SITE IDLE 2\r\n"; 41$_ = <INFD1>; 42ok (/^200/); 43 44sleep 3; 45 46# Expect timeout status. 47$_ = <INFD1>; 48ok (/^421/); 49 50__END__ 51