Index: bin/au_test_harness/cros_test_proxy.py |
diff --git a/bin/au_test_harness/cros_test_proxy.py b/bin/au_test_harness/cros_test_proxy.py |
deleted file mode 100644 |
index 0b3728638bf0c4a835562c341482100035400d73..0000000000000000000000000000000000000000 |
--- a/bin/au_test_harness/cros_test_proxy.py |
+++ /dev/null |
@@ -1,121 +0,0 @@ |
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
-# 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 |
-import SocketServer |
-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 |
- |
- 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 |
- |
- |
-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. |
- """ |
- # Open outgoing socket |
- s_in = self.request |
- s_out = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
- s_out.connect((self.server.address_out, self.server.port_out)) |
- |
- 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) |
- if not data: break |
- try: |
- # If there is any error sending data, close both connections. |
- s_out.sendall(data) |
- except socket.error: |
- break |
- |
- if s_out in rlist: |
- data = s_out.recv(1024) |
- data = self.server.filter.OutBound(data) |
- if not data: break |
- try: |
- # If there is any error sending data, close both connections. |
- s_in.sendall(data) |
- except socket.error: |
- break |
- |
- s_in.close() |
- s_out.close() |
- |
- def __init__(self, |
- filter, |
- port_in=8081, |
- 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. |
- address_out: Address to which outgoing connections will go. |
- address_port: Port to which outgoing connections will go. |
- """ |
- self.port_in = port_in |
- self.address_out = address_out |
- self.port_out = port_out |
- self.filter = filter |
- |
- try: |
- SocketServer.TCPServer.__init__(self, |
- ('', port_in), |
- self._Handler) |
- except socket.error: |
- os.system('sudo netstat -l --tcp -n -p') |
- raise |
- |
- def serve_forever_in_thread(self): |
- """Helper method to start the server in a new background thread.""" |
- server_thread = threading.Thread(target=self.serve_forever) |
- server_thread.setDaemon(True) |
- server_thread.start() |
- |
- return server_thread |