Skip to content

Commit

Permalink
[nrf fromtree] tests: bluetooth: buf: Test the freed buf callback
Browse files Browse the repository at this point in the history
This commit adds a unit test that checks the freed buffer callback of
the bluetooth data buffer API.

Signed-off-by: Pavel Vasilyev <[email protected]>
(cherry picked from commit 0d06691)
  • Loading branch information
PavelVPV authored and jukkar committed Dec 20, 2024
1 parent e2c77de commit 7f8d857
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 0 deletions.
8 changes: 8 additions & 0 deletions tests/bluetooth/buf/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(buf)

target_sources(app PRIVATE src/main.c)
10 changes: 10 additions & 0 deletions tests/bluetooth/buf/prj.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CONFIG_TEST=y
CONFIG_ZTEST=y

CONFIG_BT=y
CONFIG_BT_CTLR=n
CONFIG_BT_H4=n

# Needed to enable and test the iso rx pool
CONFIG_BT_OBSERVER=y
CONFIG_BT_ISO_SYNC_RECEIVER=y
72 changes: 72 additions & 0 deletions tests/bluetooth/buf/src/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Copyright (c) 2024 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/kernel.h>

#include <errno.h>
#include <zephyr/tc_util.h>
#include <zephyr/ztest.h>

#include <zephyr/bluetooth/hci.h>
#include <zephyr/bluetooth/buf.h>
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/drivers/bluetooth.h>
#include <zephyr/sys/byteorder.h>

static enum bt_buf_type freed_buf_type;
static K_SEM_DEFINE(rx_sem, 0, 1);

void bt_buf_rx_freed_cb(enum bt_buf_type type)
{
freed_buf_type = type;
k_sem_give(&rx_sem);
}

ZTEST_SUITE(test_buf_data_api, NULL, NULL, NULL, NULL, NULL);

ZTEST(test_buf_data_api, test_buf_freed_cb)
{
struct net_buf *buf;
int err;

bt_buf_rx_freed_cb_set(bt_buf_rx_freed_cb);

/* Test that the callback is called for the BT_BUF_EVT type */
buf = bt_buf_get_rx(BT_BUF_EVT, K_NO_WAIT);
zassert_not_null(buf, "Failed to get event buffer");

net_buf_unref(buf);
/* The freed buf cb is called from net_buf_unref, therefore the semaphore should
* already by given.
*/
err = k_sem_take(&rx_sem, K_NO_WAIT);
zassert_equal(err, 0, "Timeout while waiting for event buffer to be freed");
zassert_equal(BT_BUF_EVT, BT_BUF_EVT & freed_buf_type, "Event buffer wasn't freed");

/* Test that the callback is called for the BT_BUF_ACL_IN type */
buf = bt_buf_get_rx(BT_BUF_ACL_IN, K_NO_WAIT);
zassert_not_null(buf, "Failed to get ACL buffer");

net_buf_unref(buf);
/* The freed buf cb is called from net_buf_unref, therefore the semaphore should
* already by given.
*/
err = k_sem_take(&rx_sem, K_NO_WAIT);
zassert_equal(err, 0, "Timeout while waiting for ACL buffer to be freed");
zassert_equal(BT_BUF_ACL_IN, BT_BUF_ACL_IN & freed_buf_type, "ACL buffer wasn't freed");

/* Test that the callback is called for the BT_BUF_ISO_IN type */
buf = bt_buf_get_rx(BT_BUF_ISO_IN, K_NO_WAIT);
zassert_not_null(buf, "Failed to get ISO buffer");

net_buf_unref(buf);
/* The freed buf cb is called from net_buf_unref, therefore the semaphore should
* already by given.
*/
err = k_sem_take(&rx_sem, K_NO_WAIT);
zassert_equal(err, 0, "Timeout while waiting for ISO buffer to be freed");
zassert_equal(BT_BUF_ISO_IN, BT_BUF_ISO_IN & freed_buf_type, "ISO buffer wasn't freed");
}
30 changes: 30 additions & 0 deletions tests/bluetooth/buf/testcase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
common:
tags:
- bluetooth
- host

tests:
bluetooth.buf:
platform_allow:
- native_sim
- native_sim/native/64
integration_platforms:
- native_sim
extra_configs:
- CONFIG_BT_HCI_ACL_FLOW_CONTROL=y
bluetooth.buf.no_acl_flow_control:
platform_allow:
- native_sim
- native_sim/native/64
integration_platforms:
- native_sim
extra_configs:
- CONFIG_BT_HCI_ACL_FLOW_CONTROL=n
bluetooth.buf.hci_raw:
platform_allow:
- native_sim
- native_sim/native/64
integration_platforms:
- native_sim
extra_configs:
- CONFIG_BT_HCI_RAW=y

0 comments on commit 7f8d857

Please sign in to comment.