[PATCH] Tests: fixed try_run() to remove temporary directory on failure

Maxim Dounin mdounin at mdounin.ru
Wed Sep 7 01:46:35 UTC 2022


Hello!

On Tue, Sep 06, 2022 at 05:52:51PM +0400, Sergey Kandaurov wrote:

> # HG changeset patch
> # User Sergey Kandaurov <pluknet at nginx.com>
> # Date 1662472340 -14400
> #      Tue Sep 06 17:52:20 2022 +0400
> # Node ID 7eb87eaf06f4b9161cfe298f195947dbddedd01d
> # Parent  78fe648d54a79822a72f3a5f8cc79651b3b1f5a7
> Tests: fixed try_run() to remove temporary directory on failure.
> 
> Keeping the file handle pointing to the "stderr" file prevented removal
> of the temporary directory on win32 if execution aborted in run().
> The fix is to move safe file operations surrounding run() out of the
> eval block such that the state of file handles is consistent.
> Fixes a1874249496d.

I believe it might need some additional emphasis that this is 
about Windows only.  For example:

Tests: fixed try_run() to remove temporary directory on win32.

> 
> diff -r 78fe648d54a7 -r 7eb87eaf06f4 lib/Test/Nginx.pm
> --- a/lib/Test/Nginx.pm	Tue Aug 30 17:24:16 2022 +0400
> +++ b/lib/Test/Nginx.pm	Tue Sep 06 17:52:20 2022 +0400
> @@ -290,8 +290,9 @@ sub has_daemon($) {
>  sub try_run($$) {
>  	my ($self, $message) = @_;
>  
> +	open OLDERR, ">&", \*STDERR;
> +
>  	eval {
> -		open OLDERR, ">&", \*STDERR;
>  		open NEWERR, ">", $self->{_testdir} . '/stderr'
>  			or die "Can't open stderr: $!";
>  		close STDERR;
> @@ -299,10 +300,10 @@ sub try_run($$) {
>  		close NEWERR;
>  
>  		$self->run();
> +	};
>  
> -		close STDERR;
> -		open STDERR, ">&", \*OLDERR;
> -	};
> +	close STDERR;
> +	open STDERR, ">&", \*OLDERR;
>  
>  	return $self unless $@;

Wouldn't it be better to move all stderr handling out of the eval?

diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm
--- a/lib/Test/Nginx.pm
+++ b/lib/Test/Nginx.pm
@@ -291,14 +291,13 @@ sub try_run($$) {
 	my ($self, $message) = @_;
 
 	open OLDERR, ">&", \*STDERR;
+	open NEWERR, ">", $self->{_testdir} . '/stderr'
+		or die "Can't open stderr: $!";
+	close STDERR;
+	open STDERR, ">&", \*NEWERR;
+	close NEWERR;
 
 	eval {
-		open NEWERR, ">", $self->{_testdir} . '/stderr'
-			or die "Can't open stderr: $!";
-		close STDERR;
-		open STDERR, ">&", \*NEWERR;
-		close NEWERR;
-
 		$self->run();
 	};
 

Alternatively, it might be the right time to backout a1874249496d 
completely and rely on "-e ..." instead, given that it was 
introduced in 1.19.5 and already present in all supported 
versions.

-- 
Maxim Dounin
http://mdounin.ru/



More information about the nginx-devel mailing list