NACK: [PATCH] uefi: uefirtvariable: add options to specify iterations in variable stress tests (LP: #1197742)

Colin Ian King colin.king at canonical.com
Thu Jul 4 10:43:51 UTC 2013


On 04/07/13 11:27, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
> 
> While the defaults to the uefirtvariable stress tests are great,
> it would be useful if we can set the number of iterations to push
> the stress testing further if required.
> 
> Adding three new command line options:
> 
> --uefi-get-var-multiple, --uefi-set-var-multiple, --uefi-query-var-multiple
> 
> And updating the man page accordingly
> 
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  doc/fwts.1                               |  9 +++
>  src/uefi/uefirtvariable/uefirtvariable.c | 96 +++++++++++++++++++++++++++++---
>  2 files changed, 96 insertions(+), 9 deletions(-)
> 
> diff --git a/doc/fwts.1 b/doc/fwts.1
> index 187751c..ad93287 100644
> --- a/doc/fwts.1
> +++ b/doc/fwts.1
> @@ -95,6 +95,15 @@ Load ACPI tables from output generated from acpidump or from sudo fwts \-\-dump.
>  latter is preferred as fwts \-\-dump is able to dump more tables than acpidump. This
>  allows one to dump tables from one machine and processes them with fwts on another machine.
>  .TP
> +.B \-\-uefi\-get\-var\-multiple
> +Specifies the number of times to get a variable in the uefirtvariable get variable stress test.
> +.TP
> +.B \-\-uefi\-set\-var\-multiple
> +Specifies the number of times to set a variable in the uefirtvariable set variable stress test.
> +.TP
> +.B \-\-uefi\-query\-var\-multiple
> +Specifies the number of times to query a variable in the uefirtvariable query variable stress test.
> +.TP
>  .B \-\-filter\-error\-discard
>  Specifies the errors that one wants to silently ignore.  One supplies a comma sperated
>  list of fwts error message labels that one wants fwts to not report as errors. fwts will
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index 42e4545..09aa457 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -46,6 +46,14 @@ static int fd;
>  static EFI_GUID gtestguid1 = TEST_GUID1;
>  static EFI_GUID gtestguid2 = TEST_GUID2;
>  
> +static uint32_t uefi_get_variable_multiple = 1024;
> +static uint32_t uefi_set_variable_multiple = 40;
> +static uint32_t uefi_query_variable_multiple = 1024;
> +
> +#define UEFI_GET_VARIABLE_MULTIPLE_MAX		(100000)
> +#define UEFI_SET_VARIABLE_MULTIPLE_MAX		 (10000)
> +#define UEFI_QUERY_VARIABLE_MULTIPLE_MAX	(100000)
> +
>  static uint32_t attributes =
>  	FWTS_UEFI_VAR_NON_VOLATILE |
>  	FWTS_UEFI_VAR_BOOTSERVICE_ACCESS |
> @@ -1406,10 +1414,11 @@ static int uefirtvariable_test4(fwts_framework *fw)
>  static int uefirtvariable_test5(fwts_framework *fw)
>  {
>  	int ret;
> -	uint32_t multitesttime = 1024;
> +	uint32_t multitesttime = uefi_get_variable_multiple;
>  	uint64_t datasize = 10;
>  
> -	fwts_log_info(fw, "Testing GetVariable on getting the variable multiple times.");
> +	fwts_log_info(fw, "Testing GetVariable on getting the variable %" PRIu32
> +		" times.", uefi_get_variable_multiple);
>  	ret = getvariable_test(fw, datasize, variablenametest, multitesttime);
>  	if (ret != FWTS_OK)
>  		return ret;
> @@ -1428,14 +1437,15 @@ static int uefirtvariable_test5(fwts_framework *fw)
>  static int uefirtvariable_test6(fwts_framework *fw)
>  {
>  	int ret;
> -	uint32_t multitesttime = 40;
> +	uint32_t multitesttime = uefi_set_variable_multiple;
>  	uint64_t datasize = 10;
>  	uint8_t datadiff = 0;
>  	uint32_t i, j;
>  	uint8_t variablenamelength = 32;
>  	uint16_t variablenametest4[variablenamelength+1];
>  
> -	fwts_log_info(fw, "Testing SetVariable on setting the variable with the same data multiple times.");
> +	fwts_log_info(fw, "Testing SetVariable on setting the variable with the same data %" PRIu32
> +		" times.", uefi_set_variable_multiple);
>  	for (i = 0; i < multitesttime; i++) {
>  		ret = setvariable_insertvariable(fw, attributes, datasize,
>  			variablenametest, &gtestguid1, datadiff);
> @@ -1512,12 +1522,15 @@ static int uefirtvariable_test6(fwts_framework *fw)
>  
>  static int uefirtvariable_test7(fwts_framework *fw)
>  {
> -	uint32_t multitesttime = 1024;
> +	uint32_t multitesttime = uefi_query_variable_multiple;
>  	uint64_t status;
>  	uint64_t remvarstoragesize;
>  	uint64_t maxvariablesize;
>  	uint32_t i;
>  
> +	fwts_log_info(fw, "Testing QueryVariableInfo on querying the variable %" PRIu32
> +		" times.", uefi_query_variable_multiple);
> +
>  	/* first check if the firmware support QueryVariableInfo interface */
>  	if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
>  		if (status == EFI_UNSUPPORTED) {
> @@ -1555,6 +1568,68 @@ static int uefirtvariable_test7(fwts_framework *fw)
>  	return FWTS_OK;
>  }
>  
> +static int options_check(fwts_framework *fw)
> +{
> +	FWTS_UNUSED(fw);
> +
> +	if ((uefi_get_variable_multiple < 1) ||
> +	    (uefi_get_variable_multiple > UEFI_GET_VARIABLE_MULTIPLE_MAX)) {
> +		fprintf(stderr, "--uefi-get-variable-multiple is %" PRIu32", it "
> +			"should be 1..%" PRIu32 "\n",
> +			uefi_get_variable_multiple, UEFI_GET_VARIABLE_MULTIPLE_MAX);
> +		return FWTS_ERROR;
> +	}
> +	if ((uefi_set_variable_multiple < 1) ||
> +	    (uefi_set_variable_multiple > UEFI_SET_VARIABLE_MULTIPLE_MAX)) {
> +		fprintf(stderr, "--uefi-set-variable-multiple is %" PRIu32", it "
> +			"should be 1..%" PRIu32 "\n",
> +			uefi_set_variable_multiple, UEFI_SET_VARIABLE_MULTIPLE_MAX);
> +		return FWTS_ERROR;
> +	}
> +	if ((uefi_query_variable_multiple < 1) ||
> +	    (uefi_query_variable_multiple > UEFI_QUERY_VARIABLE_MULTIPLE_MAX)) {
> +		fprintf(stderr, "--uefi-query-variable-multiple is %" PRIu32", it "
> +			"should be 1..%" PRIu32 "\n",
> +			uefi_query_variable_multiple, UEFI_QUERY_VARIABLE_MULTIPLE_MAX);
> +		return FWTS_ERROR;
> +	}
> +	return FWTS_OK;
> +}
> +
> +static int options_handler(
> +	fwts_framework *fw,
> +	int argc,
> +	char * const argv[],
> +	int option_char,
> +	int long_index)
> +{
> +	FWTS_UNUSED(fw);
> +	FWTS_UNUSED(argc);
> +	FWTS_UNUSED(argv);
> +
> +	if (option_char == 0) {
> +		switch (long_index) {
> +		case 0:	/* --uefi-get-var-multiple */
> +			uefi_get_variable_multiple = strtoul(optarg, NULL, 10);
> +			break;
> +		case 1:	/* --uefi-set-var-multiple */
> +			uefi_set_variable_multiple = strtoul(optarg, NULL, 10);
> +			break;
> +		case 2: /* --uefi-query-var-multiple */
> +			uefi_query_variable_multiple = strtoul(optarg, NULL, 10);
> +			break;
> +		}
> +	}
> +	return FWTS_OK;
> +}
> +
> +static fwts_option options[] = {
> +	{ "uefi-get-var-multiple",	"", 1, "Run uefirtvariable get variable test multiple times." },
> +	{ "uefi-set-var-multiple",	"", 1, "Run uefirtvariable set variable test multiple times." },
> +	{ "uefi-query-var-multiple", 	"", 1, "Run uefirtvariable query variable test multiple times." },
> +	{ NULL, NULL, 0, NULL }
> +};
> +
>  static fwts_framework_minor_test uefirtvariable_tests[] = {
>  	{ uefirtvariable_test1, "Test UEFI RT service get variable interface." },
>  	{ uefirtvariable_test2, "Test UEFI RT service get next variable name interface." },
> @@ -1567,10 +1642,13 @@ static fwts_framework_minor_test uefirtvariable_tests[] = {
>  };
>  
>  static fwts_framework_ops uefirtvariable_ops = {
> -	.description = "UEFI Runtime service variable interface tests.",
> -	.init        = uefirtvariable_init,
> -	.deinit      = uefirtvariable_deinit,
> -	.minor_tests = uefirtvariable_tests
> +	.description     = "UEFI Runtime service variable interface tests.",
> +	.init            = uefirtvariable_init,
> +	.deinit          = uefirtvariable_deinit,
> +	.minor_tests     = uefirtvariable_tests,
> +	.options         = options,
> +	.options_handler = options_handler,
> +	.options_check   = options_check,
>  };
>  
>  FWTS_REGISTER("uefirtvariable", &uefirtvariable_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV);
> 
Sorry, NACK, wrong patch. Doh.




More information about the fwts-devel mailing list