tester-pan.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // SPDX-License-Identifier: Apache-2.0
  2. /*
  3. * Copyright (C) 2014 Intel Corporation
  4. *
  5. */
  6. #define _GNU_SOURCE
  7. #include <stdbool.h>
  8. #include "emulator/bthost.h"
  9. #include "lib/bluetooth.h"
  10. #include "android/utils.h"
  11. #include "src/shared/tester.h"
  12. #include "src/shared/queue.h"
  13. #include "tester-main.h"
  14. static struct queue *list; /* List of pan test cases */
  15. #define pan_conn_req_pdu 0x01, 0x01, 0x02, 0x11, 0x16, 0x11, 0x15
  16. #define pan_conn_rsp_pdu 0x01, 0x02, 0x00, 0x00
  17. static const struct pdu_set pdus[] = {
  18. { raw_pdu(pan_conn_req_pdu), raw_pdu(pan_conn_rsp_pdu) },
  19. { end_pdu, end_pdu },
  20. };
  21. static struct emu_l2cap_cid_data cid_data = {
  22. .pdu = pdus,
  23. };
  24. static struct emu_set_l2cap_data l2cap_setup_data = {
  25. .psm = 15,
  26. .func = tester_generic_connect_cb,
  27. .user_data = &cid_data,
  28. };
  29. static void pan_connect_action(void)
  30. {
  31. struct test_data *data = tester_get_data();
  32. const uint8_t *pan_addr = hciemu_get_client_bdaddr(data->hciemu);
  33. struct step *step = g_new0(struct step, 1);
  34. bt_bdaddr_t bdaddr;
  35. bdaddr2android((const bdaddr_t *) pan_addr, &bdaddr);
  36. step->action_status = data->if_pan->connect(&bdaddr,
  37. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP);
  38. schedule_action_verification(step);
  39. }
  40. static void pan_disconnect_action(void)
  41. {
  42. struct test_data *data = tester_get_data();
  43. const uint8_t *pan_addr = hciemu_get_client_bdaddr(data->hciemu);
  44. struct step *step = g_new0(struct step, 1);
  45. bt_bdaddr_t bdaddr;
  46. bdaddr2android((const bdaddr_t *) pan_addr, &bdaddr);
  47. step->action_status = data->if_pan->disconnect(&bdaddr);
  48. schedule_action_verification(step);
  49. }
  50. static void pan_get_local_role_action(void)
  51. {
  52. struct test_data *data = tester_get_data();
  53. const uint8_t *pan_addr = hciemu_get_client_bdaddr(data->hciemu);
  54. struct step *step = g_new0(struct step, 1);
  55. bt_bdaddr_t bdaddr;
  56. int role;
  57. bdaddr2android((const bdaddr_t *) pan_addr, &bdaddr);
  58. role = data->if_pan->get_local_role();
  59. if (role == BTPAN_ROLE_PANU)
  60. step->action_status = BT_STATUS_SUCCESS;
  61. else
  62. step->action_status = BT_STATUS_FAIL;
  63. schedule_action_verification(step);
  64. }
  65. static void pan_enable_nap_action(void)
  66. {
  67. struct test_data *data = tester_get_data();
  68. struct step *step = g_new0(struct step, 1);
  69. step->action_status = data->if_pan->enable(BTPAN_ROLE_PANNAP);
  70. schedule_action_verification(step);
  71. }
  72. static void pan_enable_panu_action(void)
  73. {
  74. struct test_data *data = tester_get_data();
  75. struct step *step = g_new0(struct step, 1);
  76. step->action_status = data->if_pan->enable(BTPAN_ROLE_PANU);
  77. schedule_action_verification(step);
  78. }
  79. static void pan_enable_none_action(void)
  80. {
  81. struct test_data *data = tester_get_data();
  82. struct step *step = g_new0(struct step, 1);
  83. step->action_status = data->if_pan->enable(BTPAN_ROLE_NONE);
  84. schedule_action_verification(step);
  85. }
  86. static struct test_case test_cases[] = {
  87. TEST_CASE_BREDRLE("PAN Init",
  88. ACTION_SUCCESS(dummy_action, NULL),
  89. ),
  90. TEST_CASE_BREDRLE("PAN Connect - Success",
  91. ACTION_SUCCESS(set_default_ssp_request_handler, NULL),
  92. ACTION_SUCCESS(bluetooth_enable_action, NULL),
  93. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
  94. ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
  95. ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
  96. ACTION_SUCCESS(emu_add_l2cap_server_action, &l2cap_setup_data),
  97. ACTION_SUCCESS(pan_connect_action, NULL),
  98. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  99. BT_STATUS_SUCCESS,
  100. BTPAN_STATE_CONNECTING,
  101. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  102. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  103. BTPAN_STATE_ENABLED, BTPAN_ROLE_PANU),
  104. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  105. BT_STATUS_SUCCESS,
  106. BTPAN_STATE_CONNECTED,
  107. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  108. ACTION_SUCCESS(bluetooth_disable_action, NULL),
  109. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  110. BT_STATUS_SUCCESS,
  111. BTPAN_STATE_DISCONNECTED,
  112. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  113. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
  114. ),
  115. TEST_CASE_BREDRLE("PAN Disconnect - Success",
  116. ACTION_SUCCESS(set_default_ssp_request_handler, NULL),
  117. ACTION_SUCCESS(bluetooth_enable_action, NULL),
  118. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
  119. ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
  120. ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
  121. ACTION_SUCCESS(emu_add_l2cap_server_action, &l2cap_setup_data),
  122. ACTION_SUCCESS(pan_connect_action, NULL),
  123. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  124. BT_STATUS_SUCCESS,
  125. BTPAN_STATE_CONNECTING,
  126. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  127. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  128. BTPAN_STATE_ENABLED, BTPAN_ROLE_PANU),
  129. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  130. BT_STATUS_SUCCESS,
  131. BTPAN_STATE_CONNECTED,
  132. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  133. ACTION_SUCCESS(pan_disconnect_action, NULL),
  134. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  135. BT_STATUS_SUCCESS,
  136. BTPAN_STATE_DISCONNECTED,
  137. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  138. ACTION_SUCCESS(bluetooth_disable_action, NULL),
  139. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
  140. ),
  141. TEST_CASE_BREDRLE("PAN GetLocalRole - Success",
  142. ACTION_SUCCESS(set_default_ssp_request_handler, NULL),
  143. ACTION_SUCCESS(bluetooth_enable_action, NULL),
  144. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
  145. ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
  146. ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
  147. ACTION_SUCCESS(emu_add_l2cap_server_action, &l2cap_setup_data),
  148. ACTION_SUCCESS(pan_connect_action, NULL),
  149. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  150. BT_STATUS_SUCCESS,
  151. BTPAN_STATE_CONNECTING,
  152. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  153. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  154. BTPAN_STATE_ENABLED, BTPAN_ROLE_PANU),
  155. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  156. BT_STATUS_SUCCESS,
  157. BTPAN_STATE_CONNECTED,
  158. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  159. ACTION_SUCCESS(pan_get_local_role_action, NULL),
  160. ACTION_SUCCESS(bluetooth_disable_action, NULL),
  161. CALLBACK_PAN_CONN_STATE(CB_PAN_CONNECTION_STATE,
  162. BT_STATUS_SUCCESS,
  163. BTPAN_STATE_DISCONNECTED,
  164. BTPAN_ROLE_PANU, BTPAN_ROLE_PANNAP),
  165. CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
  166. ),
  167. TEST_CASE_BREDRLE("PAN Enable NAP - Success",
  168. ACTION_SUCCESS(pan_enable_nap_action, NULL),
  169. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  170. BTPAN_STATE_ENABLED, BTPAN_ROLE_PANNAP),
  171. ),
  172. TEST_CASE_BREDRLE("PAN Enable PANU - Success",
  173. ACTION(BT_STATUS_UNSUPPORTED, pan_enable_panu_action, NULL),
  174. ),
  175. TEST_CASE_BREDRLE("PAN Enable NONE - Success",
  176. ACTION_SUCCESS(pan_enable_nap_action, NULL),
  177. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  178. BTPAN_STATE_ENABLED, BTPAN_ROLE_PANNAP),
  179. ACTION_SUCCESS(pan_enable_none_action, NULL),
  180. CALLBACK_PAN_CTRL_STATE(CB_PAN_CONTROL_STATE, BT_STATUS_SUCCESS,
  181. BTPAN_STATE_DISABLED, BTPAN_ROLE_NONE),
  182. ),
  183. };
  184. struct queue *get_pan_tests(void)
  185. {
  186. uint16_t i = 0;
  187. list = queue_new();
  188. for (; i < sizeof(test_cases) / sizeof(test_cases[0]); ++i)
  189. queue_push_tail(list, &test_cases[i]);
  190. return list;
  191. }
  192. void remove_pan_tests(void)
  193. {
  194. queue_destroy(list, NULL);
  195. }