aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c')
-rw-r--r--roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c b/roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c
new file mode 100644
index 000000000..dcd9e9d59
--- /dev/null
+++ b/roms/skiboot/libstb/secvar/test/secvar-test-nextvar.c
@@ -0,0 +1,106 @@
+// 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 = "nextvar";
+
+int run_test(void)
+{
+ int64_t rc;
+
+ struct secvar *tmpvar;
+
+ char key[1024] = {0};
+ uint64_t key_len = 16;
+
+ // Load up the bank with some variables.
+ // If these fail, we have bigger issues.
+ ASSERT(list_length(&variable_bank) == 0);
+ tmpvar = new_secvar("test1", 6, NULL, 0, 0);
+ list_add_tail(&variable_bank, &tmpvar->link);
+ ASSERT(list_length(&variable_bank) == 1);
+
+ tmpvar = new_secvar("test2", 5, NULL, 0, 0); // ascii w/o null
+ list_add_tail(&variable_bank, &tmpvar->link);
+ ASSERT(list_length(&variable_bank) == 2);
+
+ tmpvar = new_secvar((const char*) L"test3", 5*2, NULL, 0, 0); // wide char "unicode"
+ list_add_tail(&variable_bank, &tmpvar->link);
+ ASSERT(list_length(&variable_bank) == 3);
+
+ // Test sequential nexts
+ // first item
+ memset(key, 0, sizeof(key));
+ key_len = 0;
+ rc = secvar_get_next(key, &key_len, sizeof(key));
+ ASSERT(rc == OPAL_SUCCESS);
+ ASSERT(key_len == 6);
+ ASSERT(!memcmp(key, "test1", key_len));
+
+ // second item
+ rc = secvar_get_next(key, &key_len, sizeof(key));
+ ASSERT(rc == OPAL_SUCCESS);
+ ASSERT(key_len == 5);
+ ASSERT(!memcmp(key, "test2", key_len));
+
+ // last item
+ rc = secvar_get_next(key, &key_len, sizeof(key));
+ ASSERT(rc == OPAL_SUCCESS);
+ ASSERT(key_len == 5*2);
+ ASSERT(!memcmp(key, L"test3", key_len));
+
+ // end-of-list
+ rc = secvar_get_next(key, &key_len, sizeof(key));
+ ASSERT(rc == OPAL_EMPTY);
+
+
+ memset(key, 0, sizeof(key));
+ /*** Time for a break to test bad parameters ***/
+ // null key
+ rc = secvar_get_next(NULL, &key_len, 1024);
+ ASSERT(rc == OPAL_PARAMETER);
+ // Size too small
+ key_len = 0;
+ rc = secvar_get_next(key, &key_len, 1);
+ ASSERT(rc == OPAL_PARTIAL);
+ ASSERT(key_len == 6);
+ // Supplied key length is larger than the buffer
+ key_len = 6;
+ rc = secvar_get_next(key, &key_len, 1);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ // NULL key_len pointer
+ rc = secvar_get_next(key, NULL, 1024);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ // NULL key_len pointer
+ key_len = ~0;
+ rc = secvar_get_next(key, &key_len, 1024);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ // zero key_len
+ key_len = 0;
+ rc = secvar_get_next(key, &key_len, 0);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ // Non-existing previous variable
+ key_len = 1024;
+ memcpy(key, L"foobar", 7*2);
+ rc = secvar_get_next(key, &key_len, 1024);
+ ASSERT(rc == OPAL_PARAMETER);
+
+ secvar_enabled = 0;
+ rc = secvar_get_next(key, &key_len, 1024);
+ ASSERT(rc == OPAL_UNSUPPORTED);
+ secvar_enabled = 1;
+
+ secvar_ready = 0;
+ rc = secvar_get_next(key, &key_len, 1024);
+ ASSERT(rc == OPAL_RESOURCE);
+ secvar_ready = 1;
+
+ clear_bank_list(&variable_bank);
+
+ return 0;
+}