Skip to content

Commit 181a22e

Browse files
mdns: added initial suite of api unit tests
* Original commit: espressif/esp-idf@e680191
1 parent 4172219 commit 181a22e

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

components/mdns/test/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
set(COMPONENT_SRCDIRS ".")
2+
set(COMPONENT_PRIV_REQUIRES unity test_utils mdns)
3+
register_component()

components/mdns/test/component.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#
2+
#Component Makefile
3+
#
4+
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive

components/mdns/test/test_mdns.c

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#include "test_utils.h"
2+
#include "mdns.h"
3+
#include "unity.h"
4+
5+
6+
#define MDNS_HOSTNAME "test-hostname"
7+
#define MDNS_INSTANCE "test-instance"
8+
#define MDNS_SERVICE_NAME "_http"
9+
#define MDNS_SERVICE_PROTO "_tcp"
10+
#define MDNS_SERVICE_PORT 80
11+
12+
13+
static void yield_to_all_priorities(void)
14+
{
15+
// Lower the test-task priority before testing to ensure other tasks got executed on forced context switch
16+
size_t test_task_prio_before = uxTaskPriorityGet(NULL);
17+
vTaskPrioritySet(NULL, tskIDLE_PRIORITY);
18+
taskYIELD(); // Let the RTOS to switch context
19+
vTaskPrioritySet(NULL, test_task_prio_before);
20+
}
21+
22+
23+
TEST_CASE("mdns api to fail in invalid state", "[mdns][leaks=64]")
24+
{
25+
TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_init() );
26+
TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME) );
27+
TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE) );
28+
TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0) );
29+
}
30+
31+
TEST_CASE("mdns init and deinit", "[mdns][leaks=64]")
32+
{
33+
test_case_uses_tcpip();
34+
TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default());
35+
TEST_ASSERT_EQUAL(ESP_OK, mdns_init() );
36+
yield_to_all_priorities(); // Make sure that mdns task has executed to complete initialization
37+
mdns_free();
38+
esp_event_loop_delete_default();
39+
}
40+
41+
TEST_CASE("mdns api return expected err-code and do not leak memory", "[mdns][leaks=64]")
42+
{
43+
mdns_txt_item_t serviceTxtData[CONFIG_MDNS_MAX_SERVICES] = { {NULL, NULL},
44+
};
45+
for (int i=0; i<CONFIG_MDNS_MAX_SERVICES; ++i) {
46+
serviceTxtData[i].key = "Key";
47+
serviceTxtData[i].value = "Value";
48+
}
49+
test_case_uses_tcpip();
50+
TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default());
51+
52+
TEST_ASSERT_EQUAL(ESP_OK, mdns_init() );
53+
TEST_ASSERT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME) );
54+
TEST_ASSERT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE) );
55+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, serviceTxtData, CONFIG_MDNS_MAX_SERVICES) );
56+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, serviceTxtData, CONFIG_MDNS_MAX_SERVICES) );
57+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_item_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, "key1", "value1") );
58+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_item_remove(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, "key1") );
59+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_port_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 8080) );
60+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_remove(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO) );
61+
yield_to_all_priorities(); // Make sure that mdns task has executed to remove the service
62+
63+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0) );
64+
TEST_ASSERT_EQUAL(ESP_OK, mdns_service_remove_all() );
65+
yield_to_all_priorities(); // Make sure that mdns task has executed to remove all services
66+
67+
TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_service_port_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 8080) );
68+
69+
mdns_free();
70+
esp_event_loop_delete_default();
71+
}
72+
73+
TEST_CASE("mdns query api return expected err-code and do not leak memory", "[leaks=64]")
74+
{
75+
mdns_result_t * results = NULL;
76+
ip6_addr_t addr6;
77+
ip4_addr_t addr4;
78+
test_case_uses_tcpip();
79+
TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default());
80+
81+
TEST_ASSERT_EQUAL(ESP_OK, mdns_init() );
82+
TEST_ASSERT_EQUAL(ESP_OK, mdns_query_ptr(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, CONFIG_MDNS_MAX_SERVICES, &results) );
83+
mdns_query_results_free(results);
84+
85+
TEST_ASSERT_EQUAL(ESP_OK, mdns_query_srv(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, &results) );
86+
mdns_query_results_free(results);
87+
88+
TEST_ASSERT_EQUAL(ESP_OK, mdns_query_txt(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, &results) );
89+
mdns_query_results_free(results);
90+
91+
TEST_ASSERT_EQUAL(ESP_ERR_NOT_FOUND, mdns_query_a(MDNS_HOSTNAME, 10, &addr4) );
92+
mdns_query_results_free(results);
93+
94+
TEST_ASSERT_EQUAL(ESP_ERR_NOT_FOUND, mdns_query_aaaa(MDNS_HOSTNAME, 10, &addr6) );
95+
mdns_query_results_free(results);
96+
97+
mdns_free();
98+
esp_event_loop_delete_default();
99+
}

0 commit comments

Comments
 (0)