Commit | Line | Data |
---|---|---|
6ae8f908 MS |
1 | #!./perl |
2 | ||
3 | BEGIN { | |
4 | chdir 't'; | |
5 | @INC = '../lib'; | |
6 | require './test.pl'; | |
7 | } | |
8 | ||
9 | BEGIN { | |
10 | use Config; | |
11 | if( !$Config{d_alarm} ) { | |
12 | skip_all("alarm() not implemented on this platform"); | |
13 | } | |
14 | } | |
15 | ||
75af1a9c | 16 | plan tests => 5; |
6ae8f908 MS |
17 | my $Perl = which_perl(); |
18 | ||
565aeffe DM |
19 | my ($start_time, $end_time); |
20 | ||
6ae8f908 | 21 | eval { |
565aeffe DM |
22 | local $SIG{ALRM} = sub { $end_time = time; die "ALARM!\n" }; |
23 | $start_time = time; | |
6ae8f908 MS |
24 | alarm 3; |
25 | ||
26 | # perlfunc recommends against using sleep in combination with alarm. | |
565aeffe DM |
27 | 1 while (($end_time = time) - $start_time < 6); |
28 | alarm 0; | |
6ae8f908 MS |
29 | }; |
30 | alarm 0; | |
565aeffe | 31 | my $diff = $end_time - $start_time; |
6ae8f908 MS |
32 | |
33 | # alarm time might be one second less than you said. | |
34 | is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs inf loop' ); | |
565aeffe | 35 | ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" ); |
6ae8f908 MS |
36 | |
37 | ||
6ae8f908 | 38 | eval { |
565aeffe DM |
39 | local $SIG{ALRM} = sub { $end_time = time; die "ALARM!\n" }; |
40 | $start_time = time; | |
6ae8f908 MS |
41 | alarm 3; |
42 | system(qq{$Perl -e "sleep 6"}); | |
565aeffe DM |
43 | $end_time = time; |
44 | alarm 0; | |
6ae8f908 MS |
45 | }; |
46 | alarm 0; | |
565aeffe | 47 | $diff = $end_time - $start_time; |
6ae8f908 MS |
48 | |
49 | # alarm time might be one second less than you said. | |
50 | is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs system()' ); | |
51 | ||
6ffa69ae | 52 | { |
ee1db23e | 53 | local $TODO = "Why does system() block alarm() on $^O?" |
7b903762 | 54 | if $^O eq 'VMS' || $^O eq 'dos'; |
6ffa69ae CB |
55 | ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" ); |
56 | } | |
75af1a9c DM |
57 | |
58 | ||
59 | { | |
60 | local $SIG{"ALRM"} = sub { die }; | |
565aeffe | 61 | eval { alarm(1); my $x = qx($Perl -e "sleep 3"); alarm(0); }; |
75af1a9c DM |
62 | chomp (my $foo = "foo\n"); |
63 | ok($foo eq "foo", '[perl #33928] chomp() fails after alarm(), `sleep`'); | |
64 | } |