From: Mikhail Kshevetskiy Date: Sat, 28 Dec 2024 10:46:34 +0000 (+0300) Subject: test/cmd/wget: replace bogus response with an actual response from the HTTP server X-Git-Tag: v2025.04-rc1~17^2~26^2~3 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ece1631f5e1d12477a9fd439570a3f05e4e8fb1e;p=pandora-u-boot.git test/cmd/wget: replace bogus response with an actual response from the HTTP server According to HTTP/1.0 standard the HTTP reply consist of * Status Line + CRLF * Zero or more Response Header Fields (each ended with CRLF) * CRLF on new line (Response Header Fields end marker) * Optional Entity Body. Thus in response headers we state: Content-Length = 30 but actual transferred file data is: "\r\nHi\r\n". This is 32 bytes of data. So we get and check for correctness 32 bytes of data, but * The response we are used is incorrect, real server will set Content-Length to 32. * default_wget_info->hdr_cont_len will be set to wrong value 30 (used for efi http booting). Fix an issue by: * replace bogus response with an actual response from the HTTP server * format response to show HTTP response structure * recalculate md5sum as transferred file data has been changed. The server response was captured with the commands echo -ne "Hi\n" > ~/public_html/test.html echo -ne "GET /~${USER}/test.html HTTP/1.0\r\n\r\n" | netcat localhost 80 >reply.txt Signed-off-by: Mikhail Kshevetskiy --- diff --git a/test/cmd/wget.c b/test/cmd/wget.c index d51650d5854..b020d20ad70 100644 --- a/test/cmd/wget.c +++ b/test/cmd/wget.c @@ -107,9 +107,22 @@ static int sb_ack_handler(struct udevice *dev, void *packet, int payload_len = 0; u32 tcp_seq, tcp_ack; int tcp_data_len; - const char *payload1 = "HTTP/1.1 200 OK\r\n" - "Content-Length: 30\r\n\r\n\r\n" - "Hi\r\n"; + const char *payload1 = + /* response status line */ + "HTTP/1.1 200 OK\r\n" + /* response header fields */ + "Date: Mon, 23 Dec 2024 05:18:23 GMT\r\n" + "Server: Apache/2.4.62 (Debian)\r\n" + "Last-Modified: Mon, 23 Dec 2024 05:04:50 GMT\r\n" + "ETag: \"1d-629e8efb09e7b\"\r\n" + "Accept-Ranges: bytes\r\n" + "Content-Length: 29\r\n" + "Connection: close\r\n" + "Content-Type: text/html\r\n" + /* response header fields end marker */ + "\r\n" + /* file data (for HTTP GET requests) */ + "Hi\n"; /* Don't allow the buffer to overrun */ if (priv->recv_packets >= PKTBUFSRX) @@ -136,11 +149,11 @@ static int sb_ack_handler(struct udevice *dev, void *packet, if (tcp_seq == 1 && tcp_ack == 1) { if (tcp_data_len == 0) { - /* no data, wait for GET request */ + /* no data, wait for GET/HEAD request */ return -1; } - /* reply to GET request */ + /* reply to GET/HEAD request */ payload_len = strlen(payload1); memcpy(data, payload1, payload_len); tcp_send->tcp_flags = TCP_ACK; @@ -215,12 +228,12 @@ static int net_test_wget(struct unit_test_state *uts) ut_assertok(run_command("wget ${loadaddr} 1.1.2.2:/index.html", 0)); ut_assert_nextline_empty(); ut_assert_nextline("Packets received 5, Transfer Successful"); - ut_assert_nextline("Bytes transferred = 32 (20 hex)"); + ut_assert_nextline("Bytes transferred = 29 (1d hex)"); sandbox_eth_set_tx_handler(0, NULL); run_command("md5sum ${loadaddr} ${filesize}", 0); - ut_assert_nextline("md5 for 00020000 ... 0002001f ==> 234af48e94b0085060249ecb5942ab57"); + ut_assert_nextline("md5 for 00020000 ... 0002001c ==> 847d5e7320a27462e90bc1ed75eb8cd8"); ut_assert_console_end(); env_set("ethact", prev_ethact);