test-skeleton.c: Use stdout for error messages

Message ID 1397227769-7214-1-git-send-email-will.newton@linaro.org
State Accepted
Headers show

Commit Message

Will Newton April 11, 2014, 2:49 p.m.
At the moment the test skeleton uses a mixture of stdout and
stderr for error message output. Using stdout for all test output
keeps all output correctly ordered and properly redirected to the
output file. The suggestion to use stdout is also made on the wiki:

https://sourceware.org/glibc/wiki/Testing/Testsuite#Writing_a_test_case

ChangeLog:

2014-04-11  Will Newton  <will.newton@linaro.org>

	* test-skeleton.c (signal_handler): Use printf and strerror
	rather than perror.  Use printf rather than fprintf to
	stderr.
	(main): Likewise.
---
 test-skeleton.c | 44 +++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 23 deletions(-)

Comments

Siddhesh Poyarekar April 11, 2014, 5:25 p.m. | #1
On Fri, Apr 11, 2014 at 03:49:29PM +0100, Will Newton wrote:
> At the moment the test skeleton uses a mixture of stdout and
> stderr for error message output. Using stdout for all test output
> keeps all output correctly ordered and properly redirected to the
> output file. The suggestion to use stdout is also made on the wiki:
> 
> https://sourceware.org/glibc/wiki/Testing/Testsuite#Writing_a_test_case
> 
> ChangeLog:
> 
> 2014-04-11  Will Newton  <will.newton@linaro.org>
> 
> 	* test-skeleton.c (signal_handler): Use printf and strerror
> 	rather than perror.  Use printf rather than fprintf to
> 	stderr.
> 	(main): Likewise.
> ---
>  test-skeleton.c | 44 +++++++++++++++++++++-----------------------
>  1 file changed, 21 insertions(+), 23 deletions(-)
> 
> diff --git a/test-skeleton.c b/test-skeleton.c
> index d7d2f75..dd7de8b 100644
> --- a/test-skeleton.c
> +++ b/test-skeleton.c
> @@ -160,7 +160,7 @@ signal_handler (int sig __attribute__ ((unused)))
>      }
>    if (killed != 0 && killed != pid)
>      {
> -      perror ("Failed to kill test process");
> +      printf ("Failed to kill test process: %s\n", strerror (errno));

You could just use %m here.  Likewise for other instances of strerror.

>        exit (1);
>      }
>  
> @@ -181,16 +181,16 @@ signal_handler (int sig __attribute__ ((unused)))
>  #endif
>  
>    if (killed == 0 || (WIFSIGNALED (status) && WTERMSIG (status) == SIGKILL))
> -    fputs ("Timed out: killed the child process\n", stderr);
> +    puts ("Timed out: killed the child process\n");
>    else if (WIFSTOPPED (status))
> -    fprintf (stderr, "Timed out: the child process was %s\n",
> -	     strsignal (WSTOPSIG (status)));
> +    printf ("Timed out: the child process was %s\n",
> +	    strsignal (WSTOPSIG (status)));
>    else if (WIFSIGNALED (status))
> -    fprintf (stderr, "Timed out: the child process got signal %s\n",
> -	     strsignal (WTERMSIG (status)));
> +    printf ("Timed out: the child process got signal %s\n",
> +	    strsignal (WTERMSIG (status)));
>    else
> -    fprintf (stderr, "Timed out: killed the child process but it exited %d\n",
> -	     WEXITSTATUS (status));
> +    printf ("Timed out: killed the child process but it exited %d\n",
> +	    WEXITSTATUS (status));
>  
>    /* Exit with an error.  */
>    exit (1);
> @@ -275,7 +275,7 @@ main (int argc, char *argv[])
>  
>        if (chdir (test_dir) < 0)
>  	{
> -	  perror ("chdir");
> +	  printf ("chdir: %s\n", strerror (errno));
>  	  exit (1);
>  	}
>      }
> @@ -334,10 +334,10 @@ main (int argc, char *argv[])
>  	    data_limit.rlim_cur = MIN ((rlim_t) TEST_DATA_LIMIT,
>  				       data_limit.rlim_max);
>  	  if (setrlimit (RLIMIT_DATA, &data_limit) < 0)
> -	    perror ("setrlimit: RLIMIT_DATA");
> +	    printf ("setrlimit: RLIMIT_DATA: %s\n", strerror (errno));
>  	}
>        else
> -	perror ("getrlimit: RLIMIT_DATA");
> +	printf ("getrlimit: RLIMIT_DATA: %s\n", strerror (errno));
>  #endif
>  
>        /* We put the test process in its own pgrp so that if it bogusly
> @@ -349,7 +349,7 @@ main (int argc, char *argv[])
>      }
>    else if (pid < 0)
>      {
> -      perror ("Cannot fork test program");
> +      printf ("Cannot fork test program: %s\n", strerror (errno));
>        exit (1);
>      }
>  
> @@ -387,18 +387,16 @@ main (int argc, char *argv[])
>        if (EXPECTED_SIGNAL != 0)
>  	{
>  	  if (WTERMSIG (status) == 0)
> -	    fprintf (stderr,
> -		     "Expected signal '%s' from child, got none\n",
> -		     strsignal (EXPECTED_SIGNAL));
> +	    printf ("Expected signal '%s' from child, got none\n",
> +		    strsignal (EXPECTED_SIGNAL));
>  	  else
> -	    fprintf (stderr,
> -		     "Incorrect signal from child: got `%s', need `%s'\n",
> -		     strsignal (WTERMSIG (status)),
> -		     strsignal (EXPECTED_SIGNAL));
> +	    printf ("Incorrect signal from child: got `%s', need `%s'\n",
> +		    strsignal (WTERMSIG (status)),
> +		    strsignal (EXPECTED_SIGNAL));
>  	}
>        else
> -	fprintf (stderr, "Didn't expect signal from child: got `%s'\n",
> -		 strsignal (WTERMSIG (status)));
> +	printf ("Didn't expect signal from child: got `%s'\n",
> +		strsignal (WTERMSIG (status)));
>        exit (1);
>      }
>  
> @@ -408,8 +406,8 @@ main (int argc, char *argv[])
>  #else
>    if (WEXITSTATUS (status) != EXPECTED_STATUS)
>      {
> -      fprintf (stderr, "Expected status %d, got %d\n",
> -	       EXPECTED_STATUS, WEXITSTATUS (status));
> +      printf ("Expected status %d, got %d\n",
> +	      EXPECTED_STATUS, WEXITSTATUS (status));
>        exit (1);
>      }
>  

This looks good to me with the above changes, but I think a senior
maintainer should review this as well before it goes in.

Siddhesh
Joseph Myers June 19, 2014, 9:49 p.m. | #2
On Fri, 11 Apr 2014, Siddhesh Poyarekar wrote:

> > diff --git a/test-skeleton.c b/test-skeleton.c
> > index d7d2f75..dd7de8b 100644
> > --- a/test-skeleton.c
> > +++ b/test-skeleton.c
> > @@ -160,7 +160,7 @@ signal_handler (int sig __attribute__ ((unused)))
> >      }
> >    if (killed != 0 && killed != pid)
> >      {
> > -      perror ("Failed to kill test process");
> > +      printf ("Failed to kill test process: %s\n", strerror (errno));
> 
> You could just use %m here.  Likewise for other instances of strerror.

Agreed.

> >    if (killed == 0 || (WIFSIGNALED (status) && WTERMSIG (status) == SIGKILL))
> > -    fputs ("Timed out: killed the child process\n", stderr);
> > +    puts ("Timed out: killed the child process\n");

puts outputs a newline implicitly, so when converting to puts you should 
remove the \n from the string.

> This looks good to me with the above changes, but I think a senior
> maintainer should review this as well before it goes in.

The patch is OK with the requested changes.
Will Newton June 23, 2014, 10:26 a.m. | #3
On 19 June 2014 22:49, Joseph S. Myers <joseph@codesourcery.com> wrote:
> On Fri, 11 Apr 2014, Siddhesh Poyarekar wrote:
>
>> > diff --git a/test-skeleton.c b/test-skeleton.c
>> > index d7d2f75..dd7de8b 100644
>> > --- a/test-skeleton.c
>> > +++ b/test-skeleton.c
>> > @@ -160,7 +160,7 @@ signal_handler (int sig __attribute__ ((unused)))
>> >      }
>> >    if (killed != 0 && killed != pid)
>> >      {
>> > -      perror ("Failed to kill test process");
>> > +      printf ("Failed to kill test process: %s\n", strerror (errno));
>>
>> You could just use %m here.  Likewise for other instances of strerror.
>
> Agreed.
>
>> >    if (killed == 0 || (WIFSIGNALED (status) && WTERMSIG (status) == SIGKILL))
>> > -    fputs ("Timed out: killed the child process\n", stderr);
>> > +    puts ("Timed out: killed the child process\n");
>
> puts outputs a newline implicitly, so when converting to puts you should
> remove the \n from the string.
>
>> This looks good to me with the above changes, but I think a senior
>> maintainer should review this as well before it goes in.
>
> The patch is OK with the requested changes.

Thanks, pushed with those changes.

Patch

diff --git a/test-skeleton.c b/test-skeleton.c
index d7d2f75..dd7de8b 100644
--- a/test-skeleton.c
+++ b/test-skeleton.c
@@ -160,7 +160,7 @@  signal_handler (int sig __attribute__ ((unused)))
     }
   if (killed != 0 && killed != pid)
     {
-      perror ("Failed to kill test process");
+      printf ("Failed to kill test process: %s\n", strerror (errno));
       exit (1);
     }
 
@@ -181,16 +181,16 @@  signal_handler (int sig __attribute__ ((unused)))
 #endif
 
   if (killed == 0 || (WIFSIGNALED (status) && WTERMSIG (status) == SIGKILL))
-    fputs ("Timed out: killed the child process\n", stderr);
+    puts ("Timed out: killed the child process\n");
   else if (WIFSTOPPED (status))
-    fprintf (stderr, "Timed out: the child process was %s\n",
-	     strsignal (WSTOPSIG (status)));
+    printf ("Timed out: the child process was %s\n",
+	    strsignal (WSTOPSIG (status)));
   else if (WIFSIGNALED (status))
-    fprintf (stderr, "Timed out: the child process got signal %s\n",
-	     strsignal (WTERMSIG (status)));
+    printf ("Timed out: the child process got signal %s\n",
+	    strsignal (WTERMSIG (status)));
   else
-    fprintf (stderr, "Timed out: killed the child process but it exited %d\n",
-	     WEXITSTATUS (status));
+    printf ("Timed out: killed the child process but it exited %d\n",
+	    WEXITSTATUS (status));
 
   /* Exit with an error.  */
   exit (1);
