Branch data Line data Source code
1 : : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2 : : /* Copyright 2019 IBM Corp. */
3 : :
4 : : #include "secvar_api_test.c"
5 : :
6 : : const char *secvar_test_name = "getvar";
7 : :
8 : : // Run tests on the less obvious features of secvar_get
9 : : // Includes:
10 : : // - Partial reads
11 : : // - Size queries (NULL buffer)
12 : : //int run_test_helper(uint64_t bank_enum)
13 : 1 : int run_test(void)
14 : : {
15 : : int64_t rc;
16 : :
17 : : uint64_t size;
18 : 1 : char *temp = zalloc(100);
19 : 1 : char key[1024] = {0};
20 : :
21 : : struct secvar *var;
22 : 1 : size_t data_size = sizeof("foobar");
23 : 1 : char *data = zalloc(data_size);
24 : 1 : uint64_t key_len = 4;
25 : 1 : memcpy(data, "foobar", data_size);
26 : 1 : memcpy(key, "test", 4);
27 : :
28 : : // List should be empty at start
29 : 1 : rc = secvar_get(key, key_len, temp, &size);
30 : 1 : ASSERT(rc == OPAL_EMPTY);
31 : 1 : ASSERT(list_length(&variable_bank) == 0);
32 : :
33 : : // Manually add variables, and check get_variable call
34 : 1 : var = new_secvar(key, key_len, data, data_size, 0);
35 : 1 : list_add_tail(&variable_bank, &var->link);
36 : :
37 : 1 : ASSERT(list_length(&variable_bank) == 1);
38 : :
39 : : // TEST ONLY DATA
40 : : // Test actual variable get
41 : 1 : size = data_size;
42 : 1 : rc = secvar_get(key, key_len, temp, &size);
43 : 1 : ASSERT(rc == OPAL_SUCCESS);
44 : 1 : ASSERT(0 == memcmp("foobar", var->data, size));
45 : :
46 : : // Test buffer too small
47 : 1 : size = data_size / 2;
48 : 1 : memset(temp, 0, 100);
49 : 1 : rc = secvar_get(key, key_len, temp, &size);
50 : 1 : ASSERT(rc == OPAL_PARTIAL);
51 : :
52 : 1 : size = 0;
53 : 1 : rc = secvar_get(key, key_len, temp, &size);
54 : 1 : ASSERT(rc == OPAL_PARTIAL);
55 : 1 : ASSERT(size == data_size);
56 : :
57 : : // Test size query w/ no data
58 : 1 : size = 0;
59 : 1 : rc = secvar_get(key, key_len, NULL, &size);
60 : 1 : ASSERT(rc == OPAL_SUCCESS);
61 : 1 : ASSERT(size == data_size);
62 : :
63 : : /**** Error/Bad param cases ****/
64 : : // NULL key
65 : 1 : rc = secvar_get(NULL, key_len, data, &data_size);
66 : 1 : ASSERT(rc == OPAL_PARAMETER);
67 : : // zero key_len
68 : 1 : rc = secvar_get(key, 0, data, &data_size);
69 : 1 : ASSERT(rc == OPAL_PARAMETER);
70 : : // NULL size, valid data
71 : 1 : rc = secvar_get(key, key_len, data, NULL);
72 : 1 : ASSERT(rc == OPAL_PARAMETER);
73 : :
74 : 1 : secvar_enabled = 0;
75 : 1 : rc = secvar_get(key, key_len, data, &data_size);
76 : 1 : ASSERT(rc == OPAL_UNSUPPORTED);
77 : 1 : secvar_enabled = 1;
78 : :
79 : 1 : secvar_ready = 0;
80 : 1 : rc = secvar_get(key, key_len, data, &data_size);
81 : 1 : ASSERT(rc == OPAL_RESOURCE);
82 : 1 : secvar_ready = 1;
83 : :
84 : 1 : free(data);
85 : 1 : free(temp);
86 : :
87 : 1 : return 0;
88 : : }
89 : :
|