// 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; }