@@ -275,7 +275,7 @@  main (int argc, char *argv[])
 
       if (chdir (test_dir) < 0)
 	{
-	  perror ("chdir");
+	  printf ("chdir: %s\n", strerror (errno));
 	  exit (1);
 	}
     }
@@ -334,10 +334,10 @@  main (int argc, char *argv[])
 	    data_limit.rlim_cur = MIN ((rlim_t) TEST_DATA_LIMIT,
 				       data_limit.rlim_max);
 	  if (setrlimit (RLIMIT_DATA, &data_limit) < 0)
-	    perror ("setrlimit: RLIMIT_DATA");
+	    printf ("setrlimit: RLIMIT_DATA: %s\n", strerror (errno));
 	}
       else
-	perror ("getrlimit: RLIMIT_DATA");
+	printf ("getrlimit: RLIMIT_DATA: %s\n", strerror (errno));
 #endif
 
       /* We put the test process in its own pgrp so that if it bogusly
@@ -349,7 +349,7 @@  main (int argc, char *argv[])
     }
   else if (pid < 0)
     {
-      perror ("Cannot fork test program");
+      printf ("Cannot fork test program: %s\n", strerror (errno));
       exit (1);
     }
 
@@ -387,18 +387,16 @@  main (int argc, char *argv[])
       if (EXPECTED_SIGNAL != 0)
 	{
 	  if (WTERMSIG (status) == 0)
-	    fprintf (stderr,
-		     "Expected signal '%s' from child, got none\n",
-		     strsignal (EXPECTED_SIGNAL));
+	    printf ("Expected signal '%s' from child, got none\n",
+		    strsignal (EXPECTED_SIGNAL));
 	  else
-	    fprintf (stderr,
-		     "Incorrect signal from child: got `%s', need `%s'\n",
-		     strsignal (WTERMSIG (status)),
-		     strsignal (EXPECTED_SIGNAL));
+	    printf ("Incorrect signal from child: got `%s', need `%s'\n",
+		    strsignal (WTERMSIG (status)),
+		    strsignal (EXPECTED_SIGNAL));
 	}
       else
-	fprintf (stderr, "Didn't expect signal from child: got `%s'\n",
-		 strsignal (WTERMSIG (status)));
+	printf ("Didn't expect signal from child: got `%s'\n",
+		strsignal (WTERMSIG (status)));
       exit (1);
     }
 
@@ -408,8 +406,8 @@  main (int argc, char *argv[])
 #else
   if (WEXITSTATUS (status) != EXPECTED_STATUS)
     {
-      fprintf (stderr, "Expected status %d, got %d\n",
-	       EXPECTED_STATUS, WEXITSTATUS (status));
+      printf ("Expected status %d, got %d\n",
+	      EXPECTED_STATUS, WEXITSTATUS (status));
       exit (1);
     }