test_mqtt_client.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #define CATCH_CONFIG_MAIN // This tells the catch header to generate a main
  2. #include "catch.hpp"
  3. #include "mqtt_client.h"
  4. extern "C" {
  5. #include "Mockesp_event.h"
  6. #include "Mockesp_log.h"
  7. #include "Mockesp_system.h"
  8. #include "Mockesp_mac.h"
  9. #include "Mockesp_transport.h"
  10. #include "Mockesp_transport_ssl.h"
  11. #include "Mockesp_transport_tcp.h"
  12. #include "Mockesp_transport_ws.h"
  13. #include "Mockevent_groups.h"
  14. #include "Mockhttp_parser.h"
  15. #include "Mockqueue.h"
  16. #include "Mocktask.h"
  17. /*
  18. * The following functions are not directly called but the generation of them
  19. * from cmock is broken, so we need to define them here.
  20. */
  21. BaseType_t xQueueTakeMutexRecursive(QueueHandle_t xMutex,
  22. TickType_t xTicksToWait)
  23. {
  24. return 0;
  25. }
  26. BaseType_t xQueueGiveMutexRecursive(QueueHandle_t xMutex)
  27. {
  28. return 0;
  29. }
  30. }
  31. struct ClientInitializedFixture {
  32. esp_mqtt_client_handle_t client;
  33. ClientInitializedFixture()
  34. {
  35. TEST_PROTECT();
  36. int mtx;
  37. int transport_list;
  38. int transport;
  39. int event_group;
  40. uint8_t mac[] = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55};
  41. esp_log_write_Ignore();
  42. xQueueCreateMutex_ExpectAnyArgsAndReturn(
  43. reinterpret_cast<QueueHandle_t>(&mtx));
  44. xEventGroupCreate_IgnoreAndReturn(reinterpret_cast<EventGroupHandle_t>(&event_group));
  45. esp_log_timestamp_IgnoreAndReturn(0);
  46. esp_transport_list_init_IgnoreAndReturn(reinterpret_cast<esp_transport_list_handle_t>(&transport_list));
  47. esp_transport_tcp_init_IgnoreAndReturn(reinterpret_cast<esp_transport_handle_t>(&transport));
  48. esp_transport_ssl_init_IgnoreAndReturn(reinterpret_cast<esp_transport_handle_t>(&transport));
  49. esp_transport_ws_init_IgnoreAndReturn(reinterpret_cast<esp_transport_handle_t>(&transport));
  50. esp_transport_ws_set_subprotocol_IgnoreAndReturn(ESP_OK);
  51. esp_transport_list_add_IgnoreAndReturn(ESP_OK);
  52. esp_transport_set_default_port_IgnoreAndReturn(ESP_OK);
  53. http_parser_parse_url_IgnoreAndReturn(0);
  54. http_parser_url_init_ExpectAnyArgs();
  55. esp_event_loop_create_IgnoreAndReturn(ESP_OK);
  56. esp_read_mac_IgnoreAndReturn(ESP_OK);
  57. esp_read_mac_ReturnThruPtr_mac(mac);
  58. esp_transport_list_destroy_IgnoreAndReturn(ESP_OK);
  59. vEventGroupDelete_Ignore();
  60. vQueueDelete_Ignore();
  61. esp_mqtt_client_config_t config{};
  62. client = esp_mqtt_client_init(&config);
  63. }
  64. ~ClientInitializedFixture()
  65. {
  66. esp_mqtt_client_destroy(client);
  67. }
  68. };
  69. TEST_CASE_METHOD(ClientInitializedFixture, "Client set uri")
  70. {
  71. struct http_parser_url ret_uri;
  72. SECTION("User set a correct URI") {
  73. http_parser_parse_url_StopIgnore();
  74. http_parser_parse_url_ExpectAnyArgsAndReturn(0);
  75. http_parser_parse_url_ReturnThruPtr_u(&ret_uri);
  76. auto res = esp_mqtt_client_set_uri(client, " ");
  77. REQUIRE(res == ESP_OK);
  78. }
  79. SECTION("Incorrect URI from user") {
  80. http_parser_parse_url_StopIgnore();
  81. http_parser_parse_url_ExpectAnyArgsAndReturn(1);
  82. http_parser_parse_url_ReturnThruPtr_u(&ret_uri);
  83. auto res = esp_mqtt_client_set_uri(client, " ");
  84. REQUIRE(res == ESP_FAIL);
  85. }
  86. }
  87. TEST_CASE_METHOD(ClientInitializedFixture, "Client Start")
  88. {
  89. SECTION("Successful start") {
  90. xTaskCreatePinnedToCore_ExpectAnyArgsAndReturn(pdTRUE);
  91. auto res = esp_mqtt_client_start(client);
  92. REQUIRE(res == ESP_OK);
  93. }
  94. SECTION("Failed on initialization") {
  95. xTaskCreatePinnedToCore_ExpectAnyArgsAndReturn(pdFALSE);
  96. auto res = esp_mqtt_client_start(nullptr);
  97. REQUIRE(res == ESP_ERR_INVALID_ARG);
  98. }
  99. SECTION("Client already started") {}
  100. SECTION("Failed to start task") {
  101. xTaskCreatePinnedToCore_ExpectAnyArgsAndReturn(pdFALSE);
  102. auto res = esp_mqtt_client_start(client);
  103. REQUIRE(res == ESP_FAIL);
  104. }
  105. }