From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Jones Subject: Re: [PATCH kvm-unit-tests v2 05/12] lib/report: allow test skipping Date: Thu, 17 Dec 2015 13:30:23 -0600 Message-ID: <20151217193023.GE14168@hawk.localdomain> References: <1450374823-7648-1-git-send-email-rkrcmar@redhat.com> <1450374823-7648-6-git-send-email-rkrcmar@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: kvm@vger.kernel.org, Paolo Bonzini To: Radim =?utf-8?B?S3LEjW3DocWZ?= Return-path: Received: from mx1.redhat.com ([209.132.183.28]:46137 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752482AbbLQTa3 (ORCPT ); Thu, 17 Dec 2015 14:30:29 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 46623C0B2E12 for ; Thu, 17 Dec 2015 19:30:29 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1450374823-7648-6-git-send-email-rkrcmar@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, Dec 17, 2015 at 06:53:36PM +0100, Radim Kr=C4=8Dm=C3=A1=C5=99 w= rote: > 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(). >=20 > When the whole test is skipped, ./run_tests.sh prints yellow "SKIP" > instead of green "PASS". >=20 > 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. >=20 > Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 > --- > v2: > - turned skip into yellow SKIP [Drew] > - wrapped line at 80 characters [Drew] > - added static to va_report > =20 > lib/libcflat.h | 1 + > lib/report.c | 44 ++++++++++++++++++++++++++++++-------------- > scripts/run.bash | 12 +++++++----- > 3 files changed, 38 insertions(+), 19 deletions(-) >=20 > diff --git a/lib/libcflat.h b/lib/libcflat.h > index 9747ccdbc9f1..070818354ee1 100644 > --- a/lib/libcflat.h > +++ b/lib/libcflat.h > @@ -61,6 +61,7 @@ void report_prefix_push(const char *prefix); > void report_prefix_pop(void); > void report(const char *msg_fmt, bool pass, ...); > void report_xfail(const char *msg_fmt, bool xfail, bool pass, ...); > +void report_skip(const char *msg_fmt, ...); > int report_summary(void); > =20 > #define ARRAY_SIZE(_a) (sizeof(_a)/sizeof((_a)[0])) > diff --git a/lib/report.c b/lib/report.c > index 35e664108a92..a47f2e00b529 100644 > --- a/lib/report.c > +++ b/lib/report.c > @@ -13,7 +13,7 @@ > #include "libcflat.h" > #include "asm/spinlock.h" > =20 > -static unsigned int tests, failures, xfailures; > +static unsigned int tests, failures, xfailures, skipped; > static char prefixes[256]; > static struct spinlock lock; > =20 > @@ -43,25 +43,28 @@ void report_prefix_pop(void) > spin_unlock(&lock); > } > =20 > -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, bo= ol skip, > + va_list va) Making this static disallows unit test writers to create their own variable arg report() wrapper functions. Perhaps to determine whether or not a skip is in order, e.g. xyz_report(msg, pass, ...) { va_list va; va_start(va, pass); if (xyz) va_report(msg, pass, false, false, va); else va_report(msg, false, false, true, va); va_end(va); } > { > - char *pass =3D xfail ? "XPASS" : "PASS"; > - char *fail =3D xfail ? "XFAIL" : "FAIL"; > char buf[2000]; > + char *prefix =3D skip ? "SKIP" > + : xfail ? (pass ? "XPASS" : "XFAIL") > + : (pass ? "PASS" : "FAIL"); > =20 > spin_lock(&lock); > =20 > tests++; > - printf("%s: ", cond ? pass : fail); > + printf("%s: ", prefix); > puts(prefixes); > vsnprintf(buf, sizeof(buf), msg_fmt, va); > puts(buf); > 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++; > =20 > spin_unlock(&lock); > @@ -71,7 +74,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); > } > =20 > @@ -79,7 +82,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); > } > =20 > @@ -89,9 +100,14 @@ int report_summary(void) > =20 > printf("\nSUMMARY: %d tests, %d unexpected failures", tests, failur= es); > 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 =3D=3D skipped) > + return 77; /* blame AUTOTOOLS */ > + > return failures > 0 ? 1 : 0; > =20 > spin_unlock(&lock); > diff --git a/scripts/run.bash b/scripts/run.bash > index 243586c6d2fc..b92611c29fbb 100644 > --- a/scripts/run.bash > +++ b/scripts/run.bash > @@ -46,11 +46,13 @@ function run() > # Unit-tests' return value is shifted by one. > ret=3D$(($? >> 1)) > =20 > - if [ $ret -eq 0 ]; then > - echo -e "\e[32mPASS\e[0m $1" > - else > - echo -e "\e[31mFAIL\e[0m $1" > - fi > + case $ret in > + 0) echo -ne "\e[32mPASS\e[0m" ;; > + 77) echo -ne "\e[33mSKIP\e[0m" ;; > + *) echo -ne "\e[31mFAIL\e[0m" > + esac > + > + echo " $1" While touching this, please change this to $testname, and anything else in run() that still uses $N instead of its local var name. > =20 > return $ret > } > --=20 > 2.6.4 >=20 > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html