Index: chrome/test/pyautolib/remote_host.py |
=================================================================== |
--- chrome/test/pyautolib/remote_host.py (revision 261231) |
+++ chrome/test/pyautolib/remote_host.py (working copy) |
@@ -1,101 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import cStringIO |
-import os |
-import pickle |
-import socket |
-import sys |
- |
-import pyauto |
- |
-class RemoteHost(object): |
- """Class used as a host for tests that use the PyAuto RemoteProxy. |
- |
- This class fires up a listener which waits for a connection from a RemoteProxy |
- and receives method call requests. Run python remote_host.py |
- remote_host.RemoteHost.RunHost to start up a PyAuto remote instance that you |
- can connect to and automate using pyauto.RemoteProxy. |
- """ |
- def __init__(self, host, *args, **kwargs): |
- self.StartSocketServer(host) |
- |
- def StartSocketServer(self, host): |
- listening_socket = socket.socket() |
- listening_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
- listening_socket.bind(host) |
- listening_socket.listen(1) |
- print 'Listening for incoming connections on port %d.' % host[1] |
- self._socket, address = listening_socket.accept() |
- print 'Accepted connection from %s:%d.' % address |
- |
- while self.Connected(): |
- self._HandleRPC() |
- |
- def StopSocketServer(self): |
- if self._socket: |
- try: |
- self._socket.shutdown(socket.SHUT_RDWR) |
- self._socket.close() |
- except socket.error: |
- pass |
- self._socket = None |
- |
- def Connected(self): |
- return self._socket |
- |
- def CreateTarget(self, target_class): |
- """Creates an instance of the specified class to serve as the RPC target. |
- |
- RPC calls can be made on the target. |
- """ |
- self.target = target_class() |
- |
- def _HandleRPC(self): |
- """Receives a method call request over the socket and executes the method. |
- |
- This method captures stdout and stderr for the duration of the method call, |
- and sends those, the return value, and any thrown exceptions back to the |
- RemoteProxy. |
- """ |
- # Receive request. |
- request = self._socket.recv(4096) |
- if not request: |
- self.StopSocketServer() |
- return |
- request = pickle.loads(request) |
- |
- # Redirect output to strings. |
- old_stdout = sys.stdout |
- old_stderr = sys.stderr |
- sys.stdout = stdout = cStringIO.StringIO() |
- sys.stderr = stderr = cStringIO.StringIO() |
- |
- # Make requested method call. |
- result = None |
- exception = None |
- try: |
- if getattr(self, request[0], None): |
- result = getattr(self, request[0])(*request[1], **request[2]) |
- else: |
- result = getattr(self.target, request[0])(*request[1], **request[2]) |
- except BaseException, e: |
- exception = (e.__class__.__name__, str(e)) |
- |
- # Put output back to the way it was before. |
- sys.stdout = old_stdout |
- sys.stderr = old_stderr |
- |
- # Package up and send the result of the method call. |
- response = pickle.dumps((result, stdout.getvalue(), stderr.getvalue(), |
- exception)) |
- if self._socket.send(response) != len(response): |
- self.StopSocketServer() |
- |
- |
-if __name__ == '__main__': |
- pyauto_suite = pyauto.PyUITestSuite(sys.argv) |
- RemoteHost(('', 7410)) |
- del pyauto_suite |