mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
a9fda54d39
This commit updates the visibility of various header files and cleans up some unnecessary inclusions. Also, this commit removes certain header include paths which were maintained for backward compatibility.
108 lines
3.5 KiB
C
108 lines
3.5 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
|
*
|
|
* This test code is in the Public Domain (or CC0 licensed, at your option.)
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, this
|
|
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
* CONDITIONS OF ANY KIND, either express or implied.
|
|
*/
|
|
|
|
#include <sys/time.h>
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/event_groups.h"
|
|
#include "unity.h"
|
|
#include "test_utils.h"
|
|
#include "memory_checks.h"
|
|
#include "mqtt_client.h"
|
|
#include "nvs_flash.h"
|
|
#include "esp_ota_ops.h"
|
|
#include "sdkconfig.h"
|
|
#include "test_mqtt_client_broker.h"
|
|
#include "test_mqtt_connection.h"
|
|
#include "esp_mac.h"
|
|
|
|
static void test_leak_setup(const char * file, long line)
|
|
{
|
|
uint8_t mac[6];
|
|
struct timeval te;
|
|
gettimeofday(&te, NULL); // get current time
|
|
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
|
printf("%s:%ld: time=%ld.%lds, mac:" MACSTR "\n", file, line, te.tv_sec, te.tv_usec, MAC2STR(mac));
|
|
test_utils_record_free_mem();
|
|
}
|
|
|
|
TEST_CASE("mqtt init with invalid url", "[mqtt][leaks=0]")
|
|
{
|
|
test_leak_setup(__FILE__, __LINE__);
|
|
const esp_mqtt_client_config_t mqtt_cfg = {
|
|
.uri = "INVALID",
|
|
};
|
|
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
|
|
TEST_ASSERT_EQUAL(NULL, client );
|
|
}
|
|
|
|
TEST_CASE("mqtt init and deinit", "[mqtt][leaks=0]")
|
|
{
|
|
test_leak_setup(__FILE__, __LINE__);
|
|
const esp_mqtt_client_config_t mqtt_cfg = {
|
|
// no connection takes place, but the uri has to be valid for init() to succeed
|
|
.uri = "mqtts://localhost:8883",
|
|
};
|
|
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
|
|
TEST_ASSERT_NOT_EQUAL(NULL, client );
|
|
esp_mqtt_client_destroy(client);
|
|
}
|
|
|
|
static const char* this_bin_addr(void)
|
|
{
|
|
spi_flash_mmap_handle_t out_handle;
|
|
const void *binary_address;
|
|
const esp_partition_t* partition = esp_ota_get_running_partition();
|
|
esp_partition_mmap(partition, 0, partition->size, SPI_FLASH_MMAP_DATA, &binary_address, &out_handle);
|
|
return binary_address;
|
|
}
|
|
|
|
TEST_CASE("mqtt enqueue and destroy outbox", "[mqtt][leaks=0]")
|
|
{
|
|
const char * bin_addr = this_bin_addr();
|
|
test_leak_setup(__FILE__, __LINE__);
|
|
const int messages = 20;
|
|
const int size = 2000;
|
|
const esp_mqtt_client_config_t mqtt_cfg = {
|
|
// no connection takes place, but the uri has to be valid for init() to succeed
|
|
.uri = "mqtts://localhost:8883",
|
|
};
|
|
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
|
|
TEST_ASSERT_NOT_EQUAL(NULL, client );
|
|
int bytes_before = esp_get_free_heap_size();
|
|
for (int i=0; i<messages; ++i) {
|
|
esp_mqtt_client_publish(client, "test", bin_addr, size, 1, 0);
|
|
}
|
|
int bytes_after = esp_get_free_heap_size();
|
|
// check that outbox allocated all messages on heap
|
|
TEST_ASSERT_GREATER_OR_EQUAL(messages*size, bytes_before - bytes_after);
|
|
|
|
esp_mqtt_client_destroy(client);
|
|
}
|
|
|
|
#if SOC_EMAC_SUPPORTED
|
|
/**
|
|
* This test cases uses ethernet kit, so build and use it only if EMAC supported
|
|
*/
|
|
TEST_CASE("mqtt broker tests", "[mqtt][test_env=UT_T2_Ethernet]")
|
|
{
|
|
test_case_uses_tcpip();
|
|
connect_test_fixture_setup();
|
|
|
|
RUN_MQTT_BROKER_TEST(mqtt_connect_disconnect);
|
|
RUN_MQTT_BROKER_TEST(mqtt_subscribe_publish);
|
|
RUN_MQTT_BROKER_TEST(mqtt_lwt_clean_disconnect);
|
|
RUN_MQTT_BROKER_TEST(mqtt_subscribe_payload);
|
|
|
|
connect_test_fixture_teardown();
|
|
}
|
|
#endif // SOC_EMAC_SUPPORTED
|