Merge branch 'feature/add_esp_http_client_host_test' into 'master'

fix esp_http_client_example to build for Linux target.

See merge request espressif/esp-idf!22339
This commit is contained in:
Jiang Jiang Jian
2023-02-28 19:48:24 +08:00
15 changed files with 67 additions and 32 deletions

View File

@@ -102,7 +102,7 @@ menu "mbedTLS"
default n default n
select MBEDTLS_ASYMMETRIC_CONTENT_LEN select MBEDTLS_ASYMMETRIC_CONTENT_LEN
# Dynamic buffer feature is not supported with DTLS # Dynamic buffer feature is not supported with DTLS
depends on !MBEDTLS_SSL_PROTO_DTLS && !MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH depends on !IDF_TARGET_LINUX && !MBEDTLS_SSL_PROTO_DTLS && !MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
help help
Using dynamic TX/RX buffer. After enabling this option, mbedTLS will Using dynamic TX/RX buffer. After enabling this option, mbedTLS will
allocate TX buffer when need to send data and then free it if all data allocate TX buffer when need to send data and then free it if all data

View File

@@ -4,7 +4,7 @@ if(${target} STREQUAL "linux")
# Header only library for linux # Header only library for linux
idf_component_register(INCLUDE_DIRS include idf_component_register(INCLUDE_DIRS include
PRIV_REQUIRES tapif_io) SRCS protocol_examples_utils.c)
return() return()
endif() endif()

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Unlicense OR CC0-1.0 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Unlicense OR CC0-1.0 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */

View File

@@ -11,15 +11,18 @@
#include "sdkconfig.h" #include "sdkconfig.h"
#include "esp_err.h" #include "esp_err.h"
#if !CONFIG_IDF_TARGET_LINUX
#include "esp_netif.h" #include "esp_netif.h"
#if CONFIG_EXAMPLE_CONNECT_ETHERNET #if CONFIG_EXAMPLE_CONNECT_ETHERNET
#include "esp_eth.h" #include "esp_eth.h"
#endif #endif
#endif // !CONFIG_IDF_TARGET_LINUX
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#if !CONFIG_IDF_TARGET_LINUX
#if CONFIG_EXAMPLE_CONNECT_WIFI #if CONFIG_EXAMPLE_CONNECT_WIFI
#define EXAMPLE_NETIF_DESC_STA "example_netif_sta" #define EXAMPLE_NETIF_DESC_STA "example_netif_sta"
#endif #endif
@@ -96,6 +99,10 @@ void example_register_wifi_connect_commands(void);
esp_eth_handle_t get_example_eth_handle(void); esp_eth_handle_t get_example_eth_handle(void);
#endif // CONFIG_EXAMPLE_CONNECT_ETHERNET #endif // CONFIG_EXAMPLE_CONNECT_ETHERNET
#else
static inline esp_err_t example_connect(void) {return ESP_OK;}
#endif // !CONFIG_IDF_TARGET_LINUX
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -12,10 +12,12 @@ examples/protocols/coap_server:
- if: IDF_TARGET in ["esp32h2"] - if: IDF_TARGET in ["esp32h2"]
examples/protocols/esp_http_client: examples/protocols/esp_http_client:
enable:
- if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "linux"
disable: disable:
- if: IDF_TARGET in ["esp32h2"] - if: IDF_TARGET in ["esp32h2"]
disable_test: disable_test:
- if: IDF_TARGET != "esp32" - if: IDF_TARGET not in ["esp32", "linux"]
temporary: true temporary: true
reason: only test on esp32 reason: only test on esp32

View File

@@ -2,12 +2,12 @@
# CMakeLists in this exact order for cmake to work correctly # CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
if(${IDF_TARGET} STREQUAL "linux") if(${IDF_TARGET} STREQUAL "linux")
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/" list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/"
"$ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs") "$ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs")
set(COMPONENTS main) set(COMPONENTS main)
else()
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
endif() endif()
include($ENV{IDF_PATH}/tools/cmake/project.cmake) include($ENV{IDF_PATH}/tools/cmake/project.cmake)

View File

@@ -1,6 +1,5 @@
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-S2 | ESP32-S3 | | Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-S2 | ESP32-S3 | Linux |
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | ----- |
# ESP HTTP Client Example # ESP HTTP Client Example
See the README.md file in the upper level 'examples' directory for more information about examples. See the README.md file in the upper level 'examples' directory for more information about examples.

