Repository: incubator-mynewt-core Updated Branches: refs/heads/develop 36de005b3 -> 51294d51a
BLE Host - prep/exec tests: better mbuf leak check When ensuring no mbuf leaks at the end of the att_svr_test suite, also ensure that each connection's prep list is empty. Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/a9e00919 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/a9e00919 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/a9e00919 Branch: refs/heads/develop Commit: a9e009199a33c2d4edf94c9c608fea6d8a2879ec Parents: f409079 Author: Christopher Collins <[email protected]> Authored: Sun Aug 7 17:59:02 2016 -0700 Committer: Christopher Collins <[email protected]> Committed: Sun Aug 7 18:11:00 2016 -0700 ---------------------------------------------------------------------- net/nimble/host/src/test/ble_att_svr_test.c | 9 ++++- net/nimble/host/src/test/ble_hs_test_util.c | 46 ++++++++++++++++-------- net/nimble/host/src/test/ble_hs_test_util.h | 12 +++++-- 3 files changed, 50 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a9e00919/net/nimble/host/src/test/ble_att_svr_test.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/test/ble_att_svr_test.c b/net/nimble/host/src/test/ble_att_svr_test.c index 86565e3..1509b41 100644 --- a/net/nimble/host/src/test/ble_att_svr_test.c +++ b/net/nimble/host/src/test/ble_att_svr_test.c @@ -2282,7 +2282,14 @@ TEST_CASE(ble_att_svr_test_indicate) TEST_SUITE(ble_att_svr_suite) { - tu_suite_set_post_test_cb(ble_hs_test_util_post_test, NULL); + /* When checking for mbuf leaks, ensure no stale prep entries. */ + static struct ble_hs_test_util_mbuf_params mbuf_params = { + .prev_tx = 1, + .rx_queue = 1, + .prep_list = 0, + }; + + tu_suite_set_post_test_cb(ble_hs_test_util_post_test, &mbuf_params); ble_att_svr_test_mtu(); ble_att_svr_test_read(); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a9e00919/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 index 54a3527..460642e 100644 --- a/net/nimble/host/src/test/ble_hs_test_util.c +++ b/net/nimble/host/src/test/ble_hs_test_util.c @@ -1286,7 +1286,7 @@ ble_hs_test_util_mbuf_chain_len(const struct os_mbuf *om) } int -ble_hs_test_util_mbuf_count(void) +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; @@ -1296,14 +1296,17 @@ ble_hs_test_util_mbuf_count(void) int count; int i; - count = ble_hs_test_util_mbuf_mpool.mp_num_free; - count += ble_hs_test_util_mbuf_chain_len(ble_hs_test_util_prev_tx_cur); - ble_hs_process_tx_data_queue(); ble_hs_process_rx_data_queue(); - 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); + + 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(); @@ -1313,12 +1316,16 @@ ble_hs_test_util_mbuf_count(void) break; } - SLIST_FOREACH(chan, &conn->bhc_channels, blc_next) { - count += ble_hs_test_util_mbuf_chain_len(chan->blc_rx_buf); + if (params->rx_queue) { + SLIST_FOREACH(chan, &conn->bhc_channels, blc_next) { + count += ble_hs_test_util_mbuf_chain_len(chan->blc_rx_buf); + } } - SLIST_FOREACH(prep, &conn->bhc_att_svr.basc_prep_list, bape_next) { - count += ble_hs_test_util_mbuf_chain_len(prep->bape_value); + 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(); @@ -1327,18 +1334,29 @@ ble_hs_test_util_mbuf_count(void) } void -ble_hs_test_util_assert_mbufs_freed(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; - count = ble_hs_test_util_mbuf_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(); + ble_hs_test_util_assert_mbufs_freed(arg); } static int http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a9e00919/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 index 0ae6cf5..3320e9b 100644 --- a/net/nimble/host/src/test/ble_hs_test_util.h +++ b/net/nimble/host/src/test/ble_hs_test_util.h @@ -44,6 +44,12 @@ struct ble_hs_test_util_flat_attr { 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); @@ -160,8 +166,10 @@ 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(void); -void ble_hs_test_util_assert_mbufs_freed(void); +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);
