Re: [PATCH v3 1/9] lib/report: allow test skipping

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 15, 2016 at 10:52:43PM +0200, Radim Krčmář wrote:
> We can now explicitly mark a unit-test as skipped.
> If all unit-tests were skipped, the whole test is reported as skipped as
> well.  This also includes the case where no tests were run, but still
> ended with report_summary().
> 
> When the whole test is skipped, ./run_tests.sh prints yellow "SKIP"
> instead of green "PASS".
> 
> Return value of 77 is used to please Autotools.  I also renamed few
> things in reporting code and chose to refactor a logic while at it.
> 
> Signed-off-by: Radim Krčmář <rkrcmar@xxxxxxxxxx>
> ---
>  lib/libcflat.h       |  1 +
>  lib/report.c         | 45 +++++++++++++++++++++++++++++++--------------
>  scripts/runtime.bash |  2 ++
>  3 files changed, 34 insertions(+), 14 deletions(-)
> 
> diff --git a/lib/libcflat.h b/lib/libcflat.h
> index df50615b4366..582e3fc60e28 100644
> --- a/lib/libcflat.h
> +++ b/lib/libcflat.h
> @@ -79,6 +79,7 @@ extern void report_prefix_pop(void);
>  extern void report(const char *msg_fmt, bool pass, ...);
>  extern void report_xfail(const char *msg_fmt, bool xfail, bool pass, ...);
>  extern void report_abort(const char *msg_fmt, ...);
> +extern void report_skip(const char *msg_fmt, ...);
>  extern int report_summary(void);
>  
>  extern void dump_stack(void);
> diff --git a/lib/report.c b/lib/report.c
> index 9e45781ee2ab..430b2aeaecbd 100644
> --- a/lib/report.c
> +++ b/lib/report.c
> @@ -13,7 +13,7 @@
>  #include "libcflat.h"
>  #include "asm/spinlock.h"
>  
> -static unsigned int tests, failures, xfailures;
> +static unsigned int tests, failures, xfailures, skipped;
>  static char prefixes[256];
>  static struct spinlock lock;
>  
> @@ -43,23 +43,25 @@ void report_prefix_pop(void)
>  	spin_unlock(&lock);
>  }
>  
> -void va_report_xfail(const char *msg_fmt, bool xfail, bool cond, va_list va)
> +static void va_report(const char *msg_fmt,
> +		bool pass, bool xfail, bool skip, va_list va)
>  {
> -	char *pass = xfail ? "XPASS" : "PASS";
> -	char *fail = xfail ? "XFAIL" : "FAIL";
> +	char *prefix = skip ? "SKIP"
> +	                    : xfail ? (pass ? "XPASS" : "XFAIL")
> +	                            : (pass ? "PASS"  : "FAIL");
>  
>  	spin_lock(&lock);
>  
>  	tests++;
> -	printf("%s: ", cond ? pass : fail);
> +	printf("%s: ", prefix);
>  	puts(prefixes);
>  	vprintf(msg_fmt, va);
>  	puts("\n");
> -	if (xfail && cond)
> -		failures++;
> -	else if (xfail)
> +	if (skip)
> +		skipped++;
> +	else if (xfail && !pass)
>  		xfailures++;
> -	else if (!cond)
> +	else if (xfail || !pass)
>  		failures++;
>  
>  	spin_unlock(&lock);
> @@ -69,7 +71,7 @@ void report(const char *msg_fmt, bool pass, ...)
>  {
>  	va_list va;
>  	va_start(va, pass);
> -	va_report_xfail(msg_fmt, false, pass, va);
> +	va_report(msg_fmt, pass, false, false, va);
>  	va_end(va);
>  }
>  
> @@ -77,7 +79,15 @@ void report_xfail(const char *msg_fmt, bool xfail, bool pass, ...)
>  {
>  	va_list va;
>  	va_start(va, pass);
> -	va_report_xfail(msg_fmt, xfail, pass, va);
> +	va_report(msg_fmt, pass, xfail, false, va);
> +	va_end(va);
> +}
> +
> +void report_skip(const char *msg_fmt, ...)
> +{
> +	va_list va;
> +	va_start(va, msg_fmt);
> +	va_report(msg_fmt, false, false, true, va);
>  	va_end(va);
>  }
>  
> @@ -87,9 +97,16 @@ int report_summary(void)
>  
>  	printf("\nSUMMARY: %d tests, %d unexpected failures", tests, failures);
>  	if (xfailures)
> -		printf(", %d expected failures\n", xfailures);
> -	else
> -		printf("\n");
> +		printf(", %d expected failures", xfailures);
> +	if (skipped)
> +		printf(", %d skipped", skipped);
> +	printf("\n");
> +
> +	if (tests == skipped)
> +		/* Blame AUTOTOOLS for using 77 for skipped test and QEMU for
> +		 * mangling error codes in a way that gets 77 if we ... */
> +		return 77 >> 1;

Might be nicer to have something like '#define DEBUGEXIT_77 38', but this is
also fine by me.

> +
>  	return failures > 0 ? 1 : 0;
>  
>  	spin_unlock(&lock);
> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> index 0e055f0dddc2..ed073721216c 100644
> --- a/scripts/runtime.bash
> +++ b/scripts/runtime.bash
> @@ -51,6 +51,8 @@ function run()
>  
>      if [ $ret -eq 0 ]; then
>          echo -e "\e[32mPASS\e[0m $1"
> +    elif [ $ret -eq 77 ]; then
> +        echo -e "\e[33mSKIP\e[0m $1"
>      elif [ $ret -eq 124 ]; then
>          echo -e "\e[31mFAIL\e[0m $1 (timeout; duration=$timeout)"
>      else
> -- 
> 2.8.1

Reviewed-by: Andrew Jones <drjones@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux