[PATCH 2/2] uefirtvariable: add stress test for UEFI runtime interface GetNextVariableName
Ivan Hu
ivan.hu at canonical.com
Thu Dec 27 08:06:51 UTC 2012
This stress test tests the UEFI runtime interface GetNextVariableName by
calling multiple times.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
src/uefi/uefirtvariable/uefirtvariable.c | 84 ++++++++++++++++++++++++++++++
1 file changed, 84 insertions(+)
diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
index a8b9326..73d1049 100644
--- a/src/uefi/uefirtvariable/uefirtvariable.c
+++ b/src/uefi/uefirtvariable/uefirtvariable.c
@@ -718,6 +718,85 @@ static int do_queryvariableinfo(uint64_t *status, uint64_t *remvarstoragesize, u
return FWTS_OK;
}
+static int getnextvariable_multitest(fwts_framework *fw, uint32_t multitesttime)
+{
+ long ioret;
+ uint64_t status;
+ uint32_t i;
+
+ struct efi_setvariable setvariable;
+
+ uint64_t dataindex, datasize = 10;
+ uint8_t data[MAX_DATA_LENGTH];
+
+ struct efi_getnextvariablename getnextvariablename;
+ uint64_t variablenamesize = MAX_DATA_LENGTH;
+ uint16_t variablename[MAX_DATA_LENGTH];
+ EFI_GUID vendorguid;
+
+ for (dataindex = 0; dataindex < datasize; dataindex++)
+ data[dataindex] = (uint8_t)dataindex;
+ data[dataindex] = '\0';
+
+ setvariable.VariableName = variablenametest;
+ setvariable.VendorGuid = >estguid1;
+ setvariable.Attributes = attributes;
+ setvariable.DataSize = datasize;
+ setvariable.Data = data;
+ setvariable.status = &status;
+
+ ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
+
+ if (ioret == -1) {
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable",
+ "Failed to set variable with UEFI runtime service.");
+ return FWTS_ERROR;
+ }
+
+ getnextvariablename.VariableNameSize = &variablenamesize;
+ getnextvariablename.VariableName = variablename;
+ getnextvariablename.VendorGuid = &vendorguid;
+ getnextvariablename.status = &status;
+
+ for (i = 0; i < multitesttime; i++) {
+ variablename[0] = '\0';
+ variablenamesize = MAX_DATA_LENGTH;
+ ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename);
+
+ if (ioret == -1) {
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName",
+ "Failed to get next variable name with UEFI runtime service.");
+ goto err_restore_env;
+ }
+ };
+
+ setvariable.DataSize = 0;
+
+ ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
+
+ if (ioret == -1) {
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable",
+ "Failed to set variable with UEFI runtime service.");
+ return FWTS_ERROR;
+ }
+
+ return FWTS_OK;
+
+err_restore_env:
+
+ setvariable.DataSize = 0;
+
+ ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
+
+ if (ioret == -1) {
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable",
+ "Failed to delete variable with UEFI runtime service.");
+ }
+
+ return FWTS_ERROR;
+}
+
+
static int uefirtvariable_test1(fwts_framework *fw)
{
uint64_t datasize = 10;
@@ -813,6 +892,11 @@ static int uefirtvariable_test5(fwts_framework *fw)
return FWTS_ERROR;
fwts_passed(fw, "GetVariable on getting the variable multiple times passed.");
+ fwts_log_info(fw, "Testing GetNextVariableName on getting the variable multiple times.");
+ if (getnextvariable_multitest(fw, multitesttime) == FWTS_ERROR)
+ return FWTS_ERROR;
+ fwts_passed(fw, "GetNextVariableName on getting the next variable name multiple times passed.");
+
return FWTS_OK;
}
--
1.7.10.4
More information about the fwts-devel
mailing list