Patchwork uefirtvariable: add stress test for the UEFI runtime QueryVariableInfo interface

login
register
mail settings
Submitter Ivan Hu
Date Jan. 14, 2013, 3:37 a.m.
Message ID <1358134635-17554-1-git-send-email-ivan.hu@canonical.com>
Download mbox | patch
Permalink /patch/211698/
State Accepted
Headers show

Comments

Ivan Hu - Jan. 14, 2013, 3:37 a.m.
The test first check if firmware support QueryVariableInfo interface, then do
the stress test by calling multi-times.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 src/uefi/uefirtvariable/uefirtvariable.c |   37 ++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
Colin King - Jan. 14, 2013, 9:17 a.m.
On 14/01/13 03:37, Ivan Hu wrote:
> The test first check if firmware support QueryVariableInfo interface, then do
> the stress test by calling multi-times.
>
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>   src/uefi/uefirtvariable/uefirtvariable.c |   37 ++++++++++++++++++++++++++++++
>   1 file changed, 37 insertions(+)
>
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index a70c4f6..e8aa041 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -1042,6 +1042,42 @@ static int uefirtvariable_test6(fwts_framework *fw)
>   	return FWTS_OK;
>   }
>
> +static int uefirtvariable_test7(fwts_framework *fw)
> +{
> +	uint32_t multitesttime = 1024;
> +	uint64_t status;
> +	uint64_t remvarstoragesize;
> +	uint64_t maxvariablesize;
> +	uint32_t i;
> +
> +	/* first check if the firmware support QueryVariableInfo interface */
> +	if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> +		if (status == EFI_UNSUPPORTED) {
> +			fwts_skipped(fw, "Not support the QueryVariableInfo UEFI runtime interface: cannot test.");
> +			fwts_advice(fw, "Firmware also needs to check if the revision of system table is correct or not."
> +					" Linux kernel returns EFI_UNSUPPORTED as well, if the FirmwareRevision"
> +					" of system table is less than EFI_2_00_SYSTEM_TABLE_REVISION.");
> +			return FWTS_SKIP;
> +		} else {
> +			fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
> +				"Failed to query variable info with UEFI runtime service.");
> +			fwts_uefi_print_status_info(fw, status);
> +			return FWTS_ERROR;
> +		}
> +	}
> +	for (i = 0; i < multitesttime; i++) {
> +		if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
> +				"Failed to query variable info with UEFI runtime service.");
> +			fwts_uefi_print_status_info(fw, status);
> +			return FWTS_ERROR;
> +		}
> +	}
> +	fwts_passed(fw, "UEFI runtime service query variable info interface stress test passed.");
> +
> +	return FWTS_OK;
> +}
> +
>   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." },
> @@ -1049,6 +1085,7 @@ static fwts_framework_minor_test uefirtvariable_tests[] = {
>   	{ uefirtvariable_test4, "Test UEFI RT service query variable info interface." },
>   	{ uefirtvariable_test5, "Test UEFI RT service variable interface stress test." },
>   	{ uefirtvariable_test6, "Test UEFI RT service set variable interface stress test." },
> +	{ uefirtvariable_test7, "Test UEFI RT service query variable info interface stress test." },
>   	{ NULL, NULL }
>   };
>
>
Acked-by: Colin Ian King <colin.king@canonical.com>
Keng-Yu Lin - Jan. 15, 2013, 5:13 a.m.
On Mon, Jan 14, 2013 at 11:37 AM, Ivan Hu <ivan.hu@canonical.com> wrote:
> The test first check if firmware support QueryVariableInfo interface, then do
> the stress test by calling multi-times.
>
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>  src/uefi/uefirtvariable/uefirtvariable.c |   37 ++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index a70c4f6..e8aa041 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -1042,6 +1042,42 @@ static int uefirtvariable_test6(fwts_framework *fw)
>         return FWTS_OK;
>  }
>
> +static int uefirtvariable_test7(fwts_framework *fw)
> +{
> +       uint32_t multitesttime = 1024;
> +       uint64_t status;
> +       uint64_t remvarstoragesize;
> +       uint64_t maxvariablesize;
> +       uint32_t i;
> +
> +       /* first check if the firmware support QueryVariableInfo interface */
> +       if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> +               if (status == EFI_UNSUPPORTED) {
> +                       fwts_skipped(fw, "Not support the QueryVariableInfo UEFI runtime interface: cannot test.");
> +                       fwts_advice(fw, "Firmware also needs to check if the revision of system table is correct or not."
> +                                       " Linux kernel returns EFI_UNSUPPORTED as well, if the FirmwareRevision"
> +                                       " of system table is less than EFI_2_00_SYSTEM_TABLE_REVISION.");
> +                       return FWTS_SKIP;
> +               } else {
> +                       fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
> +                               "Failed to query variable info with UEFI runtime service.");
> +                       fwts_uefi_print_status_info(fw, status);
> +                       return FWTS_ERROR;
> +               }
> +       }
> +       for (i = 0; i < multitesttime; i++) {
> +               if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> +                       fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
> +                               "Failed to query variable info with UEFI runtime service.");
> +                       fwts_uefi_print_status_info(fw, status);
> +                       return FWTS_ERROR;
> +               }
> +       }
> +       fwts_passed(fw, "UEFI runtime service query variable info interface stress test passed.");
> +
> +       return FWTS_OK;
> +}
> +
>  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." },
> @@ -1049,6 +1085,7 @@ static fwts_framework_minor_test uefirtvariable_tests[] = {
>         { uefirtvariable_test4, "Test UEFI RT service query variable info interface." },
>         { uefirtvariable_test5, "Test UEFI RT service variable interface stress test." },
>         { uefirtvariable_test6, "Test UEFI RT service set variable interface stress test." },
> +       { uefirtvariable_test7, "Test UEFI RT service query variable info interface stress test." },
>         { NULL, NULL }
>  };
>
> --
> 1.7.10.4
>
Acked-by: Keng-Yu Lin <kengyu@canonical.com>

