summaryrefslogtreecommitdiff
path: root/mock-variables.c
diff options
context:
space:
mode:
authorPeter Jones <pjones@redhat.com>2021-08-03 13:11:14 -0400
committerPeter Jones <pjones@redhat.com>2021-09-07 17:05:04 -0400
commit54bc72cf0abd306d96782cdfa6db7c71ff72e056 (patch)
treed5a52d1a05c4084edbc444a6b9bb2891ff3a8645 /mock-variables.c
parent2c9eebcf6ddd198c5ba49d784c4536d05023c28b (diff)
downloadefi-boot-shim-54bc72cf0abd306d96782cdfa6db7c71ff72e056.tar.gz
efi-boot-shim-54bc72cf0abd306d96782cdfa6db7c71ff72e056.zip
tests: model different behaviors for deleting variables
Signed-off-by: Peter Jones <pjones@redhat.com>
Diffstat (limited to 'mock-variables.c')
-rw-r--r--mock-variables.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/mock-variables.c b/mock-variables.c
index d8342d59..e02febec 100644
--- a/mock-variables.c
+++ b/mock-variables.c
@@ -27,6 +27,8 @@ list_t mock_variables = LIST_HEAD_INIT(mock_variables);
mock_sort_policy_t mock_variable_sort_policy = MOCK_SORT_APPEND;
+UINT32 mock_variable_delete_attr_policy;
+
static const size_t guidstr_size = sizeof("8be4df61-93ca-11d2-aa0d-00e098032b8c");
static int
@@ -708,9 +710,23 @@ mock_set_variable(CHAR16 *name, EFI_GUID *guid, UINT32 attrs, UINTN size,
__FILE__, __LINE__ - 1, __func__,
var, format_var_attrs(var->attrs), cmp, size);
#endif
- if (!mock_sv_attrs_match(var->attrs, attrs) && !(attrs == 0 && size == 0)) {
+ if (!mock_sv_attrs_match(var->attrs, attrs)) {
status = EFI_INVALID_PARAMETER;
- return status;
+ if (size == 0 && !(attrs & EFI_VARIABLE_APPEND_WRITE)) {
+ if ((mock_variable_delete_attr_policy & MOCK_VAR_DELETE_ATTR_ALLOW_ZERO)
+ && attrs == 0) {
+ status = EFI_SUCCESS;
+ } else if (mock_variable_delete_attr_policy & MOCK_VAR_DELETE_ATTR_ALOW_MISMATCH) {
+ status = EFI_SUCCESS;
+ }
+ }
+ if (EFI_ERROR(status)) {
+ printf("%s:%d:%s(): var->attrs:%s attrs:%s\n",
+ __FILE__, __LINE__ - 1, __func__,
+ format_var_attrs(var->attrs),
+ format_var_attrs(attrs));
+ return status;
+ }
}
if (attrs & EFI_VARIABLE_APPEND_WRITE)
@@ -1004,6 +1020,8 @@ mock_reset_variables(void)
INIT_LIST_HEAD(&mock_variables);
mock_set_default_usage_limits();
+ mock_variable_delete_attr_policy = MOCK_VAR_DELETE_ATTR_ALLOW_ZERO;
+
RT->GetVariable = mock_get_variable;
RT->GetNextVariableName = mock_get_next_variable_name;
RT->SetVariable = mock_set_variable;