@@ -25,9 +25,20 @@ SKIP: {
25
25
$command = qq' mcr $^X t/referer-server' ;
26
26
}
27
27
28
+ # Set a timeout to ensure we don't hang forever
29
+ local $SIG {ALRM }
30
+ = sub { die " Timeout waiting for test server to start\n " };
31
+ alarm 10; # 10 second timeout
32
+
28
33
open $server , " $command |" or die " Couldn't spawn fake server: $! " ;
29
- sleep 1; # give the child some time
34
+
35
+ # Wait for server startup with proper error handling
30
36
my $url = <$server >;
37
+ alarm 0; # Cancel the alarm
38
+
39
+ if ( !defined $url || $url eq ' ' ) {
40
+ die " Failed to get a response from test server\n " ;
41
+ }
31
42
chomp $url ;
32
43
33
44
$agent -> get($url );
@@ -65,12 +76,24 @@ SKIP: {
65
76
is( $agent -> status, 200, ' Got fourth page' ) or diag $agent -> res-> message;
66
77
is( $agent -> content, " Referer: '$ref '" , ' Custom referer can be set' );
67
78
79
+ # Add a timeout for the server shutdown
80
+ local $SIG {ALRM } = sub { die " Timeout waiting for server to quit\n " };
81
+ alarm 5; # 5 second timeout
82
+
68
83
$agent -> get( $url . ' quit_server' );
69
84
ok( $agent -> success, ' Quit OK' );
70
85
}
71
86
72
87
memory_cycle_ok( $agent , ' No memory cycles found' );
73
88
74
89
END {
75
- close $server if $server ;
90
+ if ($server ) {
91
+
92
+ # Make sure we don't hang in END block
93
+ local $SIG {ALRM }
94
+ = sub { warn " Timeout closing server handle\n " ; exit 1 };
95
+ alarm 3;
96
+ close $server ;
97
+ alarm 0;
98
+ }
76
99
}
0 commit comments