static void ble_att_clt_test_misc_prep_good(uint16_t handle, uint16_t offset, uint8_t *attr_data, uint16_t attr_data_len) { struct ble_att_prep_write_cmd req; struct os_mbuf *om; uint16_t conn_handle; int rc; int i; conn_handle = ble_att_clt_test_misc_init(); req.bapc_handle = handle; req.bapc_offset = offset; rc = ble_att_clt_tx_prep_write(conn_handle, &req, attr_data, attr_data_len); TEST_ASSERT(rc == 0); ble_hs_test_util_tx_all(); om = ble_hs_test_util_prev_tx_dequeue_pullup(); TEST_ASSERT_FATAL(om != NULL); TEST_ASSERT(om->om_len == BLE_ATT_PREP_WRITE_CMD_BASE_SZ + attr_data_len); ble_att_prep_write_req_parse(om->om_data, om->om_len, &req); TEST_ASSERT(req.bapc_handle == handle); TEST_ASSERT(req.bapc_offset == offset); for (i = 0; i < attr_data_len; i++) { TEST_ASSERT(om->om_data[BLE_ATT_PREP_WRITE_CMD_BASE_SZ + i] == attr_data[i]); } }
static void ble_att_clt_test_case_tx_write_req_or_cmd(int is_req) { struct ble_att_write_req req; uint16_t conn_handle; uint8_t value300[500] = { 0 }; uint8_t value5[5] = { 6, 7, 54, 34, 8 }; conn_handle = ble_att_clt_test_misc_init(); /*** 5-byte write. */ req.bawq_handle = 0x1234; ble_att_clt_test_tx_write_req_or_cmd(conn_handle, &req, value5, sizeof value5, is_req); ble_hs_test_util_tx_all(); ble_att_clt_test_misc_verify_tx_write(0x1234, value5, sizeof value5, is_req); /*** Overlong write; verify command truncated to ATT MTU. */ req.bawq_handle = 0xab83; ble_att_clt_test_tx_write_req_or_cmd(conn_handle, &req, value300, sizeof value300, is_req); ble_hs_test_util_tx_all(); ble_att_clt_test_misc_verify_tx_write(0xab83, value300, BLE_ATT_MTU_DFLT - 3, is_req); }
static void ble_att_clt_test_misc_exec_good(uint8_t flags) { struct ble_att_exec_write_req req; struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; struct os_mbuf *om; int rc; ble_att_clt_test_misc_init(&conn, &chan); req.baeq_flags = flags; rc = ble_att_clt_tx_exec_write(conn->bhc_handle, &req); TEST_ASSERT(rc == 0); ble_hs_test_util_tx_all(); TEST_ASSERT_FATAL(ble_hs_test_util_prev_tx != NULL); om = os_mbuf_pullup(ble_hs_test_util_prev_tx, OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx)); TEST_ASSERT_FATAL(om != NULL); TEST_ASSERT(om->om_len == BLE_ATT_EXEC_WRITE_REQ_SZ); ble_att_exec_write_req_parse(om->om_data, om->om_len, &req); TEST_ASSERT(req.baeq_flags == flags); }
static void ble_att_clt_test_misc_prep_bad(uint16_t handle, uint16_t offset, uint8_t *attr_data, uint16_t attr_data_len, int status) { struct ble_att_prep_write_cmd req; uint16_t conn_handle; int rc; conn_handle = ble_att_clt_test_misc_init(); req.bapc_handle = handle; req.bapc_offset = offset; rc = ble_att_clt_tx_prep_write(conn_handle, &req, attr_data, attr_data_len); TEST_ASSERT(rc == status); }
static void ble_att_clt_test_misc_prep_bad(uint16_t handle, uint16_t offset, uint8_t *attr_data, uint16_t attr_data_len, int status) { struct ble_att_prep_write_cmd req; struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; int rc; ble_att_clt_test_misc_init(&conn, &chan); req.bapc_handle = handle; req.bapc_offset = offset; rc = ble_att_clt_tx_prep_write(conn->bhc_handle, &req, attr_data, attr_data_len); TEST_ASSERT(rc == status); }
static void ble_att_clt_test_misc_exec_good(uint8_t flags) { struct ble_att_exec_write_req req; struct os_mbuf *om; uint16_t conn_handle; int rc; conn_handle = ble_att_clt_test_misc_init(); req.baeq_flags = flags; rc = ble_att_clt_tx_exec_write(conn_handle, &req); TEST_ASSERT(rc == 0); ble_hs_test_util_tx_all(); om = ble_hs_test_util_prev_tx_dequeue_pullup(); TEST_ASSERT_FATAL(om != NULL); TEST_ASSERT(om->om_len == BLE_ATT_EXEC_WRITE_REQ_SZ); ble_att_exec_write_req_parse(om->om_data, om->om_len, &req); TEST_ASSERT(req.baeq_flags == flags); }