Explorar o código

example_test.py: Override SimpleHTTPRequestHandler to catch broken pipe exception

Shubham Kulkarni %!s(int64=5) %!d(string=hai) anos
pai
achega
b1e29232ea

+ 31 - 1
examples/system/ota/advanced_https_ota/example_test.py

@@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir):
     return server_file, key_file
 
 
+def https_request_handler():
+    """
+    Returns a request handler class that handles broken pipe exception
+    """
+    class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+        def finish(self):
+            try:
+                if not self.wfile.closed:
+                    self.wfile.flush()
+                    self.wfile.close()
+            except socket.error:
+                pass
+            self.rfile.close()
+
+        def handle(self):
+            try:
+                BaseHTTPServer.BaseHTTPRequestHandler.handle(self)
+            except socket.error:
+                pass
+
+    return RequestHandler
+
+
 def start_https_server(ota_image_dir, server_ip, server_port):
     server_file, key_file = get_ca_cert(ota_image_dir)
+    requestHandler = https_request_handler()
     httpd = BaseHTTPServer.HTTPServer((server_ip, server_port),
-                                      SimpleHTTPServer.SimpleHTTPRequestHandler)
+                                      requestHandler)
 
     httpd.socket = ssl.wrap_socket(httpd.socket,
                                    keyfile=key_file,
@@ -123,6 +147,12 @@ def redirect_handler_factory(url):
             self.send_header('Location', url)
             self.end_headers()
 
+        def handle(self):
+            try:
+                BaseHTTPServer.BaseHTTPRequestHandler.handle(self)
+            except socket.error:
+                pass
+
     return RedirectHandler
 
 

+ 25 - 1
examples/system/ota/native_ota_example/example_test.py

@@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir):
     return server_file, key_file
 
 
+def https_request_handler():
+    """
+    Returns a request handler class that handles broken pipe exception
+    """
+    class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+        def finish(self):
+            try:
+                if not self.wfile.closed:
+                    self.wfile.flush()
+                    self.wfile.close()
+            except socket.error:
+                pass
+            self.rfile.close()
+
+        def handle(self):
+            try:
+                BaseHTTPServer.BaseHTTPRequestHandler.handle(self)
+            except socket.error:
+                pass
+
+    return RequestHandler
+
+
 def start_https_server(ota_image_dir, server_ip, server_port):
     server_file, key_file = get_ca_cert(ota_image_dir)
+    requestHandler = https_request_handler()
     httpd = BaseHTTPServer.HTTPServer((server_ip, server_port),
-                                      SimpleHTTPServer.SimpleHTTPRequestHandler)
+                                      requestHandler)
 
     httpd.socket = ssl.wrap_socket(httpd.socket,
                                    keyfile=key_file,