diff --git a/.idf_build_apps.toml b/.idf_build_apps.toml index 82224c306a..6ec7d34fdd 100644 --- a/.idf_build_apps.toml +++ b/.idf_build_apps.toml @@ -11,6 +11,7 @@ manifest_file = [ "dhara/.build-test-rules.yml", "esp_encrypted_img/.build-test-rules.yml", "esp_serial_slave_link/.build-test-rules.yml", + "expat/.build-test-rules.yml", ".build-test-rules.yml", ] check_warnings = true diff --git a/expat/.build-test-rules.yml b/expat/.build-test-rules.yml new file mode 100644 index 0000000000..c07bfc88e1 --- /dev/null +++ b/expat/.build-test-rules.yml @@ -0,0 +1,4 @@ +expat/test_apps: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3"] + reason: "Sufficient to test on one Xtensa and one RISC-V target" diff --git a/expat/test/CMakeLists.txt b/expat/test/CMakeLists.txt deleted file mode 100644 index d60400be37..0000000000 --- a/expat/test/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -idf_component_register(SRC_DIRS "." - PRIV_INCLUDE_DIRS "." - PRIV_REQUIRES cmock expat) diff --git a/expat/test_apps/CMakeLists.txt b/expat/test_apps/CMakeLists.txt new file mode 100644 index 0000000000..4aad97fc63 --- /dev/null +++ b/expat/test_apps/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +set(COMPONENTS main) +project(expat_test) diff --git a/expat/test_apps/main/CMakeLists.txt b/expat/test_apps/main/CMakeLists.txt new file mode 100644 index 0000000000..b5da137e5e --- /dev/null +++ b/expat/test_apps/main/CMakeLists.txt @@ -0,0 +1,4 @@ +idf_component_register(SRCS "test_expat.c" "test_main.c" + PRIV_INCLUDE_DIRS "." + PRIV_REQUIRES unity + WHOLE_ARCHIVE) diff --git a/expat/test_apps/main/idf_component.yml b/expat/test_apps/main/idf_component.yml new file mode 100644 index 0000000000..40a54a77f2 --- /dev/null +++ b/expat/test_apps/main/idf_component.yml @@ -0,0 +1,4 @@ +dependencies: + espressif/expat: + version: "*" + override_path: "../.." diff --git a/expat/test/test_expat.c b/expat/test_apps/main/test_expat.c similarity index 100% rename from expat/test/test_expat.c rename to expat/test_apps/main/test_expat.c diff --git a/expat/test_apps/main/test_main.c b/expat/test_apps/main/test_main.c new file mode 100644 index 0000000000..0ca6dcb31b --- /dev/null +++ b/expat/test_apps/main/test_main.c @@ -0,0 +1,50 @@ +/* + * 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" +#include "esp_newlib.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) +{ + esp_reent_cleanup(); //clean up some of the newlib's lazy allocations + 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 expat component tests\n"); + unity_run_menu(); +} diff --git a/expat/test_apps/pytest_expat.py b/expat/test_apps/pytest_expat.py new file mode 100644 index 0000000000..5ee1436d4b --- /dev/null +++ b/expat/test_apps/pytest_expat.py @@ -0,0 +1,7 @@ +import pytest + + +@pytest.mark.esp32 +@pytest.mark.esp32c3 +def test_expat(dut) -> None: + dut.run_all_single_board_cases() diff --git a/expat/test_apps/sdkconfig.defaults b/expat/test_apps/sdkconfig.defaults new file mode 100644 index 0000000000..ef5e06c6b0 --- /dev/null +++ b/expat/test_apps/sdkconfig.defaults @@ -0,0 +1,4 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Minimal Configuration +# +CONFIG_ESP_TASK_WDT_INIT=n