aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/libstb/secvar/test/secvar-test-getvar.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/libstb/secvar/test/secvar-test-getvar.c')
-rw-r--r--roms/skiboot/libstb/secvar/test/secvar-test-getvar.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/roms/skiboot/libstb/secvar/test/secvar-test-getvar.c b/roms/skiboot/libstb/secvar/test/secvar-test-getvar.c
new file mode 100644
index 000000000..a2e066812
--- /dev/null
+++ b/roms/skiboot/libstb/secvar/test/secvar-test-getvar.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/* Copyright 2019 IBM Corp. */
+
+#include "secvar_api_test.c"
+
+const char *secvar_test_name = "getvar";
+
+// Run tests on the less obvious features of secvar_get
+// Includes:
+// - Partial reads
+// - Size queries (NULL buffer)
+//int run_test_helper(uint64_t bank_enum)
+int run_test(void)
+{
+ int64_t rc;
+
+ uint64_t size;
+ char *temp = zalloc(100);
+ char key[1024] = {0};
+
+ struct secvar *var;
+ size_t data_size = sizeof("foobar");
+ char *data = zalloc(data_size);
+ uint64_t key_len = 4;
+ memcpy(data, "foobar", data_size);
+ memcpy(key, "test", 4);
+
+ // List should be empty at start
+ rc = secvar_get(key, key_len, temp, &size);
+ ASSERT(rc == OPAL_EMPTY);
+ ASSERT(list_length(&variable_bank) == 0);
+
+ // Manually add variables, and check get_variable call
+ var = new_secvar(key, key_len, data, data_size, 0);
+ list_add_tail(&variable_bank, &var->link);
+
+ ASSERT(list_length(&variable_bank) == 1);
+
+ // TEST ONLY DATA
+ // Test actual variable get
+ size = data_size;
+ rc = secvar_get(key, key_len, temp, &size);
+ ASSERT(rc == OPAL_SUCCESS);
+ ASSERT(0 == memcmp("foobar", var->data, size));
+
+ // Test buffer too small
+ size = data_size / 2;
+ memset(temp, 0, 100);
+ rc = secvar_get(key, key_len, temp, &size);
+ ASSERT(rc == OPAL_PARTIAL);
+
+ size = 0;
+ rc = secvar_get(key, key_len, temp, &size);
+ ASSERT(rc == OPAL_PARTIAL);
+ ASSERT(size == data_size);
+
+ // Test size query w/ no data
+ size = 0;
+ rc = secvar_get(key, key_len, NULL, &size);
+ ASSERT(rc == OPAL_SUCCESS);
+ ASSERT(size == data_size);
+
+ /**** Error/Bad param cases ****/
+ // NULL key
+ rc = secvar_get(NULL, key_len, data, &data_size);
+ ASSERT(rc == OPAL_PARAMETER);
+ // zero key_len
+ rc = secvar_get(key, 0, data, &data_size);
+ ASSERT(rc == OPAL_PARAMETER);
+ // NULL size, valid data
+ rc = secvar_get(key, key_len, data, NULL);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ secvar_enabled = 0;
+ rc = secvar_get(key, key_len, data, &data_size);
+ ASSERT(rc == OPAL_UNSUPPORTED);
+ secvar_enabled = 1;
+
+ secvar_ready = 0;
+ rc = secvar_get(key, key_len, data, &data_size);
+ ASSERT(rc == OPAL_RESOURCE);
+ secvar_ready = 1;
+
+ free(data);
+ free(temp);
+
+ return 0;
+}
+