3 use Test::More tests => 12;
5 use POSIX qw/SIGINT SIGTERM SIGKILL EXIT_SUCCESS/;
7 use IPC::MorseSignals qw/msend mrecv/;
15 my $msg = join '', map { chr int rand 256 } 1 .. $l;
17 while (($speed > 1) && ($ok < $n)) {
18 $desc = "$n sends of $l bytes at $speed bits/s";
24 pipe my $rdr, my $wtr or die "$desc: pipe() failed : $!";
27 die "$desc: fork() failed : $!";
30 local @SIG{qw/USR1 USR2/} = mrecv sub {
31 print $wtr $_[0], "\n";
37 close $wtr or die "$desc: close() failed : $!";
39 local $SIG{ALRM} = sub { die 'timeout' };
40 my $a = (int(100 * (3 * $l) / $speed) || 1);
43 msend $msg => $pid, $speed;
51 close $rdr or die "$desc: close() failed : $!";
54 my $recv = do { local $/; <$rdr> };
55 close $rdr or die "$desc: close() failed : $!";
56 last TRY unless $recv;
58 last TRY unless $msg eq $recv;
62 $desc = "$l bytes sent $n times";
64 push @res, $desc . (($speed) ? ' at ' . $speed . ' bits/s' : ' failed');
80 diag '=== Summary ===';