summaryrefslogtreecommitdiff
path: root/lib/bt/test_apps
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2025-07-25 13:33:07 +1000
committerjacqueline <me@jacqueline.id.au>2025-07-25 13:33:07 +1000
commitc8e79a926620e48830778714cfe4b2ea2453fcaf (patch)
tree8c756e08e01b8e147cf72bec128026f46bd854c5 /lib/bt/test_apps
parent237136f3e93cb6b5be24670d7520adb17cc0fa36 (diff)
downloadtangara-fw-c8e79a926620e48830778714cfe4b2ea2453fcaf.tar.gz
Update forked idf components
Diffstat (limited to 'lib/bt/test_apps')
-rw-r--r--lib/bt/test_apps/CMakeLists.txt9
-rw-r--r--lib/bt/test_apps/README.md21
-rw-r--r--lib/bt/test_apps/basic_unit_test/pytest_basic_unit_test.py6
-rw-r--r--lib/bt/test_apps/main/CMakeLists.txt6
-rw-r--r--lib/bt/test_apps/main/test_bt_common.c24
-rw-r--r--lib/bt/test_apps/main/test_bt_main.c48
-rw-r--r--lib/bt/test_apps/main/test_smp.c126
-rw-r--r--lib/bt/test_apps/memory_release/main/test_app_main.c5
-rw-r--r--lib/bt/test_apps/memory_release/pytest_memory_release.py20
-rw-r--r--lib/bt/test_apps/memory_release/sdkconfig.defaults2
-rw-r--r--lib/bt/test_apps/pytest_bt.py12
-rw-r--r--lib/bt/test_apps/sdkconfig.defaults3
12 files changed, 22 insertions, 260 deletions
diff --git a/lib/bt/test_apps/CMakeLists.txt b/lib/bt/test_apps/CMakeLists.txt
deleted file mode 100644
index ab61d4b6..00000000
--- a/lib/bt/test_apps/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cmake_minimum_required(VERSION 3.16)
-
-include($ENV{IDF_PATH}/tools/cmake/project.cmake)
-set(COMPONENTS main)
-list(PREPEND SDKCONFIG_DEFAULTS
- "$ENV{IDF_PATH}/tools/test_apps/configs/sdkconfig.debug_helpers"
- "sdkconfig.defaults")
-
-project(bt_test)
diff --git a/lib/bt/test_apps/README.md b/lib/bt/test_apps/README.md
deleted file mode 100644
index fc828476..00000000
--- a/lib/bt/test_apps/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-| Supported Targets | ESP32 | ESP32-C3 |
-| ----------------- | ----- | -------- |
-
-# `bt` component unit tests
-
-When adding new test cases, check if the `depends_components` list in `.build-test-rules.yml` needs to be updated to include additional components. The test app will only be built and tested when these components are modified.
-
-To build and run this test app, using esp32c3 target for example:
-
-```bash
-idf.py set-target esp32c3
-idf.py build flash monitor
-```
-
-To run tests using pytest:
-
-```bash
-idf.py set-target esp32c3
-idf.py build
-pytest --target=esp32c3
-```
diff --git a/lib/bt/test_apps/basic_unit_test/pytest_basic_unit_test.py b/lib/bt/test_apps/basic_unit_test/pytest_basic_unit_test.py
index de3d235b..98e7cd8a 100644
--- a/lib/bt/test_apps/basic_unit_test/pytest_basic_unit_test.py
+++ b/lib/bt/test_apps/basic_unit_test/pytest_basic_unit_test.py
@@ -1,11 +1,11 @@
-# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
+# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import pytest
from pytest_embedded import Dut
+from pytest_embedded_idf.utils import idf_parametrize
@pytest.mark.generic
-@pytest.mark.esp32
-@pytest.mark.esp32c3
+@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
def test_bt(dut: Dut) -> None:
dut.run_all_single_board_cases()
diff --git a/lib/bt/test_apps/main/CMakeLists.txt b/lib/bt/test_apps/main/CMakeLists.txt
deleted file mode 100644
index 6aecb24e..00000000
--- a/lib/bt/test_apps/main/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-idf_component_register(SRCS "test_bt_main.c"
- "test_bt_common.c"
- "test_smp.c"
- INCLUDE_DIRS "."
- PRIV_REQUIRES unity bt
- WHOLE_ARCHIVE)
diff --git a/lib/bt/test_apps/main/test_bt_common.c b/lib/bt/test_apps/main/test_bt_common.c
deleted file mode 100644
index 402633d0..00000000
--- a/lib/bt/test_apps/main/test_bt_common.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Unlicense OR CC0-1.0
- */
-
-/*
- Tests for the BT common things implementation
-*/
-
-#include <stdbool.h>
-
-#include "unity.h"
-#include "sdkconfig.h"
-
-// btdm_controller_compile_version_check defined only for ESP32
-#ifdef CONFIG_IDF_TARGET_ESP32
-extern bool btdm_controller_compile_version_check(void);
-
-TEST_CASE("bt_controller_git_commit_check", "[bt_common]")
-{
- TEST_ASSERT(btdm_controller_compile_version_check() == true);
-}
-#endif
diff --git a/lib/bt/test_apps/main/test_bt_main.c b/lib/bt/test_apps/main/test_bt_main.c
deleted file mode 100644
index 53a93c95..00000000
--- a/lib/bt/test_apps/main/test_bt_main.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include "unity.h"
-#include "unity_test_runner.h"
-#include "esp_heap_caps.h"
-
-#define TEST_MEMORY_LEAK_THRESHOLD_DEFAULT 0
-static int leak_threshold = TEST_MEMORY_LEAK_THRESHOLD_DEFAULT;
-void set_leak_threshold(int threshold)
-{
- leak_threshold = threshold;
-}
-
-static size_t before_free_8bit;
-static size_t before_free_32bit;
-
-static void check_leak(size_t before_free, size_t after_free, const char *type)
-{
- ssize_t delta = after_free - before_free;
- printf("MALLOC_CAP_%s: Before %u bytes free, After %u bytes free (delta %d)\n", type, before_free, after_free, delta);
- TEST_ASSERT_MESSAGE(delta >= leak_threshold, "memory leak");
-}
-
-void setUp(void)
-{
- before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
- before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
-}
-
-void tearDown(void)
-{
- size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
- size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
- check_leak(before_free_8bit, after_free_8bit, "8BIT");
- check_leak(before_free_32bit, after_free_32bit, "32BIT");
-
- leak_threshold = TEST_MEMORY_LEAK_THRESHOLD_DEFAULT;
-}
-
-void app_main(void)
-{
- printf("Running bt component tests\n");
- unity_run_menu();
-}
diff --git a/lib/bt/test_apps/main/test_smp.c b/lib/bt/test_apps/main/test_smp.c
deleted file mode 100644
index ea89ec26..00000000
--- a/lib/bt/test_apps/main/test_smp.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Unlicense OR CC0-1.0
- */
-
-/*
- * Tests for the BLE SMP implementation
- */
-
-#include <string.h>
-
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "unity.h"
-#include "esp_random.h"
-
-#include "esp_bt_main.h"
-#include "esp_bt_device.h"
-#include "esp_gap_ble_api.h"
-
-#define KEY_LENGTH_DWORDS_P256 8
-
-typedef unsigned long DWORD;
-typedef uint32_t UINT32;
-
-typedef struct {
- DWORD x[KEY_LENGTH_DWORDS_P256];
- DWORD y[KEY_LENGTH_DWORDS_P256];
- DWORD z[KEY_LENGTH_DWORDS_P256];
-} Point;
-
-typedef struct {
- // curve's coefficients
- DWORD a[KEY_LENGTH_DWORDS_P256];
- DWORD b[KEY_LENGTH_DWORDS_P256];
-
- //whether a is -3
- int a_minus3;
-
- // prime modulus
- DWORD p[KEY_LENGTH_DWORDS_P256];
-
- // Omega, p = 2^m -omega
- DWORD omega[KEY_LENGTH_DWORDS_P256];
-
- // base point, a point on E of order r
- Point G;
-
-} elliptic_curve_t;
-
-extern void ECC_PointMult_Bin_NAF(Point *q, Point *p, DWORD *n, uint32_t keyLength);
-extern bool ECC_CheckPointIsInElliCur_P256(Point *p);
-extern void p_256_init_curve(UINT32 keyLength);
-extern elliptic_curve_t curve_p256;
-
-static void bt_rand(void *buf, size_t len)
-{
- if (!len) {
- return;
- }
- // Reset the buf value to the fixed value.
- memset(buf, 0x55, len);
-
- for (int i = 0; i < (int)(len / sizeof(uint32_t)); i++) {
- uint32_t rand = esp_random();
- memcpy(buf + i * sizeof(uint32_t), &rand, sizeof(uint32_t));
- }
-
- return;
-}
-
-TEST_CASE("ble_smp_public_key_check", "[ble_smp]")
-{
- /* We wait init finish 200ms here */
- vTaskDelay(200 / portTICK_PERIOD_MS);
- Point public_key;
- DWORD private_key[KEY_LENGTH_DWORDS_P256] = {[0 ... (KEY_LENGTH_DWORDS_P256 - 1)] = 0x12345678};
- p_256_init_curve(KEY_LENGTH_DWORDS_P256);
- ECC_PointMult_Bin_NAF(&public_key, &(curve_p256.G), private_key, KEY_LENGTH_DWORDS_P256);
- /* Check Is the public key generated by the system on the given elliptic curve */
- TEST_ASSERT(ECC_CheckPointIsInElliCur_P256(&public_key));
- /* We simulate the attacker and set the y coordinate of the public key to 0. */
- for (int i = 0; i < KEY_LENGTH_DWORDS_P256; i++) {
- public_key.y[i] = 0x0;
- }
- /* At this point the public key should not be on the given elliptic curve. */
- TEST_ASSERT(!ECC_CheckPointIsInElliCur_P256(&public_key));
- /* Test whether the G point on the protocol is on a given elliptic curve */
- TEST_ASSERT(ECC_CheckPointIsInElliCur_P256(&(curve_p256.G)));
- /* test 100 times when the private key is generated by the random number. */
- for (int j = 0; j < 100; j++) {
- bt_rand(private_key, sizeof(DWORD)*KEY_LENGTH_DWORDS_P256);
- ECC_PointMult_Bin_NAF(&public_key, &(curve_p256.G), private_key, KEY_LENGTH_DWORDS_P256);
- /* Check Is the public key generated by the system on the given elliptic curve */
- TEST_ASSERT(ECC_CheckPointIsInElliCur_P256(&public_key));
- }
-}
-
-TEST_CASE("ble_smp_set_clear_static_passkey", "[ble_smp]")
-{
- /* We wait init finish 200ms here */
- vTaskDelay(200 / portTICK_PERIOD_MS);
- esp_ble_auth_req_t auth_req = ESP_LE_AUTH_BOND;
- uint32_t passkey = 123456;
- /* test len = 0 when type != ESP_BLE_SM_CLEAR_STATIC_PASSKEY */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, 0) == ESP_ERR_INVALID_ARG);
- /* test function */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(esp_ble_auth_req_t)) != ESP_ERR_INVALID_ARG);
- /* test type >= ESP_BLE_SM_MAX_PARAM */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_PARAM, &passkey, sizeof(uint32_t)) == ESP_ERR_INVALID_ARG);
- /* test len < sizeof(uint32_t) when type is ESP_BLE_SM_SET_STATIC_PASSKEY */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint8_t)) != ESP_ERR_INVALID_ARG);
- /* test value is NULL when type != ESP_BLE_SM_CLEAR_STATIC_PASSKEY */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, NULL, sizeof(uint8_t)) == ESP_ERR_INVALID_ARG);
- /* test value is NULL and len is 0 when type != ESP_BLE_SM_CLEAR_STATIC_PASSKEY */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, NULL, 0) == ESP_ERR_INVALID_ARG);
- /* test function */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t)) != ESP_ERR_INVALID_ARG);
- /* test function */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_CLEAR_STATIC_PASSKEY, &passkey, sizeof(uint32_t)) != ESP_ERR_INVALID_ARG);
- /* test function */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_CLEAR_STATIC_PASSKEY, NULL, sizeof(uint32_t)) != ESP_ERR_INVALID_ARG);
- /* test function */
- TEST_ASSERT(esp_ble_gap_set_security_param(ESP_BLE_SM_CLEAR_STATIC_PASSKEY, NULL, 0) != ESP_ERR_INVALID_ARG);
-}
diff --git a/lib/bt/test_apps/memory_release/main/test_app_main.c b/lib/bt/test_apps/memory_release/main/test_app_main.c
index 562d1d97..909a730d 100644
--- a/lib/bt/test_apps/memory_release/main/test_app_main.c
+++ b/lib/bt/test_apps/memory_release/main/test_app_main.c
@@ -11,6 +11,7 @@
#include "nvs_flash.h"
#include "multi_heap.h"
+#include "esp_heap_caps.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
@@ -127,5 +128,7 @@ void app_main(void)
}
ESP_LOGI(tag, "Free heap size increased by %"PRIu32" bytes", free_after - free_before);
- ESP_LOGI(tag, "SUCCESS");
+ if (heap_caps_check_integrity_all(true)) {
+ ESP_LOGI(tag, "Comprehensive heap check: SUCCESS");
+ }
}
diff --git a/lib/bt/test_apps/memory_release/pytest_memory_release.py b/lib/bt/test_apps/memory_release/pytest_memory_release.py
index dbefc908..d5d70fcd 100644
--- a/lib/bt/test_apps/memory_release/pytest_memory_release.py
+++ b/lib/bt/test_apps/memory_release/pytest_memory_release.py
@@ -1,15 +1,21 @@
-# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
+# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import pytest
from pytest_embedded import Dut
+from pytest_embedded_idf.utils import idf_parametrize
-@pytest.mark.parametrize('config', [
- pytest.param('default', marks=[pytest.mark.esp32, pytest.mark.esp32c2, pytest.mark.generic]),
- pytest.param('iram', marks=[pytest.mark.esp32c2, pytest.mark.generic]),
- pytest.param('psram', marks=[pytest.mark.esp32, pytest.mark.psram]),
-], indirect=True)
+@idf_parametrize(
+ 'config,target,markers',
+ [
+ ('default', 'esp32', (pytest.mark.generic,)),
+ ('default', 'esp32c2', (pytest.mark.generic,)),
+ ('iram', 'esp32c2', (pytest.mark.generic,)),
+ ('psram', 'esp32', (pytest.mark.psram,)),
+ ],
+ indirect=['config', 'target'],
+)
def test_bt_memory_release(dut: Dut) -> None:
dut.expect_exact('BLE Host Task Started', timeout=6)
dut.expect_exact('BLE Host Task Stopped', timeout=8)
- dut.expect_exact('SUCCESS', timeout=10)
+ dut.expect_exact('Comprehensive heap check: SUCCESS', timeout=10)
diff --git a/lib/bt/test_apps/memory_release/sdkconfig.defaults b/lib/bt/test_apps/memory_release/sdkconfig.defaults
index a22d8109..fc2b04c1 100644
--- a/lib/bt/test_apps/memory_release/sdkconfig.defaults
+++ b/lib/bt/test_apps/memory_release/sdkconfig.defaults
@@ -1,2 +1,4 @@
+CONFIG_HEAP_POISONING_COMPREHENSIVE=y
+
CONFIG_BT_ENABLED=y
CONFIG_BT_NIMBLE_ENABLED=y
diff --git a/lib/bt/test_apps/pytest_bt.py b/lib/bt/test_apps/pytest_bt.py
deleted file mode 100644
index 74b0a76a..00000000
--- a/lib/bt/test_apps/pytest_bt.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
-# SPDX-License-Identifier: CC0-1.0
-
-import pytest
-from pytest_embedded import Dut
-
-
-@pytest.mark.generic
-@pytest.mark.esp32
-@pytest.mark.esp32c3
-def test_bt(dut: Dut) -> None:
- dut.run_all_single_board_cases()
diff --git a/lib/bt/test_apps/sdkconfig.defaults b/lib/bt/test_apps/sdkconfig.defaults
deleted file mode 100644
index 5847dd3c..00000000
--- a/lib/bt/test_apps/sdkconfig.defaults
+++ /dev/null
@@ -1,3 +0,0 @@
-CONFIG_BT_ENABLED=y
-CONFIG_UNITY_FREERTOS_STACK_SIZE=12288
-CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n