pytest_esp_http_client.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Unlicense OR CC0-1.0
  3. import logging
  4. import os
  5. import pytest
  6. from pytest_embedded import Dut
  7. @pytest.mark.esp32
  8. @pytest.mark.httpbin
  9. def test_examples_protocol_esp_http_client(dut: Dut) -> None:
  10. """
  11. steps: |
  12. 1. join AP/Ethernet
  13. 2. Send HTTP request to httpbin.org
  14. """
  15. binary_file = os.path.join(dut.app.binary_path, 'esp_http_client_example.bin')
  16. bin_size = os.path.getsize(binary_file)
  17. logging.info('esp_http_client_bin_size : {}KB'.format(bin_size // 1024))
  18. # start test
  19. dut.expect('Connected to AP, begin http example', timeout=30)
  20. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  21. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  22. dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
  23. dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
  24. dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
  25. dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
  26. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  27. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  28. dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
  29. dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
  30. dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
  31. dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
  32. dut.expect(r'HTTP Basic Auth Status = 200, content_length = (\d)')
  33. dut.expect(r'HTTP Basic Auth redirect Status = 200, content_length = (\d)')
  34. dut.expect(r'HTTP Digest Auth Status = 200, content_length = (\d)')
  35. dut.expect(r'HTTP Relative path redirect Status = 200, content_length = (\d)')
  36. dut.expect(r'HTTP Absolute path redirect Status = 200, content_length = (\d)')
  37. dut.expect(r'HTTP Absolute path redirect \(manual\) Status = 200, content_length = (\d)')
  38. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  39. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  40. dut.expect(r'HTTP redirect to HTTPS Status = 200, content_length = (\d)')
  41. dut.expect(r'HTTP chunk encoding Status = 200, content_length = (-?\d)')
  42. # content-len for chunked encoding is typically -1, could be a positive length in some cases
  43. dut.expect(r'HTTP Stream reader Status = 200, content_length = (\d)')
  44. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  45. dut.expect(r'Last esp error code: 0x8001')
  46. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  47. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  48. dut.expect(r'HTTP Status = 206, content_length = (\d)')
  49. dut.expect(r'HTTP Status = 206, content_length = 10')
  50. dut.expect(r'HTTP Status = 206, content_length = 10')
  51. dut.expect('Finish http example')
  52. @pytest.mark.esp32
  53. @pytest.mark.httpbin
  54. @pytest.mark.parametrize('config', [
  55. 'ssldyn',
  56. ], indirect=True)
  57. def test_examples_protocol_esp_http_client_dynamic_buffer(dut: Dut) -> None:
  58. # test mbedtls dynamic resource
  59. # check and log bin size
  60. binary_file = os.path.join(dut.app.binary_path, 'esp_http_client_example.bin')
  61. bin_size = os.path.getsize(binary_file)
  62. logging.info('esp_http_client_bin_size : {}KB'.format(bin_size // 1024))
  63. dut.expect('Connected to AP, begin http example', timeout=30)
  64. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  65. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  66. dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
  67. dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
  68. dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
  69. dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
  70. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  71. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  72. dut.expect(r'HTTP PUT Status = 200, content_length = (\d)')
  73. dut.expect(r'HTTP PATCH Status = 200, content_length = (\d)')
  74. dut.expect(r'HTTP DELETE Status = 200, content_length = (\d)')
  75. dut.expect(r'HTTP HEAD Status = 200, content_length = (\d)')
  76. dut.expect(r'HTTP Basic Auth Status = 200, content_length = (\d)')
  77. dut.expect(r'HTTP Basic Auth redirect Status = 200, content_length = (\d)')
  78. dut.expect(r'HTTP Relative path redirect Status = 200, content_length = (\d)')
  79. dut.expect(r'HTTP Absolute path redirect Status = 200, content_length = (\d)')
  80. dut.expect(r'HTTP Absolute path redirect \(manual\) Status = 200, content_length = (\d)')
  81. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  82. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  83. dut.expect(r'HTTP redirect to HTTPS Status = 200, content_length = (\d)')
  84. dut.expect(r'HTTP chunk encoding Status = 200, content_length = (-?\d)')
  85. # content-len for chunked encoding is typically -1, could be a positive length in some cases
  86. dut.expect(r'HTTP Stream reader Status = 200, content_length = (\d)')
  87. dut.expect(r'HTTPS Status = 200, content_length = (\d)')
  88. dut.expect(r'Last esp error code: 0x8001')
  89. dut.expect(r'HTTP GET Status = 200, content_length = (\d)')
  90. dut.expect(r'HTTP POST Status = 200, content_length = (\d)')
  91. dut.expect(r'HTTP Status = 206, content_length = (\d)')
  92. dut.expect(r'HTTP Status = 206, content_length = 10')
  93. dut.expect(r'HTTP Status = 206, content_length = 10')
  94. dut.expect('Finish http example')
  95. @pytest.mark.linux
  96. @pytest.mark.host_test
  97. # Currently we are just testing the build for esp_http_client on Linux target. So skipping the test run.
  98. # Later we will enable the test run for Linux target as well.
  99. @pytest.mark.skipif('config.getvalue("target") == "linux"', reason='Do not run on Linux')
  100. @pytest.mark.parametrize('config', [
  101. 'default', 'ssldyn',
  102. ], indirect=True)
  103. def test_examples_protocol_esp_http_client_linux(dut: Dut) -> None:
  104. dut.expect('Finish http example', timeout=60)