You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/09/22 02:12:26 UTC
[19/59] [abbrv] incubator-mynewt-core git commit: syscfg / sysinit
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d98ddc1c/net/nimble/host/src/test/ble_hs_test_util.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util.c b/net/nimble/host/src/test/ble_hs_test_util.c
deleted file mode 100644
index 30926b6..0000000
--- a/net/nimble/host/src/test/ble_hs_test_util.c
+++ /dev/null
@@ -1,1438 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <string.h>
-#include <errno.h>
-#include "stats/stats.h"
-#include "testutil/testutil.h"
-#include "nimble/ble.h"
-#include "nimble/hci_common.h"
-#include "nimble/ble_hci_trans.h"
-#include "host/ble_hs_adv.h"
-#include "host/ble_hs_id.h"
-#include "transport/ram/ble_hci_ram.h"
-#include "ble_hs_test_util.h"
-
-/* Our global device address. */
-uint8_t g_dev_addr[BLE_DEV_ADDR_LEN];
-
-#define BLE_HS_TEST_UTIL_PUB_ADDR_VAL { 0x0a, 0x54, 0xab, 0x49, 0x7f, 0x06 }
-
-static const uint8_t ble_hs_test_util_pub_addr[BLE_DEV_ADDR_LEN] =
- BLE_HS_TEST_UTIL_PUB_ADDR_VAL;
-
-/** Use lots of small mbufs to ensure correct mbuf usage. */
-#define BLE_HS_TEST_UTIL_NUM_MBUFS (100)
-#define BLE_HS_TEST_UTIL_BUF_SIZE OS_ALIGN(100, 4)
-#define BLE_HS_TEST_UTIL_MEMBLOCK_SIZE \
- (BLE_HS_TEST_UTIL_BUF_SIZE + BLE_MBUF_MEMBLOCK_OVERHEAD)
-#define BLE_HS_TEST_UTIL_MEMPOOL_SIZE \
- OS_MEMPOOL_SIZE(BLE_HS_TEST_UTIL_NUM_MBUFS, BLE_HS_TEST_UTIL_MEMBLOCK_SIZE)
-
-#define BLE_HS_TEST_UTIL_LE_OPCODE(ocf) \
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE, (ocf))
-
-struct os_eventq ble_hs_test_util_evq;
-
-os_membuf_t ble_hs_test_util_mbuf_mpool_data[BLE_HS_TEST_UTIL_MEMPOOL_SIZE];
-struct os_mbuf_pool ble_hs_test_util_mbuf_pool;
-struct os_mempool ble_hs_test_util_mbuf_mpool;
-
-static STAILQ_HEAD(, os_mbuf_pkthdr) ble_hs_test_util_prev_tx_queue;
-struct os_mbuf *ble_hs_test_util_prev_tx_cur;
-
-#define BLE_HS_TEST_UTIL_PREV_HCI_TX_CNT 64
-static uint8_t
-ble_hs_test_util_prev_hci_tx[BLE_HS_TEST_UTIL_PREV_HCI_TX_CNT][260];
-int ble_hs_test_util_num_prev_hci_txes;
-
-uint8_t ble_hs_test_util_cur_hci_tx[260];
-
-const struct ble_gap_adv_params ble_hs_test_util_adv_params = {
- .conn_mode = BLE_GAP_CONN_MODE_UND,
- .disc_mode = BLE_GAP_DISC_MODE_GEN,
-
- .itvl_min = 0,
- .itvl_max = 0,
- .channel_map = 0,
- .filter_policy = 0,
- .high_duty_cycle = 0,
-};
-
-void
-ble_hs_test_util_prev_tx_enqueue(struct os_mbuf *om)
-{
- struct os_mbuf_pkthdr *omp;
-
- assert(OS_MBUF_IS_PKTHDR(om));
-
- omp = OS_MBUF_PKTHDR(om);
- if (STAILQ_EMPTY(&ble_hs_test_util_prev_tx_queue)) {
- STAILQ_INSERT_HEAD(&ble_hs_test_util_prev_tx_queue, omp, omp_next);
- } else {
- STAILQ_INSERT_TAIL(&ble_hs_test_util_prev_tx_queue, omp, omp_next);
- }
-}
-
-static struct os_mbuf *
-ble_hs_test_util_prev_tx_dequeue_once(struct hci_data_hdr *out_hci_hdr)
-{
- struct os_mbuf_pkthdr *omp;
- struct os_mbuf *om;
- int rc;
-
- omp = STAILQ_FIRST(&ble_hs_test_util_prev_tx_queue);
- if (omp == NULL) {
- return NULL;
- }
- STAILQ_REMOVE_HEAD(&ble_hs_test_util_prev_tx_queue, omp_next);
-
- om = OS_MBUF_PKTHDR_TO_MBUF(omp);
-
- rc = ble_hs_hci_util_data_hdr_strip(om, out_hci_hdr);
- TEST_ASSERT_FATAL(rc == 0);
- TEST_ASSERT_FATAL(out_hci_hdr->hdh_len == OS_MBUF_PKTLEN(om));
-
- return om;
-}
-
-struct os_mbuf *
-ble_hs_test_util_prev_tx_dequeue(void)
-{
- struct ble_l2cap_hdr l2cap_hdr;
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- uint8_t pb;
- int rc;
-
- os_mbuf_free_chain(ble_hs_test_util_prev_tx_cur);
-
- om = ble_hs_test_util_prev_tx_dequeue_once(&hci_hdr);
- if (om != NULL) {
- pb = BLE_HCI_DATA_PB(hci_hdr.hdh_handle_pb_bc);
- TEST_ASSERT_FATAL(pb == BLE_HCI_PB_FIRST_NON_FLUSH);
-
- rc = ble_l2cap_parse_hdr(om, 0, &l2cap_hdr);
- TEST_ASSERT_FATAL(rc == 0);
-
- os_mbuf_adj(om, BLE_L2CAP_HDR_SZ);
-
- ble_hs_test_util_prev_tx_cur = om;
- while (OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx_cur) <
- l2cap_hdr.blh_len) {
-
- om = ble_hs_test_util_prev_tx_dequeue_once(&hci_hdr);
- TEST_ASSERT_FATAL(om != NULL);
-
- pb = BLE_HCI_DATA_PB(hci_hdr.hdh_handle_pb_bc);
- TEST_ASSERT_FATAL(pb == BLE_HCI_PB_MIDDLE);
-
- os_mbuf_concat(ble_hs_test_util_prev_tx_cur, om);
- }
- } else {
- ble_hs_test_util_prev_tx_cur = NULL;
- }
-
- return ble_hs_test_util_prev_tx_cur;
-}
-
-struct os_mbuf *
-ble_hs_test_util_prev_tx_dequeue_pullup(void)
-{
- struct os_mbuf *om;
-
- om = ble_hs_test_util_prev_tx_dequeue();
- if (om != NULL) {
- om = os_mbuf_pullup(om, OS_MBUF_PKTLEN(om));
- TEST_ASSERT_FATAL(om != NULL);
- ble_hs_test_util_prev_tx_cur = om;
- }
-
- return om;
-}
-
-int
-ble_hs_test_util_prev_tx_queue_sz(void)
-{
- struct os_mbuf_pkthdr *omp;
- int cnt;
-
- cnt = 0;
- STAILQ_FOREACH(omp, &ble_hs_test_util_prev_tx_queue, omp_next) {
- cnt++;
- }
-
- return cnt;
-}
-
-void
-ble_hs_test_util_prev_tx_queue_clear(void)
-{
- ble_hs_test_util_tx_all();
- while (!STAILQ_EMPTY(&ble_hs_test_util_prev_tx_queue)) {
- ble_hs_test_util_prev_tx_dequeue();
- }
-}
-
-void *
-ble_hs_test_util_get_first_hci_tx(void)
-{
- if (ble_hs_test_util_num_prev_hci_txes == 0) {
- return NULL;
- }
-
- memcpy(ble_hs_test_util_cur_hci_tx, ble_hs_test_util_prev_hci_tx[0],
- sizeof ble_hs_test_util_cur_hci_tx);
-
- ble_hs_test_util_num_prev_hci_txes--;
- if (ble_hs_test_util_num_prev_hci_txes > 0) {
- memmove(
- ble_hs_test_util_prev_hci_tx, ble_hs_test_util_prev_hci_tx + 1,
- sizeof ble_hs_test_util_prev_hci_tx[0] *
- ble_hs_test_util_num_prev_hci_txes);
- }
-
- return ble_hs_test_util_cur_hci_tx;
-}
-
-void *
-ble_hs_test_util_get_last_hci_tx(void)
-{
- if (ble_hs_test_util_num_prev_hci_txes == 0) {
- return NULL;
- }
-
- ble_hs_test_util_num_prev_hci_txes--;
- memcpy(ble_hs_test_util_cur_hci_tx,
- ble_hs_test_util_prev_hci_tx + ble_hs_test_util_num_prev_hci_txes,
- sizeof ble_hs_test_util_cur_hci_tx);
-
- return ble_hs_test_util_cur_hci_tx;
-}
-
-void
-ble_hs_test_util_enqueue_hci_tx(void *cmd)
-{
- TEST_ASSERT_FATAL(ble_hs_test_util_num_prev_hci_txes <
- BLE_HS_TEST_UTIL_PREV_HCI_TX_CNT);
- memcpy(ble_hs_test_util_prev_hci_tx + ble_hs_test_util_num_prev_hci_txes,
- cmd, 260);
-
- ble_hs_test_util_num_prev_hci_txes++;
-}
-
-void
-ble_hs_test_util_prev_hci_tx_clear(void)
-{
- ble_hs_test_util_num_prev_hci_txes = 0;
-}
-
-static void
-ble_hs_test_util_rx_hci_evt(uint8_t *evt)
-{
- uint8_t *evbuf;
- int totlen;
- int rc;
-
- totlen = BLE_HCI_EVENT_HDR_LEN + evt[1];
- TEST_ASSERT_FATAL(totlen <= UINT8_MAX + BLE_HCI_EVENT_HDR_LEN);
-
- if (os_started()) {
- evbuf = ble_hci_trans_buf_alloc(
- BLE_HCI_TRANS_BUF_EVT_LO);
- TEST_ASSERT_FATAL(evbuf != NULL);
-
- memcpy(evbuf, evt, totlen);
- rc = ble_hci_trans_ll_evt_tx(evbuf);
- } else {
- rc = ble_hs_hci_evt_process(evt);
- }
-
- TEST_ASSERT_FATAL(rc == 0);
-}
-
-void
-ble_hs_test_util_build_cmd_complete(uint8_t *dst, int len,
- uint8_t param_len, uint8_t num_pkts,
- uint16_t opcode)
-{
- TEST_ASSERT(len >= BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN);
-
- dst[0] = BLE_HCI_EVCODE_COMMAND_COMPLETE;
- dst[1] = 3 + param_len;
- dst[2] = num_pkts;
- htole16(dst + 3, opcode);
-}
-
-void
-ble_hs_test_util_build_cmd_status(uint8_t *dst, int len,
- uint8_t status, uint8_t num_pkts,
- uint16_t opcode)
-{
- TEST_ASSERT(len >= BLE_HCI_EVENT_CMD_STATUS_LEN);
-
- dst[0] = BLE_HCI_EVCODE_COMMAND_STATUS;
- dst[1] = BLE_HCI_EVENT_CMD_STATUS_LEN;
- dst[2] = status;
- dst[3] = num_pkts;
- htole16(dst + 4, opcode);
-}
-
-#define BLE_HS_TEST_UTIL_PHONY_ACK_MAX 64
-struct ble_hs_test_util_phony_ack {
- uint16_t opcode;
- uint8_t status;
- uint8_t evt_params[256];
- uint8_t evt_params_len;
-};
-
-static struct ble_hs_test_util_phony_ack
-ble_hs_test_util_phony_acks[BLE_HS_TEST_UTIL_PHONY_ACK_MAX];
-static int ble_hs_test_util_num_phony_acks;
-
-static int
-ble_hs_test_util_phony_ack_cb(uint8_t *ack, int ack_buf_len)
-{
- struct ble_hs_test_util_phony_ack *entry;
-
- if (ble_hs_test_util_num_phony_acks == 0) {
- return BLE_HS_ETIMEOUT_HCI;
- }
-
- entry = ble_hs_test_util_phony_acks;
-
- ble_hs_test_util_build_cmd_complete(ack, 256,
- entry->evt_params_len + 1, 1,
- entry->opcode);
- ack[BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN] = entry->status;
- memcpy(ack + BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN + 1, entry->evt_params,
- entry->evt_params_len);
-
- ble_hs_test_util_num_phony_acks--;
- if (ble_hs_test_util_num_phony_acks > 0) {
- memmove(ble_hs_test_util_phony_acks, ble_hs_test_util_phony_acks + 1,
- sizeof *entry * ble_hs_test_util_num_phony_acks);
- }
-
- return 0;
-}
-
-void
-ble_hs_test_util_set_ack_params(uint16_t opcode, uint8_t status, void *params,
- uint8_t params_len)
-{
- struct ble_hs_test_util_phony_ack *ack;
-
- ack = ble_hs_test_util_phony_acks + 0;
- ack->opcode = opcode;
- ack->status = status;
-
- if (params == NULL || params_len == 0) {
- ack->evt_params_len = 0;
- } else {
- memcpy(ack->evt_params, params, params_len);
- ack->evt_params_len = params_len;
- }
- ble_hs_test_util_num_phony_acks = 1;
-
- ble_hs_hci_set_phony_ack_cb(ble_hs_test_util_phony_ack_cb);
-}
-
-void
-ble_hs_test_util_set_ack(uint16_t opcode, uint8_t status)
-{
- ble_hs_test_util_set_ack_params(opcode, status, NULL, 0);
-}
-
-static void
-ble_hs_test_util_set_ack_seq(struct ble_hs_test_util_phony_ack *acks)
-{
- int i;
-
- for (i = 0; acks[i].opcode != 0; i++) {
- ble_hs_test_util_phony_acks[i] = acks[i];
- }
- ble_hs_test_util_num_phony_acks = i;
-
- ble_hs_hci_set_phony_ack_cb(ble_hs_test_util_phony_ack_cb);
-}
-
-void
-ble_hs_test_util_create_rpa_conn(uint16_t handle, uint8_t own_addr_type,
- const uint8_t *our_rpa,
- uint8_t peer_addr_type,
- const uint8_t *peer_id_addr,
- const uint8_t *peer_rpa,
- ble_gap_event_fn *cb, void *cb_arg)
-{
- struct hci_le_conn_complete evt;
- int rc;
-
- ble_hs_test_util_connect(own_addr_type, peer_addr_type,
- peer_id_addr, 0, NULL, cb, cb_arg, 0);
-
- memset(&evt, 0, sizeof evt);
- evt.subevent_code = BLE_HCI_LE_SUBEV_CONN_COMPLETE;
- evt.status = BLE_ERR_SUCCESS;
- evt.connection_handle = handle;
- evt.role = BLE_HCI_LE_CONN_COMPLETE_ROLE_MASTER;
- evt.peer_addr_type = peer_addr_type;
- memcpy(evt.peer_addr, peer_id_addr, 6);
- evt.conn_itvl = BLE_GAP_INITIAL_CONN_ITVL_MAX;
- evt.conn_latency = BLE_GAP_INITIAL_CONN_LATENCY;
- evt.supervision_timeout = BLE_GAP_INITIAL_SUPERVISION_TIMEOUT;
- memcpy(evt.local_rpa, our_rpa, 6);
- memcpy(evt.peer_rpa, peer_rpa, 6);
-
- rc = ble_gap_rx_conn_complete(&evt);
- TEST_ASSERT(rc == 0);
-
- ble_hs_test_util_prev_hci_tx_clear();
-}
-
-void
-ble_hs_test_util_create_conn(uint16_t handle, uint8_t *peer_id_addr,
- ble_gap_event_fn *cb, void *cb_arg)
-{
- static uint8_t null_addr[6];
-
- ble_hs_test_util_create_rpa_conn(handle, BLE_ADDR_TYPE_PUBLIC, null_addr,
- BLE_ADDR_TYPE_PUBLIC, peer_id_addr,
- null_addr, cb, cb_arg);
-}
-
-static void
-ble_hs_test_util_conn_params_dflt(struct ble_gap_conn_params *conn_params)
-{
- conn_params->scan_itvl = 0x0010;
- conn_params->scan_window = 0x0010;
- conn_params->itvl_min = BLE_GAP_INITIAL_CONN_ITVL_MIN;
- conn_params->itvl_max = BLE_GAP_INITIAL_CONN_ITVL_MAX;
- conn_params->latency = BLE_GAP_INITIAL_CONN_LATENCY;
- conn_params->supervision_timeout = BLE_GAP_INITIAL_SUPERVISION_TIMEOUT;
- conn_params->min_ce_len = BLE_GAP_INITIAL_CONN_MIN_CE_LEN;
- conn_params->max_ce_len = BLE_GAP_INITIAL_CONN_MAX_CE_LEN;
-}
-
-static void
-ble_hs_test_util_hcc_from_conn_params(
- struct hci_create_conn *hcc, uint8_t own_addr_type, uint8_t peer_addr_type,
- const uint8_t *peer_addr, const struct ble_gap_conn_params *conn_params)
-{
- hcc->scan_itvl = conn_params->scan_itvl;
- hcc->scan_window = conn_params->scan_window;
-
- if (peer_addr_type == BLE_GAP_ADDR_TYPE_WL) {
- hcc->filter_policy = BLE_HCI_CONN_FILT_USE_WL;
- hcc->peer_addr_type = 0;
- memset(hcc->peer_addr, 0, 6);
- } else {
- hcc->filter_policy = BLE_HCI_CONN_FILT_NO_WL;
- hcc->peer_addr_type = peer_addr_type;
- memcpy(hcc->peer_addr, peer_addr, 6);
- }
- hcc->own_addr_type = own_addr_type;
- hcc->conn_itvl_min = conn_params->itvl_min;
- hcc->conn_itvl_max = conn_params->itvl_max;
- hcc->conn_latency = conn_params->latency;
- hcc->supervision_timeout = conn_params->supervision_timeout;
- hcc->min_ce_len = conn_params->min_ce_len;
- hcc->max_ce_len = conn_params->max_ce_len;
-}
-
-void
-ble_hs_test_util_verify_tx_create_conn(const struct hci_create_conn *exp)
-{
- uint8_t param_len;
- uint8_t *param;
-
- param = ble_hs_test_util_verify_tx_hci(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_CREATE_CONN,
- ¶m_len);
- TEST_ASSERT(param_len == BLE_HCI_CREATE_CONN_LEN);
-
- TEST_ASSERT(le16toh(param + 0) == exp->scan_itvl);
- TEST_ASSERT(le16toh(param + 2) == exp->scan_window);
- TEST_ASSERT(param[4] == exp->filter_policy);
- TEST_ASSERT(param[5] == exp->peer_addr_type);
- TEST_ASSERT(memcmp(param + 6, exp->peer_addr, 6) == 0);
- TEST_ASSERT(param[12] == exp->own_addr_type);
- TEST_ASSERT(le16toh(param + 13) == exp->conn_itvl_min);
- TEST_ASSERT(le16toh(param + 15) == exp->conn_itvl_max);
- TEST_ASSERT(le16toh(param + 17) == exp->conn_latency);
- TEST_ASSERT(le16toh(param + 19) == exp->supervision_timeout);
- TEST_ASSERT(le16toh(param + 21) == exp->min_ce_len);
- TEST_ASSERT(le16toh(param + 23) == exp->max_ce_len);
-}
-
-int
-ble_hs_test_util_connect(uint8_t own_addr_type, uint8_t peer_addr_type,
- const uint8_t *peer_addr, int32_t duration_ms,
- const struct ble_gap_conn_params *params,
- ble_gap_event_fn *cb, void *cb_arg,
- uint8_t ack_status)
-{
- struct ble_gap_conn_params dflt_params;
- struct hci_create_conn hcc;
- int rc;
-
- /* This function ensures the most recently sent HCI command is the expected
- * create connection command. If the current test case has unverified HCI
- * commands, assume we are not interested in them and clear the queue.
- */
- ble_hs_test_util_prev_hci_tx_clear();
-
- ble_hs_test_util_set_ack(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_CREATE_CONN),
- ack_status);
-
- rc = ble_gap_connect(own_addr_type, peer_addr_type, peer_addr, duration_ms,
- params, cb, cb_arg);
-
- TEST_ASSERT(rc == BLE_HS_HCI_ERR(ack_status));
-
- if (params == NULL) {
- ble_hs_test_util_conn_params_dflt(&dflt_params);
- params = &dflt_params;
- }
-
- ble_hs_test_util_hcc_from_conn_params(&hcc, own_addr_type,
- peer_addr_type, peer_addr, params);
- ble_hs_test_util_verify_tx_create_conn(&hcc);
-
- return rc;
-}
-
-int
-ble_hs_test_util_conn_cancel(uint8_t ack_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_CREATE_CONN_CANCEL),
- ack_status);
-
- rc = ble_gap_conn_cancel();
- return rc;
-}
-
-void
-ble_hs_test_util_conn_cancel_full(void)
-{
- struct hci_le_conn_complete evt;
- int rc;
-
- ble_hs_test_util_conn_cancel(0);
-
- memset(&evt, 0, sizeof evt);
- evt.subevent_code = BLE_HCI_LE_SUBEV_CONN_COMPLETE;
- evt.status = BLE_ERR_UNK_CONN_ID;
- evt.role = BLE_HCI_LE_CONN_COMPLETE_ROLE_MASTER;
-
- rc = ble_gap_rx_conn_complete(&evt);
- TEST_ASSERT_FATAL(rc == 0);
-}
-
-int
-ble_hs_test_util_conn_terminate(uint16_t conn_handle, uint8_t hci_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LINK_CTRL,
- BLE_HCI_OCF_DISCONNECT_CMD),
- hci_status);
-
- rc = ble_gap_terminate(conn_handle, BLE_ERR_REM_USER_CONN_TERM);
- return rc;
-}
-
-void
-ble_hs_test_util_conn_disconnect(uint16_t conn_handle)
-{
- struct hci_disconn_complete evt;
- int rc;
-
- rc = ble_hs_test_util_conn_terminate(conn_handle, 0);
- TEST_ASSERT_FATAL(rc == 0);
-
- /* Receive disconnection complete event. */
- evt.connection_handle = conn_handle;
- evt.status = 0;
- evt.reason = BLE_ERR_CONN_TERM_LOCAL;
- ble_gap_rx_disconn_complete(&evt);
-}
-
-int
-ble_hs_test_util_exp_hci_status(int cmd_idx, int fail_idx, uint8_t fail_status)
-{
- if (cmd_idx == fail_idx) {
- return BLE_HS_HCI_ERR(fail_status);
- } else {
- return 0;
- }
-}
-
-int
-ble_hs_test_util_disc(uint8_t own_addr_type, int32_t duration_ms,
- const struct ble_gap_disc_params *disc_params,
- ble_gap_event_fn *cb, void *cb_arg, int fail_idx,
- uint8_t fail_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack_seq(((struct ble_hs_test_util_phony_ack[]) {
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_SCAN_PARAMS),
- ble_hs_test_util_exp_hci_status(0, fail_idx, fail_status),
- },
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_SCAN_ENABLE),
- ble_hs_test_util_exp_hci_status(1, fail_idx, fail_status),
- },
-
- { 0 }
- }));
-
- rc = ble_gap_disc(own_addr_type, duration_ms, disc_params,
- cb, cb_arg);
- return rc;
-}
-
-int
-ble_hs_test_util_disc_cancel(uint8_t ack_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_SET_SCAN_ENABLE),
- ack_status);
-
- rc = ble_gap_disc_cancel();
- return rc;
-}
-
-static void
-ble_hs_test_util_verify_tx_rd_pwr(void)
-{
- uint8_t param_len;
-
- ble_hs_test_util_verify_tx_hci(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR,
- ¶m_len);
- TEST_ASSERT(param_len == 0);
-}
-
-int
-ble_hs_test_util_adv_set_fields(struct ble_hs_adv_fields *adv_fields,
- uint8_t hci_status)
-{
- int auto_pwr;
- int rc;
-
- auto_pwr = adv_fields->tx_pwr_lvl_is_present &&
- adv_fields->tx_pwr_lvl == BLE_HS_ADV_TX_PWR_LVL_AUTO;
-
- if (auto_pwr) {
- ble_hs_test_util_set_ack_params(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR),
- hci_status,
- ((uint8_t[1]){0}), 1);
- }
-
- rc = ble_gap_adv_set_fields(adv_fields);
- if (rc == 0 && auto_pwr) {
- /* Verify tx of set advertising params command. */
- ble_hs_test_util_verify_tx_rd_pwr();
- }
-
- return rc;
-}
-
-int
-ble_hs_test_util_adv_start(uint8_t own_addr_type,
- uint8_t peer_addr_type, const uint8_t *peer_addr,
- const struct ble_gap_adv_params *adv_params,
- ble_gap_event_fn *cb, void *cb_arg,
- int fail_idx, uint8_t fail_status)
-{
- struct ble_hs_test_util_phony_ack acks[6];
- int rc;
- int i;
-
- i = 0;
-
- acks[i] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADV_PARAMS),
- fail_idx == i ? fail_status : 0,
- };
- i++;
-
- if (adv_params->conn_mode != BLE_GAP_CONN_MODE_DIR) {
- acks[i] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADV_DATA),
- ble_hs_test_util_exp_hci_status(i, fail_idx, fail_status),
- };
- i++;
-
- acks[i] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA),
- ble_hs_test_util_exp_hci_status(i, fail_idx, fail_status),
- };
- i++;
- }
-
- acks[i] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADV_ENABLE),
- ble_hs_test_util_exp_hci_status(i, fail_idx, fail_status),
- };
- i++;
-
- memset(acks + i, 0, sizeof acks[i]);
-
- ble_hs_test_util_set_ack_seq(acks);
-
- rc = ble_gap_adv_start(own_addr_type, peer_addr_type, peer_addr,
- BLE_HS_FOREVER, adv_params, cb, cb_arg);
-
- return rc;
-}
-
-int
-ble_hs_test_util_adv_stop(uint8_t hci_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADV_ENABLE),
- hci_status);
-
- rc = ble_gap_adv_stop();
- return rc;
-}
-
-int
-ble_hs_test_util_wl_set(struct ble_gap_white_entry *white_list,
- uint8_t white_list_count,
- int fail_idx, uint8_t fail_status)
-{
- struct ble_hs_test_util_phony_ack acks[64];
- int cmd_idx;
- int rc;
- int i;
-
- TEST_ASSERT_FATAL(white_list_count < 63);
-
- cmd_idx = 0;
- acks[cmd_idx] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_CLEAR_WHITE_LIST),
- ble_hs_test_util_exp_hci_status(cmd_idx, fail_idx, fail_status),
- };
- cmd_idx++;
-
- for (i = 0; i < white_list_count; i++) {
- acks[cmd_idx] = (struct ble_hs_test_util_phony_ack) {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_ADD_WHITE_LIST),
- ble_hs_test_util_exp_hci_status(cmd_idx, fail_idx, fail_status),
- };
-
- cmd_idx++;
- }
- memset(acks + cmd_idx, 0, sizeof acks[cmd_idx]);
-
- ble_hs_test_util_set_ack_seq(acks);
- rc = ble_gap_wl_set(white_list, white_list_count);
- return rc;
-}
-
-int
-ble_hs_test_util_conn_update(uint16_t conn_handle,
- struct ble_gap_upd_params *params,
- uint8_t hci_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_CONN_UPDATE), hci_status);
-
- rc = ble_gap_update_params(conn_handle, params);
- return rc;
-}
-
-int
-ble_hs_test_util_set_our_irk(const uint8_t *irk, int fail_idx,
- uint8_t hci_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack_seq(((struct ble_hs_test_util_phony_ack[]) {
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADDR_RES_EN),
- ble_hs_test_util_exp_hci_status(0, fail_idx, hci_status),
- },
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_CLR_RESOLV_LIST),
- ble_hs_test_util_exp_hci_status(1, fail_idx, hci_status),
- },
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_ADDR_RES_EN),
- ble_hs_test_util_exp_hci_status(2, fail_idx, hci_status),
- },
- {
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_ADD_RESOLV_LIST),
- ble_hs_test_util_exp_hci_status(3, fail_idx, hci_status),
- },
- {
- 0
- }
- }));
-
- rc = ble_hs_pvcy_set_our_irk(irk);
- return rc;
-}
-
-int
-ble_hs_test_util_security_initiate(uint16_t conn_handle, uint8_t hci_status)
-{
- int rc;
-
- ble_hs_test_util_set_ack(
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_START_ENCRYPT), hci_status);
-
- rc = ble_gap_security_initiate(conn_handle);
- return rc;
-}
-
-int
-ble_hs_test_util_l2cap_rx_first_frag(uint16_t conn_handle, uint16_t cid,
- struct hci_data_hdr *hci_hdr,
- struct os_mbuf *om)
-{
- int rc;
-
- om = ble_l2cap_prepend_hdr(om, cid, OS_MBUF_PKTLEN(om));
- TEST_ASSERT_FATAL(om != NULL);
-
- rc = ble_hs_test_util_l2cap_rx(conn_handle, hci_hdr, om);
- return rc;
-}
-
-int
-ble_hs_test_util_l2cap_rx(uint16_t conn_handle,
- struct hci_data_hdr *hci_hdr,
- struct os_mbuf *om)
-{
- struct ble_hs_conn *conn;
- ble_l2cap_rx_fn *rx_cb;
- struct os_mbuf *rx_buf;
- int rc;
-
- ble_hs_lock();
-
- conn = ble_hs_conn_find(conn_handle);
- if (conn != NULL) {
- rc = ble_l2cap_rx(conn, hci_hdr, om, &rx_cb, &rx_buf);
- } else {
- os_mbuf_free_chain(om);
- }
-
- ble_hs_unlock();
-
- if (conn == NULL) {
- rc = BLE_HS_ENOTCONN;
- } else if (rc == 0) {
- TEST_ASSERT_FATAL(rx_cb != NULL);
- TEST_ASSERT_FATAL(rx_buf != NULL);
- rc = rx_cb(conn_handle, &rx_buf);
- os_mbuf_free_chain(rx_buf);
- } else if (rc == BLE_HS_EAGAIN) {
- /* More fragments on the way. */
- rc = 0;
- }
-
- return rc;
-}
-
-int
-ble_hs_test_util_l2cap_rx_payload_flat(uint16_t conn_handle, uint16_t cid,
- const void *data, int len)
-{
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- int rc;
-
- om = ble_hs_mbuf_l2cap_pkt();
- TEST_ASSERT_FATAL(om != NULL);
-
- rc = os_mbuf_append(om, data, len);
- TEST_ASSERT_FATAL(rc == 0);
-
- hci_hdr.hdh_handle_pb_bc =
- ble_hs_hci_util_handle_pb_bc_join(conn_handle,
- BLE_HCI_PB_FIRST_FLUSH, 0);
- hci_hdr.hdh_len = OS_MBUF_PKTHDR(om)->omp_len;
-
- rc = ble_hs_test_util_l2cap_rx_first_frag(conn_handle, cid, &hci_hdr, om);
- return rc;
-}
-
-void
-ble_hs_test_util_rx_att_err_rsp(uint16_t conn_handle, uint8_t req_op,
- uint8_t error_code, uint16_t err_handle)
-{
- struct ble_att_error_rsp rsp;
- uint8_t buf[BLE_ATT_ERROR_RSP_SZ];
- int rc;
-
- rsp.baep_req_op = req_op;
- rsp.baep_handle = err_handle;
- rsp.baep_error_code = error_code;
-
- ble_att_error_rsp_write(buf, sizeof buf, &rsp);
-
- rc = ble_hs_test_util_l2cap_rx_payload_flat(conn_handle, BLE_L2CAP_CID_ATT,
- buf, sizeof buf);
- TEST_ASSERT(rc == 0);
-}
-
-void
-ble_hs_test_util_set_startup_acks(void)
-{
- /* Receive acknowledgements for the startup sequence. We sent the
- * corresponding requests when the host task was started.
- */
- ble_hs_test_util_set_ack_seq(((struct ble_hs_test_util_phony_ack[]) {
- {
- .opcode = ble_hs_hci_util_opcode_join(BLE_HCI_OGF_CTLR_BASEBAND,
- BLE_HCI_OCF_CB_RESET),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_CTLR_BASEBAND, BLE_HCI_OCF_CB_SET_EVENT_MASK),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_CTLR_BASEBAND, BLE_HCI_OCF_CB_SET_EVENT_MASK2),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_EVENT_MASK),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_BUF_SIZE),
- /* Use a very low buffer size (16) to test fragmentation. */
- .evt_params = { 0x10, 0x00, 0x20 },
- .evt_params_len = 3,
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT),
- .evt_params = { 0 },
- .evt_params_len = 8,
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_BD_ADDR),
- .evt_params = BLE_HS_TEST_UTIL_PUB_ADDR_VAL,
- .evt_params_len = 6,
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADDR_RES_EN),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_CLR_RESOLV_LIST),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADDR_RES_EN),
- },
- {
- .opcode = ble_hs_hci_util_opcode_join(
- BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_ADD_RESOLV_LIST),
- },
- { 0 }
- }));
-}
-
-void
-ble_hs_test_util_rx_num_completed_pkts_event(
- struct ble_hs_test_util_num_completed_pkts_entry *entries)
-{
- struct ble_hs_test_util_num_completed_pkts_entry *entry;
- uint8_t buf[1024];
- int num_entries;
- int off;
- int i;
-
- /* Count number of entries. */
- num_entries = 0;
- for (entry = entries; entry->handle_id != 0; entry++) {
- num_entries++;
- }
- TEST_ASSERT_FATAL(num_entries <= UINT8_MAX);
-
- buf[0] = BLE_HCI_EVCODE_NUM_COMP_PKTS;
- buf[2] = num_entries;
-
- off = 3;
- for (i = 0; i < num_entries; i++) {
- htole16(buf + off, entries[i].handle_id);
- off += 2;
- }
- for (i = 0; i < num_entries; i++) {
- htole16(buf + off, entries[i].num_pkts);
- off += 2;
- }
-
- buf[1] = off - 2;
-
- ble_hs_test_util_rx_hci_evt(buf);
-}
-
-void
-ble_hs_test_util_rx_disconn_complete_event(struct hci_disconn_complete *evt)
-{
- uint8_t buf[BLE_HCI_EVENT_HDR_LEN + BLE_HCI_EVENT_DISCONN_COMPLETE_LEN];
-
- buf[0] = BLE_HCI_EVCODE_DISCONN_CMP;
- buf[1] = BLE_HCI_EVENT_DISCONN_COMPLETE_LEN;
- buf[2] = evt->status;
- htole16(buf + 3, evt->connection_handle);
- buf[5] = evt->reason;
-
- ble_hs_test_util_rx_hci_evt(buf);
-}
-
-uint8_t *
-ble_hs_test_util_verify_tx_hci(uint8_t ogf, uint16_t ocf,
- uint8_t *out_param_len)
-{
- uint16_t opcode;
- uint8_t *cmd;
-
- cmd = ble_hs_test_util_get_first_hci_tx();
- TEST_ASSERT_FATAL(cmd != NULL);
-
- opcode = le16toh(cmd);
- TEST_ASSERT(BLE_HCI_OGF(opcode) == ogf);
- TEST_ASSERT(BLE_HCI_OCF(opcode) == ocf);
-
- if (out_param_len != NULL) {
- *out_param_len = cmd[2];
- }
-
- return cmd + 3;
-}
-
-void
-ble_hs_test_util_tx_all(void)
-{
- ble_hs_process_tx_data_queue();
-}
-
-void
-ble_hs_test_util_verify_tx_prep_write(uint16_t attr_handle, uint16_t offset,
- const void *data, int data_len)
-{
- struct ble_att_prep_write_cmd req;
- struct os_mbuf *om;
-
- ble_hs_test_util_tx_all();
- om = ble_hs_test_util_prev_tx_dequeue();
- TEST_ASSERT_FATAL(om != NULL);
- TEST_ASSERT(OS_MBUF_PKTLEN(om) ==
- BLE_ATT_PREP_WRITE_CMD_BASE_SZ + data_len);
-
- om = os_mbuf_pullup(om, BLE_ATT_PREP_WRITE_CMD_BASE_SZ);
- TEST_ASSERT_FATAL(om != NULL);
-
- ble_att_prep_write_req_parse(om->om_data, om->om_len, &req);
- TEST_ASSERT(req.bapc_handle == attr_handle);
- TEST_ASSERT(req.bapc_offset == offset);
- TEST_ASSERT(os_mbuf_cmpf(om, BLE_ATT_PREP_WRITE_CMD_BASE_SZ,
- data, data_len) == 0);
-}
-
-void
-ble_hs_test_util_verify_tx_exec_write(uint8_t expected_flags)
-{
- struct ble_att_exec_write_req req;
- struct os_mbuf *om;
-
- 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 == expected_flags);
-}
-
-void
-ble_hs_test_util_verify_tx_read_rsp_gen(uint8_t att_op,
- uint8_t *attr_data, int attr_len)
-{
- struct os_mbuf *om;
- uint8_t u8;
- int rc;
- int i;
-
- ble_hs_test_util_tx_all();
-
- om = ble_hs_test_util_prev_tx_dequeue();
-
- rc = os_mbuf_copydata(om, 0, 1, &u8);
- TEST_ASSERT(rc == 0);
- TEST_ASSERT(u8 == att_op);
-
- for (i = 0; i < attr_len; i++) {
- rc = os_mbuf_copydata(om, i + 1, 1, &u8);
- TEST_ASSERT(rc == 0);
- TEST_ASSERT(u8 == attr_data[i]);
- }
-
- rc = os_mbuf_copydata(om, i + 1, 1, &u8);
- TEST_ASSERT(rc != 0);
-}
-
-void
-ble_hs_test_util_verify_tx_read_rsp(uint8_t *attr_data, int attr_len)
-{
- ble_hs_test_util_verify_tx_read_rsp_gen(BLE_ATT_OP_READ_RSP,
- attr_data, attr_len);
-}
-
-void
-ble_hs_test_util_verify_tx_read_blob_rsp(uint8_t *attr_data, int attr_len)
-{
- ble_hs_test_util_verify_tx_read_rsp_gen(BLE_ATT_OP_READ_BLOB_RSP,
- attr_data, attr_len);
-}
-
-void
-ble_hs_test_util_set_static_rnd_addr(void)
-{
- uint8_t addr[6] = { 1, 2, 3, 4, 5, 0xc1 };
- int rc;
-
- ble_hs_test_util_set_ack(
- BLE_HS_TEST_UTIL_LE_OPCODE(BLE_HCI_OCF_LE_SET_RAND_ADDR), 0);
-
- rc = ble_hs_id_set_rnd(addr);
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_test_util_get_first_hci_tx();
-}
-
-struct os_mbuf *
-ble_hs_test_util_om_from_flat(const void *buf, uint16_t len)
-{
- struct os_mbuf *om;
-
- om = ble_hs_mbuf_from_flat(buf, len);
- TEST_ASSERT_FATAL(om != NULL);
-
- return om;
-}
-
-int
-ble_hs_test_util_flat_attr_cmp(const struct ble_hs_test_util_flat_attr *a,
- const struct ble_hs_test_util_flat_attr *b)
-{
- if (a->handle != b->handle) {
- return -1;
- }
- if (a->offset != b->offset) {
- return -1;
- }
- if (a->value_len != b->value_len) {
- return -1;
- }
- return memcmp(a->value, b->value, a->value_len);
-}
-
-void
-ble_hs_test_util_attr_to_flat(struct ble_hs_test_util_flat_attr *flat,
- const struct ble_gatt_attr *attr)
-{
- int rc;
-
- flat->handle = attr->handle;
- flat->offset = attr->offset;
- rc = ble_hs_mbuf_to_flat(attr->om, flat->value, sizeof flat->value,
- &flat->value_len);
- TEST_ASSERT_FATAL(rc == 0);
-}
-
-void
-ble_hs_test_util_attr_from_flat(struct ble_gatt_attr *attr,
- const struct ble_hs_test_util_flat_attr *flat)
-{
- attr->handle = flat->handle;
- attr->offset = flat->offset;
- attr->om = ble_hs_test_util_om_from_flat(flat->value, flat->value_len);
-}
-
-int
-ble_hs_test_util_read_local_flat(uint16_t attr_handle, uint16_t max_len,
- void *buf, uint16_t *out_len)
-{
- struct os_mbuf *om;
- int rc;
-
- rc = ble_att_svr_read_local(attr_handle, &om);
- if (rc != 0) {
- return rc;
- }
-
- TEST_ASSERT_FATAL(OS_MBUF_PKTLEN(om) <= max_len);
-
- rc = os_mbuf_copydata(om, 0, OS_MBUF_PKTLEN(om), buf);
- TEST_ASSERT_FATAL(rc == 0);
-
- *out_len = OS_MBUF_PKTLEN(om);
-
- os_mbuf_free_chain(om);
- return 0;
-}
-
-int
-ble_hs_test_util_write_local_flat(uint16_t attr_handle,
- const void *buf, uint16_t buf_len)
-{
- struct os_mbuf *om;
- int rc;
-
- om = ble_hs_test_util_om_from_flat(buf, buf_len);
- rc = ble_att_svr_write_local(attr_handle, om);
- return rc;
-}
-
-int
-ble_hs_test_util_gatt_write_flat(uint16_t conn_handle, uint16_t attr_handle,
- const void *data, uint16_t data_len,
- ble_gatt_attr_fn *cb, void *cb_arg)
-{
- struct os_mbuf *om;
- int rc;
-
- om = ble_hs_test_util_om_from_flat(data, data_len);
- rc = ble_gattc_write(conn_handle, attr_handle, om, cb, cb_arg);
-
- return rc;
-}
-
-int
-ble_hs_test_util_gatt_write_no_rsp_flat(uint16_t conn_handle,
- uint16_t attr_handle,
- const void *data, uint16_t data_len)
-{
- struct os_mbuf *om;
- int rc;
-
- om = ble_hs_test_util_om_from_flat(data, data_len);
- rc = ble_gattc_write_no_rsp(conn_handle, attr_handle, om);
-
- return rc;
-}
-
-int
-ble_hs_test_util_gatt_write_long_flat(uint16_t conn_handle,
- uint16_t attr_handle,
- const void *data, uint16_t data_len,
- ble_gatt_attr_fn *cb, void *cb_arg)
-{
- struct os_mbuf *om;
- int rc;
-
- om = ble_hs_test_util_om_from_flat(data, data_len);
- rc = ble_gattc_write_long(conn_handle, attr_handle, om, cb, cb_arg);
-
- return rc;
-}
-
-static int
-ble_hs_test_util_mbuf_chain_len(const struct os_mbuf *om)
-{
- int count;
-
- count = 0;
- while (om != NULL) {
- count++;
- om = SLIST_NEXT(om, om_next);
- }
-
- return count;
-}
-
-int
-ble_hs_test_util_mbuf_count(const struct ble_hs_test_util_mbuf_params *params)
-{
- const struct ble_att_prep_entry *prep;
- const struct os_mbuf_pkthdr *omp;
- const struct ble_l2cap_chan *chan;
- const struct ble_hs_conn *conn;
- const struct os_mbuf *om;
- int count;
- int i;
-
- ble_hs_process_tx_data_queue();
- ble_hs_process_rx_data_queue();
-
- count = ble_hs_test_util_mbuf_mpool.mp_num_free;
-
- if (params->prev_tx) {
- count += ble_hs_test_util_mbuf_chain_len(ble_hs_test_util_prev_tx_cur);
- STAILQ_FOREACH(omp, &ble_hs_test_util_prev_tx_queue, omp_next) {
- om = OS_MBUF_PKTHDR_TO_MBUF(omp);
- count += ble_hs_test_util_mbuf_chain_len(om);
- }
- }
-
- ble_hs_lock();
- for (i = 0; ; i++) {
- conn = ble_hs_conn_find_by_idx(i);
- if (conn == NULL) {
- break;
- }
-
- if (params->rx_queue) {
- SLIST_FOREACH(chan, &conn->bhc_channels, blc_next) {
- count += ble_hs_test_util_mbuf_chain_len(chan->blc_rx_buf);
- }
- }
-
- if (params->prep_list) {
- SLIST_FOREACH(prep, &conn->bhc_att_svr.basc_prep_list, bape_next) {
- count += ble_hs_test_util_mbuf_chain_len(prep->bape_value);
- }
- }
- }
- ble_hs_unlock();
-
- return count;
-}
-
-void
-ble_hs_test_util_assert_mbufs_freed(
- const struct ble_hs_test_util_mbuf_params *params)
-{
- static const struct ble_hs_test_util_mbuf_params dflt = {
- .prev_tx = 1,
- .rx_queue = 1,
- .prep_list = 1,
- };
-
- int count;
-
- if (params == NULL) {
- params = &dflt;
- }
-
- count = ble_hs_test_util_mbuf_count(params);
- TEST_ASSERT(count == ble_hs_test_util_mbuf_mpool.mp_num_blocks);
-}
-
-void
-ble_hs_test_util_post_test(void *arg)
-{
- ble_hs_test_util_assert_mbufs_freed(arg);
-}
-
-static int
-ble_hs_test_util_pkt_txed(struct os_mbuf *om, void *arg)
-{
- ble_hs_test_util_prev_tx_enqueue(om);
- return 0;
-}
-
-static int
-ble_hs_test_util_hci_txed(uint8_t *cmdbuf, void *arg)
-{
- ble_hs_test_util_enqueue_hci_tx(cmdbuf);
- ble_hci_trans_buf_free(cmdbuf);
- return 0;
-}
-
-void
-ble_hs_test_util_init(void)
-{
- struct ble_hci_ram_cfg hci_cfg;
- struct ble_hs_cfg cfg;
- int rc;
-
- tu_init();
-
- os_eventq_init(&ble_hs_test_util_evq);
- STAILQ_INIT(&ble_hs_test_util_prev_tx_queue);
- ble_hs_test_util_prev_tx_cur = NULL;
-
- os_msys_reset();
- stats_module_reset();
-
- cfg = ble_hs_cfg_dflt;
- cfg.max_connections = 8;
- cfg.max_l2cap_chans = 3 * cfg.max_connections;
- cfg.max_services = 16;
- cfg.max_client_configs = 32;
- cfg.max_attrs = 64;
- cfg.max_gattc_procs = 16;
-
- rc = ble_hs_init(&ble_hs_test_util_evq, &cfg);
- TEST_ASSERT_FATAL(rc == 0);
-
- rc = os_mempool_init(&ble_hs_test_util_mbuf_mpool,
- BLE_HS_TEST_UTIL_NUM_MBUFS,
- BLE_HS_TEST_UTIL_MEMBLOCK_SIZE,
- ble_hs_test_util_mbuf_mpool_data,
- "ble_hs_test_util_mbuf_data");
- TEST_ASSERT_FATAL(rc == 0);
-
- rc = os_mbuf_pool_init(&ble_hs_test_util_mbuf_pool,
- &ble_hs_test_util_mbuf_mpool,
- BLE_HS_TEST_UTIL_MEMBLOCK_SIZE,
- BLE_HS_TEST_UTIL_NUM_MBUFS);
- TEST_ASSERT_FATAL(rc == 0);
-
- rc = os_msys_register(&ble_hs_test_util_mbuf_pool);
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_hci_set_phony_ack_cb(NULL);
-
- ble_hci_trans_cfg_ll(ble_hs_test_util_hci_txed, NULL,
- ble_hs_test_util_pkt_txed, NULL);
-
- hci_cfg = ble_hci_ram_cfg_dflt;
- rc = ble_hci_ram_init(&hci_cfg);
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_test_util_set_startup_acks();
-
- rc = ble_hs_start();
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_test_util_prev_hci_tx_clear();
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d98ddc1c/net/nimble/host/src/test/ble_hs_test_util.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util.h b/net/nimble/host/src/test/ble_hs_test_util.h
deleted file mode 100644
index 3320e9b..0000000
--- a/net/nimble/host/src/test/ble_hs_test_util.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef H_BLE_HS_TEST_UTIL_
-#define H_BLE_HS_TEST_UTIL_
-
-#include <inttypes.h>
-#include "host/ble_gap.h"
-#include "ble_hs_priv.h"
-#include "ble_hs_test_util_store.h"
-struct ble_hs_conn;
-struct ble_l2cap_chan;
-struct hci_disconn_complete;
-struct hci_create_conn;
-
-extern struct os_eventq ble_hs_test_util_evq;
-extern const struct ble_gap_adv_params ble_hs_test_util_adv_params;
-
-struct ble_hs_test_util_num_completed_pkts_entry {
- uint16_t handle_id; /* 0 for terminating entry in array. */
- uint16_t num_pkts;
-};
-
-struct ble_hs_test_util_flat_attr {
- uint16_t handle;
- uint16_t offset;
- uint8_t value[BLE_ATT_ATTR_MAX_LEN];
- uint16_t value_len;
-};
-
-struct ble_hs_test_util_mbuf_params {
- unsigned prev_tx:1;
- unsigned rx_queue:1;
- unsigned prep_list:1;
-};
-
-void ble_hs_test_util_prev_tx_enqueue(struct os_mbuf *om);
-struct os_mbuf *ble_hs_test_util_prev_tx_dequeue(void);
-struct os_mbuf *ble_hs_test_util_prev_tx_dequeue_pullup(void);
-int ble_hs_test_util_prev_tx_queue_sz(void);
-void ble_hs_test_util_prev_tx_queue_clear(void);
-
-void ble_hs_test_util_set_ack_params(uint16_t opcode, uint8_t status,
- void *params, uint8_t params_len);
-void ble_hs_test_util_set_ack(uint16_t opcode, uint8_t status);
-void *ble_hs_test_util_get_first_hci_tx(void);
-void *ble_hs_test_util_get_last_hci_tx(void);
-void ble_hs_test_util_enqueue_hci_tx(void *cmd);
-void ble_hs_test_util_prev_hci_tx_clear(void);
-void ble_hs_test_util_build_cmd_complete(uint8_t *dst, int len,
- uint8_t param_len, uint8_t num_pkts,
- uint16_t opcode);
-void ble_hs_test_util_build_cmd_status(uint8_t *dst, int len,
- uint8_t status, uint8_t num_pkts,
- uint16_t opcode);
-void ble_hs_test_util_create_rpa_conn(uint16_t handle, uint8_t own_addr_type,
- const uint8_t *our_rpa,
- uint8_t peer_addr_type,
- const uint8_t *peer_id_addr,
- const uint8_t *peer_rpa,
- ble_gap_event_fn *cb, void *cb_arg);
-void ble_hs_test_util_create_conn(uint16_t handle, uint8_t *addr,
- ble_gap_event_fn *cb, void *cb_arg);
-int ble_hs_test_util_connect(uint8_t own_addr_type,
- uint8_t peer_addr_type,
- const uint8_t *peer_addr,
- int32_t duration_ms,
- const struct ble_gap_conn_params *params,
- ble_gap_event_fn *cb,
- void *cb_arg,
- uint8_t ack_status);
-int ble_hs_test_util_conn_cancel(uint8_t ack_status);
-void ble_hs_test_util_conn_cancel_full(void);
-int ble_hs_test_util_conn_terminate(uint16_t conn_handle, uint8_t hci_status);
-void ble_hs_test_util_conn_disconnect(uint16_t conn_handle);
-int ble_hs_test_util_exp_hci_status(int cmd_idx, int fail_idx,
- uint8_t fail_status);
-int ble_hs_test_util_disc(uint8_t own_addr_type, int32_t duration_ms,
- const struct ble_gap_disc_params *disc_params,
- ble_gap_event_fn *cb, void *cb_arg, int fail_idx,
- uint8_t fail_status);
-int ble_hs_test_util_disc_cancel(uint8_t ack_status);
-void ble_hs_test_util_verify_tx_create_conn(const struct hci_create_conn *exp);
-int ble_hs_test_util_adv_set_fields(struct ble_hs_adv_fields *adv_fields,
- uint8_t hci_status);
-int ble_hs_test_util_adv_start(uint8_t own_addr_type,
- uint8_t peer_addr_type,
- const uint8_t *peer_addr,
- const struct ble_gap_adv_params *adv_params,
- ble_gap_event_fn *cb, void *cb_arg,
- int fail_idx, uint8_t fail_status);
-int ble_hs_test_util_adv_stop(uint8_t hci_status);
-int ble_hs_test_util_wl_set(struct ble_gap_white_entry *white_list,
- uint8_t white_list_count,
- int fail_idx, uint8_t fail_status);
-int ble_hs_test_util_conn_update(uint16_t conn_handle,
- struct ble_gap_upd_params *params,
- uint8_t hci_status);
-int ble_hs_test_util_set_our_irk(const uint8_t *irk, int fail_idx,
- uint8_t hci_status);
-int ble_hs_test_util_security_initiate(uint16_t conn_handle,
- uint8_t hci_status);
-int ble_hs_test_util_l2cap_rx_first_frag(uint16_t conn_handle, uint16_t cid,
- struct hci_data_hdr *hci_hdr,
- struct os_mbuf *om);
-int ble_hs_test_util_l2cap_rx(uint16_t conn_handle,
- struct hci_data_hdr *hci_hdr,
- struct os_mbuf *om);
-int ble_hs_test_util_l2cap_rx_payload_flat(uint16_t conn_handle, uint16_t cid,
- const void *data, int len);
-void ble_hs_test_util_rx_hci_buf_size_ack(uint16_t buf_size);
-void ble_hs_test_util_rx_att_err_rsp(uint16_t conn_handle, uint8_t req_op,
- uint8_t error_code, uint16_t err_handle);
-void ble_hs_test_util_set_startup_acks(void);
-void ble_hs_test_util_rx_num_completed_pkts_event(
- struct ble_hs_test_util_num_completed_pkts_entry *entries);
-void ble_hs_test_util_rx_disconn_complete_event(
- struct hci_disconn_complete *evt);
-uint8_t *ble_hs_test_util_verify_tx_hci(uint8_t ogf, uint16_t ocf,
- uint8_t *out_param_len);
-void ble_hs_test_util_tx_all(void);
-void ble_hs_test_util_verify_tx_prep_write(uint16_t attr_handle,
- uint16_t offset,
- const void *data, int data_len);
-void ble_hs_test_util_verify_tx_exec_write(uint8_t expected_flags);
-void ble_hs_test_util_verify_tx_read_rsp(uint8_t *attr_data, int attr_len);
-void ble_hs_test_util_verify_tx_read_blob_rsp(uint8_t *attr_data,
- int attr_len);
-void ble_hs_test_util_set_static_rnd_addr(void);
-struct os_mbuf *ble_hs_test_util_om_from_flat(const void *buf, uint16_t len);
-int ble_hs_test_util_flat_attr_cmp(const struct ble_hs_test_util_flat_attr *a,
- const struct ble_hs_test_util_flat_attr *b);
-void ble_hs_test_util_attr_to_flat(struct ble_hs_test_util_flat_attr *flat,
- const struct ble_gatt_attr *attr);
-void ble_hs_test_util_attr_from_flat(
- struct ble_gatt_attr *attr, const struct ble_hs_test_util_flat_attr *flat);
-int ble_hs_test_util_read_local_flat(uint16_t attr_handle, uint16_t max_len,
- void *buf, uint16_t *out_len);
-int ble_hs_test_util_write_local_flat(uint16_t attr_handle,
- const void *buf, uint16_t buf_len);
-int ble_hs_test_util_gatt_write_flat(uint16_t conn_handle,
- uint16_t attr_handle,
- const void *data, uint16_t data_len,
- ble_gatt_attr_fn *cb, void *cb_arg);
-int ble_hs_test_util_gatt_write_no_rsp_flat(uint16_t conn_handle,
- uint16_t attr_handle,
- const void *data,
- uint16_t data_len);
-int ble_hs_test_util_gatt_write_long_flat(uint16_t conn_handle,
- uint16_t attr_handle,
- const void *data, uint16_t data_len,
- ble_gatt_attr_fn *cb, void *cb_arg);
-int ble_hs_test_util_mbuf_count(
- const struct ble_hs_test_util_mbuf_params *params);
-void ble_hs_test_util_assert_mbufs_freed(
- const struct ble_hs_test_util_mbuf_params *params);
-void ble_hs_test_util_post_test(void *arg);
-void ble_hs_test_util_init(void);
-
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d98ddc1c/net/nimble/host/src/test/ble_hs_test_util_store.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util_store.c b/net/nimble/host/src/test/ble_hs_test_util_store.c
deleted file mode 100644
index f888753..0000000
--- a/net/nimble/host/src/test/ble_hs_test_util_store.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <string.h>
-#include "testutil/testutil.h"
-#include "nimble/ble.h"
-#include "ble_hs_test_util.h"
-#include "ble_hs_test_util_store.h"
-
-static int ble_hs_test_util_store_max_our_secs;
-static int ble_hs_test_util_store_max_peer_secs;
-static int ble_hs_test_util_store_max_cccds;
-
-static struct ble_store_value_sec *ble_hs_test_util_store_our_secs;
-static struct ble_store_value_sec *ble_hs_test_util_store_peer_secs;
-static struct ble_store_value_cccd *ble_hs_test_util_store_cccds;
-int ble_hs_test_util_store_num_our_secs;
-int ble_hs_test_util_store_num_peer_secs;
-int ble_hs_test_util_store_num_cccds;
-
-
-#define BLE_HS_TEST_UTIL_STORE_WRITE_GEN(store, num_vals, max_vals, \
- val, idx) do \
-{ \
- if ((idx) == -1) { \
- if ((num_vals) >= (max_vals)) { \
- return BLE_HS_ENOMEM; \
- } \
- store[(num_vals)] = (val); \
- (num_vals)++; \
- } else { \
- store[(idx)] = val; \
- } \
- return 0; \
-} while (0)
-
-void
-ble_hs_test_util_store_init(int max_our_secs, int max_peer_secs, int max_cccds)
-{
- free(ble_hs_test_util_store_our_secs);
- free(ble_hs_test_util_store_peer_secs);
- free(ble_hs_test_util_store_cccds);
-
- ble_hs_test_util_store_our_secs = malloc(
- ble_hs_test_util_store_max_our_secs *
- sizeof *ble_hs_test_util_store_our_secs);
- TEST_ASSERT_FATAL(ble_hs_test_util_store_our_secs != NULL);
-
- ble_hs_test_util_store_peer_secs = malloc(
- ble_hs_test_util_store_max_peer_secs *
- sizeof *ble_hs_test_util_store_peer_secs);
- TEST_ASSERT_FATAL(ble_hs_test_util_store_peer_secs != NULL);
-
- ble_hs_test_util_store_cccds = malloc(
- ble_hs_test_util_store_max_cccds *
- sizeof *ble_hs_test_util_store_cccds);
- TEST_ASSERT_FATAL(ble_hs_test_util_store_cccds != NULL);
-
- ble_hs_test_util_store_max_our_secs = max_our_secs;
- ble_hs_test_util_store_max_peer_secs = max_peer_secs;
- ble_hs_test_util_store_max_cccds = max_cccds;
- ble_hs_test_util_store_num_our_secs = 0;
- ble_hs_test_util_store_num_peer_secs = 0;
- ble_hs_test_util_store_num_cccds = 0;
-}
-
-static int
-ble_hs_test_util_store_read_sec(struct ble_store_value_sec *store,
- int num_values,
- struct ble_store_key_sec *key,
- struct ble_store_value_sec *value)
-{
- struct ble_store_value_sec *cur;
- int skipped;
- int i;
-
- skipped = 0;
-
- for (i = 0; i < num_values; i++) {
- cur = store + i;
-
- if (key->peer_addr_type != BLE_STORE_ADDR_TYPE_NONE) {
- if (cur->peer_addr_type != key->peer_addr_type) {
- continue;
- }
-
- if (memcmp(cur->peer_addr, key->peer_addr,
- sizeof cur->peer_addr) != 0) {
- continue;
- }
- }
-
- if (key->ediv_rand_present) {
- if (cur->ediv != key->ediv) {
- continue;
- }
-
- if (cur->rand_num != key->rand_num) {
- continue;
- }
- }
-
- if (key->idx > skipped) {
- skipped++;
- continue;
- }
-
- *value = *cur;
- return 0;
- }
-
- return BLE_HS_ENOENT;
-}
-
-static int
-ble_hs_test_util_store_find_cccd(struct ble_store_key_cccd *key)
-{
- struct ble_store_value_cccd *cur;
- int skipped;
- int i;
-
- skipped = 0;
- for (i = 0; i < ble_hs_test_util_store_num_cccds; i++) {
- cur = ble_hs_test_util_store_cccds + i;
-
- if (key->peer_addr_type != BLE_STORE_ADDR_TYPE_NONE) {
- if (cur->peer_addr_type != key->peer_addr_type) {
- continue;
- }
-
- if (memcmp(cur->peer_addr, key->peer_addr, 6) != 0) {
- continue;
- }
- }
-
- if (key->chr_val_handle != 0) {
- if (cur->chr_val_handle != key->chr_val_handle) {
- continue;
- }
- }
-
- if (key->idx > skipped) {
- skipped++;
- continue;
- }
-
- return i;
- }
-
- return -1;
-}
-
-static int
-ble_hs_test_util_store_read_cccd(struct ble_store_key_cccd *key,
- struct ble_store_value_cccd *value)
-{
- int idx;
-
- idx = ble_hs_test_util_store_find_cccd(key);
- if (idx == -1) {
- return BLE_HS_ENOENT;
- }
-
- *value = ble_hs_test_util_store_cccds[idx];
- return 0;
-}
-
-int
-ble_hs_test_util_store_read(int obj_type, union ble_store_key *key,
- union ble_store_value *dst)
-{
- switch (obj_type) {
- case BLE_STORE_OBJ_TYPE_PEER_SEC:
- return ble_hs_test_util_store_read_sec(
- ble_hs_test_util_store_peer_secs,
- ble_hs_test_util_store_num_peer_secs,
- &key->sec,
- &dst->sec);
-
- case BLE_STORE_OBJ_TYPE_OUR_SEC:
- return ble_hs_test_util_store_read_sec(
- ble_hs_test_util_store_our_secs,
- ble_hs_test_util_store_num_our_secs,
- &key->sec,
- &dst->sec);
-
- case BLE_STORE_OBJ_TYPE_CCCD:
- return ble_hs_test_util_store_read_cccd(&key->cccd, &dst->cccd);
-
- default:
- TEST_ASSERT_FATAL(0);
- return BLE_HS_EUNKNOWN;
- }
-}
-
-int
-ble_hs_test_util_store_write(int obj_type, union ble_store_value *value)
-{
- struct ble_store_key_cccd key_cccd;
- int idx;
-
- switch (obj_type) {
- case BLE_STORE_OBJ_TYPE_PEER_SEC:
- BLE_HS_TEST_UTIL_STORE_WRITE_GEN(
- ble_hs_test_util_store_peer_secs,
- ble_hs_test_util_store_num_peer_secs,
- ble_hs_test_util_store_max_peer_secs,
- value->sec, -1);
-
- case BLE_STORE_OBJ_TYPE_OUR_SEC:
- BLE_HS_TEST_UTIL_STORE_WRITE_GEN(
- ble_hs_test_util_store_our_secs,
- ble_hs_test_util_store_num_our_secs,
- ble_hs_test_util_store_max_our_secs,
- value->sec, -1);
-
- case BLE_STORE_OBJ_TYPE_CCCD:
- ble_store_key_from_value_cccd(&key_cccd, &value->cccd);
- idx = ble_hs_test_util_store_find_cccd(&key_cccd);
- BLE_HS_TEST_UTIL_STORE_WRITE_GEN(
- ble_hs_test_util_store_cccds,
- ble_hs_test_util_store_num_cccds,
- ble_hs_test_util_store_max_cccds,
- value->cccd, idx);
-
- default:
- TEST_ASSERT_FATAL(0);
- return BLE_HS_EUNKNOWN;
- }
-
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d98ddc1c/net/nimble/host/src/test/ble_hs_test_util_store.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util_store.h b/net/nimble/host/src/test/ble_hs_test_util_store.h
deleted file mode 100644
index 77ee291..0000000
--- a/net/nimble/host/src/test/ble_hs_test_util_store.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef H_BLE_HS_TEST_UTIL_STORE_
-#define H_BLE_HS_TEST_UTIL_STORE_
-
-union ble_store_value;
-union ble_store_key;
-
-extern int ble_hs_test_util_store_num_our_ltks;
-extern int ble_hs_test_util_store_num_peer_ltks;
-extern int ble_hs_test_util_store_num_cccds;
-
-void ble_hs_test_util_store_init(int max_our_ltks, int max_peer_ltks,
- int max_cccds);
-int ble_hs_test_util_store_read(int obj_type, union ble_store_key *key,
- union ble_store_value *dst);
-int ble_hs_test_util_store_write(int obj_type, union ble_store_value *value);
-
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d98ddc1c/net/nimble/host/src/test/ble_l2cap_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_l2cap_test.c b/net/nimble/host/src/test/ble_l2cap_test.c
deleted file mode 100644
index 69db2f8..0000000
--- a/net/nimble/host/src/test/ble_l2cap_test.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <stddef.h>
-#include <errno.h>
-#include "testutil/testutil.h"
-#include "nimble/hci_common.h"
-#include "host/ble_hs_test.h"
-#include "ble_hs_test_util.h"
-
-#define BLE_L2CAP_TEST_CID 99
-
-static int ble_l2cap_test_update_status;
-static void *ble_l2cap_test_update_arg;
-
-/*****************************************************************************
- * $util *
- *****************************************************************************/
-
-#define BLE_L2CAP_TEST_UTIL_HCI_HDR(handle, pb, len) \
- ((struct hci_data_hdr) { \
- .hdh_handle_pb_bc = ((handle) << 0) | \
- ((pb) << 12), \
- .hdh_len = (len) \
- })
-
-static void
-ble_l2cap_test_util_init(void)
-{
- ble_hs_test_util_init();
- ble_l2cap_test_update_status = -1;
- ble_l2cap_test_update_arg = (void *)(uintptr_t)-1;
-}
-
-static void
-ble_l2cap_test_util_rx_update_req(uint16_t conn_handle, uint8_t id,
- struct ble_l2cap_sig_update_params *params)
-{
- struct ble_l2cap_sig_update_req req;
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- void *v;
- int rc;
-
- hci_hdr = BLE_L2CAP_TEST_UTIL_HCI_HDR(
- 2, BLE_HCI_PB_FIRST_FLUSH,
- BLE_L2CAP_HDR_SZ + BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ);
-
- rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_REQ, id,
- BLE_L2CAP_SIG_UPDATE_REQ_SZ, &om, &v);
- TEST_ASSERT_FATAL(rc == 0);
-
- req.itvl_min = params->itvl_min;
- req.itvl_max = params->itvl_max;
- req.slave_latency = params->slave_latency;
- req.timeout_multiplier = params->timeout_multiplier;
- ble_l2cap_sig_update_req_write(v, BLE_L2CAP_SIG_UPDATE_REQ_SZ, &req);
-
- ble_hs_test_util_set_ack(
- ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_CONN_UPDATE), 0);
- rc = ble_hs_test_util_l2cap_rx_first_frag(conn_handle, BLE_L2CAP_CID_SIG,
- &hci_hdr, om);
- TEST_ASSERT_FATAL(rc == 0);
-}
-
-static int
-ble_l2cap_test_util_rx_update_rsp(uint16_t conn_handle,
- uint8_t id, uint16_t result)
-{
- struct ble_l2cap_sig_update_rsp rsp;
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- void *v;
- int rc;
-
- hci_hdr = BLE_L2CAP_TEST_UTIL_HCI_HDR(
- 2, BLE_HCI_PB_FIRST_FLUSH,
- BLE_L2CAP_HDR_SZ + BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ);
-
- rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_RSP, id,
- BLE_L2CAP_SIG_UPDATE_RSP_SZ, &om, &v);
- TEST_ASSERT_FATAL(rc == 0);
-
- rsp.result = result;
- ble_l2cap_sig_update_rsp_write(v, BLE_L2CAP_SIG_UPDATE_RSP_SZ, &rsp);
-
- rc = ble_hs_test_util_l2cap_rx_first_frag(conn_handle, BLE_L2CAP_CID_SIG,
- &hci_hdr, om);
- return rc;
-}
-
-
-static struct os_mbuf *
-ble_l2cap_test_util_verify_tx_sig_hdr(uint8_t op, uint8_t id,
- uint16_t payload_len,
- struct ble_l2cap_sig_hdr *out_hdr)
-{
- struct ble_l2cap_sig_hdr hdr;
- struct os_mbuf *om;
-
- om = ble_hs_test_util_prev_tx_dequeue();
- TEST_ASSERT_FATAL(om != NULL);
-
- TEST_ASSERT(OS_MBUF_PKTLEN(om) == BLE_L2CAP_SIG_HDR_SZ + payload_len);
- ble_l2cap_sig_hdr_parse(om->om_data, om->om_len, &hdr);
- TEST_ASSERT(hdr.op == op);
- if (id != 0) {
- TEST_ASSERT(hdr.identifier == id);
- }
- TEST_ASSERT(hdr.length == payload_len);
-
- om->om_data += BLE_L2CAP_SIG_HDR_SZ;
- om->om_len -= BLE_L2CAP_SIG_HDR_SZ;
-
- if (out_hdr != NULL) {
- *out_hdr = hdr;
- }
-
- return om;
-}
-
-/**
- * @return The L2CAP sig identifier in the request.
- */
-static uint8_t
-ble_l2cap_test_util_verify_tx_update_req(
- struct ble_l2cap_sig_update_params *params)
-{
- struct ble_l2cap_sig_update_req req;
- struct ble_l2cap_sig_hdr hdr;
- struct os_mbuf *om;
-
- om = ble_l2cap_test_util_verify_tx_sig_hdr(BLE_L2CAP_SIG_OP_UPDATE_REQ, 0,
- BLE_L2CAP_SIG_UPDATE_REQ_SZ,
- &hdr);
-
- /* Verify payload. */
- ble_l2cap_sig_update_req_parse(om->om_data, om->om_len, &req);
- TEST_ASSERT(req.itvl_min == params->itvl_min);
- TEST_ASSERT(req.itvl_max == params->itvl_max);
- TEST_ASSERT(req.slave_latency == params->slave_latency);
- TEST_ASSERT(req.timeout_multiplier == params->timeout_multiplier);
-
- return hdr.identifier;
-}
-
-static void
-ble_l2cap_test_util_verify_tx_update_rsp(uint8_t exp_id, uint16_t exp_result)
-{
- struct ble_l2cap_sig_update_rsp rsp;
- struct os_mbuf *om;
-
- om = ble_l2cap_test_util_verify_tx_sig_hdr(BLE_L2CAP_SIG_OP_UPDATE_RSP,
- exp_id,
- BLE_L2CAP_SIG_UPDATE_RSP_SZ,
- NULL);
-
- ble_l2cap_sig_update_rsp_parse(om->om_data, om->om_len, &rsp);
- TEST_ASSERT(rsp.result == exp_result);
-}
-
-static void
-ble_l2cap_test_util_verify_tx_update_conn(
- struct ble_gap_upd_params *params)
-{
- uint8_t param_len;
- uint8_t *param;
-
- param = ble_hs_test_util_verify_tx_hci(BLE_HCI_OGF_LE,
- BLE_HCI_OCF_LE_CONN_UPDATE,
- ¶m_len);
- TEST_ASSERT(param_len == BLE_HCI_CONN_UPDATE_LEN);
- TEST_ASSERT(le16toh(param + 0) == 2);
- TEST_ASSERT(le16toh(param + 2) == params->itvl_min);
- TEST_ASSERT(le16toh(param + 4) == params->itvl_max);
- TEST_ASSERT(le16toh(param + 6) == params->latency);
- TEST_ASSERT(le16toh(param + 8) == params->supervision_timeout);
- TEST_ASSERT(le16toh(param + 10) == params->min_ce_len);
- TEST_ASSERT(le16toh(param + 12) == params->max_ce_len);
-}
-
-static int
-ble_l2cap_test_util_dummy_rx(uint16_t conn_handle, struct os_mbuf **om)
-{
- return 0;
-}
-
-static void
-ble_l2cap_test_util_create_conn(uint16_t conn_handle, uint8_t *addr,
- ble_gap_event_fn *cb, void *cb_arg)
-{
- struct ble_l2cap_chan *chan;
- struct ble_hs_conn *conn;
-
- ble_hs_test_util_create_conn(conn_handle, addr, cb, cb_arg);
-
- ble_hs_lock();
-
- conn = ble_hs_conn_find(conn_handle);
- TEST_ASSERT_FATAL(conn != NULL);
-
- chan = ble_l2cap_chan_alloc();
- TEST_ASSERT_FATAL(chan != NULL);
-
- chan->blc_cid = BLE_L2CAP_TEST_CID;
- chan->blc_my_mtu = 240;
- chan->blc_default_mtu = 240;
- chan->blc_rx_fn = ble_l2cap_test_util_dummy_rx;
-
- ble_hs_conn_chan_insert(conn, chan);
-
- ble_hs_test_util_prev_hci_tx_clear();
-
- ble_hs_unlock();
-}
-
-static int
-ble_l2cap_test_util_rx_first_frag(uint16_t conn_handle,
- uint16_t l2cap_frag_len,
- uint16_t cid, uint16_t l2cap_len)
-{
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- uint16_t hci_len;
- void *v;
- int rc;
-
- om = ble_hs_mbuf_l2cap_pkt();
- TEST_ASSERT_FATAL(om != NULL);
-
- v = os_mbuf_extend(om, l2cap_frag_len);
- TEST_ASSERT_FATAL(v != NULL);
-
- om = ble_l2cap_prepend_hdr(om, cid, l2cap_len);
- TEST_ASSERT_FATAL(om != NULL);
-
- hci_len = sizeof hci_hdr + l2cap_frag_len;
- hci_hdr = BLE_L2CAP_TEST_UTIL_HCI_HDR(conn_handle,
- BLE_HCI_PB_FIRST_FLUSH, hci_len);
- rc = ble_hs_test_util_l2cap_rx(conn_handle, &hci_hdr, om);
- return rc;
-}
-
-static int
-ble_l2cap_test_util_rx_next_frag(uint16_t conn_handle, uint16_t hci_len)
-{
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- void *v;
- int rc;
-
- om = ble_hs_mbuf_l2cap_pkt();
- TEST_ASSERT_FATAL(om != NULL);
-
- v = os_mbuf_extend(om, hci_len);
- TEST_ASSERT_FATAL(v != NULL);
-
- hci_hdr = BLE_L2CAP_TEST_UTIL_HCI_HDR(conn_handle,
- BLE_HCI_PB_MIDDLE, hci_len);
- rc = ble_hs_test_util_l2cap_rx(conn_handle, &hci_hdr, om);
- return rc;
-}
-
-static void
-ble_l2cap_test_util_verify_first_frag(uint16_t conn_handle,
- uint16_t l2cap_frag_len,
- uint16_t l2cap_len)
-{
- struct ble_hs_conn *conn;
- int rc;
-
- rc = ble_l2cap_test_util_rx_first_frag(conn_handle, l2cap_frag_len,
- BLE_L2CAP_TEST_CID, l2cap_len);
- TEST_ASSERT(rc == 0);
-
- ble_hs_lock();
-
- conn = ble_hs_conn_find(conn_handle);
- TEST_ASSERT_FATAL(conn != NULL);
- TEST_ASSERT(conn->bhc_rx_chan != NULL &&
- conn->bhc_rx_chan->blc_cid == BLE_L2CAP_TEST_CID);
-
- ble_hs_unlock();
-}
-
-static void
-ble_l2cap_test_util_verify_middle_frag(uint16_t conn_handle,
- uint16_t hci_len)
-{
- struct ble_hs_conn *conn;
- int rc;
-
- rc = ble_l2cap_test_util_rx_next_frag(conn_handle, hci_len);
- TEST_ASSERT(rc == 0);
-
- ble_hs_lock();
-
- conn = ble_hs_conn_find(conn_handle);
- TEST_ASSERT_FATAL(conn != NULL);
- TEST_ASSERT(conn->bhc_rx_chan != NULL &&
- conn->bhc_rx_chan->blc_cid == BLE_L2CAP_TEST_CID);
-
- ble_hs_unlock();
-}
-
-static void
-ble_l2cap_test_util_verify_last_frag(uint16_t conn_handle,
- uint16_t hci_len)
-{
- struct ble_hs_conn *conn;
- int rc;
-
- rc = ble_l2cap_test_util_rx_next_frag(conn_handle, hci_len);
- TEST_ASSERT(rc == 0);
-
- ble_hs_lock();
-
- conn = ble_hs_conn_find(conn_handle);
- TEST_ASSERT_FATAL(conn != NULL);
- TEST_ASSERT(conn->bhc_rx_chan == NULL);
-
- ble_hs_unlock();
-}
-
-/*****************************************************************************
- * $rx *
- *****************************************************************************/
-
-TEST_CASE(ble_l2cap_test_case_bad_header)
-{
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- NULL, NULL);
-
- rc = ble_l2cap_test_util_rx_first_frag(2, 14, 1234, 10);
- TEST_ASSERT(rc == BLE_HS_ENOENT);
-}
-
-/*****************************************************************************
- * $fragmentation *
- *****************************************************************************/
-
-TEST_CASE(ble_l2cap_test_case_frag_single)
-{
- struct hci_data_hdr hci_hdr;
- struct os_mbuf *om;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- NULL, NULL);
-
- /*** HCI header specifies middle fragment without start. */
- hci_hdr = BLE_L2CAP_TEST_UTIL_HCI_HDR(2, BLE_HCI_PB_MIDDLE, 10);
-
- om = ble_hs_mbuf_l2cap_pkt();
- TEST_ASSERT_FATAL(om != NULL);
-
- om = ble_l2cap_prepend_hdr(om, 0, 5);
- TEST_ASSERT_FATAL(om != NULL);
-
- rc = ble_hs_test_util_l2cap_rx(2, &hci_hdr, om);
- TEST_ASSERT(rc == BLE_HS_EBADDATA);
-
- /*** Packet consisting of three fragments. */
- ble_l2cap_test_util_verify_first_frag(2, 10, 30);
- ble_l2cap_test_util_verify_middle_frag(2, 10);
- ble_l2cap_test_util_verify_last_frag(2, 10);
-
- /*** Packet consisting of five fragments. */
- ble_l2cap_test_util_verify_first_frag(2, 8, 49);
- ble_l2cap_test_util_verify_middle_frag(2, 13);
- ble_l2cap_test_util_verify_middle_frag(2, 2);
- ble_l2cap_test_util_verify_middle_frag(2, 21);
- ble_l2cap_test_util_verify_last_frag(2, 5);
-}
-
-TEST_CASE(ble_l2cap_test_case_frag_multiple)
-{
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- NULL, NULL);
- ble_l2cap_test_util_create_conn(3, ((uint8_t[]){2,3,4,5,6,7}),
- NULL, NULL);
- ble_l2cap_test_util_create_conn(4, ((uint8_t[]){3,4,5,6,7,8}),
- NULL, NULL);
-
- ble_l2cap_test_util_verify_first_frag(2, 3, 10);
- ble_l2cap_test_util_verify_first_frag(3, 2, 5);
- ble_l2cap_test_util_verify_middle_frag(2, 6);
- ble_l2cap_test_util_verify_first_frag(4, 1, 4);
- ble_l2cap_test_util_verify_middle_frag(3, 2);
- ble_l2cap_test_util_verify_last_frag(3, 1);
- ble_l2cap_test_util_verify_middle_frag(4, 2);
- ble_l2cap_test_util_verify_last_frag(4, 1);
- ble_l2cap_test_util_verify_last_frag(2, 1);
-}
-
-TEST_CASE(ble_l2cap_test_case_frag_channels)
-{
- struct ble_hs_conn *conn;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- NULL, NULL);
-
- /* Receive a starting fragment on the first channel. */
- rc = ble_l2cap_test_util_rx_first_frag(2, 14, BLE_L2CAP_TEST_CID, 30);
- TEST_ASSERT(rc == 0);
-
- ble_hs_lock();
- conn = ble_hs_conn_find(2);
- TEST_ASSERT_FATAL(conn != NULL);
- TEST_ASSERT(conn->bhc_rx_chan != NULL &&
- conn->bhc_rx_chan->blc_cid == BLE_L2CAP_TEST_CID);
- ble_hs_unlock();
-
- /* Receive a starting fragment on a different channel. The first fragment
- * should get discarded.
- */
- rc = ble_l2cap_test_util_rx_first_frag(2, 14, BLE_L2CAP_CID_ATT, 30);
- TEST_ASSERT(rc == 0);
-
- ble_hs_lock();
- conn = ble_hs_conn_find(2);
- TEST_ASSERT_FATAL(conn != NULL);
- TEST_ASSERT(conn->bhc_rx_chan != NULL &&
- conn->bhc_rx_chan->blc_cid == BLE_L2CAP_CID_ATT);
- ble_hs_unlock();
-}
-
-/*****************************************************************************
- * $unsolicited response *
- *****************************************************************************/
-
-TEST_CASE(ble_l2cap_test_case_sig_unsol_rsp)
-{
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- NULL, NULL);
-
- /* Receive an unsolicited response. */
- rc = ble_l2cap_test_util_rx_update_rsp(2, 100, 0);
- TEST_ASSERT(rc == BLE_HS_ENOENT);
-
- /* Ensure we did not send anything in return. */
- ble_hs_test_util_tx_all();
- TEST_ASSERT_FATAL(ble_hs_test_util_prev_tx_dequeue() == NULL);
-}
-
-/*****************************************************************************
- * $update *
- *****************************************************************************/
-
-static int
-ble_l2cap_test_util_conn_cb(struct ble_gap_event *event, void *arg)
-{
- int *accept;
-
- switch (event->type) {
- case BLE_GAP_EVENT_L2CAP_UPDATE_REQ:
- accept = arg;
- return !*accept;
-
- default:
- return 0;
- }
-}
-
-static void
-ble_l2cap_test_util_peer_updates(int accept)
-{
- struct ble_l2cap_sig_update_params l2cap_params;
- struct ble_gap_upd_params params;
- ble_hs_conn_flags_t conn_flags;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- ble_l2cap_test_util_conn_cb,
- &accept);
-
- l2cap_params.itvl_min = 0x200;
- l2cap_params.itvl_max = 0x300;
- l2cap_params.slave_latency = 0;
- l2cap_params.timeout_multiplier = 0x100;
- ble_l2cap_test_util_rx_update_req(2, 1, &l2cap_params);
-
- /* Ensure an update response command got sent. */
- ble_hs_process_tx_data_queue();
- ble_l2cap_test_util_verify_tx_update_rsp(1, !accept);
-
- if (accept) {
- params.itvl_min = 0x200;
- params.itvl_max = 0x300;
- params.latency = 0;
- params.supervision_timeout = 0x100;
- params.min_ce_len = BLE_GAP_INITIAL_CONN_MIN_CE_LEN;
- params.max_ce_len = BLE_GAP_INITIAL_CONN_MAX_CE_LEN;
- ble_l2cap_test_util_verify_tx_update_conn(¶ms);
- } else {
- /* Ensure no update got scheduled. */
- rc = ble_hs_atomic_conn_flags(2, &conn_flags);
- TEST_ASSERT(rc == 0 && !(conn_flags & BLE_HS_CONN_F_UPDATE));
- }
-}
-
-static void
-ble_l2cap_test_util_update_cb(int status, void *arg)
-{
- ble_l2cap_test_update_status = status;
- ble_l2cap_test_update_arg = arg;
-}
-
-static void
-ble_l2cap_test_util_we_update(int peer_accepts)
-{
- struct ble_l2cap_sig_update_params params;
- uint8_t id;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- ble_l2cap_test_util_conn_cb, NULL);
-
- /* Only the slave can initiate the L2CAP connection update procedure. */
- ble_hs_atomic_conn_set_flags(2, BLE_HS_CONN_F_MASTER, 0);
-
- params.itvl_min = 0x200;
- params.itvl_min = 0x300;
- params.slave_latency = 0;
- params.timeout_multiplier = 0x100;
- rc = ble_l2cap_sig_update(2, ¶ms, ble_l2cap_test_util_update_cb, NULL);
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_test_util_tx_all();
-
- /* Ensure an update request got sent. */
- id = ble_l2cap_test_util_verify_tx_update_req(¶ms);
-
- /* Receive response from peer. */
- rc = ble_l2cap_test_util_rx_update_rsp(2, id, !peer_accepts);
- TEST_ASSERT(rc == 0);
-
- /* Ensure callback got called. */
- if (peer_accepts) {
- TEST_ASSERT(ble_l2cap_test_update_status == 0);
- } else {
- TEST_ASSERT(ble_l2cap_test_update_status == BLE_HS_EREJECT);
- }
- TEST_ASSERT(ble_l2cap_test_update_arg == NULL);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_accept)
-{
- ble_l2cap_test_util_peer_updates(1);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_reject)
-{
- ble_l2cap_test_util_peer_updates(0);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_init_accept)
-{
- ble_l2cap_test_util_we_update(1);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_init_reject)
-{
- ble_l2cap_test_util_we_update(0);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_init_fail_master)
-{
- struct ble_l2cap_sig_update_params params;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- ble_l2cap_test_util_conn_cb, NULL);
-
- params.itvl_min = 0x200;
- params.itvl_min = 0x300;
- params.slave_latency = 0;
- params.timeout_multiplier = 0x100;
- rc = ble_l2cap_sig_update(2, ¶ms, ble_l2cap_test_util_update_cb, NULL);
- TEST_ASSERT_FATAL(rc == BLE_HS_EINVAL);
-
- /* Ensure callback never called. */
- ble_hs_test_util_tx_all();
- TEST_ASSERT(ble_l2cap_test_update_status == -1);
-}
-
-TEST_CASE(ble_l2cap_test_case_sig_update_init_fail_bad_id)
-{
- struct ble_l2cap_sig_update_params params;
- uint8_t id;
- int rc;
-
- ble_l2cap_test_util_init();
-
- ble_l2cap_test_util_create_conn(2, ((uint8_t[]){1,2,3,4,5,6}),
- ble_l2cap_test_util_conn_cb, NULL);
-
- /* Only the slave can initiate the L2CAP connection update procedure. */
- ble_hs_atomic_conn_set_flags(2, BLE_HS_CONN_F_MASTER, 0);
-
- params.itvl_min = 0x200;
- params.itvl_min = 0x300;
- params.slave_latency = 0;
- params.timeout_multiplier = 0x100;
- rc = ble_l2cap_sig_update(2, ¶ms, ble_l2cap_test_util_update_cb, NULL);
- TEST_ASSERT_FATAL(rc == 0);
-
- ble_hs_test_util_tx_all();
-
- /* Ensure an update request got sent. */
- id = ble_l2cap_test_util_verify_tx_update_req(¶ms);
-
- /* Receive response from peer with incorrect ID. */
- rc = ble_l2cap_test_util_rx_update_rsp(2, id + 1, 0);
- TEST_ASSERT(rc == BLE_HS_ENOENT);
-
- /* Ensure callback did not get called. */
- TEST_ASSERT(ble_l2cap_test_update_status == -1);
-
- /* Receive response from peer with correct ID. */
- rc = ble_l2cap_test_util_rx_update_rsp(2, id, 0);
- TEST_ASSERT(rc == 0);
-
- /* Ensure callback got called. */
- TEST_ASSERT(ble_l2cap_test_update_status == 0);
- TEST_ASSERT(ble_l2cap_test_update_arg == NULL);
-}
-
-TEST_SUITE(ble_l2cap_test_suite)
-{
- tu_suite_set_post_test_cb(ble_hs_test_util_post_test, NULL);
-
- ble_l2cap_test_case_bad_header();
- ble_l2cap_test_case_frag_single();
- ble_l2cap_test_case_frag_multiple();
- ble_l2cap_test_case_frag_channels();
- ble_l2cap_test_case_sig_unsol_rsp();
- ble_l2cap_test_case_sig_update_accept();
- ble_l2cap_test_case_sig_update_reject();
- ble_l2cap_test_case_sig_update_init_accept();
- ble_l2cap_test_case_sig_update_init_reject();
- ble_l2cap_test_case_sig_update_init_fail_master();
- ble_l2cap_test_case_sig_update_init_fail_bad_id();
-}
-
-int
-ble_l2cap_test_all(void)
-{
- ble_l2cap_test_suite();
-
- return tu_any_failed;
-}