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

Side by Side Diff: build/android/pylib/forwarder.py

Issue 15008004: Add device port unmapping support to forwarder2. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address David's comments Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « build/android/pylib/chrome_test_server_spawner.py ('k') | tools/android/forwarder2/daemon.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging 5 import logging
6 import os 6 import os
7 import re 7 import re
8 import sys 8 import sys
9 import time 9 import time
10 10
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 get the number of the assigned port using the 60 get the number of the assigned port using the
61 DevicePortForHostPort method. 61 DevicePortForHostPort method.
62 tool: Tool class to use to get wrapper, if necessary, for executing the 62 tool: Tool class to use to get wrapper, if necessary, for executing the
63 forwarder (see valgrind_tools.py). 63 forwarder (see valgrind_tools.py).
64 host_name: Address to forward to, must be addressable from the 64 host_name: Address to forward to, must be addressable from the
65 host machine. Usually use loopback '127.0.0.1'. 65 host machine. Usually use loopback '127.0.0.1'.
66 66
67 Raises: 67 Raises:
68 Exception on failure to forward the port. 68 Exception on failure to forward the port.
69 """ 69 """
70 host_adb_control_port = ports.AllocateTestServerPort() 70 self._host_adb_control_port = ports.AllocateTestServerPort()
71 if not host_adb_control_port: 71 if not self._host_adb_control_port:
72 raise Exception('Failed to allocate a TCP port in the host machine.') 72 raise Exception('Failed to allocate a TCP port in the host machine.')
73 self._adb.PushIfNeeded( 73 self._adb.PushIfNeeded(
74 self._device_forwarder_path_on_host, Forwarder._DEVICE_FORWARDER_FOLDER) 74 self._device_forwarder_path_on_host, Forwarder._DEVICE_FORWARDER_FOLDER)
75 redirection_commands = [ 75 redirection_commands = [
76 '%d:%d:%d:%s' % (host_adb_control_port, device, host, 76 '%d:%d:%d:%s' % (self._host_adb_control_port, device, host,
77 host_name) for device, host in port_pairs] 77 host_name) for device, host in port_pairs]
78 logging.info('Command format: <ADB port>:<Device port>' + 78 logging.info('Command format: <ADB port>:<Device port>' +
79 '[:<Forward to port>:<Forward to address>]') 79 '[:<Forward to port>:<Forward to address>]')
80 logging.info('Forwarding using commands: %s', redirection_commands) 80 logging.info('Forwarding using commands: %s', redirection_commands)
81 if cmd_helper.RunCmd( 81 if cmd_helper.RunCmd(
82 ['adb', '-s', self._adb._adb.GetSerialNumber(), 'forward', 82 ['adb', '-s', self._adb._adb.GetSerialNumber(), 'forward',
83 'tcp:%s' % host_adb_control_port, 83 'tcp:%s' % self._host_adb_control_port,
84 'localabstract:%s' % Forwarder._DEVICE_ADB_CONTROL_PORT]) != 0: 84 'localabstract:%s' % Forwarder._DEVICE_ADB_CONTROL_PORT]) != 0:
85 raise Exception('Error while running adb forward.') 85 raise Exception('Error while running adb forward.')
86 86
87 (exit_code, output) = self._adb.GetShellCommandStatusAndOutput( 87 (exit_code, output) = self._adb.GetShellCommandStatusAndOutput(
88 '%s %s %s %s' % (Forwarder._LD_LIBRARY_PATH, tool.GetUtilWrapper(), 88 '%s %s %s %s' % (Forwarder._LD_LIBRARY_PATH, tool.GetUtilWrapper(),
89 Forwarder._DEVICE_FORWARDER_PATH, 89 Forwarder._DEVICE_FORWARDER_PATH,
90 Forwarder._DEVICE_ADB_CONTROL_PORT)) 90 Forwarder._DEVICE_ADB_CONTROL_PORT))
91 if exit_code != 0: 91 if exit_code != 0:
92 raise Exception( 92 raise Exception(
93 'Failed to start device forwarder:\n%s' % '\n'.join(output)) 93 'Failed to start device forwarder:\n%s' % '\n'.join(output))
(...skipping 13 matching lines...) Expand all
107 tokens = output.split(':') 107 tokens = output.split(':')
108 if len(tokens) != 2: 108 if len(tokens) != 2:
109 raise Exception('Unexpected host forwarder output "%s", ' + 109 raise Exception('Unexpected host forwarder output "%s", ' +
110 'expected "device_port:host_port"' % output) 110 'expected "device_port:host_port"' % output)
111 device_port = int(tokens[0]) 111 device_port = int(tokens[0])
112 host_port = int(tokens[1]) 112 host_port = int(tokens[1])
113 self._host_to_device_port_map[host_port] = device_port 113 self._host_to_device_port_map[host_port] = device_port
114 logging.info('Forwarding device port: %d to host port: %d.', device_port, 114 logging.info('Forwarding device port: %d to host port: %d.', device_port,
115 host_port) 115 host_port)
116 116
117 def UnmapDevicePort(self, device_port):
118 # Please note the minus sign below.
119 redirection_command = '%d:-%d' % (self._host_adb_control_port, device_port)
120 (exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
121 [self._host_forwarder_path, redirection_command])
122 if exit_code != 0:
123 raise Exception('%s exited with %d:\n%s' % (
124 self._host_forwarder_path, exit_code, '\n'.join(output)))
125
117 @staticmethod 126 @staticmethod
118 def KillHost(build_type): 127 def KillHost(build_type):
119 logging.info('Killing host_forwarder.') 128 logging.info('Killing host_forwarder.')
120 host_forwarder_path = _MakeBinaryPath(build_type, 'host_forwarder') 129 host_forwarder_path = _MakeBinaryPath(build_type, 'host_forwarder')
121 assert os.path.exists(host_forwarder_path), 'Please build forwarder2' 130 assert os.path.exists(host_forwarder_path), 'Please build forwarder2'
122 (exit_code, output) = cmd_helper.GetCmdStatusAndOutput( 131 (exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
123 [host_forwarder_path, 'kill-server']) 132 [host_forwarder_path, 'kill-server'])
124 if exit_code != 0: 133 if exit_code != 0:
125 (exit_code, output) = cmd_helper.GetCmdStatusAndOutput( 134 (exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
126 ['pkill', 'host_forwarder']) 135 ['pkill', 'host_forwarder'])
(...skipping 21 matching lines...) Expand all
148 157
149 def DevicePortForHostPort(self, host_port): 158 def DevicePortForHostPort(self, host_port):
150 """Get the device port that corresponds to a given host port.""" 159 """Get the device port that corresponds to a given host port."""
151 return self._host_to_device_port_map.get(host_port) 160 return self._host_to_device_port_map.get(host_port)
152 161
153 def Close(self): 162 def Close(self):
154 """Terminate the forwarder process.""" 163 """Terminate the forwarder process."""
155 if self._device_process: 164 if self._device_process:
156 self._device_process.close() 165 self._device_process.close()
157 self._device_process = None 166 self._device_process = None
OLDNEW
« no previous file with comments | « build/android/pylib/chrome_test_server_spawner.py ('k') | tools/android/forwarder2/daemon.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698