Index: tools/telemetry/third_party/webpagereplay/httpproxy_test.py |
diff --git a/tools/telemetry/third_party/webpagereplay/httpproxy_test.py b/tools/telemetry/third_party/webpagereplay/httpproxy_test.py |
deleted file mode 100644 |
index 8e0b4016c65c252fedb18a71e9ec637faedb3471..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/webpagereplay/httpproxy_test.py |
+++ /dev/null |
@@ -1,189 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2015 Google Inc. All Rights Reserved. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
- |
-import httparchive |
-import httplib |
-import httpproxy |
-import threading |
-import unittest |
-import util |
- |
- |
-class MockCustomResponseHandler(object): |
- def __init__(self, response): |
- """ |
- Args: |
- response: An instance of ArchivedHttpResponse that is returned for each |
- request. |
- """ |
- self._response = response |
- |
- def handle(self, request): |
- del request |
- return self._response |
- |
- |
-class MockHttpArchiveFetch(object): |
- def __init__(self): |
- self.is_record_mode = False |
- |
- def __call__(self, request): |
- return None |
- |
- |
-class MockHttpArchiveHandler(httpproxy.HttpArchiveHandler): |
- def handle_one_request(self): |
- httpproxy.HttpArchiveHandler.handle_one_request(self) |
- HttpProxyTest.HANDLED_REQUEST_COUNT += 1 |
- |
- |
-class MockRules(object): |
- def Find(self, unused_rule_type_name): # pylint: disable=unused-argument |
- return lambda unused_request, unused_response: None |
- |
- |
-class HttpProxyTest(unittest.TestCase): |
- def setUp(self): |
- self.has_proxy_server_bound_port = False |
- self.has_proxy_server_started = False |
- |
- def set_up_proxy_server(self, response): |
- """ |
- Args: |
- response: An instance of ArchivedHttpResponse that is returned for each |
- request. |
- """ |
- HttpProxyTest.HANDLED_REQUEST_COUNT = 0 |
- self.host = 'localhost' |
- self.port = 8889 |
- custom_handlers = MockCustomResponseHandler(response) |
- rules = MockRules() |
- http_archive_fetch = MockHttpArchiveFetch() |
- self.proxy_server = httpproxy.HttpProxyServer( |
- http_archive_fetch, custom_handlers, rules, |
- host=self.host, port=self.port) |
- self.proxy_server.RequestHandlerClass = MockHttpArchiveHandler |
- self.has_proxy_server_bound_port = True |
- |
- def tearDown(self): |
- if self.has_proxy_server_started: |
- self.proxy_server.shutdown() |
- if self.has_proxy_server_bound_port: |
- self.proxy_server.server_close() |
- |
- def serve_requests_forever(self): |
- self.has_proxy_server_started = True |
- self.proxy_server.serve_forever(poll_interval=0.01) |
- |
- # Tests that handle_one_request does not leak threads, and does not try to |
- # re-handle connections that are finished. |
- def test_handle_one_request_closes_connection(self): |
- # By default, BaseHTTPServer.py treats all HTTP 1.1 requests as keep-alive. |
- # Intentionally use HTTP 1.0 to prevent this behavior. |
- response = httparchive.ArchivedHttpResponse( |
- version=10, status=200, reason="OK", |
- headers=[], response_data=["bat1"]) |
- self.set_up_proxy_server(response) |
- t = threading.Thread( |
- target=HttpProxyTest.serve_requests_forever, args=(self,)) |
- t.start() |
- |
- initial_thread_count = threading.activeCount() |
- |
- # Make a bunch of requests. |
- request_count = 10 |
- for _ in range(request_count): |
- conn = httplib.HTTPConnection('localhost', 8889, timeout=10) |
- conn.request("GET", "/index.html") |
- res = conn.getresponse().read() |
- self.assertEqual(res, "bat1") |
- conn.close() |
- |
- # Check to make sure that there is no leaked thread. |
- util.WaitFor(lambda: threading.activeCount() == initial_thread_count, 2) |
- |
- self.assertEqual(request_count, HttpProxyTest.HANDLED_REQUEST_COUNT) |
- |
- |
- # Tests that keep-alive header works. |
- def test_keep_alive_header(self): |
- response = httparchive.ArchivedHttpResponse( |
- version=11, status=200, reason="OK", |
- headers=[("Connection", "keep-alive")], response_data=["bat1"]) |
- self.set_up_proxy_server(response) |
- t = threading.Thread( |
- target=HttpProxyTest.serve_requests_forever, args=(self,)) |
- t.start() |
- |
- initial_thread_count = threading.activeCount() |
- |
- # Make a bunch of requests. |
- request_count = 10 |
- connections = [] |
- for _ in range(request_count): |
- conn = httplib.HTTPConnection('localhost', 8889, timeout=10) |
- conn.request("GET", "/index.html", headers={"Connection": "keep-alive"}) |
- res = conn.getresponse().read() |
- self.assertEqual(res, "bat1") |
- connections.append(conn) |
- |
- # Repeat the same requests. |
- for conn in connections: |
- conn.request("GET", "/index.html", headers={"Connection": "keep-alive"}) |
- res = conn.getresponse().read() |
- self.assertEqual(res, "bat1") |
- |
- # Check that the right number of requests have been handled. |
- self.assertEqual(2 * request_count, HttpProxyTest.HANDLED_REQUEST_COUNT) |
- |
- # Check to make sure that exactly "request_count" new threads are active. |
- self.assertEqual( |
- threading.activeCount(), initial_thread_count + request_count) |
- |
- for conn in connections: |
- conn.close() |
- |
- util.WaitFor(lambda: threading.activeCount() == initial_thread_count, 1) |
- |
- # Test that opening 400 simultaneous connections does not cause httpproxy to |
- # hit a process fd limit. The default limit is 256 fds. |
- def test_max_fd(self): |
- response = httparchive.ArchivedHttpResponse( |
- version=11, status=200, reason="OK", |
- headers=[("Connection", "keep-alive")], response_data=["bat1"]) |
- self.set_up_proxy_server(response) |
- t = threading.Thread( |
- target=HttpProxyTest.serve_requests_forever, args=(self,)) |
- t.start() |
- |
- # Make a bunch of requests. |
- request_count = 400 |
- connections = [] |
- for _ in range(request_count): |
- conn = httplib.HTTPConnection('localhost', 8889, timeout=10) |
- conn.request("GET", "/index.html", headers={"Connection": "keep-alive"}) |
- res = conn.getresponse().read() |
- self.assertEqual(res, "bat1") |
- connections.append(conn) |
- |
- # Check that the right number of requests have been handled. |
- self.assertEqual(request_count, HttpProxyTest.HANDLED_REQUEST_COUNT) |
- |
- for conn in connections: |
- conn.close() |
- |
-if __name__ == '__main__': |
- unittest.main() |