View File

@@ -3,7 +3,7 @@
# (If this was a component, we would set COMPONENT_EMBED_TXTFILES here.) # (If this was a component, we would set COMPONENT_EMBED_TXTFILES here.)
set(requires "") set(requires "")
if(${IDF_TARGET} STREQUAL "linux") if(${IDF_TARGET} STREQUAL "linux")
list(APPEND requires esp_stubs esp-tls esp_http_client) list(APPEND requires esp_stubs esp-tls esp_http_client protocol_examples_common)
endif() endif()
idf_component_register(SRCS "esp_http_client_example.c" idf_component_register(SRCS "esp_http_client_example.c"
INCLUDE_DIRS "." INCLUDE_DIRS "."

View File

@@ -98,3 +98,44 @@ def test_examples_protocol_esp_http_client_dynamic_buffer(dut: Dut) -> None:
dut.expect(r'HTTP Status = 206, content_length = 10') dut.expect(r'HTTP Status = 206, content_length = 10')
dut.expect(r'HTTP Status = 206, content_length = 10') dut.expect(r'HTTP Status = 206, content_length = 10')
dut.expect('Finish http example') dut.expect('Finish http example')
@pytest.mark.linux
@pytest.mark.host_test
@pytest.mark.parametrize('config', [
'default', 'ssldyn',
], indirect=True)
def test_examples_protocol_esp_http_client_linux(dut: Dut) -> None:
# start test
dut.expect('Connected to AP, begin http example', timeout=120)
dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
dut.expect(r'HTTP Basic Auth Status = 200, content_length = (\d)')
dut.expect(r'HTTP Basic Auth redirect Status = 200, content_length = (\d)')
dut.expect(r'HTTP Relative path redirect Status = 200, content_length = (\d)')
dut.expect(r'HTTP Absolute path redirect Status = 200, content_length = (\d)')
dut.expect(r'HTTP Absolute path redirect \(manual\) Status = 200, content_length = (\d)')
dut.expect(r'HTTPS Status = 200, content_length = (\d)')
dut.expect(r'HTTPS Status = 200, content_length = (\d)')
dut.expect(r'HTTP redirect to HTTPS Status = 200, content_length = (\d)')
dut.expect(r'HTTP chunk encoding Status = 200, content_length = (-?\d)')
# content-len for chunked encoding is typically -1, could be a positive length in some cases
dut.expect(r'HTTP Stream reader Status = 200, content_length = (\d)')
dut.expect(r'HTTPS Status = 200, content_length = (\d)')
dut.expect(r'Last esp error code: 0x8001')
dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
dut.expect(r'HTTP Status = 206, content_length = (\d)')
dut.expect(r'HTTP Status = 206, content_length = 10')
dut.expect(r'HTTP Status = 206, content_length = 10')
dut.expect('Finish http example')

View File

@@ -19,11 +19,6 @@ esp_err_t esp_netif_init(void)
return ESP_OK; return ESP_OK;
} }
esp_err_t example_connect(void)
{
return ESP_OK;
}
esp_err_t nvs_flash_init(void) esp_err_t nvs_flash_init(void)
{ {
return ESP_OK; return ESP_OK;
@@ -34,7 +29,7 @@ esp_err_t nvs_flash_erase(void)
return ESP_OK; return ESP_OK;
} }
int main() int main(void)
{ {
app_main(); app_main();

View File

@@ -1,8 +0,0 @@
/*
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#include "esp_err.h"
esp_err_t example_connect(void);

View File

@@ -1,15 +1,14 @@
# The following lines of boilerplate have to be in your project's # The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly # CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
if("${IDF_TARGET}" STREQUAL "linux") if("${IDF_TARGET}" STREQUAL "linux")
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/" list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/"
"$ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs") "$ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs")
set(COMPONENTS main) set(COMPONENTS main)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
else()
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
endif() endif()
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(tcp_client) project(tcp_client)

View File

@@ -1,5 +1,5 @@
if(${IDF_TARGET} STREQUAL "linux") if(${IDF_TARGET} STREQUAL "linux")
set(requires esp_stubs) set(requires esp_stubs protocol_examples_common)
endif() endif()
if("${CONFIG_EXAMPLE_IPV4}" STREQUAL y) if("${CONFIG_EXAMPLE_IPV4}" STREQUAL y)