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