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