]> granicus.if.org Git - esp-idf/commitdiff
HTTP Server Examples : Updated examples to manually return 408 and 500 errors
authorAnurag Kar <anurag.kar@espressif.com>
Tue, 9 Oct 2018 12:37:38 +0000 (18:07 +0530)
committerAnurag Kar <anurag.kar@espressif.com>
Wed, 17 Oct 2018 12:06:50 +0000 (17:36 +0530)
examples/protocols/http_server/advanced_tests/main/tests.c
examples/protocols/http_server/advanced_tests/scripts/test.py
examples/protocols/http_server/persistent_sockets/main/main.c
examples/protocols/http_server/simple/main/main.c

index 1aa64bcbc6112961c01c4032cee67c625991bbe6..0d7d8327f6a976409accfb14a602ed1cee192c23 100644 (file)
@@ -50,13 +50,17 @@ esp_err_t echo_post_handler(httpd_req_t *req)
     int    ret;
 
     if (!buf) {
+        httpd_resp_send_500(req);
         return ESP_FAIL;
     }
 
     while (off < req->content_len) {
         /* Read data received in the request */
         ret = httpd_req_recv(req, buf + off, req->content_len - off);
-        if (ret < 0) {
+        if (ret <= 0) {
+            if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+                httpd_resp_send_408(req);
+            }
             free (buf);
             return ESP_FAIL;
         }
@@ -105,7 +109,10 @@ esp_err_t adder_post_handler(httpd_req_t *req)
 
     /* Read data received in the request */
     ret = httpd_req_recv(req, buf, sizeof(buf));
-    if (ret < 0) {
+    if (ret <= 0) {
+        if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+            httpd_resp_send_408(req);
+        }
         return ESP_FAIL;
     }
 
@@ -137,7 +144,10 @@ esp_err_t leftover_data_post_handler(httpd_req_t *req)
 
     /* Read data received in the request */
     ret = httpd_req_recv(req, buf, sizeof(buf) - 1);
-    if (ret < 0) {
+    if (ret <= 0) {
+        if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+            httpd_resp_send_408(req);
+        }
         return ESP_FAIL;
     }
 
index f1fcedaec47722c4989de051f6e1f555a3c61086..4f8f0fd4d55e0063734fc2d0f5dde328fb74fafd 100644 (file)
@@ -350,7 +350,7 @@ def get_hello(dut, port):
 
 def put_hello(dut, port):
     # PUT /hello returns 405'
-    Utility.console_log("[test] PUT /hello returns 405' =>", end=' ')
+    Utility.console_log("[test] PUT /hello returns 405 =>", end=' ')
     conn = http.client.HTTPConnection(dut, int(port), timeout=15)
     conn.request("PUT", "/hello", "Hello")
     resp = conn.getresponse()
@@ -363,7 +363,7 @@ def put_hello(dut, port):
 
 def post_hello(dut, port):
     # POST /hello returns 405'
-    Utility.console_log("[test] POST /hello returns 404' =>", end=' ')
+    Utility.console_log("[test] POST /hello returns 404 =>", end=' ')
     conn = http.client.HTTPConnection(dut, int(port), timeout=15)
     conn.request("POST", "/hello", "Hello")
     resp = conn.getresponse()
@@ -376,7 +376,7 @@ def post_hello(dut, port):
 
 def post_echo(dut, port):
     # POST /echo echoes data'
-    Utility.console_log("[test] POST /echo echoes data' =>", end=' ')
+    Utility.console_log("[test] POST /echo echoes data =>", end=' ')
     conn = http.client.HTTPConnection(dut, int(port), timeout=15)
     conn.request("POST", "/echo", "Hello")
     resp = conn.getresponse()
@@ -392,7 +392,7 @@ def post_echo(dut, port):
 
 def put_echo(dut, port):
     # PUT /echo echoes data'
-    Utility.console_log("[test] PUT /echo echoes data' =>", end=' ')
+    Utility.console_log("[test] PUT /echo echoes data =>", end=' ')
     conn = http.client.HTTPConnection(dut, int(port), timeout=15)
     conn.request("PUT", "/echo", "Hello")
     resp = conn.getresponse()
@@ -408,7 +408,7 @@ def put_echo(dut, port):
 
 def get_echo(dut, port):
     # GET /echo returns 404'
-    Utility.console_log("[test] GET /echo returns 405' =>", end=' ')
+    Utility.console_log("[test] GET /echo returns 405 =>", end=' ')
     conn = http.client.HTTPConnection(dut, int(port), timeout=15)
     conn.request("GET", "/echo")
     resp = conn.getresponse()
@@ -595,7 +595,7 @@ def packet_size_limit_test(dut, port, test_size):
         s.request("POST", url=path, body=random_data)
         resp = s.getresponse()
         if not test_val("Error", "200", str(resp.status)):
-            if test_val("Error", "408", str(resp.status)):
+            if test_val("Error", "500", str(resp.status)):
                 Utility.console_log("Data too large to be allocated")
                 test_size = test_size//10
             else:
@@ -619,14 +619,12 @@ def packet_size_limit_test(dut, port, test_size):
 def code_500_server_error_test(dut, port):
     Utility.console_log("[test] 500 Server Error test =>", end=' ')
     s = Session(dut, port)
-    s.client.sendall(b"abcdefgh\0")
+    # Sending a very large content length will cause malloc to fail
+    content_len = 2**31
+    s.client.sendall(("POST /echo HTTP/1.1\r\nHost: " + dut + "\r\nContent-Length: " + str(content_len) + "\r\n\r\nABCD").encode())
     s.read_resp_hdrs()
     resp = s.read_resp_data()
-    # Presently server sends back 400 Bad Request
-    #if not test_val("Server Error", "500", s.status):
-        #s.close()
-        #return False
-    if not test_val("Server Error", "400", s.status):
+    if not test_val("Server Error", "500", s.status):
         s.close()
         return False
     s.close()
index 996a05afea85b87d96dedeabf35702d399ae1d64..ea6bea5b27a81dc9033d3bb495605ef22da0fba2 100644 (file)
@@ -48,7 +48,10 @@ esp_err_t adder_post_handler(httpd_req_t *req)
 
     /* Read data received in the request */
     ret = httpd_req_recv(req, buf, sizeof(buf));
-    if (ret < 0) {
+    if (ret <= 0) {
+        if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+            httpd_resp_send_408(req);
+        }
         return ESP_FAIL;
     }
 
@@ -111,7 +114,10 @@ esp_err_t adder_put_handler(httpd_req_t *req)
 
     /* Read data received in the request */
     ret = httpd_req_recv(req, buf, sizeof(buf));
-    if (ret < 0) {
+    if (ret <= 0) {
+        if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+            httpd_resp_send_408(req);
+        }
         return ESP_FAIL;
     }
 
index 7e2bd490728b679d988b63a23e5263ececaa08ca..5c8d266a59cfe7ad6a012120f4dc03920d38f15b 100644 (file)
@@ -122,7 +122,11 @@ esp_err_t echo_post_handler(httpd_req_t *req)
     while (remaining > 0) {
         /* Read the data for the request */
         if ((ret = httpd_req_recv(req, buf,
-                        MIN(remaining, sizeof(buf)))) < 0) {
+                        MIN(remaining, sizeof(buf)))) <= 0) {
+            if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+                /* Retry receiving if timeout occurred */
+                continue;
+            }
             return ESP_FAIL;
         }
 
@@ -156,7 +160,10 @@ esp_err_t ctrl_put_handler(httpd_req_t *req)
     char buf;
     int ret;
 
-    if ((ret = httpd_req_recv(req, &buf, 1)) < 0) {
+    if ((ret = httpd_req_recv(req, &buf, 1)) <= 0) {
+        if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
+            httpd_resp_send_408(req);
+        }
         return ESP_FAIL;
     }