esys-getpollhandles.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /*******************************************************************************
  3. * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG All
  4. * rights reserved.
  5. ******************************************************************************/
  6. #ifdef HAVE_CONFIG_H
  7. #include <config.h>
  8. #endif
  9. #include <stdarg.h>
  10. #include <inttypes.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13. #include <setjmp.h>
  14. #include <cmocka.h>
  15. #include "tss2_esys.h"
  16. #define LOGMODULE tests
  17. #include "util/log.h"
  18. #define TCTI_FAKE_MAGIC 0x46414b4500000000ULL /* 'FAKE\0' */
  19. #define TCTI_FAKE_VERSION 0x1
  20. typedef struct {
  21. uint64_t magic;
  22. uint32_t version;
  23. TSS2_TCTI_TRANSMIT_FCN transmit;
  24. TSS2_TCTI_RECEIVE_FCN receive;
  25. TSS2_RC(*finalize) (TSS2_TCTI_CONTEXT * tctiContext);
  26. TSS2_RC(*cancel) (TSS2_TCTI_CONTEXT * tctiContext);
  27. TSS2_RC(*getPollHandles) (TSS2_TCTI_CONTEXT * tctiContext,
  28. TSS2_TCTI_POLL_HANDLE * handles,
  29. size_t * num_handles);
  30. TSS2_RC(*setLocality) (TSS2_TCTI_CONTEXT * tctiContext, uint8_t locality);
  31. } TSS2_TCTI_CONTEXT_FAKE;
  32. TSS2_TCTI_POLL_HANDLE rev[] = {
  33. {.fd=66, .events=1, .revents=0},
  34. {.fd=99, .events=1, .revents=0}
  35. };
  36. static TSS2_RC
  37. tcti_fake_getpollhandles(TSS2_TCTI_CONTEXT * tctiContext,
  38. TSS2_TCTI_POLL_HANDLE * handles,
  39. size_t * num_handles)
  40. {
  41. (void) tctiContext;
  42. if (handles == NULL) {
  43. *num_handles = 2;
  44. return TSS2_RC_SUCCESS;
  45. }
  46. assert_int_equal(*num_handles, 2);
  47. memcpy(&handles[0], &rev[0], sizeof(rev));
  48. return TSS2_RC_SUCCESS;
  49. }
  50. static TSS2_RC
  51. tcti_fake_initialize(TSS2_TCTI_CONTEXT * tctiContext, size_t * contextSize)
  52. {
  53. TSS2_TCTI_CONTEXT_FAKE *tcti_fake =
  54. (TSS2_TCTI_CONTEXT_FAKE *) tctiContext;
  55. if (tctiContext == NULL && contextSize == NULL) {
  56. return TSS2_TCTI_RC_BAD_VALUE;
  57. } else if (tctiContext == NULL) {
  58. *contextSize = sizeof(*tcti_fake);
  59. return TSS2_RC_SUCCESS;
  60. }
  61. /* Init TCTI context */
  62. memset(tcti_fake, 0, sizeof(*tcti_fake));
  63. TSS2_TCTI_MAGIC(tctiContext) = TCTI_FAKE_MAGIC;
  64. TSS2_TCTI_VERSION(tctiContext) = TCTI_FAKE_VERSION;
  65. TSS2_TCTI_TRANSMIT(tctiContext) = (void*)1;
  66. TSS2_TCTI_RECEIVE(tctiContext) = (void*)1;
  67. TSS2_TCTI_FINALIZE(tctiContext) = NULL;
  68. TSS2_TCTI_CANCEL(tctiContext) = NULL;
  69. TSS2_TCTI_GET_POLL_HANDLES(tctiContext) = tcti_fake_getpollhandles;
  70. TSS2_TCTI_SET_LOCALITY(tctiContext) = NULL;
  71. return TSS2_RC_SUCCESS;
  72. }
  73. static int
  74. setup(void **state)
  75. {
  76. TSS2_RC r;
  77. ESYS_CONTEXT *ectx;
  78. size_t size = sizeof(TSS2_TCTI_CONTEXT_FAKE);
  79. TSS2_TCTI_CONTEXT *tcti = malloc(size);
  80. r = tcti_fake_initialize(tcti, &size);
  81. if (r)
  82. return (int)r;
  83. r = Esys_Initialize(&ectx, tcti, NULL);
  84. *state = (void *)ectx;
  85. return (int)r;
  86. }
  87. static int
  88. teardown(void **state)
  89. {
  90. TSS2_TCTI_CONTEXT *tcti;
  91. ESYS_CONTEXT *ectx = (ESYS_CONTEXT *) * state;
  92. Esys_GetTcti(ectx, &tcti);
  93. Esys_Finalize(&ectx);
  94. free(tcti);
  95. return 0;
  96. }
  97. static void
  98. test_GetPollHandles(void **state)
  99. {
  100. TSS2_RC r;
  101. ESYS_CONTEXT *ectx = (ESYS_CONTEXT *) * state;
  102. TSS2_TCTI_POLL_HANDLE *handles;
  103. size_t count;
  104. r = Esys_GetPollHandles(ectx, &handles, &count);
  105. assert_int_equal(r, TSS2_RC_SUCCESS);
  106. assert_int_equal(count, 2);
  107. assert_memory_equal((void*)&handles[0], (void*)&rev[0], sizeof(rev));
  108. free(handles);
  109. }
  110. int
  111. main(int argc, char *argv[])
  112. {
  113. const struct CMUnitTest tests[] = {
  114. cmocka_unit_test_setup_teardown(test_GetPollHandles, setup, teardown),
  115. };
  116. return cmocka_run_group_tests(tests, NULL, NULL);
  117. }