ACK: [PATCH] lib: fwts_framework: add --show-tests-categories option (LP: #1415953)

ivanhu ivan.hu at canonical.com
Thu Jan 29 19:21:24 UTC 2015


On 2015年01月30日 00:53, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> I would be useful to list all the tests with the categories that
> they are associated with. This can then be parsed for automated test
> scripts that need to determine the kinds of tests that are available.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   doc/fwts.1                       |  3 ++
>   src/lib/include/fwts_framework.h |  3 +-
>   src/lib/src/fwts_framework.c     | 88 ++++++++++++++++++++++++++++++++--------
>   3 files changed, 75 insertions(+), 19 deletions(-)
>
> diff --git a/doc/fwts.1 b/doc/fwts.1
> index f9737a7..904d2d6 100644
> --- a/doc/fwts.1
> +++ b/doc/fwts.1
> @@ -303,6 +303,9 @@ options to show these specific tests.
>   show all the available tests listed by minor test description. By default will show all tests. Use the \-\-batch, \-\-interactive, \-\-batch\-experimental, \-\-interactive\-experimental
>   options to show these specific tests.
>   .TP
> +.B \-\-show\-tests\-categories
> +show all the available tests and the categories they belong to.
> +.TP
>   .B \-\-skip\-test=test[,test..]
>   specify tests to skip over and not run. List must be comma separated.
>   .TP
> diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
> index 02fc931..52df68a 100644
> --- a/src/lib/include/fwts_framework.h
> +++ b/src/lib/include/fwts_framework.h
> @@ -51,7 +51,8 @@ typedef enum {
>   	FWTS_FLAG_TEST_ACPI			= 0x04000000,
>   	FWTS_FLAG_UTILS				= 0x08000000,
>   	FWTS_FLAG_QUIET				= 0x10000000,
> -	FWTS_FLAG_SHOW_TESTS_FULL		= 0x20000000
> +	FWTS_FLAG_SHOW_TESTS_FULL		= 0x20000000,
> +	FWTS_FLAG_SHOW_TESTS_CATEGORIES		= 0x40000000
>   } fwts_framework_flags;
>   
>   #define FWTS_FLAG_TEST_MASK		\
> diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
> index ec5d19d..6c5598d 100644
> --- a/src/lib/src/fwts_framework.c
> +++ b/src/lib/src/fwts_framework.c
> @@ -22,6 +22,7 @@
>   #include <string.h>
>   #include <stdarg.h>
>   #include <stdbool.h>
> +#include <ctype.h>
>   #include <time.h>
>   #include <getopt.h>
>   #include <sys/utsname.h>
> @@ -30,6 +31,11 @@
>   #include "fwts.h"
>   #include "fwts_pm_method.h"
>   
> +typedef struct {
> +	const char *title;		/* Test category */
> +	fwts_framework_flags flag;	/* Mask of category */
> +} fwts_categories;
> +
>   /* Suffix ".log", ".xml", etc gets automatically appended */
>   #define RESULTS_LOG	"results"
>   
> @@ -43,6 +49,18 @@
>   	 FWTS_FLAG_UNSAFE |			\
>   	 FWTS_FLAG_TEST_UEFI)
>   
> +static fwts_categories categories[] = {
> +	{ "Batch",			FWTS_FLAG_BATCH },
> +	{ "Interactive",		FWTS_FLAG_INTERACTIVE },
> +	{ "Batch Experimental",		FWTS_FLAG_BATCH_EXPERIMENTAL },
> +	{ "Interactive Experimental",	FWTS_FLAG_INTERACTIVE_EXPERIMENTAL },
> +	{ "Power States",		FWTS_FLAG_POWER_STATES },
> +	{ "Utilities",			FWTS_FLAG_UTILS },
> +	{ "Unsafe",			FWTS_FLAG_UNSAFE },
> +	{ "UEFI",			FWTS_FLAG_TEST_UEFI },
> +	{ NULL,				0 },
> +};
> +
>   static fwts_list tests_to_skip;
>   
>   static fwts_option fwts_framework_options[] = {
> @@ -85,6 +103,7 @@ static fwts_option fwts_framework_options[] = {
>   	{ "uefi",		"",   0, "Run UEFI tests." },
>   	{ "rsdp",		"R:", 1, "Specify the physical address of the ACPI RSDP." },
>   	{ "pm-method",  "",   1, "Select the power method to use. Accepted values are \"logind\", \"pm-utils\", \"sysfs\""},
> +	{ "show-tests-categories","", 0, "Show tests and associated categories." },
>   	{ NULL, NULL, 0, NULL }
>   };
>   
> @@ -173,7 +192,7 @@ int fwts_framework_compare_test_name(void *data1, void *data2)
>   }
>   
>   /*
> - *  fwts_framework_show_tests()
> + *  fwts_framework_show_tests_brief()
>    *	dump out registered tests in brief form
>    */
>   static void fwts_framework_show_tests_brief(void)
> @@ -207,6 +226,49 @@ static void fwts_framework_show_tests_brief(void)
>   }
>   
>   /*
> + *  fwts_framework_show_tests_categories()
> + *	dump out registered tests in brief form with categories
> + */
> +static void fwts_framework_show_tests_categories(void)
> +{
> +	fwts_list sorted;
> +	fwts_list_link *item;
> +
> +	fwts_list_init(&sorted);
> +
> +	fwts_list_foreach(item, &fwts_framework_test_list) {
> +		fwts_list_add_ordered(&sorted,
> +			fwts_list_data(fwts_framework_test *, item),
> +			fwts_framework_compare_test_name);
> +	}
> +
> +	fwts_list_foreach(item, &sorted) {
> +		fwts_framework_test *test = fwts_list_data(fwts_framework_test*, item);
> +		int i, n = 0;
> +
> +		printf("%-17.17s", test->name);
> +
> +		for (i = 0; categories[i].title != NULL; i++) {
> +			if (categories[i].flag & test->flags) {
> +				char *src = (char *)categories[i].title, *dst;
> +				size_t len = strlen(src) + 1;
> +				char buf[len];
> +
> +				for (dst = buf; *src; src++, dst++)
> +					*dst = tolower(*src);
> +				*dst = '\0';
> +
> +				printf("%s%s",
> +					n == 0 ? " " : ", ", buf);
> +				n++;
> +			}
> +		}
> +		putchar('\n');
> +	}
> +	fwts_list_free_items(&sorted, NULL);
> +}
> +
> +/*
>    *  fwts_framework_show_tests()
>    *	dump out registered tests.
>    */
> @@ -218,23 +280,6 @@ static void fwts_framework_show_tests(fwts_framework *fw, const bool full)
>   	bool need_nl = false;
>   	int total = 0;
>   
> -	typedef struct {
> -		const char *title;		/* Test category */
> -		fwts_framework_flags flag;	/* Mask of category */
> -	} fwts_categories;
> -
> -	static fwts_categories categories[] = {
> -		{ "Batch",			FWTS_FLAG_BATCH },
> -		{ "Interactive",		FWTS_FLAG_INTERACTIVE },
> -		{ "Batch Experimental",		FWTS_FLAG_BATCH_EXPERIMENTAL },
> -		{ "Interactive Experimental",	FWTS_FLAG_INTERACTIVE_EXPERIMENTAL },
> -		{ "Power States",		FWTS_FLAG_POWER_STATES },
> -		{ "Utilities",			FWTS_FLAG_UTILS },
> -		{ "Unsafe",			FWTS_FLAG_UNSAFE },
> -		{ "UEFI",			FWTS_FLAG_TEST_UEFI },
> -		{ NULL,				0 },
> -	};
> -
>   	/* Dump out tests registered under all categories */
>   	for (i = 0; categories[i].title != NULL; i++) {
>   
> @@ -1170,6 +1215,9 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
>   			if (fwts_framework_pm_method_parse(fw, optarg) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> +		case 39: /* --show-tests-categories */
> +			fw->flags |= FWTS_FLAG_SHOW_TESTS_CATEGORIES;
> +			break;
>   		}
>   		break;
>   	case 'a': /* --all */
> @@ -1322,6 +1370,10 @@ int fwts_framework_args(const int argc, char **argv)
>   		fwts_framework_show_tests(fw, true);
>   		goto tidy_close;
>   	}
> +	if (fw->flags & FWTS_FLAG_SHOW_TESTS_CATEGORIES) {
> +		fwts_framework_show_tests_categories();
> +		goto tidy_close;
> +	}
>   	if ((fw->flags & FWTS_FLAG_RUN_ALL) == 0)
>   		fw->flags |= FWTS_FLAG_BATCH;
>   	if ((fw->lspci == NULL) || (fw->results_logname == NULL)) {

Acked-by: Ivan Hu <ivan.hu at canonical.com>



More information about the fwts-devel mailing list