tests: bluetooth: buf: Test the freed buf callback
This commit adds a unit test that checks the freed buffer callback of the bluetooth data buffer API. Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
This commit is contained in:
parent
c2488fdd30
commit
0d0669167b
4 changed files with 120 additions and 0 deletions
8
tests/bluetooth/buf/CMakeLists.txt
Normal file
8
tests/bluetooth/buf/CMakeLists.txt
Normal file
|
@ -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
tests/bluetooth/buf/prj.conf
Normal file
10
tests/bluetooth/buf/prj.conf
Normal file
|
@ -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
tests/bluetooth/buf/src/main.c
Normal file
72
tests/bluetooth/buf/src/main.c
Normal file
|
@ -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
tests/bluetooth/buf/testcase.yaml
Normal file
30
tests/bluetooth/buf/testcase.yaml
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue