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