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);
 

Reply via email to