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 = "nextvar";
7 : :
8 : 1 : int run_test(void)
9 : : {
10 : : int64_t rc;
11 : :
12 : : struct secvar *tmpvar;
13 : :
14 : 1 : char key[1024] = {0};
15 : 1 : uint64_t key_len = 16;
16 : :
17 : : // Load up the bank with some variables.
18 : : // If these fail, we have bigger issues.
19 : 1 : ASSERT(list_length(&variable_bank) == 0);
20 : 1 : tmpvar = new_secvar("test1", 6, NULL, 0, 0);
21 : 1 : list_add_tail(&variable_bank, &tmpvar->link);
22 : 1 : ASSERT(list_length(&variable_bank) == 1);
23 : :
24 : 1 : tmpvar = new_secvar("test2", 5, NULL, 0, 0); // ascii w/o null
25 : 1 : list_add_tail(&variable_bank, &tmpvar->link);
26 : 1 : ASSERT(list_length(&variable_bank) == 2);
27 : :
28 : 1 : tmpvar = new_secvar((const char*) L"test3", 5*2, NULL, 0, 0); // wide char "unicode"
29 : 1 : list_add_tail(&variable_bank, &tmpvar->link);
30 : 1 : ASSERT(list_length(&variable_bank) == 3);
31 : :
32 : : // Test sequential nexts
33 : : // first item
34 : 1 : memset(key, 0, sizeof(key));
35 : 1 : key_len = 0;
36 : 1 : rc = secvar_get_next(key, &key_len, sizeof(key));
37 : 1 : ASSERT(rc == OPAL_SUCCESS);
38 : 1 : ASSERT(key_len == 6);
39 : 1 : ASSERT(!memcmp(key, "test1", key_len));
40 : :
41 : : // second item
42 : 1 : rc = secvar_get_next(key, &key_len, sizeof(key));
43 : 1 : ASSERT(rc == OPAL_SUCCESS);
44 : 1 : ASSERT(key_len == 5);
45 : 1 : ASSERT(!memcmp(key, "test2", key_len));
46 : :
47 : : // last item
48 : 1 : rc = secvar_get_next(key, &key_len, sizeof(key));
49 : 1 : ASSERT(rc == OPAL_SUCCESS);
50 : 1 : ASSERT(key_len == 5*2);
51 : 1 : ASSERT(!memcmp(key, L"test3", key_len));
52 : :
53 : : // end-of-list
54 : 1 : rc = secvar_get_next(key, &key_len, sizeof(key));
55 : 1 : ASSERT(rc == OPAL_EMPTY);
56 : :
57 : :
58 : 1 : memset(key, 0, sizeof(key));
59 : : /*** Time for a break to test bad parameters ***/
60 : : // null key
61 : 1 : rc = secvar_get_next(NULL, &key_len, 1024);
62 : 1 : ASSERT(rc == OPAL_PARAMETER);
63 : : // Size too small
64 : 1 : key_len = 0;
65 : 1 : rc = secvar_get_next(key, &key_len, 1);
66 : 1 : ASSERT(rc == OPAL_PARTIAL);
67 : 1 : ASSERT(key_len == 6);
68 : : // Supplied key length is larger than the buffer
69 : 1 : key_len = 6;
70 : 1 : rc = secvar_get_next(key, &key_len, 1);
71 : 1 : ASSERT(rc == OPAL_PARAMETER);
72 : :
73 : : // NULL key_len pointer
74 : 1 : rc = secvar_get_next(key, NULL, 1024);
75 : 1 : ASSERT(rc == OPAL_PARAMETER);
76 : :
77 : : // NULL key_len pointer
78 : 1 : key_len = ~0;
79 : 1 : rc = secvar_get_next(key, &key_len, 1024);
80 : 1 : ASSERT(rc == OPAL_PARAMETER);
81 : :
82 : : // zero key_len
83 : 1 : key_len = 0;
84 : 1 : rc = secvar_get_next(key, &key_len, 0);
85 : 1 : ASSERT(rc == OPAL_PARAMETER);
86 : :
87 : : // Non-existing previous variable
88 : 1 : key_len = 1024;
89 : 1 : memcpy(key, L"foobar", 7*2);
90 : 1 : rc = secvar_get_next(key, &key_len, 1024);
91 : 1 : ASSERT(rc == OPAL_PARAMETER);
92 : :
93 : 1 : secvar_enabled = 0;
94 : 1 : rc = secvar_get_next(key, &key_len, 1024);
95 : 1 : ASSERT(rc == OPAL_UNSUPPORTED);
96 : 1 : secvar_enabled = 1;
97 : :
98 : 1 : secvar_ready = 0;
99 : 1 : rc = secvar_get_next(key, &key_len, 1024);
100 : 1 : ASSERT(rc == OPAL_RESOURCE);
101 : 1 : secvar_ready = 1;
102 : :
103 : 1 : clear_bank_list(&variable_bank);
104 : :
105 : 1 : return 0;
106 : : }
|