mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
test(transport_ws): add tests for polling logic and handshake edge cases
This commit is contained in:
@@ -316,6 +316,36 @@ TEST_CASE("WebSocket Transport Connection", "[success]")
|
|||||||
// Verify the marker after the buffer wasn't overwritten
|
// Verify the marker after the buffer wasn't overwritten
|
||||||
REQUIRE(response_header_buffer[ws_config.response_headers_len] == marker);
|
REQUIRE(response_header_buffer[ws_config.response_headers_len] == marker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("Poll read with buffered data") {
|
||||||
|
// Set the callback function for mock_read
|
||||||
|
mock_read_Stub(mock_valid_read_callback);
|
||||||
|
|
||||||
|
static int parent_poll_calls = 0;
|
||||||
|
parent_poll_calls = 0;
|
||||||
|
|
||||||
|
// Verify poll_read is not called when buffer has data
|
||||||
|
mock_poll_read_Stub([](esp_transport_handle_t t, int timeout_ms, int num_call){
|
||||||
|
parent_poll_calls++;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
REQUIRE(esp_transport_connect(websocket_transport.get(), host, port, timeout) == 0);
|
||||||
|
|
||||||
|
// buffer should contain "Test" (4 bytes)
|
||||||
|
// ws_poll_read should return 1 because buffer is not empty
|
||||||
|
REQUIRE(esp_transport_poll_read(websocket_transport.get(), timeout) == 1);
|
||||||
|
REQUIRE(parent_poll_calls == 0);
|
||||||
|
|
||||||
|
// Read the data to empty the buffer
|
||||||
|
char buffer[10];
|
||||||
|
int read_len = esp_transport_read(websocket_transport.get(), buffer, sizeof(buffer), timeout);
|
||||||
|
REQUIRE(read_len == 4);
|
||||||
|
|
||||||
|
// Now buffer is empty, ws_poll_read should call parent poll
|
||||||
|
esp_transport_poll_read(websocket_transport.get(), timeout);
|
||||||
|
REQUIRE(parent_poll_calls == 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("WebSocket Transport Connection", "[failure]")
|
TEST_CASE("WebSocket Transport Connection", "[failure]")
|
||||||
@@ -399,4 +429,30 @@ TEST_CASE("WebSocket Transport Connection", "[failure]")
|
|||||||
// Verify the response header is empty
|
// Verify the response header is empty
|
||||||
REQUIRE(std::string(response_header_buffer.data()) == "");
|
REQUIRE(std::string(response_header_buffer.data()) == "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("ws connect fails (buffer full, no delimiter)") {
|
||||||
|
// Mock read to fill buffer with non-delimiter data
|
||||||
|
mock_read_Stub([](esp_transport_handle_t h, char *buf, int len, int tout, int n) {
|
||||||
|
if (len > 0) {
|
||||||
|
memset(buf, 'A', len);
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
});
|
||||||
|
mock_poll_read_Stub(mock_poll_read_callback);
|
||||||
|
|
||||||
|
REQUIRE(esp_transport_connect(websocket_transport.get(), host, port, timeout) == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("ws connect succeeds (response header buffer too small for handshake verification)") {
|
||||||
|
// Set a very small response header buffer
|
||||||
|
ws_config.response_headers_len = 50;
|
||||||
|
REQUIRE(esp_transport_ws_set_config(websocket_transport.get(), &ws_config) == ESP_OK);
|
||||||
|
|
||||||
|
// Set the callback function for mock_read
|
||||||
|
mock_read_Stub(mock_valid_read_callback);
|
||||||
|
mock_poll_read_Stub(mock_poll_read_callback);
|
||||||
|
|
||||||
|
// Connect should now succeed even with small user buffer
|
||||||
|
REQUIRE(esp_transport_connect(websocket_transport.get(), host, port, timeout) == 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user