Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Unified Diff: recipe_engine/third_party/requests/tests/testserver/server.py

Issue 2164713003: Vendor requests. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/recipes-py@master
Patch Set: Fix deps.pyl Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: recipe_engine/third_party/requests/tests/testserver/server.py
diff --git a/recipe_engine/third_party/requests/tests/testserver/server.py b/recipe_engine/third_party/requests/tests/testserver/server.py
deleted file mode 100644
index 8b9643c3d84b6ec1f566afe5cea4a6a0ca134979..0000000000000000000000000000000000000000
--- a/recipe_engine/third_party/requests/tests/testserver/server.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import threading
-import socket
-import select
-
-
-def consume_socket_content(sock, timeout=0.5):
- chunks = 65536
- content = b''
- more_to_read = select.select([sock], [], [], timeout)[0]
-
- while more_to_read:
- new_content = sock.recv(chunks)
-
- if not new_content:
- break
-
- content += new_content
- # stop reading if no new data is received for a while
- more_to_read = select.select([sock], [], [], timeout)[0]
-
- return content
-
-
-class Server(threading.Thread):
- """Dummy server using for unit testing"""
- WAIT_EVENT_TIMEOUT = 5
-
- def __init__(self, handler, host='localhost', port=0, requests_to_handle=1, wait_to_close_event=None):
- super(Server, self).__init__()
-
- self.handler = handler
- self.handler_results = []
-
- self.host = host
- self.port = port
- self.requests_to_handle = requests_to_handle
-
- self.wait_to_close_event = wait_to_close_event
- self.ready_event = threading.Event()
- self.stop_event = threading.Event()
-
- @classmethod
- def text_response_server(cls, text, request_timeout=0.5, **kwargs):
- def text_response_handler(sock):
- request_content = consume_socket_content(sock, timeout=request_timeout)
- sock.send(text.encode('utf-8'))
-
- return request_content
-
-
- return Server(text_response_handler, **kwargs)
-
- @classmethod
- def basic_response_server(cls, **kwargs):
- return cls.text_response_server(
- "HTTP/1.1 200 OK\r\n" +
- "Content-Length: 0\r\n\r\n",
- **kwargs
- )
-
- def run(self):
- try:
- sock = self._create_socket_and_bind()
- # in case self.port = 0
- self.port = sock.getsockname()[1]
- self.ready_event.set()
- self._handle_requests(sock)
-
- if self.wait_to_close_event:
- self.wait_to_close_event.wait(self.WAIT_EVENT_TIMEOUT)
- finally:
- self.ready_event.set() # just in case of exception
- sock.close()
- self.stop_event.set()
-
- def _create_socket_and_bind(self):
- sock = socket.socket()
- sock.bind((self.host, self.port))
- sock.listen(0)
- return sock
-
- def _handle_requests(self, server_sock):
- for _ in range(self.requests_to_handle):
- sock = server_sock.accept()[0]
- handler_result = self.handler(sock)
-
- self.handler_results.append(handler_result)
-
- def __enter__(self):
- self.start()
- self.ready_event.wait(self.WAIT_EVENT_TIMEOUT)
- return self.host, self.port
-
- def __exit__(self, exc_type, exc_value, traceback):
- if exc_type is None:
- self.stop_event.wait(self.WAIT_EVENT_TIMEOUT)
- else:
- if self.wait_to_close_event:
- # avoid server from waiting for event timeouts
- # if an exception is found in the main thread
- self.wait_to_close_event.set()
- return False # allow exceptions to propagate

Powered by Google App Engine
This is Rietveld 408576698