OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 """Environment setup and teardown for remote devices.""" | 5 """Environment setup and teardown for remote devices.""" |
6 | 6 |
7 import logging | 7 import logging |
8 import os | 8 import os |
9 import random | 9 import random |
10 import sys | 10 import sys |
11 | 11 |
12 from pylib import constants | 12 from pylib import constants |
13 from pylib.base import environment | 13 from pylib.base import environment |
14 from pylib.remote.device import appurify_sanitized | 14 from pylib.remote.device import appurify_sanitized |
15 from pylib.remote.device import remote_device_helper | 15 from pylib.remote.device import remote_device_helper |
16 | 16 |
17 class RemoteDeviceEnvironment(environment.Environment): | 17 class RemoteDeviceEnvironment(environment.Environment): |
18 """An environment for running on remote devices.""" | 18 """An environment for running on remote devices.""" |
19 | 19 |
| 20 _ENV_KEY = 'env' |
| 21 _DEVICE_KEY = 'device' |
| 22 |
20 def __init__(self, args, error_func): | 23 def __init__(self, args, error_func): |
21 """Constructor. | 24 """Constructor. |
22 | 25 |
23 Args: | 26 Args: |
24 args: Command line arguments. | 27 args: Command line arguments. |
25 error_func: error to show when using bad command line arguments. | 28 error_func: error to show when using bad command line arguments. |
26 """ | 29 """ |
27 super(RemoteDeviceEnvironment, self).__init__() | 30 super(RemoteDeviceEnvironment, self).__init__() |
28 | 31 |
29 if args.api_key_file: | 32 if args.api_key_file: |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 self.SetUp() | 98 self.SetUp() |
96 return self | 99 return self |
97 except: | 100 except: |
98 self.__exit__(*sys.exc_info()) | 101 self.__exit__(*sys.exc_info()) |
99 raise | 102 raise |
100 | 103 |
101 def __exit__(self, exc_type, exc_val, exc_tb): | 104 def __exit__(self, exc_type, exc_val, exc_tb): |
102 """Tears down the test run when used as a context manager.""" | 105 """Tears down the test run when used as a context manager.""" |
103 self.TearDown() | 106 self.TearDown() |
104 | 107 |
| 108 def DumpTo(self, persisted_data): |
| 109 env_data = { |
| 110 self._DEVICE_KEY: self._device, |
| 111 } |
| 112 persisted_data[self._ENV_KEY] = env_data |
| 113 |
| 114 def LoadFrom(self, persisted_data): |
| 115 env_data = persisted_data[self._ENV_KEY] |
| 116 self._device = env_data[self._DEVICE_KEY] |
| 117 |
105 def _GetAccessToken(self): | 118 def _GetAccessToken(self): |
106 """Generates access token for remote device service.""" | 119 """Generates access token for remote device service.""" |
107 logging.info('Generating remote service access token') | 120 logging.info('Generating remote service access token') |
108 with appurify_sanitized.SanitizeLogging(self._verbose_count, | 121 with appurify_sanitized.SanitizeLogging(self._verbose_count, |
109 logging.WARNING): | 122 logging.WARNING): |
110 access_token_results = appurify_sanitized.api.access_token_generate( | 123 access_token_results = appurify_sanitized.api.access_token_generate( |
111 self._api_key, self._api_secret) | 124 self._api_key, self._api_secret) |
112 remote_device_helper.TestHttpResponse(access_token_results, | 125 remote_device_helper.TestHttpResponse(access_token_results, |
113 'Unable to generate access token.') | 126 'Unable to generate access token.') |
114 self._access_token = access_token_results.json()['response']['access_token'] | 127 self._access_token = access_token_results.json()['response']['access_token'] |
(...skipping 23 matching lines...) Expand all Loading... |
138 continue | 151 continue |
139 if self._remote_device and device['name'] != self._remote_device: | 152 if self._remote_device and device['name'] != self._remote_device: |
140 continue | 153 continue |
141 if (self._remote_device_os | 154 if (self._remote_device_os |
142 and device['os_version'] != self._remote_device_os): | 155 and device['os_version'] != self._remote_device_os): |
143 continue | 156 continue |
144 if ((self._remote_device and self._remote_device_os) | 157 if ((self._remote_device and self._remote_device_os) |
145 or device['available_devices_count']): | 158 or device['available_devices_count']): |
146 logging.info('Found device: %s %s', | 159 logging.info('Found device: %s %s', |
147 device['name'], device['os_version']) | 160 device['name'], device['os_version']) |
148 return device['device_type_id'] | 161 return device |
149 self._NoDeviceFound(device_list) | 162 self._NoDeviceFound(device_list) |
150 | 163 |
151 def _PrintAvailableDevices(self, device_list): | 164 def _PrintAvailableDevices(self, device_list): |
152 def compare_devices(a,b): | 165 def compare_devices(a,b): |
153 for key in ('os_version', 'name'): | 166 for key in ('os_version', 'name'): |
154 c = cmp(a[key], b[key]) | 167 c = cmp(a[key], b[key]) |
155 if c: | 168 if c: |
156 return c | 169 return c |
157 return 0 | 170 return 0 |
158 | 171 |
159 logging.critical('Available Android Devices:') | 172 logging.critical('Available Android Devices:') |
160 android_devices = (d for d in device_list if d['os_name'] == 'Android') | 173 android_devices = (d for d in device_list if d['os_name'] == 'Android') |
161 for d in sorted(android_devices, compare_devices): | 174 for d in sorted(android_devices, compare_devices): |
162 logging.critical(' %s %s', d['os_version'].ljust(7), d['name']) | 175 logging.critical(' %s %s', d['os_version'].ljust(7), d['name']) |
163 | 176 |
164 def _NoDeviceFound(self, device_list): | 177 def _NoDeviceFound(self, device_list): |
165 self._PrintAvailableDevices(device_list) | 178 self._PrintAvailableDevices(device_list) |
166 raise remote_device_helper.RemoteDeviceError('No device found.') | 179 raise remote_device_helper.RemoteDeviceError('No device found.') |
167 | 180 |
168 @property | 181 @property |
169 def device(self): | 182 def collect(self): |
170 return self._device | 183 return self._collect |
| 184 |
| 185 @property |
| 186 def device_type_id(self): |
| 187 return self._device['device_type_id'] |
| 188 |
| 189 @property |
| 190 def only_output_failures(self): |
| 191 # TODO(jbudorick): Remove this once b/18981674 is fixed. |
| 192 return True |
| 193 |
| 194 @property |
| 195 def results_path(self): |
| 196 return self._results_path |
| 197 |
| 198 @property |
| 199 def runner_package(self): |
| 200 return self._runner_package |
| 201 |
| 202 @property |
| 203 def runner_type(self): |
| 204 return self._runner_type |
| 205 |
| 206 @property |
| 207 def timeouts(self): |
| 208 return self._timeouts |
171 | 209 |
172 @property | 210 @property |
173 def token(self): | 211 def token(self): |
174 return self._access_token | 212 return self._access_token |
175 | 213 |
176 @property | 214 @property |
177 def results_path(self): | |
178 return self._results_path | |
179 | |
180 @property | |
181 def runner_type(self): | |
182 return self._runner_type | |
183 | |
184 @property | |
185 def runner_package(self): | |
186 return self._runner_package | |
187 | |
188 @property | |
189 def trigger(self): | 215 def trigger(self): |
190 return self._trigger | 216 return self._trigger |
191 | 217 |
192 @property | 218 @property |
193 def collect(self): | |
194 return self._collect | |
195 | |
196 @property | |
197 def verbose_count(self): | 219 def verbose_count(self): |
198 return self._verbose_count | 220 return self._verbose_count |
199 | |
200 @property | |
201 def timeouts(self): | |
202 return self._timeouts | |
OLD | NEW |