Просмотр исходного кода

feat(bt): migrate the tests from unit-test-app

Ivan Grokhotkov 2 лет назад
Родитель
Сommit
eafa723093

+ 0 - 6
components/bt/test/CMakeLists.txt

@@ -1,6 +0,0 @@
-if(CONFIG_BT_ENABLED OR CMAKE_BUILD_EARLY_EXPANSION)
-    idf_component_register(SRC_DIRS "."
-                        PRIV_INCLUDE_DIRS "."
-                        PRIV_REQUIRES cmock nvs_flash bt esp_ringbuf)
-    target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
-endif()

+ 8 - 0
components/bt/test_apps/.build-test-rules.yml

@@ -0,0 +1,8 @@
+# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps
+
+components/bt/test_apps:
+  disable:
+    - if: IDF_TARGET not in ["esp32", "esp32c3"]
+      reason: Sufficient to run the tests on one chip of each architecture
+  depends_components:
+    - bt

+ 9 - 0
components/bt/test_apps/CMakeLists.txt

@@ -0,0 +1,9 @@
+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)

+ 21 - 0
components/bt/test_apps/README.md

@@ -0,0 +1,21 @@
+| 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
+```

+ 6 - 0
components/bt/test_apps/main/CMakeLists.txt

@@ -0,0 +1,6 @@
+idf_component_register(SRCS "test_bt_main.c"
+                            "test_bt_common.c"
+                            "test_smp.c"
+                       INCLUDE_DIRS "."
+                       PRIV_REQUIRES unity bt
+                       WHOLE_ARCHIVE)

+ 4 - 0
components/bt/test/test_bt_common.c → components/bt/test_apps/main/test_bt_common.c

@@ -11,10 +11,14 @@
 #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

+ 48 - 0
components/bt/test_apps/main/test_bt_main.c

@@ -0,0 +1,48 @@
+/*
+ * 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();
+}

+ 5 - 19
components/bt/test/test_smp.c → components/bt/test_apps/main/test_smp.c

@@ -1,46 +1,32 @@
 /*
- * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
+ * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
  *
  * SPDX-License-Identifier: Unlicense OR CC0-1.0
  */
 
 /*
- Tests for the BLE SMP implementation
-*/
+ * Tests for the BLE SMP implementation
+ */
 
-#include <esp_types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
 #include <string.h>
 
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "freertos/semphr.h"
-#include "freertos/queue.h"
-#include "freertos/xtensa_api.h"
 #include "unity.h"
-#include "esp_heap_caps.h"
-#include "esp_log.h"
-#include "freertos/ringbuf.h"
 #include "esp_random.h"
-#include "nvs_flash.h"
 
 #include "esp_bt.h"
 #include "esp_bt_main.h"
 #include "esp_bt_device.h"
 #include "esp_gap_ble_api.h"
 
-#define TAG "ble_smp_test"
-
 #define KEY_LENGTH_DWORDS_P256 8
 
 typedef unsigned long  DWORD;
 typedef uint32_t UINT32;
 
 typedef struct {
-DWORD x[KEY_LENGTH_DWORDS_P256];
+    DWORD x[KEY_LENGTH_DWORDS_P256];
     DWORD y[KEY_LENGTH_DWORDS_P256];
     DWORD z[KEY_LENGTH_DWORDS_P256];
 } Point;
@@ -79,7 +65,7 @@ static void bt_rand(void *buf, size_t 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));
+        memcpy(buf + i * sizeof(uint32_t), &rand, sizeof(uint32_t));
     }
 
     return;

+ 12 - 0
components/bt/test_apps/pytest_bt.py

@@ -0,0 +1,12 @@
+# 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()

+ 1 - 2
tools/unit-test-app/configs/bt → components/bt/test_apps/sdkconfig.defaults

@@ -1,4 +1,3 @@
-CONFIG_IDF_TARGET="esp32"
-TEST_COMPONENTS=bt
 CONFIG_BT_ENABLED=y
 CONFIG_UNITY_FREERTOS_STACK_SIZE=12288
+CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n