test_mdns.c 5.4 KB

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