xref: /aosp_15_r20/external/tpm2-tss/test/unit/tctildr-dl.c (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * Copyright 2019, Intel Corporation
5*758e9fbaSOystein Eftevaag  * All rights reserved.
6*758e9fbaSOystein Eftevaag  *******************************************************************************/
7*758e9fbaSOystein Eftevaag 
8*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
9*758e9fbaSOystein Eftevaag #include <config.h>
10*758e9fbaSOystein Eftevaag #endif
11*758e9fbaSOystein Eftevaag 
12*758e9fbaSOystein Eftevaag #include <stdio.h>
13*758e9fbaSOystein Eftevaag #include <stddef.h>
14*758e9fbaSOystein Eftevaag #include <stdlib.h>
15*758e9fbaSOystein Eftevaag 
16*758e9fbaSOystein Eftevaag #include <dlfcn.h>
17*758e9fbaSOystein Eftevaag 
18*758e9fbaSOystein Eftevaag #include <setjmp.h>
19*758e9fbaSOystein Eftevaag #include <cmocka.h>
20*758e9fbaSOystein Eftevaag 
21*758e9fbaSOystein Eftevaag #include "tss2_tcti.h"
22*758e9fbaSOystein Eftevaag 
23*758e9fbaSOystein Eftevaag #include "tss2-tcti/tctildr-interface.h"
24*758e9fbaSOystein Eftevaag #include "tss2-tcti/tctildr-dl.h"
25*758e9fbaSOystein Eftevaag #include "tss2-tcti/tctildr.h"
26*758e9fbaSOystein Eftevaag #define LOGMODULE test
27*758e9fbaSOystein Eftevaag #include "util/log.h"
28*758e9fbaSOystein Eftevaag 
29*758e9fbaSOystein Eftevaag /* global TCTI object, use to return reference from */
30*758e9fbaSOystein Eftevaag static TSS2_TCTI_CONTEXT_COMMON_V2 tcti_instance = { 0, };
31*758e9fbaSOystein Eftevaag 
32*758e9fbaSOystein Eftevaag char *
__wrap_dlerror(void)33*758e9fbaSOystein Eftevaag __wrap_dlerror(void)
34*758e9fbaSOystein Eftevaag {
35*758e9fbaSOystein Eftevaag     return (char*)__func__;
36*758e9fbaSOystein Eftevaag }
37*758e9fbaSOystein Eftevaag 
38*758e9fbaSOystein Eftevaag void *
__wrap_dlopen(const char * filename,int flags)39*758e9fbaSOystein Eftevaag __wrap_dlopen(const char *filename, int flags)
40*758e9fbaSOystein Eftevaag {
41*758e9fbaSOystein Eftevaag     LOG_TRACE("Called with filename %s and flags %x", filename, flags);
42*758e9fbaSOystein Eftevaag     check_expected_ptr(filename);
43*758e9fbaSOystein Eftevaag     check_expected(flags);
44*758e9fbaSOystein Eftevaag     return mock_type(void *);
45*758e9fbaSOystein Eftevaag }
46*758e9fbaSOystein Eftevaag 
47*758e9fbaSOystein Eftevaag int
__wrap_dlclose(void * handle)48*758e9fbaSOystein Eftevaag __wrap_dlclose(void *handle)
49*758e9fbaSOystein Eftevaag {
50*758e9fbaSOystein Eftevaag     LOG_TRACE("Called with handle %p", handle);
51*758e9fbaSOystein Eftevaag     check_expected_ptr(handle);
52*758e9fbaSOystein Eftevaag     return mock_type(int);
53*758e9fbaSOystein Eftevaag }
54*758e9fbaSOystein Eftevaag 
55*758e9fbaSOystein Eftevaag void *
__wrap_dlsym(void * handle,const char * symbol)56*758e9fbaSOystein Eftevaag __wrap_dlsym(void *handle, const char *symbol)
57*758e9fbaSOystein Eftevaag {
58*758e9fbaSOystein Eftevaag     LOG_TRACE("Called with handle %p and symbol %s", handle, symbol);
59*758e9fbaSOystein Eftevaag     check_expected_ptr(handle);
60*758e9fbaSOystein Eftevaag     check_expected_ptr(symbol);
61*758e9fbaSOystein Eftevaag     return mock_type(void *);
62*758e9fbaSOystein Eftevaag }
63*758e9fbaSOystein Eftevaag 
64*758e9fbaSOystein Eftevaag TSS2_TCTI_INFO *
__wrap_Tss2_Tcti_Fake_Info(void)65*758e9fbaSOystein Eftevaag __wrap_Tss2_Tcti_Fake_Info(void)
66*758e9fbaSOystein Eftevaag {
67*758e9fbaSOystein Eftevaag     LOG_TRACE("Called.");
68*758e9fbaSOystein Eftevaag     return mock_type(TSS2_TCTI_INFO *);
69*758e9fbaSOystein Eftevaag }
70*758e9fbaSOystein Eftevaag 
71*758e9fbaSOystein Eftevaag TSS2_RC
__wrap_tcti_from_init(TSS2_TCTI_INIT_FUNC init,const char * conf,TSS2_TCTI_CONTEXT ** tcti)72*758e9fbaSOystein Eftevaag __wrap_tcti_from_init(TSS2_TCTI_INIT_FUNC init,
73*758e9fbaSOystein Eftevaag                       const char* conf,
74*758e9fbaSOystein Eftevaag                       TSS2_TCTI_CONTEXT **tcti)
75*758e9fbaSOystein Eftevaag {
76*758e9fbaSOystein Eftevaag     printf("%s", __func__);
77*758e9fbaSOystein Eftevaag     return mock_type (TSS2_RC);
78*758e9fbaSOystein Eftevaag }
79*758e9fbaSOystein Eftevaag TSS2_RC
__wrap_tcti_from_info(TSS2_TCTI_INFO_FUNC infof,const char * conf,TSS2_TCTI_CONTEXT ** tcti)80*758e9fbaSOystein Eftevaag __wrap_tcti_from_info(TSS2_TCTI_INFO_FUNC infof,
81*758e9fbaSOystein Eftevaag                       const char* conf,
82*758e9fbaSOystein Eftevaag                       TSS2_TCTI_CONTEXT **tcti)
83*758e9fbaSOystein Eftevaag {
84*758e9fbaSOystein Eftevaag     check_expected (infof);
85*758e9fbaSOystein Eftevaag     check_expected (conf);
86*758e9fbaSOystein Eftevaag     check_expected (tcti);
87*758e9fbaSOystein Eftevaag     if (tcti != NULL)
88*758e9fbaSOystein Eftevaag         *tcti = mock_type (TSS2_TCTI_CONTEXT*);
89*758e9fbaSOystein Eftevaag     return mock_type (TSS2_RC);
90*758e9fbaSOystein Eftevaag }
91*758e9fbaSOystein Eftevaag 
92*758e9fbaSOystein Eftevaag #define TEST_HANDLE (void*)0xade0
93*758e9fbaSOystein Eftevaag static void
test_info_from_handle_null(void ** state)94*758e9fbaSOystein Eftevaag test_info_from_handle_null (void **state)
95*758e9fbaSOystein Eftevaag {
96*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO* info = info_from_handle (NULL);
97*758e9fbaSOystein Eftevaag     assert_null (info);
98*758e9fbaSOystein Eftevaag }
99*758e9fbaSOystein Eftevaag static void
test_info_from_handle_dlsym_fail(void ** state)100*758e9fbaSOystein Eftevaag test_info_from_handle_dlsym_fail (void **state)
101*758e9fbaSOystein Eftevaag {
102*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, TEST_HANDLE);
103*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
104*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, NULL);
105*758e9fbaSOystein Eftevaag 
106*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO* info = info_from_handle (TEST_HANDLE);
107*758e9fbaSOystein Eftevaag     assert_null (info);
108*758e9fbaSOystein Eftevaag }
109*758e9fbaSOystein Eftevaag static void
test_info_from_handle_success(void ** state)110*758e9fbaSOystein Eftevaag test_info_from_handle_success (void **state)
111*758e9fbaSOystein Eftevaag {
112*758e9fbaSOystein Eftevaag     TSS2_TCTI_INFO info_instance = { 0, };
113*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info = { 0, };
114*758e9fbaSOystein Eftevaag 
115*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, TEST_HANDLE);
116*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
117*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
118*758e9fbaSOystein Eftevaag 
119*758e9fbaSOystein Eftevaag     will_return(__wrap_Tss2_Tcti_Fake_Info, &info_instance);
120*758e9fbaSOystein Eftevaag 
121*758e9fbaSOystein Eftevaag     info = info_from_handle (TEST_HANDLE);
122*758e9fbaSOystein Eftevaag     assert_ptr_equal (info, &info_instance);
123*758e9fbaSOystein Eftevaag }
124*758e9fbaSOystein Eftevaag 
125*758e9fbaSOystein Eftevaag static void
test_fail_null(void ** state)126*758e9fbaSOystein Eftevaag test_fail_null(void **state)
127*758e9fbaSOystein Eftevaag {
128*758e9fbaSOystein Eftevaag     TSS2_RC r = tctildr_get_default(NULL, NULL);
129*758e9fbaSOystein Eftevaag     assert_int_equal(r, TSS2_TCTI_RC_BAD_REFERENCE);
130*758e9fbaSOystein Eftevaag }
131*758e9fbaSOystein Eftevaag 
132*758e9fbaSOystein Eftevaag static void
test_handle_from_name_null_handle(void ** state)133*758e9fbaSOystein Eftevaag test_handle_from_name_null_handle (void **state)
134*758e9fbaSOystein Eftevaag {
135*758e9fbaSOystein Eftevaag     TSS2_RC rc = handle_from_name (NULL, NULL);
136*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
137*758e9fbaSOystein Eftevaag }
138*758e9fbaSOystein Eftevaag #define TEST_TCTI_NAME "test-tcti"
139*758e9fbaSOystein Eftevaag #define TEST_TCTI_CONF "test-conf"
140*758e9fbaSOystein Eftevaag static void
test_handle_from_name_first_dlopen_success(void ** state)141*758e9fbaSOystein Eftevaag test_handle_from_name_first_dlopen_success (void **state)
142*758e9fbaSOystein Eftevaag {
143*758e9fbaSOystein Eftevaag     TSS2_RC rc;
144*758e9fbaSOystein Eftevaag     void *handle = NULL;
145*758e9fbaSOystein Eftevaag 
146*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME);
147*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
148*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, TEST_HANDLE);
149*758e9fbaSOystein Eftevaag 
150*758e9fbaSOystein Eftevaag     rc = handle_from_name (TEST_TCTI_NAME, &handle);
151*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_RC_SUCCESS);
152*758e9fbaSOystein Eftevaag     assert_int_equal (handle, TEST_HANDLE);
153*758e9fbaSOystein Eftevaag }
154*758e9fbaSOystein Eftevaag 
155*758e9fbaSOystein Eftevaag #define TEST_TCTI_NAME_SO_0 TCTI_PREFIX"-"TEST_TCTI_NAME""TCTI_SUFFIX_0
156*758e9fbaSOystein Eftevaag static void
test_handle_from_name_second_dlopen_success(void ** state)157*758e9fbaSOystein Eftevaag test_handle_from_name_second_dlopen_success (void **state)
158*758e9fbaSOystein Eftevaag {
159*758e9fbaSOystein Eftevaag     TSS2_RC rc;
160*758e9fbaSOystein Eftevaag     void *handle = NULL;
161*758e9fbaSOystein Eftevaag 
162*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME);
163*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
164*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
165*758e9fbaSOystein Eftevaag 
166*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME_SO_0);
167*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
168*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, TEST_HANDLE);
169*758e9fbaSOystein Eftevaag 
170*758e9fbaSOystein Eftevaag     rc = handle_from_name (TEST_TCTI_NAME, &handle);
171*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_RC_SUCCESS);
172*758e9fbaSOystein Eftevaag     assert_int_equal (handle, TEST_HANDLE);
173*758e9fbaSOystein Eftevaag }
174*758e9fbaSOystein Eftevaag #define TEST_TCTI_NAME_SO TCTI_PREFIX"-"TEST_TCTI_NAME""TCTI_SUFFIX
175*758e9fbaSOystein Eftevaag static void
test_handle_from_name_third_dlopen_success(void ** state)176*758e9fbaSOystein Eftevaag test_handle_from_name_third_dlopen_success (void **state)
177*758e9fbaSOystein Eftevaag {
178*758e9fbaSOystein Eftevaag     TSS2_RC rc;
179*758e9fbaSOystein Eftevaag     void *handle = NULL;
180*758e9fbaSOystein Eftevaag 
181*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME);
182*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
183*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
184*758e9fbaSOystein Eftevaag 
185*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME_SO_0);
186*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
187*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
188*758e9fbaSOystein Eftevaag 
189*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, TEST_TCTI_NAME_SO);
190*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
191*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, TEST_HANDLE);
192*758e9fbaSOystein Eftevaag 
193*758e9fbaSOystein Eftevaag     rc = handle_from_name (TEST_TCTI_NAME, &handle);
194*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_RC_SUCCESS);
195*758e9fbaSOystein Eftevaag     assert_int_equal (handle, TEST_HANDLE);
196*758e9fbaSOystein Eftevaag }
197*758e9fbaSOystein Eftevaag 
198*758e9fbaSOystein Eftevaag static void
test_tcti_from_file_null_tcti(void ** state)199*758e9fbaSOystein Eftevaag test_tcti_from_file_null_tcti (void **state)
200*758e9fbaSOystein Eftevaag {
201*758e9fbaSOystein Eftevaag     TSS2_RC rc = tcti_from_file (NULL, NULL, NULL, NULL);
202*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
203*758e9fbaSOystein Eftevaag }
204*758e9fbaSOystein Eftevaag 
205*758e9fbaSOystein Eftevaag #define HANDLE (void *)123321
206*758e9fbaSOystein Eftevaag #ifndef ESYS_TCTI_DEFAULT_MODULE
207*758e9fbaSOystein Eftevaag static void
test_get_info_default_null(void ** state)208*758e9fbaSOystein Eftevaag test_get_info_default_null (void **state)
209*758e9fbaSOystein Eftevaag {
210*758e9fbaSOystein Eftevaag     TSS2_RC rc = get_info_default (NULL, NULL);
211*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
212*758e9fbaSOystein Eftevaag }
213*758e9fbaSOystein Eftevaag static void
test_get_info_default_success(void ** state)214*758e9fbaSOystein Eftevaag test_get_info_default_success (void **state)
215*758e9fbaSOystein Eftevaag {
216*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO info_instance = { 0, };
217*758e9fbaSOystein Eftevaag     TSS2_TCTI_INFO *info = { 0, };
218*758e9fbaSOystein Eftevaag     void *handle;
219*758e9fbaSOystein Eftevaag 
220*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
221*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
222*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
223*758e9fbaSOystein Eftevaag 
224*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so.0");
225*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
226*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
227*758e9fbaSOystein Eftevaag 
228*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so");
229*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
230*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
231*758e9fbaSOystein Eftevaag 
232*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0");
233*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
234*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
235*758e9fbaSOystein Eftevaag 
236*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
237*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
238*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
239*758e9fbaSOystein Eftevaag 
240*758e9fbaSOystein Eftevaag     will_return(__wrap_Tss2_Tcti_Fake_Info, &info_instance);
241*758e9fbaSOystein Eftevaag 
242*758e9fbaSOystein Eftevaag     TSS2_RC rc = get_info_default (&info, &handle);
243*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_RC_SUCCESS);
244*758e9fbaSOystein Eftevaag     assert_ptr_equal (info, &info_instance);
245*758e9fbaSOystein Eftevaag }
246*758e9fbaSOystein Eftevaag static void
test_get_info_default_info_fail(void ** state)247*758e9fbaSOystein Eftevaag test_get_info_default_info_fail (void **state)
248*758e9fbaSOystein Eftevaag {
249*758e9fbaSOystein Eftevaag     TSS2_TCTI_INFO *info = { 0, };
250*758e9fbaSOystein Eftevaag     void *handle;
251*758e9fbaSOystein Eftevaag 
252*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
253*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
254*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
255*758e9fbaSOystein Eftevaag 
256*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so.0");
257*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
258*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
259*758e9fbaSOystein Eftevaag 
260*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so");
261*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
262*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
263*758e9fbaSOystein Eftevaag 
264*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0");
265*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
266*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
267*758e9fbaSOystein Eftevaag 
268*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
269*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
270*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
271*758e9fbaSOystein Eftevaag 
272*758e9fbaSOystein Eftevaag     will_return(__wrap_Tss2_Tcti_Fake_Info, NULL);
273*758e9fbaSOystein Eftevaag 
274*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, HANDLE);
275*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
276*758e9fbaSOystein Eftevaag 
277*758e9fbaSOystein Eftevaag     TSS2_RC rc = get_info_default (&info, &handle);
278*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_GENERAL_FAILURE);
279*758e9fbaSOystein Eftevaag     assert_ptr_equal (info, NULL);
280*758e9fbaSOystein Eftevaag }
281*758e9fbaSOystein Eftevaag /** Test for tcti
282*758e9fbaSOystein Eftevaag  * { "libtss2-tcti-default.so", NULL, "", "Access libtss2-tcti-default.so" }
283*758e9fbaSOystein Eftevaag  */
284*758e9fbaSOystein Eftevaag static void
test_tcti_default(void ** state)285*758e9fbaSOystein Eftevaag test_tcti_default(void **state)
286*758e9fbaSOystein Eftevaag {
287*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
288*758e9fbaSOystein Eftevaag 
289*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
290*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
291*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
292*758e9fbaSOystein Eftevaag 
293*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
294*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
295*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
296*758e9fbaSOystein Eftevaag 
297*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
298*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
299*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
300*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
301*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TSS2_RC_SUCCESS);
302*758e9fbaSOystein Eftevaag 
303*758e9fbaSOystein Eftevaag     TSS2_RC r;
304*758e9fbaSOystein Eftevaag     void *handle = NULL;
305*758e9fbaSOystein Eftevaag     r = tctildr_get_default(&tcti, &handle);
306*758e9fbaSOystein Eftevaag     assert_int_equal(r, TSS2_RC_SUCCESS);
307*758e9fbaSOystein Eftevaag }
308*758e9fbaSOystein Eftevaag 
309*758e9fbaSOystein Eftevaag /** Test for failure on tcti
310*758e9fbaSOystein Eftevaag  * { "libtss2-tcti-default.so", NULL, "", "Access libtss2-tcti-default.so" }
311*758e9fbaSOystein Eftevaag  */
312*758e9fbaSOystein Eftevaag static void
test_tcti_default_fail_sym(void ** state)313*758e9fbaSOystein Eftevaag test_tcti_default_fail_sym(void **state)
314*758e9fbaSOystein Eftevaag {
315*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
316*758e9fbaSOystein Eftevaag #define HANDLE (void *)123321
317*758e9fbaSOystein Eftevaag 
318*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
319*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
320*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
321*758e9fbaSOystein Eftevaag 
322*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
323*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
324*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, NULL);
325*758e9fbaSOystein Eftevaag 
326*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, HANDLE);
327*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
328*758e9fbaSOystein Eftevaag 
329*758e9fbaSOystein Eftevaag     /** Now test
330*758e9fbaSOystein Eftevaag      *{ "libtss2-tcti-tabrmd.so", NULL, "", "Access libtss2-tcti-tabrmd.so"},
331*758e9fbaSOystein Eftevaag      */
332*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0");
333*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
334*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
335*758e9fbaSOystein Eftevaag 
336*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
337*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
338*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
339*758e9fbaSOystein Eftevaag 
340*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
341*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
342*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
343*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
344*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TSS2_RC_SUCCESS);
345*758e9fbaSOystein Eftevaag 
346*758e9fbaSOystein Eftevaag     TSS2_RC r;
347*758e9fbaSOystein Eftevaag     r = tctildr_get_default(&tcti, NULL);
348*758e9fbaSOystein Eftevaag     assert_int_equal(r, TSS2_RC_SUCCESS);
349*758e9fbaSOystein Eftevaag }
350*758e9fbaSOystein Eftevaag 
351*758e9fbaSOystein Eftevaag /** Test for failure on tcti
352*758e9fbaSOystein Eftevaag  * { "libtss2-tcti-default.so", NULL, "", "Access libtss2-tcti-default.so" }
353*758e9fbaSOystein Eftevaag  */
354*758e9fbaSOystein Eftevaag static void
test_tcti_default_fail_info(void ** state)355*758e9fbaSOystein Eftevaag test_tcti_default_fail_info(void **state)
356*758e9fbaSOystein Eftevaag {
357*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
358*758e9fbaSOystein Eftevaag #define HANDLE (void *)123321
359*758e9fbaSOystein Eftevaag #define TEST_RC 0x55687
360*758e9fbaSOystein Eftevaag 
361*758e9fbaSOystein Eftevaag  /** Test for failure on tcti
362*758e9fbaSOystein Eftevaag  * { "libtss2-tcti-default.so", NULL, "", "Access libtss2-tcti-default.so" }
363*758e9fbaSOystein Eftevaag  */
364*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
365*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
366*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
367*758e9fbaSOystein Eftevaag 
368*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
369*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
370*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
371*758e9fbaSOystein Eftevaag 
372*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
373*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
374*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
375*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
376*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TEST_RC);
377*758e9fbaSOystein Eftevaag 
378*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, HANDLE);
379*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
380*758e9fbaSOystein Eftevaag 
381*758e9fbaSOystein Eftevaag     /** Now test
382*758e9fbaSOystein Eftevaag      *{ "libtss2-tcti-tabrmd.so", NULL, "", "Access libtss2-tcti-tabrmd.so"},
383*758e9fbaSOystein Eftevaag      */
384*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0");
385*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
386*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
387*758e9fbaSOystein Eftevaag 
388*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
389*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
390*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
391*758e9fbaSOystein Eftevaag 
392*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
393*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
394*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
395*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
396*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TSS2_RC_SUCCESS);
397*758e9fbaSOystein Eftevaag 
398*758e9fbaSOystein Eftevaag     TSS2_RC r;
399*758e9fbaSOystein Eftevaag     r = tctildr_get_default(&tcti, NULL);
400*758e9fbaSOystein Eftevaag     assert_int_equal(r, TSS2_RC_SUCCESS);
401*758e9fbaSOystein Eftevaag }
402*758e9fbaSOystein Eftevaag 
403*758e9fbaSOystein Eftevaag static void
test_tcti_fail_all(void ** state)404*758e9fbaSOystein Eftevaag test_tcti_fail_all (void **state)
405*758e9fbaSOystein Eftevaag {
406*758e9fbaSOystein Eftevaag     /* skip over libtss2-tcti-default.so */
407*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
408*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
409*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
410*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so.0");
411*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
412*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
413*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so");
414*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
415*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
416*758e9fbaSOystein Eftevaag 
417*758e9fbaSOystein Eftevaag     /* Skip over libtss2-tcti-tabrmd.so */
418*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0");
419*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
420*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
421*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-tabrmd.so.0.so.0");
422*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
423*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
424*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-tabrmd.so.0.so");
425*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
426*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
427*758e9fbaSOystein Eftevaag 
428*758e9fbaSOystein Eftevaag     /* Skip over libtss2-tcti-device.so, /dev/tpmrm0 */
429*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-device.so.0");
430*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
431*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
432*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so.0");
433*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
434*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
435*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so");
436*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
437*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
438*758e9fbaSOystein Eftevaag 
439*758e9fbaSOystein Eftevaag     /* Skip over libtss2-tcti-device.so, /dev/tpm0 */
440*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-device.so.0");
441*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
442*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
443*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so.0");
444*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
445*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
446*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so");
447*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
448*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
449*758e9fbaSOystein Eftevaag 
450*758e9fbaSOystein Eftevaag     /* Skip over libtss2-tcti-mssim.so */
451*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-mssim.so.0");
452*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
453*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
454*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-mssim.so.0.so.0");
455*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
456*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
457*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-mssim.so.0.so");
458*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
459*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
460*758e9fbaSOystein Eftevaag 
461*758e9fbaSOystein Eftevaag     TSS2_RC r;
462*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
463*758e9fbaSOystein Eftevaag     r = tctildr_get_default(&tcti, NULL);
464*758e9fbaSOystein Eftevaag     assert_int_equal(r, TSS2_TCTI_RC_IO_ERROR);
465*758e9fbaSOystein Eftevaag }
466*758e9fbaSOystein Eftevaag #endif
467*758e9fbaSOystein Eftevaag void
test_info_from_name_null(void ** state)468*758e9fbaSOystein Eftevaag test_info_from_name_null (void **state)
469*758e9fbaSOystein Eftevaag {
470*758e9fbaSOystein Eftevaag     TSS2_RC rc = info_from_name (NULL, NULL, NULL);
471*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
472*758e9fbaSOystein Eftevaag }
473*758e9fbaSOystein Eftevaag void
test_info_from_name_handle_fail(void ** state)474*758e9fbaSOystein Eftevaag test_info_from_name_handle_fail (void **state)
475*758e9fbaSOystein Eftevaag {
476*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info;
477*758e9fbaSOystein Eftevaag     void *data;
478*758e9fbaSOystein Eftevaag 
479*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "foo");
480*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
481*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
482*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so.0");
483*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
484*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
485*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so");
486*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
487*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
488*758e9fbaSOystein Eftevaag 
489*758e9fbaSOystein Eftevaag     TSS2_RC rc = info_from_name ("foo", &info, &data);
490*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_NOT_SUPPORTED);
491*758e9fbaSOystein Eftevaag }
492*758e9fbaSOystein Eftevaag void
test_info_from_name_info_fail(void ** state)493*758e9fbaSOystein Eftevaag test_info_from_name_info_fail (void **state)
494*758e9fbaSOystein Eftevaag {
495*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info = { 0, };
496*758e9fbaSOystein Eftevaag     void *data = HANDLE;
497*758e9fbaSOystein Eftevaag 
498*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "foo");
499*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
500*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
501*758e9fbaSOystein Eftevaag 
502*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
503*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
504*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
505*758e9fbaSOystein Eftevaag 
506*758e9fbaSOystein Eftevaag     will_return(__wrap_Tss2_Tcti_Fake_Info, NULL);
507*758e9fbaSOystein Eftevaag 
508*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, HANDLE);
509*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
510*758e9fbaSOystein Eftevaag 
511*758e9fbaSOystein Eftevaag     TSS2_RC rc = info_from_name ("foo", &info, &data);
512*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_IO_ERROR);
513*758e9fbaSOystein Eftevaag }
514*758e9fbaSOystein Eftevaag void
test_info_from_name_success(void ** state)515*758e9fbaSOystein Eftevaag test_info_from_name_success (void **state)
516*758e9fbaSOystein Eftevaag {
517*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info = { 0, };
518*758e9fbaSOystein Eftevaag     TSS2_TCTI_INFO info_instance = { 0, };
519*758e9fbaSOystein Eftevaag     void *data;
520*758e9fbaSOystein Eftevaag 
521*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "foo");
522*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
523*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
524*758e9fbaSOystein Eftevaag 
525*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
526*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
527*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
528*758e9fbaSOystein Eftevaag 
529*758e9fbaSOystein Eftevaag     will_return(__wrap_Tss2_Tcti_Fake_Info, &info_instance);
530*758e9fbaSOystein Eftevaag 
531*758e9fbaSOystein Eftevaag     TSS2_RC rc = info_from_name ("foo", &info, &data);
532*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_RC_SUCCESS);
533*758e9fbaSOystein Eftevaag     assert_ptr_equal (info, &info_instance);
534*758e9fbaSOystein Eftevaag     assert_ptr_equal (data, HANDLE);
535*758e9fbaSOystein Eftevaag }
536*758e9fbaSOystein Eftevaag void
test_get_tcti_null(void ** state)537*758e9fbaSOystein Eftevaag test_get_tcti_null (void **state)
538*758e9fbaSOystein Eftevaag {
539*758e9fbaSOystein Eftevaag     TSS2_RC rc = tctildr_get_tcti (NULL, NULL, NULL, NULL);
540*758e9fbaSOystein Eftevaag     assert_int_equal(rc, TSS2_TCTI_RC_BAD_REFERENCE);
541*758e9fbaSOystein Eftevaag }
542*758e9fbaSOystein Eftevaag void
test_get_tcti_default(void ** state)543*758e9fbaSOystein Eftevaag test_get_tcti_default (void **state)
544*758e9fbaSOystein Eftevaag {
545*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
546*758e9fbaSOystein Eftevaag 
547*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
548*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
549*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
550*758e9fbaSOystein Eftevaag 
551*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
552*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
553*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
554*758e9fbaSOystein Eftevaag 
555*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
556*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
557*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
558*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
559*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TSS2_RC_SUCCESS);
560*758e9fbaSOystein Eftevaag 
561*758e9fbaSOystein Eftevaag     void *data;
562*758e9fbaSOystein Eftevaag     TSS2_RC rc = tctildr_get_tcti (NULL, NULL, &tcti, &data);
563*758e9fbaSOystein Eftevaag     assert_int_equal(rc, TSS2_RC_SUCCESS);
564*758e9fbaSOystein Eftevaag }
565*758e9fbaSOystein Eftevaag void
test_get_tcti_from_name(void ** state)566*758e9fbaSOystein Eftevaag test_get_tcti_from_name (void **state)
567*758e9fbaSOystein Eftevaag {
568*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti;
569*758e9fbaSOystein Eftevaag 
570*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
571*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
572*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
573*758e9fbaSOystein Eftevaag 
574*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
575*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
576*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, &__wrap_Tss2_Tcti_Fake_Info);
577*758e9fbaSOystein Eftevaag 
578*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, infof, __wrap_Tss2_Tcti_Fake_Info);
579*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, conf, NULL);
580*758e9fbaSOystein Eftevaag     expect_value(__wrap_tcti_from_info, tcti, &tcti);
581*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, &tcti_instance);
582*758e9fbaSOystein Eftevaag     will_return(__wrap_tcti_from_info, TSS2_RC_SUCCESS);
583*758e9fbaSOystein Eftevaag 
584*758e9fbaSOystein Eftevaag     void *data;
585*758e9fbaSOystein Eftevaag     TSS2_RC rc = tctildr_get_tcti ("libtss2-tcti-default.so", NULL, &tcti, &data);
586*758e9fbaSOystein Eftevaag     assert_int_equal(rc, TSS2_RC_SUCCESS);
587*758e9fbaSOystein Eftevaag }
588*758e9fbaSOystein Eftevaag 
589*758e9fbaSOystein Eftevaag void
test_tctildr_get_info_from_name(void ** state)590*758e9fbaSOystein Eftevaag test_tctildr_get_info_from_name (void **state)
591*758e9fbaSOystein Eftevaag {
592*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info;
593*758e9fbaSOystein Eftevaag     void *data;
594*758e9fbaSOystein Eftevaag 
595*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "foo");
596*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
597*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
598*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so.0");
599*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
600*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
601*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so");
602*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
603*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, NULL);
604*758e9fbaSOystein Eftevaag 
605*758e9fbaSOystein Eftevaag     TSS2_RC rc = tctildr_get_info ("foo", &info, &data);
606*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_NOT_SUPPORTED);
607*758e9fbaSOystein Eftevaag }
608*758e9fbaSOystein Eftevaag void
test_tctildr_get_info_default(void ** state)609*758e9fbaSOystein Eftevaag test_tctildr_get_info_default (void **state)
610*758e9fbaSOystein Eftevaag {
611*758e9fbaSOystein Eftevaag     const TSS2_TCTI_INFO *info;
612*758e9fbaSOystein Eftevaag     void *data;
613*758e9fbaSOystein Eftevaag 
614*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlopen, filename, "libtss2-tcti-default.so");
615*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlopen, flags, RTLD_NOW);
616*758e9fbaSOystein Eftevaag     will_return(__wrap_dlopen, HANDLE);
617*758e9fbaSOystein Eftevaag 
618*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlsym, handle, HANDLE);
619*758e9fbaSOystein Eftevaag     expect_string(__wrap_dlsym, symbol, TSS2_TCTI_INFO_SYMBOL);
620*758e9fbaSOystein Eftevaag     will_return(__wrap_dlsym, NULL);
621*758e9fbaSOystein Eftevaag 
622*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, HANDLE);
623*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
624*758e9fbaSOystein Eftevaag 
625*758e9fbaSOystein Eftevaag     TSS2_RC rc = tctildr_get_info (NULL, &info, &data);
626*758e9fbaSOystein Eftevaag     assert_int_equal (rc, TSS2_TCTI_RC_GENERAL_FAILURE);
627*758e9fbaSOystein Eftevaag }
628*758e9fbaSOystein Eftevaag 
629*758e9fbaSOystein Eftevaag void
test_finalize_data(void ** state)630*758e9fbaSOystein Eftevaag test_finalize_data (void **state)
631*758e9fbaSOystein Eftevaag {
632*758e9fbaSOystein Eftevaag     void *data = HANDLE;
633*758e9fbaSOystein Eftevaag 
634*758e9fbaSOystein Eftevaag     expect_value(__wrap_dlclose, handle, data);
635*758e9fbaSOystein Eftevaag     will_return(__wrap_dlclose, 0);
636*758e9fbaSOystein Eftevaag     tctildr_finalize_data (&data);
637*758e9fbaSOystein Eftevaag     assert_null (data);
638*758e9fbaSOystein Eftevaag }
639*758e9fbaSOystein Eftevaag 
640*758e9fbaSOystein Eftevaag int
main(void)641*758e9fbaSOystein Eftevaag main(void)
642*758e9fbaSOystein Eftevaag {
643*758e9fbaSOystein Eftevaag     const struct CMUnitTest tests[] = {
644*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_handle_null),
645*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_handle_dlsym_fail),
646*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_handle_success),
647*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_handle_from_name_null_handle),
648*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_handle_from_name_first_dlopen_success),
649*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_handle_from_name_second_dlopen_success),
650*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_handle_from_name_third_dlopen_success),
651*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_fail_null),
652*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tcti_from_file_null_tcti),
653*758e9fbaSOystein Eftevaag #ifndef ESYS_TCTI_DEFAULT_MODULE
654*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_info_default_null),
655*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_info_default_success),
656*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_info_default_info_fail),
657*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tcti_default),
658*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tcti_default_fail_sym),
659*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tcti_default_fail_info),
660*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tcti_fail_all),
661*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_tcti_null),
662*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_tcti_default),
663*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_get_tcti_from_name),
664*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tctildr_get_info_from_name),
665*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_tctildr_get_info_default),
666*758e9fbaSOystein Eftevaag #endif
667*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_name_null),
668*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_name_handle_fail),
669*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_name_info_fail),
670*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_info_from_name_success),
671*758e9fbaSOystein Eftevaag         cmocka_unit_test(test_finalize_data),
672*758e9fbaSOystein Eftevaag     };
673*758e9fbaSOystein Eftevaag     return cmocka_run_group_tests (tests, NULL, NULL);
674*758e9fbaSOystein Eftevaag }
675