Index: bin/au_test_harness/cros_test_proxy.py |
diff --git a/lib/cros_test_proxy.py b/bin/au_test_harness/cros_test_proxy.py |
old mode 100755 |
new mode 100644 |
similarity index 94% |
rename from lib/cros_test_proxy.py |
rename to bin/au_test_harness/cros_test_proxy.py |
index 464dcb539b87d835af9e15db578999bced35e9a4..0b3728638bf0c4a835562c341482100035400d73 |
--- a/lib/cros_test_proxy.py |
+++ b/bin/au_test_harness/cros_test_proxy.py |
@@ -2,6 +2,9 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+"""Module containing various classes pertaining to inserting a proxy in a test. |
+""" |
+ |
import os |
import select |
import socket |
@@ -10,45 +13,45 @@ import threading |
class Filter(object): |
"""Base class for data filters. |
- |
+ |
Pass subclass of this to CrosTestProxy which will perform whatever |
connection manipulation you prefer. |
""" |
- |
+ |
def setup(self): |
"""This setup method is called once per connection.""" |
pass |
- |
+ |
def InBound(self, data): |
"""This method is called once per packet of incoming data. |
- |
+ |
The value returned is what is sent through the proxy. If |
None is returned, the connection will be closed. |
""" |
- return data |
+ return data |
def OutBound(self, data): |
"""This method is called once per packet of outgoing data. |
- |
+ |
The value returned is what is sent through the proxy. If |
None is returned, the connection will be closed. |
""" |
- return data |
+ return data |
class CrosTestProxy(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
"""A transparent proxy for simulating network errors""" |
- |
+ |
class _Handler(SocketServer.BaseRequestHandler): |
"""Proxy connection handler that passes data though a filter""" |
def setup(self): |
"""Setup is called once for each connection proxied.""" |
self.server.filter.setup() |
- |
+ |
def handle(self): |
"""Handles each incoming connection. |
- |
+ |
Opens a new connection to the port we are proxing to, then |
passes each packet along in both directions after passing |
them through the filter object passed in. |
@@ -60,7 +63,7 @@ class CrosTestProxy(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
while True: |
rlist, wlist, xlist = select.select([s_in, s_out], [], []) |
- |
+ |
if s_in in rlist: |
data = s_in.recv(1024) |
data = self.server.filter.InBound(data) |
@@ -83,13 +86,13 @@ class CrosTestProxy(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
s_in.close() |
s_out.close() |
- |
+ |
def __init__(self, |
filter, |
port_in=8081, |
- address_out='127.0.0.1', port_out=8080): |
+ address_out='127.0.0.1', port_out=8080): |
"""Configures the proxy object. |
- |
+ |
Args: |
filter: An instance of a subclass of Filter. |
port_in: Port on which to listen for incoming connections. |
@@ -100,7 +103,7 @@ class CrosTestProxy(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
self.address_out = address_out |
self.port_out = port_out |
self.filter = filter |
- |
+ |
try: |
SocketServer.TCPServer.__init__(self, |
('', port_in), |
@@ -114,5 +117,5 @@ class CrosTestProxy(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
server_thread = threading.Thread(target=self.serve_forever) |
server_thread.setDaemon(True) |
server_thread.start() |
- |
+ |
return server_thread |