Patch

diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
index a70c4f6..e8aa041 100644
--- a/src/uefi/uefirtvariable/uefirtvariable.c
+++ b/src/uefi/uefirtvariable/uefirtvariable.c
@@ -1042,6 +1042,42 @@  static int uefirtvariable_test6(fwts_framework *fw)
 	return FWTS_OK;
 }
 
+static int uefirtvariable_test7(fwts_framework *fw)
+{
+	uint32_t multitesttime = 1024;
+	uint64_t status;
+	uint64_t remvarstoragesize;
+	uint64_t maxvariablesize;
+	uint32_t i;
+
+	/* first check if the firmware support QueryVariableInfo interface */
+	if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Not support the QueryVariableInfo UEFI runtime interface: cannot test.");
+			fwts_advice(fw, "Firmware also needs to check if the revision of system table is correct or not."
+					" Linux kernel returns EFI_UNSUPPORTED as well, if the FirmwareRevision"
+					" of system table is less than EFI_2_00_SYSTEM_TABLE_REVISION.");
+			return FWTS_SKIP;
+		} else {
+			fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
+				"Failed to query variable info with UEFI runtime service.");
+			fwts_uefi_print_status_info(fw, status);
+			return FWTS_ERROR;
+		}
+	}
+	for (i = 0; i < multitesttime; i++) {
+		if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
+			fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo",
+				"Failed to query variable info with UEFI runtime service.");
+			fwts_uefi_print_status_info(fw, status);
+			return FWTS_ERROR;
+		}
+	}
+	fwts_passed(fw, "UEFI runtime service query variable info interface stress test passed.");
+
+	return FWTS_OK;
+}
+
 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." },
@@ -1049,6 +1085,7 @@  static fwts_framework_minor_test uefirtvariable_tests[] = {
 	{ uefirtvariable_test4, "Test UEFI RT service query variable info interface." },
 	{ uefirtvariable_test5, "Test UEFI RT service variable interface stress test." },
 	{ uefirtvariable_test6, "Test UEFI RT service set variable interface stress test." },
+	{ uefirtvariable_test7, "Test UEFI RT service query variable info interface stress test." },
 	{ NULL, NULL }
 };