From c33e721c01bd8c8863713017e388817b3ee44688 Mon Sep 17 00:00:00 2001 From: Aleksander Wasaznik Date: Tue, 28 May 2024 16:07:52 +0200 Subject: [PATCH] Bluetooth: host: test: remove adv/resume2 I am the original author of the test that is being removed. The test was added in https://github.com/zephyrproject-rtos/zephyr/pull/70670 to try to specify the behavior of automatic advertiser resuming in the Host. It turns out now that the behavior of this feature depends on which Controller is in use and can fail incorrectly. The test assumes the DUT will be able to create `CONFIG_BT_MAX_CONN` peripheral connections. But this is not necessarily true. E.g. Some Controllers, like the SoftDevice Controller, may reserve some Host connection slots for central roles, making the max number of peripheral connections smaller. In conclusion, the test is not correct and should be removed. Signed-off-by: Aleksander Wasaznik --- tests/bsim/bluetooth/host/adv/compile.sh | 3 - .../adv/resume2/connectable/CMakeLists.txt | 21 -- .../host/adv/resume2/connectable/main.c | 45 ---- .../host/adv/resume2/connectable/prj.conf | 21 -- .../host/adv/resume2/connecter/CMakeLists.txt | 21 -- .../host/adv/resume2/connecter/main.c | 66 ------ .../host/adv/resume2/connecter/prj.conf | 19 -- .../host/adv/resume2/dut/CMakeLists.txt | 21 -- .../bluetooth/host/adv/resume2/dut/main.c | 214 ------------------ .../bluetooth/host/adv/resume2/dut/prj.conf | 22 -- .../host/adv/resume2/test_scripts/_build.sh | 16 -- .../host/adv/resume2/test_scripts/run.sh | 36 --- 12 files changed, 505 deletions(-) delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connectable/CMakeLists.txt delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connectable/main.c delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connectable/prj.conf delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connecter/CMakeLists.txt delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connecter/main.c delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/connecter/prj.conf delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/dut/CMakeLists.txt delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/dut/main.c delete mode 100644 tests/bsim/bluetooth/host/adv/resume2/dut/prj.conf delete mode 100755 tests/bsim/bluetooth/host/adv/resume2/test_scripts/_build.sh delete mode 100755 tests/bsim/bluetooth/host/adv/resume2/test_scripts/run.sh diff --git a/tests/bsim/bluetooth/host/adv/compile.sh b/tests/bsim/bluetooth/host/adv/compile.sh index c17c1395d17..951ff74b5f1 100755 --- a/tests/bsim/bluetooth/host/adv/compile.sh +++ b/tests/bsim/bluetooth/host/adv/compile.sh @@ -12,9 +12,6 @@ source ${ZEPHYR_BASE}/tests/bsim/compile.source app=tests/bsim/bluetooth/host/adv/resume compile app=tests/bsim/bluetooth/host/adv/resume conf_file=prj_2.conf compile -app=tests/bsim/bluetooth/host/adv/resume2/connectable compile -app=tests/bsim/bluetooth/host/adv/resume2/connecter compile -app=tests/bsim/bluetooth/host/adv/resume2/dut compile app=tests/bsim/bluetooth/host/adv/chain compile app=tests/bsim/bluetooth/host/adv/extended conf_file=prj_advertiser.conf compile app=tests/bsim/bluetooth/host/adv/extended conf_file=prj_scanner.conf compile diff --git a/tests/bsim/bluetooth/host/adv/resume2/connectable/CMakeLists.txt b/tests/bsim/bluetooth/host/adv/resume2/connectable/CMakeLists.txt deleted file mode 100644 index 3770a46a75a..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connectable/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -cmake_minimum_required(VERSION 3.20.0) - -find_package(Zephyr HINTS $ENV{ZEPHYR_BASE}) -project(app) - -target_sources(app PRIVATE - main.c -) - -zephyr_include_directories( - ${BSIM_COMPONENTS_PATH}/libPhyComv1/src/ - ${BSIM_COMPONENTS_PATH}/libUtilv1/src/ -) - -add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/common/testlib testlib) -target_link_libraries(app PRIVATE - testlib -) diff --git a/tests/bsim/bluetooth/host/adv/resume2/connectable/main.c b/tests/bsim/bluetooth/host/adv/resume2/connectable/main.c deleted file mode 100644 index e822362b878..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connectable/main.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include - -#include -#include - -/* @file - * - * This app advertises connectable with the name "connectable". - * It only receives one connection at a time. When the remote - * disconnects, it starts advertising again. - * - * This app is added to the simulation simply to be a target for - * a connection from the DUT. - */ - -int main(void) -{ - int err; - - err = bt_enable(NULL); - __ASSERT_NO_MSG(!err); - - err = bt_set_name("connectable"); - __ASSERT_NO_MSG(!err); - - while (true) { - struct bt_conn *conn = NULL; - - bt_testlib_conn_wait_free(); - - err = bt_testlib_adv_conn(&conn, BT_ID_DEFAULT, bt_get_name()); - __ASSERT_NO_MSG(!err); - - bt_testlib_wait_disconnected(conn); - bt_testlib_conn_unref(&conn); - } - - return 0; -} diff --git a/tests/bsim/bluetooth/host/adv/resume2/connectable/prj.conf b/tests/bsim/bluetooth/host/adv/resume2/connectable/prj.conf deleted file mode 100644 index 5b1934336a4..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connectable/prj.conf +++ /dev/null @@ -1,21 +0,0 @@ -CONFIG_TEST=y - -CONFIG_BT=y -CONFIG_BT_PERIPHERAL=y - -CONFIG_ASSERT=y -CONFIG_BT_TESTING=y -CONFIG_LOG=y - -CONFIG_BT_DEVICE_NAME_DYNAMIC=y - -CONFIG_BT_EXT_ADV=y -CONFIG_BT_PRIVACY=n -CONFIG_BT_SCAN_WITH_IDENTITY=n - -CONFIG_BT_AUTO_PHY_UPDATE=n -CONFIG_BT_AUTO_DATA_LEN_UPDATE=n -CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n - -CONFIG_BT_MAX_CONN=1 -CONFIG_BT_ID_MAX=1 diff --git a/tests/bsim/bluetooth/host/adv/resume2/connecter/CMakeLists.txt b/tests/bsim/bluetooth/host/adv/resume2/connecter/CMakeLists.txt deleted file mode 100644 index 3770a46a75a..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connecter/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -cmake_minimum_required(VERSION 3.20.0) - -find_package(Zephyr HINTS $ENV{ZEPHYR_BASE}) -project(app) - -target_sources(app PRIVATE - main.c -) - -zephyr_include_directories( - ${BSIM_COMPONENTS_PATH}/libPhyComv1/src/ - ${BSIM_COMPONENTS_PATH}/libUtilv1/src/ -) - -add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/common/testlib testlib) -target_link_libraries(app PRIVATE - testlib -) diff --git a/tests/bsim/bluetooth/host/adv/resume2/connecter/main.c b/tests/bsim/bluetooth/host/adv/resume2/connecter/main.c deleted file mode 100644 index fc6784a5a50..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connecter/main.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include - -#include -#include - -LOG_MODULE_REGISTER(connecter, LOG_LEVEL_INF); - -/* @file - * - * This app scans for a device with the name "dut" and connects - * to it. It then waits for the connection to be disconnected, - * before starting over. - * - * This app is added to the simulation simply to exercise the - * DUT's connectable advertiser. - * - * Multiple instances of this app are added to the simulation, - * to exercise BT_MAX_CONN of the DUT. - */ - -int main(void) -{ - int err; - - err = bt_enable(NULL); - __ASSERT_NO_MSG(!err); - - while (true) { - bt_addr_le_t result; - struct bt_conn *conn = NULL; - - bt_testlib_conn_wait_free(); - - err = bt_testlib_scan_find_name(&result, "dut"); - __ASSERT_NO_MSG(!err); - - /* The above scan will never timeout, but the below connect has - * a built-in timeout in the stack. - * - * The timeout causes `BT_HCI_ERR_UNKNOWN_CONN_ID`. - * - * The timeout is a good thing in this app. Maybe the DUT is - * going to change its address, so we should scan for the name - * again. - */ - - err = bt_testlib_connect(&result, &conn); - if (err) { - __ASSERT_NO_MSG(err == BT_HCI_ERR_UNKNOWN_CONN_ID); - } - - if (conn) { - bt_testlib_wait_disconnected(conn); - bt_testlib_conn_unref(&conn); - } - } - - return 0; -} diff --git a/tests/bsim/bluetooth/host/adv/resume2/connecter/prj.conf b/tests/bsim/bluetooth/host/adv/resume2/connecter/prj.conf deleted file mode 100644 index 3aa128d9855..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/connecter/prj.conf +++ /dev/null @@ -1,19 +0,0 @@ -CONFIG_TEST=y - -CONFIG_BT=y -CONFIG_BT_CENTRAL=y - -CONFIG_ASSERT=y -CONFIG_BT_TESTING=y -CONFIG_LOG=y - -CONFIG_BT_EXT_ADV=n -CONFIG_BT_PRIVACY=n -CONFIG_BT_SCAN_WITH_IDENTITY=n - -CONFIG_BT_AUTO_PHY_UPDATE=n -CONFIG_BT_AUTO_DATA_LEN_UPDATE=n -CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n - -CONFIG_BT_MAX_CONN=1 -CONFIG_BT_ID_MAX=1 diff --git a/tests/bsim/bluetooth/host/adv/resume2/dut/CMakeLists.txt b/tests/bsim/bluetooth/host/adv/resume2/dut/CMakeLists.txt deleted file mode 100644 index 3770a46a75a..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/dut/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -cmake_minimum_required(VERSION 3.20.0) - -find_package(Zephyr HINTS $ENV{ZEPHYR_BASE}) -project(app) - -target_sources(app PRIVATE - main.c -) - -zephyr_include_directories( - ${BSIM_COMPONENTS_PATH}/libPhyComv1/src/ - ${BSIM_COMPONENTS_PATH}/libUtilv1/src/ -) - -add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/common/testlib testlib) -target_link_libraries(app PRIVATE - testlib -) diff --git a/tests/bsim/bluetooth/host/adv/resume2/dut/main.c b/tests/bsim/bluetooth/host/adv/resume2/dut/main.c deleted file mode 100644 index 03fd621212b..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/dut/main.c +++ /dev/null @@ -1,214 +0,0 @@ -/* Copyright (c) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: Apache-2.0 - */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -extern enum bst_result_t bst_result; - -LOG_MODULE_REGISTER(dut, LOG_LEVEL_INF); - -atomic_t connected_count; - -static void on_connected(struct bt_conn *conn, uint8_t conn_err) -{ - atomic_t count = atomic_inc(&connected_count) + 1; - - LOG_INF("Connected. Current count %d", count); -} - -static void on_disconnected(struct bt_conn *conn, uint8_t reason) -{ - atomic_t count = atomic_dec(&connected_count) - 1; - - LOG_INF("Disconnected. Current count %d", count); -} - -BT_CONN_CB_DEFINE(conn_callbacks) = { - .connected = on_connected, - .disconnected = on_disconnected, -}; - -static void disconnect_all(void) -{ - for (size_t i = 0; i < CONFIG_BT_MAX_CONN; i++) { - int err; - struct bt_conn *conn = bt_testlib_conn_unindex(BT_CONN_TYPE_LE, i); - - if (conn) { - err = bt_testlib_disconnect(&conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN); - __ASSERT_NO_MSG(!err); - } - } -} - -int main(void) -{ - int err; - bt_addr_le_t connectable_addr; - struct bt_conn *conn = NULL; - - bst_result = In_progress; - - err = bt_enable(NULL); - __ASSERT_NO_MSG(!err); - - err = bt_set_name("dut"); - __ASSERT_NO_MSG(!err); - - struct bt_data ad[1] = {0}; - - const char *dev_name = bt_get_name(); - - ad[0].type = BT_DATA_NAME_COMPLETE; - ad[0].data_len = strlen(dev_name); - ad[0].data = (const uint8_t *)dev_name; - - LOG_INF("---------- Test setup ----------"); - - LOG_INF("Environment test: Advertiser fills connection capacity."); - - /* `bt_le_adv_start` is invoked once, and.. */ - - err = bt_le_adv_start(BT_LE_ADV_CONN, NULL, 0, NULL, 0); - __ASSERT_NO_MSG(!err); - - err = bt_le_adv_update_data(ad, 1, NULL, 0); - __ASSERT_NO_MSG(!err); - - /* .. the advertiser shall autoresume. Since it's not - * stopped, it shall continue receivng connections until - * the stack runs out of connection objects. - */ - - LOG_INF("Waiting for connections..."); - while (atomic_get(&connected_count) < CONFIG_BT_MAX_CONN) { - k_msleep(1000); - } - - LOG_INF("Environment test done"); - - LOG_INF("Environment test: Disconnect one to see that it comes back"); - - /* Disconnect one of the connections. It does matter - * which, but object with index 0 is chosen for - * simplicity. - */ - - conn = bt_testlib_conn_unindex(BT_CONN_TYPE_LE, 0); - __ASSERT_NO_MSG(conn); - - /* Disconnect, but wait with calling unref.. */ - - err = bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN); - __ASSERT_NO_MSG(!err); - bt_testlib_wait_disconnected(conn); - - /* Simulate a delayed unref. We delay to make sure the resume is not - * triggered by disconnection, but by a connection object becoming - * available. - */ - - k_sleep(K_SECONDS(10)); - - bt_testlib_conn_unref(&conn); - - /* Since there is a free connection object again, the - * advertiser shall automatically resume and receive a - * new connection. - */ - - LOG_INF("Waiting for connections..."); - while (atomic_get(&connected_count) < CONFIG_BT_MAX_CONN) { - k_msleep(1000); - } - - LOG_INF("Environment test done"); - - - LOG_INF("Clean up"); - - err = bt_le_adv_stop(); - __ASSERT_NO_MSG(!err); - - disconnect_all(); - - LOG_INF("Cleanup done"); - - - LOG_INF("Setup step: Connect one central connection"); - - err = bt_testlib_scan_find_name(&connectable_addr, "connectable"); - __ASSERT_NO_MSG(!err); - - err = bt_testlib_connect(&connectable_addr, &conn); - __ASSERT_NO_MSG(!err); - - LOG_INF("Setup step done"); - - - LOG_INF("Setup step: Start advertiser. Let it fill the connection limit."); - - /* With one connection slot taken by the central role, we fill the rest. */ - - err = bt_le_adv_start(BT_LE_ADV_CONN, NULL, 0, NULL, 0); - __ASSERT_NO_MSG(!err); - - err = bt_le_adv_update_data(ad, 1, NULL, 0); - __ASSERT_NO_MSG(!err); - - LOG_INF("Waiting for connections..."); - while (atomic_get(&connected_count) < CONFIG_BT_MAX_CONN) { - k_sleep(K_SECONDS(1)); - } - - LOG_INF("Setup step done"); - - - LOG_INF("---------- Test start ----------"); - - LOG_INF("Disconnect, wait and connect the central connection."); - - /* In this situation, disconnecting the central role should not allow - * the advertiser to resume. This behavior was introduced in 6a79c3deae. - */ - - LOG_INF("Poke: Disconnect"); - err = bt_testlib_disconnect(&conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN); - __ASSERT_NO_MSG(!err); - - LOG_INF("Poke: Wait to bait the advertiser"); - k_sleep(K_SECONDS(5)); - - LOG_INF("Observe: Connect"); - err = bt_testlib_connect(&connectable_addr, &conn); - if (err) { - /* If the test fails, it's because the advertiser 'stole' the - * central's connection slot. - */ - __ASSERT_NO_MSG(err == -ENOMEM); - - LOG_ERR("Fault: Advertiser stole the connection slot"); - bs_trace_silent_exit(1); - } - - bst_result = Passed; - LOG_INF("Test passed"); - bs_trace_silent_exit(0); - - return 0; -} diff --git a/tests/bsim/bluetooth/host/adv/resume2/dut/prj.conf b/tests/bsim/bluetooth/host/adv/resume2/dut/prj.conf deleted file mode 100644 index 7553df7062b..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/dut/prj.conf +++ /dev/null @@ -1,22 +0,0 @@ -CONFIG_TEST=y - -CONFIG_BT=y -CONFIG_BT_PERIPHERAL=y -CONFIG_BT_CENTRAL=y - -CONFIG_BT_DEVICE_NAME_DYNAMIC=y - -CONFIG_ASSERT=y -CONFIG_BT_TESTING=y -CONFIG_LOG=y - -CONFIG_BT_EXT_ADV=n -CONFIG_BT_PRIVACY=n -CONFIG_BT_SCAN_WITH_IDENTITY=n - -CONFIG_BT_AUTO_PHY_UPDATE=n -CONFIG_BT_AUTO_DATA_LEN_UPDATE=n -CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n - -CONFIG_BT_MAX_CONN=3 -CONFIG_BT_ID_MAX=1 diff --git a/tests/bsim/bluetooth/host/adv/resume2/test_scripts/_build.sh b/tests/bsim/bluetooth/host/adv/resume2/test_scripts/_build.sh deleted file mode 100755 index f9b41b2e7f2..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/test_scripts/_build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) 2023 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -set -eu -: "${ZEPHYR_BASE:?ZEPHYR_BASE must be defined}" - -INCR_BUILD=1 - -source ${ZEPHYR_BASE}/tests/bsim/compile.source - -app="$(guess_test_relpath)"/connectable compile -app="$(guess_test_relpath)"/connecter compile -app="$(guess_test_relpath)"/dut compile - -wait_for_background_jobs diff --git a/tests/bsim/bluetooth/host/adv/resume2/test_scripts/run.sh b/tests/bsim/bluetooth/host/adv/resume2/test_scripts/run.sh deleted file mode 100755 index 1812c0207a2..00000000000 --- a/tests/bsim/bluetooth/host/adv/resume2/test_scripts/run.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -set -eu - -source ${ZEPHYR_BASE}/tests/bsim/sh_common.source - -verbosity_level=2 -simulation_id="resume2" -dut_exe="${BSIM_OUT_PATH}/bin/bs_${BOARD_TS}_$(guess_test_long_name)_dut_prj_conf" -connecter_exe="${BSIM_OUT_PATH}/bin/bs_${BOARD_TS}_$(guess_test_long_name)_connecter_prj_conf" -connectable_exe="${BSIM_OUT_PATH}/bin/bs_${BOARD_TS}_$(guess_test_long_name)_connectable_prj_conf" - -cd ${BSIM_OUT_PATH}/bin - -Execute "$dut_exe" \ - -v=${verbosity_level} -s="${simulation_id}" -d=0 -RealEncryption=1 - -Execute "$connecter_exe" \ - -v=${verbosity_level} -s="${simulation_id}" -d=1 -RealEncryption=1 - -Execute "$connecter_exe" \ - -v=${verbosity_level} -s="${simulation_id}" -d=2 -RealEncryption=1 - -Execute "$connecter_exe" \ - -v=${verbosity_level} -s="${simulation_id}" -d=3 -RealEncryption=1 - -Execute "$connectable_exe" \ - -v=${verbosity_level} -s="${simulation_id}" -d=4 -RealEncryption=1 - -Execute ./bs_2G4_phy_v1 -v=${verbosity_level} -s="${simulation_id}" \ - -D=5 -sim_length=60e6 $@ - -wait_for_background_jobs