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
commit b9d40b4943
15 changed files with 67 additions and 32 deletions

View File

@ -102,7 +102,7 @@ menu "mbedTLS"
default n
select MBEDTLS_ASYMMETRIC_CONTENT_LEN
# 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
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

View File

@ -4,7 +4,7 @@ if(${target} STREQUAL "linux")
# Header only library for linux
idf_component_register(INCLUDE_DIRS include
PRIV_REQUIRES tapif_io)
SRCS protocol_examples_utils.c)
return()
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
*/

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
*/

View File

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

View File

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

View File

@ -2,12 +2,12 @@
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
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")
set(COMPONENTS main)
else()
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
endif()
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
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.)
set(requires "")
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()
idf_component_register(SRCS "esp_http_client_example.c"
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('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;
}
esp_err_t example_connect(void)
{
return ESP_OK;
}
esp_err_t nvs_flash_init(void)
{
return ESP_OK;
@ -34,7 +29,7 @@ esp_err_t nvs_flash_erase(void)
return ESP_OK;
}
int main()
int main(void)
{
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
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
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")
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()
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(tcp_client)

View File

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