Chromium Code Reviews| 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 sys | 10 import sys |
| 10 | 11 |
| 11 from pylib import constants | 12 from pylib import constants |
| 12 from pylib.base import environment | 13 from pylib.base import environment |
| 13 from pylib.remote.device import appurify_sanitized | 14 from pylib.remote.device import appurify_sanitized |
| 14 from pylib.remote.device import remote_device_helper | 15 from pylib.remote.device import remote_device_helper |
| 15 | 16 |
| 16 class RemoteDeviceEnvironment(environment.Environment): | 17 class RemoteDeviceEnvironment(environment.Environment): |
| 17 """An environment for running on remote devices.""" | 18 """An environment for running on remote devices.""" |
| 18 | 19 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 53 error_func('Must set api port with --api-port.') | 54 error_func('Must set api port with --api-port.') |
| 54 self._api_port = args.api_port | 55 self._api_port = args.api_port |
| 55 | 56 |
| 56 self._access_token = '' | 57 self._access_token = '' |
| 57 self._results_path = args.results_path | 58 self._results_path = args.results_path |
| 58 self._remote_device = args.remote_device | 59 self._remote_device = args.remote_device |
| 59 self._remote_device_os = args.remote_device_os | 60 self._remote_device_os = args.remote_device_os |
| 60 self._runner_package = args.runner_package | 61 self._runner_package = args.runner_package |
| 61 self._runner_type = args.runner_type | 62 self._runner_type = args.runner_type |
| 62 self._device = '' | 63 self._device = '' |
| 64 self._verbose_count = args.verbose_count | |
| 65 | |
| 63 if not args.trigger and not args.collect: | 66 if not args.trigger and not args.collect: |
| 64 self._trigger = True | 67 self._trigger = True |
| 65 self._collect = True | 68 self._collect = True |
| 66 else: | 69 else: |
| 67 self._trigger = args.trigger | 70 self._trigger = args.trigger |
| 68 self._collect = args.collect | 71 self._collect = args.collect |
| 69 | 72 |
| 70 def SetUp(self): | 73 def SetUp(self): |
| 71 """Set up the test environment.""" | 74 """Set up the test environment.""" |
| 72 os.environ['APPURIFY_API_PROTO'] = self._api_protocol | 75 os.environ['APPURIFY_API_PROTO'] = self._api_protocol |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 89 self.__exit__(*sys.exc_info()) | 92 self.__exit__(*sys.exc_info()) |
| 90 raise | 93 raise |
| 91 | 94 |
| 92 def __exit__(self, exc_type, exc_val, exc_tb): | 95 def __exit__(self, exc_type, exc_val, exc_tb): |
| 93 """Tears down the test run when used as a context manager.""" | 96 """Tears down the test run when used as a context manager.""" |
| 94 self.TearDown() | 97 self.TearDown() |
| 95 | 98 |
| 96 def _GetAccessToken(self): | 99 def _GetAccessToken(self): |
| 97 """Generates access token for remote device service.""" | 100 """Generates access token for remote device service.""" |
| 98 logging.info('Generating remote service access token') | 101 logging.info('Generating remote service access token') |
| 102 remote_device_helper.SetLogging(self._verbose_count, logging.WARNING) | |
|
jbudorick
2015/01/05 16:52:29
Could we have remote_device_helper provide this fu
rnephew (Wrong account)
2015/01/05 19:31:53
Done, except I moved it to appurify_sanitize becau
| |
| 99 access_token_results = appurify_sanitized.api.access_token_generate( | 103 access_token_results = appurify_sanitized.api.access_token_generate( |
| 100 self._api_key, self._api_secret) | 104 self._api_key, self._api_secret) |
| 105 remote_device_helper.SetLogging(self._verbose_count, logging.NOTSET) | |
| 101 remote_device_helper.TestHttpResponse(access_token_results, | 106 remote_device_helper.TestHttpResponse(access_token_results, |
| 102 'Unable to generate access token.') | 107 'Unable to generate access token.') |
| 103 self._access_token = access_token_results.json()['response']['access_token'] | 108 self._access_token = access_token_results.json()['response']['access_token'] |
| 104 | 109 |
| 105 def _RevokeAccessToken(self): | 110 def _RevokeAccessToken(self): |
| 106 """Destroys access token for remote device service.""" | 111 """Destroys access token for remote device service.""" |
| 107 logging.info('Revoking remote service access token') | 112 logging.info('Revoking remote service access token') |
| 113 remote_device_helper.SetLogging(self._verbose_count, logging.WARNING) | |
| 108 revoke_token_results = appurify_sanitized.api.access_token_revoke( | 114 revoke_token_results = appurify_sanitized.api.access_token_revoke( |
| 109 self._access_token) | 115 self._access_token) |
| 116 remote_device_helper.SetLogging(self._verbose_count, logging.NOTSET) | |
| 110 remote_device_helper.TestHttpResponse(revoke_token_results, | 117 remote_device_helper.TestHttpResponse(revoke_token_results, |
| 111 'Unable to revoke access token.') | 118 'Unable to revoke access token.') |
| 112 | 119 |
| 113 def _SelectDevice(self): | 120 def _SelectDevice(self): |
| 114 """Select which device to use.""" | 121 """Select which device to use.""" |
| 115 logging.info('Finding %s with %s to run tests on.' % | 122 logging.info('Finding device to run tests on.') |
| 116 (self._remote_device, self._remote_device_os)) | 123 remote_device_helper.SetLogging(self._verbose_count, logging.WARNING) |
| 117 dev_list_res = appurify_sanitized.api.devices_list(self._access_token) | 124 dev_list_res = appurify_sanitized.api.devices_list(self._access_token) |
| 125 remote_device_helper.SetLogging(self._verbose_count, logging.NOTSET) | |
| 118 remote_device_helper.TestHttpResponse(dev_list_res, | 126 remote_device_helper.TestHttpResponse(dev_list_res, |
| 119 'Unable to generate access token.') | 127 'Unable to generate access token.') |
| 120 device_list = dev_list_res.json()['response'] | 128 device_list = dev_list_res.json()['response'] |
| 129 random.shuffle(device_list) | |
| 121 for device in device_list: | 130 for device in device_list: |
| 122 if (device['name'] == self._remote_device | 131 if device['os_name'] != 'Android': |
| 123 and device['os_version'] == self._remote_device_os): | 132 continue |
| 133 if self._remote_device: | |
| 134 if device['name'] != self._remote_device: | |
|
jbudorick
2015/01/05 16:52:29
Can't this just be
if self._remote_device and d
rnephew (Wrong account)
2015/01/05 19:31:53
Done.
| |
| 135 continue | |
| 136 if self._remote_device_os: | |
| 137 if device['os_version'] != self._remote_device_os: | |
|
jbudorick
2015/01/05 16:52:29
(similar)
rnephew (Wrong account)
2015/01/05 19:31:53
Done.
| |
| 138 continue | |
| 139 if device['available_devices_count'] > 0: | |
| 140 logging.info('Found device: %s %s' % | |
| 141 (device['name'], device['os_version'])) | |
| 124 return device['device_type_id'] | 142 return device['device_type_id'] |
| 125 self._NoDeviceFound(device_list) | 143 self._NoDeviceFound(device_list) |
| 126 | 144 |
| 127 def _PrintAvailableDevices(self, device_list): | 145 def _PrintAvailableDevices(self, device_list): |
| 128 def compare_devices(a,b): | 146 def compare_devices(a,b): |
| 129 for key in ('os_version', 'name'): | 147 for key in ('os_version', 'name'): |
| 130 c = cmp(a[key], b[key]) | 148 c = cmp(a[key], b[key]) |
| 131 if c: | 149 if c: |
| 132 return c | 150 return c |
| 133 return 0 | 151 return 0 |
| 134 | 152 |
| 135 logging.critical('Available Android Devices:') | 153 logging.critical('Available Android Devices:') |
| 136 android_devices = (d for d in device_list if d['os_name'] == 'Android') | 154 android_devices = (d for d in device_list if d['os_name'] == 'Android') |
| 137 for d in sorted(android_devices, compare_devices): | 155 for d in sorted(android_devices, compare_devices): |
| 138 logging.critical(' %s %s', d['os_version'].ljust(7), d['name']) | 156 logging.critical(' %s %s', d['os_version'].ljust(7), d['name']) |
| 139 | 157 |
| 140 def _NoDeviceFound(self, device_list): | 158 def _NoDeviceFound(self, device_list): |
| 141 self._PrintAvailableDevices(device_list) | 159 self._PrintAvailableDevices(device_list) |
| 142 raise remote_device_helper.RemoteDeviceError('No device found: %s %s' % | 160 raise remote_device_helper.RemoteDeviceError('No device found.') |
| 143 (self._remote_device, self._remote_device_os)) | |
| 144 | 161 |
| 145 @property | 162 @property |
| 146 def device(self): | 163 def device(self): |
| 147 return self._device | 164 return self._device |
| 148 | 165 |
| 149 @property | 166 @property |
| 150 def token(self): | 167 def token(self): |
| 151 return self._access_token | 168 return self._access_token |
| 152 | 169 |
| 153 @property | 170 @property |
| 154 def results_path(self): | 171 def results_path(self): |
| 155 return self._results_path | 172 return self._results_path |
| 156 | 173 |
| 157 @property | 174 @property |
| 158 def runner_type(self): | 175 def runner_type(self): |
| 159 return self._runner_type | 176 return self._runner_type |
| 160 | 177 |
| 161 @property | 178 @property |
| 162 def runner_package(self): | 179 def runner_package(self): |
| 163 return self._runner_package | 180 return self._runner_package |
| 164 | 181 |
| 165 @property | 182 @property |
| 166 def trigger(self): | 183 def trigger(self): |
| 167 return self._trigger | 184 return self._trigger |
| 168 | 185 |
| 169 @property | 186 @property |
| 170 def collect(self): | 187 def collect(self): |
| 171 return self._collect | 188 return self._collect |
| 189 | |
| 190 @property | |
| 191 def verbose_count(self): | |
| 192 return self._verbose_count | |
| OLD | NEW |