test_http_client.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * SPDX-FileCopyrightText: 2018-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <stdlib.h>
  7. #include <stdbool.h>
  8. #include <esp_system.h>
  9. #include <esp_http_client.h>
  10. #include "unity.h"
  11. #include "test_utils.h"
  12. #define HOST "httpbin.org"
  13. #define USERNAME "user"
  14. #define PASSWORD "challenge"
  15. TEST_CASE("Test in common case: Only URL and hostname are specified.", "[ESP HTTP CLIENT]")
  16. {
  17. esp_http_client_config_t config_incorrect = {0};
  18. test_case_uses_tcpip();
  19. esp_http_client_handle_t client = esp_http_client_init(&config_incorrect);
  20. TEST_ASSERT(client == NULL);
  21. esp_http_client_config_t config_with_url = {
  22. .url = "http://httpbin.org/get",
  23. };
  24. client = esp_http_client_init(&config_with_url);
  25. TEST_ASSERT(client != NULL);
  26. TEST_ASSERT(esp_http_client_cleanup(client) == ESP_OK);
  27. esp_http_client_config_t config_with_hostname_path = {
  28. .host = HOST,
  29. .path = "/get",
  30. };
  31. client = esp_http_client_init(&config_with_hostname_path);
  32. TEST_ASSERT(client != NULL);
  33. TEST_ASSERT(esp_http_client_cleanup(client) == ESP_OK);
  34. }
  35. TEST_CASE("Get username and password after initialization.", "[ESP HTTP CLIENT]")
  36. {
  37. esp_http_client_config_t config_with_auth = {
  38. .host = HOST,
  39. .path = "/",
  40. .username = USERNAME,
  41. .password = PASSWORD
  42. };
  43. char *value = NULL;
  44. esp_http_client_handle_t client = esp_http_client_init(&config_with_auth);
  45. TEST_ASSERT_NOT_NULL(client);
  46. // Test with username
  47. esp_err_t r = esp_http_client_get_username(client, &value);
  48. TEST_ASSERT_EQUAL(ESP_OK, r);
  49. TEST_ASSERT_NOT_NULL(value);
  50. TEST_ASSERT_EQUAL_STRING(USERNAME, value);
  51. // Test with password
  52. value = NULL;
  53. r = esp_http_client_get_password(client, &value);
  54. TEST_ASSERT_EQUAL(ESP_OK, r);
  55. TEST_ASSERT_NOT_NULL(value);
  56. TEST_ASSERT_EQUAL_STRING(PASSWORD, value);
  57. esp_http_client_cleanup(client);
  58. }
  59. /**
  60. * Test case to test that, the esp_http_client_set_url won't drop username and password
  61. * when pass a path "/abc" for url.
  62. **/
  63. TEST_CASE("Username is unmodified when we change to new path", "[ESP HTTP CLIENT]")
  64. {
  65. esp_http_client_config_t config_with_auth = {
  66. .host = HOST,
  67. .path = "/",
  68. .username = USERNAME,
  69. .password = PASSWORD
  70. };
  71. char *value = NULL;
  72. esp_http_client_handle_t client = esp_http_client_init(&config_with_auth);
  73. TEST_ASSERT_NOT_NULL(client);
  74. esp_err_t r = esp_http_client_get_username(client, &value);
  75. TEST_ASSERT_EQUAL(ESP_OK, r);
  76. TEST_ASSERT_NOT_NULL(value);
  77. TEST_ASSERT_EQUAL_STRING(USERNAME, value);
  78. esp_http_client_set_url(client, "/something-else/");
  79. r = esp_http_client_get_username(client, &value);
  80. TEST_ASSERT_EQUAL(ESP_OK, r);
  81. TEST_ASSERT_NOT_NULL(value);
  82. TEST_ASSERT_EQUAL_STRING(USERNAME, value);
  83. esp_http_client_cleanup(client);
  84. }
  85. /**
  86. * Test case to test that, the esp_http_client_set_url do not reset the auth credentials
  87. * Explicit APIs esp_http_client_set_username and esp_http_client_set_password are used to change
  88. * the auth credentials
  89. **/
  90. TEST_CASE("Username and password will not reset if new absolute URL doesnot specify auth credentials.", "[ESP HTTP CLIENT]")
  91. {
  92. esp_http_client_config_t config_with_auth = {
  93. .host = HOST,
  94. .path = "/",
  95. .username = USERNAME,
  96. .password = PASSWORD
  97. };
  98. char *value = NULL;
  99. esp_http_client_handle_t client = esp_http_client_init(&config_with_auth);
  100. TEST_ASSERT_NOT_NULL(client);
  101. esp_err_t r = esp_http_client_get_username(client, &value);
  102. TEST_ASSERT_EQUAL(ESP_OK, r);
  103. TEST_ASSERT_NOT_NULL(value);
  104. TEST_ASSERT_EQUAL_STRING(USERNAME, value);
  105. esp_http_client_set_url(client, "http://" HOST "/get");
  106. esp_http_client_set_username(client, value);
  107. // esp_http_client_set_username sets new username and thus invalidates the original one
  108. // which we still reference in the local variable `value` (better forget it)
  109. value = NULL;
  110. esp_http_client_set_password(client, USERNAME);
  111. //checks if username is set or not
  112. r = esp_http_client_get_username(client, &value);
  113. TEST_ASSERT_EQUAL(ESP_OK, r);
  114. //If username is set then value should not be NULL
  115. TEST_ASSERT_NOT_NULL(value);
  116. //checks if password is set or not
  117. r = esp_http_client_get_password(client, &value);
  118. TEST_ASSERT_EQUAL(ESP_OK, r);
  119. //If password is set then value should not be NULL
  120. TEST_ASSERT_NOT_NULL(value);
  121. esp_http_client_cleanup(client);
  122. }