tctildr.c 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. /*
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. * Copyright 2019, Intel Corporation
  4. */
  5. #ifdef HAVE_CONFIG_H
  6. #include <config.h>
  7. #endif
  8. #include <limits.h>
  9. #include <stdio.h>
  10. #include <stddef.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <setjmp.h>
  14. #include <cmocka.h>
  15. #include "tss2_tctildr.h"
  16. #include "tss2_tcti.h"
  17. #include "tss2-tcti/tctildr.h"
  18. static TSS2_TCTI_CONTEXT_COMMON_V2 tcti_ctx = { 0, };
  19. static TSS2_TCTILDR_CONTEXT tctildr_ctx = { 0, };
  20. TSS2_RC
  21. local_init (
  22. TSS2_TCTI_CONTEXT *tctiContext,
  23. size_t *size,
  24. const char *config)
  25. {
  26. *size = mock_type (size_t);
  27. return mock_type (TSS2_RC);
  28. }
  29. void
  30. tcti_from_init_null_init (void **state)
  31. {
  32. TSS2_RC rc = tcti_from_init (NULL, NULL, NULL);
  33. assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
  34. }
  35. #define TEST_MAGIC_SIZE (size_t)5513444
  36. #define TEST_INIT_RC_FAIL (TSS2_RC)0x6134
  37. void
  38. tcti_from_init_init_fail (void **state)
  39. {
  40. will_return(local_init, TEST_MAGIC_SIZE);
  41. will_return(local_init, TEST_INIT_RC_FAIL);
  42. TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
  43. TSS2_RC rc = tcti_from_init (local_init, NULL, &tcti_ctx);
  44. assert_int_equal (rc, TEST_INIT_RC_FAIL);
  45. }
  46. void* __real_calloc (size_t nmemb, size_t size);
  47. void*
  48. __wrap_calloc (size_t nmemb, size_t size)
  49. {
  50. if (size == TEST_MAGIC_SIZE || size == sizeof (TSS2_TCTILDR_CONTEXT))
  51. return mock_type (void*);
  52. else
  53. return __real_calloc (nmemb, size);
  54. }
  55. void __real_free (void *ptr);
  56. void
  57. __wrap_free (void *ptr)
  58. {
  59. if (ptr != &tcti_ctx && ptr != &tctildr_ctx)
  60. __real_free (ptr);
  61. return;
  62. }
  63. TSS2_RC
  64. __wrap_tctildr_get_info (const char *name,
  65. const TSS2_TCTI_INFO **info,
  66. void **data)
  67. {
  68. return TSS2_RC_SUCCESS;
  69. }
  70. TSS2_RC
  71. __wrap_tctildr_get_tcti (const char *name,
  72. const char* conf,
  73. TSS2_TCTI_CONTEXT **tcti,
  74. void **data)
  75. {
  76. TSS2_RC rc = mock_type (TSS2_RC);
  77. if (rc == TSS2_RC_SUCCESS) {
  78. *tcti= mock_type (TSS2_TCTI_CONTEXT*);
  79. *data = mock_type (void*);
  80. }
  81. return rc;
  82. }
  83. void __wrap_tctildr_finalize_data (void **data){}
  84. void
  85. tcti_from_init_calloc_fail (void **state)
  86. {
  87. will_return(local_init, TEST_MAGIC_SIZE);
  88. will_return(local_init, TSS2_RC_SUCCESS);
  89. TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
  90. will_return(__wrap_calloc, NULL);
  91. TSS2_RC rc = tcti_from_init (local_init, NULL, &tcti_ctx);
  92. assert_int_equal (rc, TSS2_ESYS_RC_MEMORY);
  93. }
  94. void
  95. tcti_from_init_second_init_fail (void **state)
  96. {
  97. will_return(local_init, TEST_MAGIC_SIZE);
  98. will_return(local_init, TSS2_RC_SUCCESS);
  99. TSS2_TCTI_CONTEXT *tcti_ctx_ptr = NULL;
  100. will_return(__wrap_calloc, &tcti_ctx);
  101. will_return(local_init, TEST_MAGIC_SIZE);
  102. will_return(local_init, TEST_INIT_RC_FAIL);
  103. TSS2_RC rc = tcti_from_init (local_init, NULL, &tcti_ctx_ptr);
  104. assert_int_equal (rc, TEST_INIT_RC_FAIL);
  105. }
  106. void
  107. tcti_from_init_success (void **state)
  108. {
  109. will_return(local_init, TEST_MAGIC_SIZE);
  110. will_return(local_init, TSS2_RC_SUCCESS);
  111. TSS2_TCTI_CONTEXT *tcti_ctx_ptr = NULL;
  112. will_return(__wrap_calloc, &tcti_ctx);
  113. will_return(local_init, TEST_MAGIC_SIZE);
  114. will_return(local_init, TSS2_RC_SUCCESS);
  115. TSS2_RC rc = tcti_from_init (local_init, NULL, &tcti_ctx_ptr);
  116. assert_int_equal (rc, TSS2_RC_SUCCESS);
  117. }
  118. TSS2_TCTI_INFO info = { .init = local_init, };
  119. const TSS2_TCTI_INFO*
  120. local_info (void)
  121. {
  122. return mock_type (const TSS2_TCTI_INFO*);
  123. }
  124. void
  125. tcti_from_info_info_null (void **state)
  126. {
  127. TSS2_TCTI_CONTEXT *tcti_ctx_ptr = NULL;
  128. will_return (local_info, NULL);
  129. TSS2_RC rc = tcti_from_info (local_info, NULL, &tcti_ctx_ptr);
  130. assert_int_equal (rc, TSS2_ESYS_RC_GENERAL_FAILURE);
  131. }
  132. void
  133. tcti_from_info_info_fail (void **state)
  134. {
  135. TSS2_TCTI_CONTEXT *tcti_ctx_ptr = NULL;
  136. will_return (local_info, &info);
  137. will_return(local_init, TEST_MAGIC_SIZE);
  138. will_return(local_init, TEST_INIT_RC_FAIL);
  139. TSS2_RC rc = tcti_from_info (local_info, NULL, &tcti_ctx_ptr);
  140. assert_int_equal (rc, TEST_INIT_RC_FAIL);
  141. }
  142. void
  143. tcti_from_info_success (void **state)
  144. {
  145. TSS2_TCTI_CONTEXT *tcti_ctx_ptr = NULL;
  146. will_return (local_info, &info);
  147. will_return(local_init, TEST_MAGIC_SIZE);
  148. will_return(local_init, TSS2_RC_SUCCESS);
  149. will_return(__wrap_calloc, &tcti_ctx);
  150. will_return(local_init, TEST_MAGIC_SIZE);
  151. will_return(local_init, TSS2_RC_SUCCESS);
  152. TSS2_RC rc = tcti_from_info (local_info, NULL, &tcti_ctx_ptr);
  153. assert_int_equal (rc, TSS2_RC_SUCCESS);
  154. }
  155. void
  156. test_conf_parse_null (void **state)
  157. {
  158. TSS2_RC rc = tctildr_conf_parse (NULL, NULL, NULL);
  159. assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
  160. }
  161. void
  162. test_conf_parse_bad_length (void **state)
  163. {
  164. char name_buf[0], conf_buf[0];
  165. char name[PATH_MAX+1];
  166. memset(&name[0], 'a', sizeof(name));
  167. name[PATH_MAX] = '\0';
  168. TSS2_RC rc = tctildr_conf_parse (name, name_buf, conf_buf);
  169. assert_int_equal (rc, TSS2_TCTI_RC_BAD_VALUE);
  170. }
  171. void
  172. test_conf_parse_empty_str (void **state)
  173. {
  174. char name_buf[0], conf_buf[0];
  175. TSS2_RC rc = tctildr_conf_parse ("", name_buf, conf_buf);
  176. assert_int_equal (rc, TSS2_RC_SUCCESS);
  177. }
  178. void
  179. test_conf_parse_no_colon (void **state)
  180. {
  181. char name_buf[50] = { 0, }, conf_buf[50] = { 0, };
  182. TSS2_RC rc = tctildr_conf_parse ("foo", name_buf, conf_buf);
  183. assert_int_equal (rc, TSS2_RC_SUCCESS);
  184. }
  185. void
  186. test_conf_parse_name_colon (void **state)
  187. {
  188. char name_buf[50] = { 0, }, conf_buf[50] = { 0, };
  189. TSS2_RC rc = tctildr_conf_parse ("foo:", name_buf, conf_buf);
  190. assert_string_equal (name_buf, "foo");
  191. assert_int_equal (rc, TSS2_RC_SUCCESS);
  192. }
  193. void
  194. test_conf_parse_name_colon_conf (void **state)
  195. {
  196. char name_buf[50] = { 0, }, conf_buf[50] = { 0, };
  197. TSS2_RC rc = tctildr_conf_parse ("foo:bar", name_buf, conf_buf);
  198. assert_string_equal (name_buf, "foo");
  199. assert_string_equal (conf_buf, "bar");
  200. assert_int_equal (rc, TSS2_RC_SUCCESS);
  201. }
  202. /* tctildr init begin */
  203. static void
  204. tctildr_init_ex_null_test (void **state)
  205. {
  206. TSS2_RC rc;
  207. rc = Tss2_TctiLdr_Initialize_Ex (NULL, NULL, NULL);
  208. assert_int_equal (rc, TSS2_TCTI_RC_BAD_VALUE);
  209. }
  210. static void
  211. tctildr_init_null_test (void **state)
  212. {
  213. TSS2_RC rc;
  214. rc = Tss2_TctiLdr_Initialize (NULL, NULL);
  215. assert_int_equal (rc, TSS2_TCTI_RC_BAD_VALUE);
  216. }
  217. static void
  218. tctildr_init_conf_fail_test (void **state)
  219. {
  220. TSS2_RC rc;
  221. char name[PATH_MAX+1];
  222. memset(&name[0], 'a', sizeof(name));
  223. name[PATH_MAX] = '\0';
  224. rc = Tss2_TctiLdr_Initialize (name, NULL);
  225. assert_int_equal (rc, TSS2_TCTI_RC_BAD_VALUE);
  226. }
  227. static void
  228. tctildr_init_ex_default_fail (void **state)
  229. {
  230. TSS2_RC rc;
  231. TSS2_TCTI_CONTEXT *context;
  232. will_return (__wrap_tctildr_get_tcti, TSS2_TCTI_RC_BAD_REFERENCE);
  233. rc = Tss2_TctiLdr_Initialize_Ex (NULL, NULL, &context);
  234. assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
  235. }
  236. static void
  237. tctildr_init_ex_from_file_fail (void **state)
  238. {
  239. TSS2_RC rc;
  240. TSS2_TCTI_CONTEXT *context;
  241. will_return (__wrap_tctildr_get_tcti, TSS2_TCTI_RC_BAD_REFERENCE);
  242. rc = Tss2_TctiLdr_Initialize_Ex ("foo", NULL, &context);
  243. assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
  244. }
  245. #define TEST_TCTI_HANDLE (TSS2_TCTI_LIBRARY_HANDLE)0x9827635
  246. static void
  247. tctildr_init_ex_calloc_fail_test (void **state)
  248. {
  249. TSS2_RC rc;
  250. TSS2_TCTI_CONTEXT *ctx;
  251. will_return (__wrap_tctildr_get_tcti, TSS2_RC_SUCCESS);
  252. will_return (__wrap_tctildr_get_tcti, &tcti_ctx);
  253. will_return (__wrap_tctildr_get_tcti, TEST_TCTI_HANDLE);
  254. will_return (__wrap_calloc, NULL);
  255. rc = Tss2_TctiLdr_Initialize_Ex (NULL, NULL, &ctx);
  256. assert_int_equal (rc, TSS2_TCTI_RC_MEMORY);
  257. }
  258. static void
  259. tctildr_init_ex_success_test (void **state)
  260. {
  261. TSS2_RC rc;
  262. TSS2_TCTI_CONTEXT *ctx;
  263. will_return (__wrap_tctildr_get_tcti, TSS2_RC_SUCCESS);
  264. will_return (__wrap_tctildr_get_tcti, &tcti_ctx);
  265. will_return (__wrap_tctildr_get_tcti, TEST_TCTI_HANDLE);
  266. will_return (__wrap_calloc, &tctildr_ctx);
  267. rc = Tss2_TctiLdr_Initialize_Ex (NULL, NULL, &ctx);
  268. assert_int_equal (rc, TSS2_RC_SUCCESS);
  269. }
  270. static void
  271. tctildr_finalize_null_ref_test (void **state)
  272. {
  273. Tss2_TctiLdr_Finalize (NULL);
  274. assert_int_equal (1, 1);
  275. }
  276. static void
  277. tctildr_finalize_null_ctx_test (void **state)
  278. {
  279. TSS2_TCTI_CONTEXT *ctx = NULL;
  280. Tss2_TctiLdr_Finalize (&ctx);
  281. assert_int_equal (1, 1);
  282. }
  283. static void
  284. tctildr_finalize_test (void **state)
  285. {
  286. TSS2_TCTI_CONTEXT *ctx = (TSS2_TCTI_CONTEXT*)&tctildr_ctx;
  287. TSS2_TCTI_VERSION(&tctildr_ctx) = 3;
  288. tctildr_ctx.library_handle = TEST_TCTI_HANDLE;
  289. TSS2_TCTI_MAGIC(&tctildr_ctx) = TCTILDR_MAGIC;
  290. tctildr_ctx.tcti = (TSS2_TCTI_CONTEXT*)&tcti_ctx;
  291. Tss2_TctiLdr_Finalize (&ctx);
  292. assert_null (ctx);
  293. }
  294. /* tctildr init end */
  295. int
  296. main(void)
  297. {
  298. const struct CMUnitTest tests[] = {
  299. cmocka_unit_test(tcti_from_init_null_init),
  300. cmocka_unit_test(tcti_from_init_init_fail),
  301. cmocka_unit_test(tcti_from_init_calloc_fail),
  302. cmocka_unit_test(tcti_from_init_second_init_fail),
  303. cmocka_unit_test(tcti_from_init_success),
  304. cmocka_unit_test(tcti_from_info_info_null),
  305. cmocka_unit_test(tcti_from_info_info_fail),
  306. cmocka_unit_test(tcti_from_info_success),
  307. cmocka_unit_test(test_conf_parse_null),
  308. cmocka_unit_test(test_conf_parse_bad_length),
  309. cmocka_unit_test(test_conf_parse_empty_str),
  310. cmocka_unit_test(test_conf_parse_no_colon),
  311. cmocka_unit_test(test_conf_parse_name_colon),
  312. cmocka_unit_test(test_conf_parse_name_colon_conf),
  313. cmocka_unit_test (tctildr_init_ex_null_test),
  314. cmocka_unit_test (tctildr_init_null_test),
  315. cmocka_unit_test (tctildr_init_conf_fail_test),
  316. cmocka_unit_test (tctildr_init_ex_default_fail),
  317. cmocka_unit_test (tctildr_init_ex_from_file_fail),
  318. cmocka_unit_test (tctildr_init_ex_calloc_fail_test),
  319. cmocka_unit_test (tctildr_init_ex_success_test),
  320. cmocka_unit_test (tctildr_finalize_null_ref_test),
  321. cmocka_unit_test (tctildr_finalize_null_ctx_test),
  322. cmocka_unit_test (tctildr_finalize_test),
  323. };
  324. return cmocka_run_group_tests (tests, NULL, NULL);
  325. }