| 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 | 5 |
| 6 import collections |
| 6 import default_flavor | 7 import default_flavor |
| 7 import posixpath | 8 import posixpath |
| 8 | 9 |
| 9 | 10 |
| 10 """Utils for running tests remotely over SSH.""" | 11 """Utils for running tests remotely over SSH.""" |
| 11 | 12 |
| 12 | 13 |
| 13 DEFAULT_PORT = '22' | 14 DEFAULT_PORT = '22' |
| 14 DEFAULT_USER = 'chrome-bot' | 15 DEFAULT_USER = 'chrome-bot' |
| 15 | 16 |
| 16 | 17 |
| 18 SlaveInfo = collections.namedtuple('SlaveInfo', |
| 19 'ssh_user ssh_host ssh_port') |
| 20 |
| 21 SLAVE_INFO = { |
| 22 'skiabot-shuttle-ubuntu12-003': |
| 23 SlaveInfo('root', '192.168.1.123', DEFAULT_PORT), |
| 24 'skiabot-shuttle-ubuntu12-004': |
| 25 SlaveInfo('root', '192.168.1.134', DEFAULT_PORT), |
| 26 'default': |
| 27 SlaveInfo('nouser', 'noip', 'noport'), |
| 28 } |
| 29 |
| 30 |
| 17 class SSHFlavorUtils(default_flavor.DefaultFlavorUtils): | 31 class SSHFlavorUtils(default_flavor.DefaultFlavorUtils): |
| 18 def __init__(self, *args, **kwargs): | 32 def __init__(self, *args, **kwargs): |
| 19 super(SSHFlavorUtils, self).__init__(*args, **kwargs) | 33 super(SSHFlavorUtils, self).__init__(*args, **kwargs) |
| 20 self._host = None | 34 slave_info = SLAVE_INFO.get(self._skia_api.c.SLAVE_NAME, |
| 21 self._port = None | 35 SLAVE_INFO['default']) |
| 22 self._user = None | 36 self._host = slave_info.ssh_host |
| 37 self._port = slave_info.ssh_port |
| 38 self._user = slave_info.ssh_user |
| 23 | 39 |
| 24 @property | 40 @property |
| 25 def host(self): | 41 def host(self): |
| 26 if not self._host: | |
| 27 self._host = self._skia_api.c.slave_cfg['ssh_host'] | |
| 28 return self._host | 42 return self._host |
| 29 | 43 |
| 30 @property | 44 @property |
| 31 def port(self): | 45 def port(self): |
| 32 if not self._port: | |
| 33 self._port = self._skia_api.c.slave_cfg.get('ssh_port', DEFAULT_PORT) | |
| 34 return self._port | 46 return self._port |
| 35 | 47 |
| 36 @property | 48 @property |
| 37 def user(self): | 49 def user(self): |
| 38 if not self._user: | |
| 39 self._user = self._skia_api.c.slave_cfg.get('ssh_user', DEFAULT_USER) | |
| 40 return self._user | 50 return self._user |
| 41 | 51 |
| 42 def ssh(self, name, cmd, **kwargs): | 52 def ssh(self, name, cmd, **kwargs): |
| 43 """Run the given SSH command.""" | 53 """Run the given SSH command.""" |
| 44 ssh_cmd = ['ssh'] | 54 ssh_cmd = ['ssh'] |
| 45 if self.port: | 55 if self.port: |
| 46 ssh_cmd.extend(['-p', self.port]) | 56 ssh_cmd.extend(['-p', self.port]) |
| 47 dest = self.host | 57 dest = self.host |
| 48 if self.user: | 58 if self.user: |
| 49 dest = self.user + '@' + dest | 59 dest = self.user + '@' + dest |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 self.ssh(name='read %s' % self._skia_api.m.path.basename(path), | 134 self.ssh(name='read %s' % self._skia_api.m.path.basename(path), |
| 125 cmd=['cat', path], | 135 cmd=['cat', path], |
| 126 stdout=self._skia_api.m.raw_io.output()).stdout.rstrip() | 136 stdout=self._skia_api.m.raw_io.output()).stdout.rstrip() |
| 127 | 137 |
| 128 def remove_file_on_device(self, path, *args, **kwargs): | 138 def remove_file_on_device(self, path, *args, **kwargs): |
| 129 """Delete the given file.""" | 139 """Delete the given file.""" |
| 130 return self.ssh(name='rm %s' % self._skia_api.m.path.basename(path), | 140 return self.ssh(name='rm %s' % self._skia_api.m.path.basename(path), |
| 131 cmd=['rm', '-f', path], | 141 cmd=['rm', '-f', path], |
| 132 *args, | 142 *args, |
| 133 **kwargs) | 143 **kwargs) |
| OLD | NEW |