Skip to content

Commit 8b8ee20

Browse files
committed
lib: bluetooth: db_disovery: Add unit tests
Signed-off-by: Asil Zogby <asilz@stud.ntnu.no>
1 parent 4474a70 commit 8b8ee20

File tree

4 files changed

+276
-0
lines changed

4 files changed

+276
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#
2+
# Copyright (c) 2025 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
#
6+
7+
cmake_minimum_required(VERSION 3.20.0)
8+
9+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
10+
11+
project(unit_test_ble_db_discovery)
12+
13+
set(SOFTDEVICE_VARIANT "s145")
14+
set(SOFTDEVICE_INCLUDE_DIR "${ZEPHYR_NRF_BM_MODULE_DIR}/components/softdevice/${SOFTDEVICE_VARIANT}/${SOFTDEVICE_VARIANT}_API/include")
15+
16+
cmock_handle(${SOFTDEVICE_INCLUDE_DIR}/ble.h)
17+
cmock_handle(${SOFTDEVICE_INCLUDE_DIR}/ble_gatts.h
18+
WORD_EXCLUDE
19+
"__STATIC_INLINE")
20+
cmock_handle(${SOFTDEVICE_INCLUDE_DIR}/ble_gattc.h
21+
WORD_EXCLUDE
22+
"__STATIC_INLINE")
23+
cmock_handle(${SOFTDEVICE_INCLUDE_DIR}/ble_gap.h)
24+
25+
add_compile_definitions(
26+
SVCALL_AS_NORMAL_FUNCTION=1
27+
NRF54L15_XXAA)
28+
29+
target_compile_definitions( app PRIVATE
30+
CONFIG_NRF_SDH_BLE_TOTAL_LINK_COUNT=1
31+
CONFIG_BLE_DB_DISCOVERY_MAX_SRV=6
32+
CONFIG_BLE_GQ_QUEUE_SIZE=8
33+
CONFIG_BLE_GQ_HEAP_SIZE=256
34+
CONFIG_BLE_GQ_MAX_CONNECTIONS=1
35+
CONFIG_SRV_DISC_START_HANDLE=1
36+
CONFIG_BLE_GATT_DB_MAX_CHARS=6
37+
)
38+
39+
# Generate and add test file
40+
test_runner_generate(src/unity_test.c)
41+
target_sources(app PRIVATE src/unity_test.c)
42+
43+
target_include_directories(app PRIVATE ${ZEPHYR_NRF_BM_MODULE_DIR}/include)
44+
target_include_directories(app PRIVATE ${SOFTDEVICE_INCLUDE_DIR})
45+
target_include_directories(app PRIVATE ${ZEPHYR_HAL_NORDIC_MODULE_DIR}/nrfx/mdk)
46+
target_include_directories(app PRIVATE ${ZEPHYR_CMSIS_MODULE_DIR}/CMSIS/Core/Include)
47+
48+
target_sources(app
49+
PRIVATE
50+
${ZEPHYR_NRF_BM_MODULE_DIR}/lib/bluetooth/ble_db_discovery/ble_db_discovery.c
51+
)
52+
target_sources(app
53+
PRIVATE
54+
${ZEPHYR_NRF_BM_MODULE_DIR}/lib/bluetooth/ble_gq/gatt_queue.c
55+
)
56+
57+
zephyr_include_directories(${ZEPHYR_NRF_BM_MODULE_DIR}/include)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#
2+
# Copyright (c) 2025 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
#
6+
CONFIG_UNITY=y
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
/*
2+
* Copyright (c) 2025 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
*/
6+
7+
#include <nrf_error.h>
8+
#include <unity.h>
9+
#include <bm/bluetooth/ble_db_discovery.h>
10+
#include <bm/bluetooth/services/uuid.h>
11+
#include <bm/bluetooth/ble_gq.h>
12+
13+
#include "cmock_ble.h"
14+
#include "cmock_ble_gap.h"
15+
#include "cmock_ble_gattc.h"
16+
17+
BLE_GQ_DEF(ble_gatt_queue);
18+
19+
static void db_discovery_evt_handler(struct ble_db_discovery *db_discovery,
20+
struct ble_db_discovery_evt *adv)
21+
{
22+
}
23+
24+
void test_ble_adv_init_error_null(void)
25+
{
26+
struct ble_db_discovery db_discovery = {0};
27+
struct ble_db_discovery_config config = {
28+
.gatt_queue = &ble_gatt_queue,
29+
.evt_handler = db_discovery_evt_handler,
30+
};
31+
int ret;
32+
33+
ret = ble_db_discovery_init(NULL, &config);
34+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ret);
35+
ret = ble_db_discovery_init(&db_discovery, NULL);
36+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ret);
37+
config.evt_handler = NULL;
38+
ret = ble_db_discovery_init(&db_discovery, &config);
39+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ret);
40+
}
41+
42+
void test_ble_db_discovery_init(void)
43+
{
44+
int ret;
45+
46+
struct ble_db_discovery db_discovery = {0};
47+
struct ble_db_discovery_config config = {
48+
.gatt_queue = &ble_gatt_queue,
49+
.evt_handler = db_discovery_evt_handler,
50+
};
51+
52+
ret = ble_db_discovery_init(&db_discovery, &config);
53+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ret);
54+
TEST_ASSERT_EQUAL(0, db_discovery.num_of_handlers_reg);
55+
TEST_ASSERT_NOT_EQUAL(NULL, db_discovery.evt_handler);
56+
TEST_ASSERT_NOT_EQUAL(NULL, db_discovery.gatt_queue);
57+
}
58+
59+
void test_ble_db_discovery_evt_register_null(void)
60+
{
61+
uint32_t ret;
62+
63+
struct ble_db_discovery db_discovery = {0};
64+
struct ble_db_discovery_config config = {
65+
.gatt_queue = &ble_gatt_queue,
66+
.evt_handler = db_discovery_evt_handler,
67+
};
68+
69+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
70+
71+
ret = ble_db_discovery_init(&db_discovery, &config);
72+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ret);
73+
74+
ret = ble_db_discovery_evt_register(&db_discovery, NULL);
75+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ret);
76+
ret = ble_db_discovery_evt_register(NULL, &hrs_uuid);
77+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ret);
78+
}
79+
80+
void test_ble_db_discovery_evt_register_invalid_state(void)
81+
{
82+
struct ble_db_discovery db_discovery = {0};
83+
84+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
85+
86+
TEST_ASSERT_EQUAL(NRF_ERROR_INVALID_STATE,
87+
ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
88+
}
89+
90+
void test_ble_db_discovery_evt_register_no_mem(void)
91+
{
92+
struct ble_db_discovery db_discovery = {0};
93+
struct ble_db_discovery_config config = {
94+
.gatt_queue = &ble_gatt_queue,
95+
.evt_handler = db_discovery_evt_handler,
96+
};
97+
98+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
99+
100+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_IMMEDIATE_ALERT_SERVICE};
101+
102+
for (size_t i = 0; i < CONFIG_BLE_DB_DISCOVERY_MAX_SRV; ++i) {
103+
TEST_ASSERT_EQUAL(NRF_SUCCESS,
104+
ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
105+
hrs_uuid.uuid++;
106+
}
107+
TEST_ASSERT_EQUAL(CONFIG_BLE_DB_DISCOVERY_MAX_SRV, db_discovery.num_of_handlers_reg);
108+
TEST_ASSERT_EQUAL(NRF_ERROR_NO_MEM,
109+
ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
110+
}
111+
112+
void test_ble_db_discovery_evt_register(void)
113+
{
114+
struct ble_db_discovery db_discovery = {0};
115+
struct ble_db_discovery_config config = {
116+
.gatt_queue = &ble_gatt_queue,
117+
.evt_handler = db_discovery_evt_handler,
118+
};
119+
120+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
121+
122+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
123+
124+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
125+
}
126+
127+
void test_ble_db_discovery_start_null(void)
128+
{
129+
struct ble_db_discovery db_discovery = {0};
130+
struct ble_db_discovery_config config = {
131+
.gatt_queue = &ble_gatt_queue,
132+
.evt_handler = db_discovery_evt_handler,
133+
};
134+
135+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
136+
137+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
138+
139+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
140+
141+
TEST_ASSERT_EQUAL(NRF_ERROR_NULL, ble_db_discovery_start(NULL, 0));
142+
}
143+
144+
void test_ble_db_discovery_start_invalid_state(void)
145+
{
146+
struct ble_db_discovery db_discovery = {0};
147+
struct ble_db_discovery_config config = {
148+
.gatt_queue = &ble_gatt_queue,
149+
.evt_handler = db_discovery_evt_handler,
150+
};
151+
152+
TEST_ASSERT_EQUAL(NRF_ERROR_INVALID_STATE, ble_db_discovery_start(&db_discovery, 0));
153+
154+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
155+
156+
TEST_ASSERT_EQUAL(NRF_ERROR_INVALID_STATE, ble_db_discovery_start(&db_discovery, 0));
157+
}
158+
159+
void test_ble_db_discovery_start_busy(void)
160+
{
161+
struct ble_db_discovery db_discovery = {0};
162+
struct ble_db_discovery_config config = {
163+
.gatt_queue = &ble_gatt_queue,
164+
.evt_handler = db_discovery_evt_handler,
165+
};
166+
167+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
168+
169+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
170+
171+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
172+
173+
__cmock_sd_ble_gattc_primary_services_discover_ExpectAnyArgsAndReturn(NRF_SUCCESS);
174+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_start(&db_discovery, 0));
175+
176+
TEST_ASSERT_EQUAL(NRF_ERROR_BUSY, ble_db_discovery_start(&db_discovery, 0));
177+
}
178+
179+
void test_ble_db_discovery_start(void)
180+
{
181+
struct ble_db_discovery db_discovery = {0};
182+
struct ble_db_discovery_config config = {
183+
.gatt_queue = &ble_gatt_queue,
184+
.evt_handler = db_discovery_evt_handler,
185+
};
186+
187+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_init(&db_discovery, &config));
188+
189+
ble_uuid_t hrs_uuid = {.type = BLE_UUID_TYPE_BLE, .uuid = BLE_UUID_HEART_RATE_SERVICE};
190+
191+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_evt_register(&db_discovery, &hrs_uuid));
192+
193+
__cmock_sd_ble_gattc_primary_services_discover_ExpectAnyArgsAndReturn(NRF_SUCCESS);
194+
TEST_ASSERT_EQUAL(NRF_SUCCESS, ble_db_discovery_start(&db_discovery, 0));
195+
}
196+
197+
void setUp(void)
198+
{
199+
}
200+
void tearDown(void)
201+
{
202+
}
203+
204+
extern int unity_main(void);
205+
206+
int main(void)
207+
{
208+
return unity_main();
209+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
tests:
2+
lib.ble_db_discovery:
3+
platform_allow: native_sim
4+
tags: unittest

0 commit comments

Comments
 (0)