blob: a2e06681288cb97e1a737d32202c8c30a301a2be [file] [log] [blame]
// 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;
}