mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 1 | # |
| 2 | # Copyright 2008 Google Inc. All Rights Reserved. |
| 3 | # |
| 4 | |
| 5 | import os, getpass |
| 6 | from autotest_lib.frontend.afe import rpc_client_lib |
| 7 | from autotest_lib.frontend.afe.json_rpc import proxy |
mbligh | 37eceaa | 2008-12-15 22:56:37 +0000 | [diff] [blame] | 8 | from autotest_lib.client.common_lib import global_config |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 9 | |
mbligh | 37eceaa | 2008-12-15 22:56:37 +0000 | [diff] [blame] | 10 | GLOBAL_CONFIG = global_config.global_config |
| 11 | DEFAULT_SERVER = 'autotest' |
| 12 | AFE_RPC_PATH = '/afe/server/noauth/rpc/' |
| 13 | TKO_RPC_PATH = '/new_tko/server/noauth/rpc/' |
| 14 | |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 15 | |
| 16 | def get_autotest_server(web_server=None): |
| 17 | if not web_server: |
| 18 | if 'AUTOTEST_WEB' in os.environ: |
| 19 | web_server = os.environ['AUTOTEST_WEB'] |
| 20 | else: |
mbligh | 37eceaa | 2008-12-15 22:56:37 +0000 | [diff] [blame] | 21 | web_server = 'http://' + GLOBAL_CONFIG.get_config_value( |
| 22 | 'SERVER', 'hostname', default=DEFAULT_SERVER) |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 23 | |
| 24 | # if the name doesn't start with http://, |
| 25 | # nonexistant hosts get an obscure error |
| 26 | if not web_server.startswith('http://'): |
| 27 | web_server = 'http://' + web_server |
| 28 | |
| 29 | return web_server |
| 30 | |
| 31 | |
mbligh | 759b6d0 | 2008-10-21 16:28:18 +0000 | [diff] [blame] | 32 | class rpc_comm(object): |
| 33 | """Shared AFE/TKO RPC class stuff""" |
mbligh | 33a8a7e | 2008-11-18 14:57:11 +0000 | [diff] [blame] | 34 | def __init__(self, web_server, rpc_path, username): |
| 35 | self.username = username |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 36 | self.web_server = get_autotest_server(web_server) |
showard | 5557957 | 2008-09-19 00:44:35 +0000 | [diff] [blame] | 37 | self.proxy = self._connect(rpc_path) |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 38 | |
mbligh | 11efd23 | 2008-11-27 00:20:46 +0000 | [diff] [blame] | 39 | |
showard | 5557957 | 2008-09-19 00:44:35 +0000 | [diff] [blame] | 40 | def _connect(self, rpc_path): |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 41 | # This does not fail even if the address is wrong. |
| 42 | # We need to wait for an actual RPC to fail |
mbligh | 33a8a7e | 2008-11-18 14:57:11 +0000 | [diff] [blame] | 43 | if self.username: |
| 44 | username = self.username |
mbligh | 11efd23 | 2008-11-27 00:20:46 +0000 | [diff] [blame] | 45 | elif 'AUTOTEST_USER' in os.environ: |
| 46 | username = os.environ['AUTOTEST_USER'] |
mbligh | 33a8a7e | 2008-11-18 14:57:11 +0000 | [diff] [blame] | 47 | else: |
| 48 | username = getpass.getuser() |
| 49 | headers = {'AUTHORIZATION' : username} |
showard | 5557957 | 2008-09-19 00:44:35 +0000 | [diff] [blame] | 50 | rpc_server = self.web_server + rpc_path |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 51 | return rpc_client_lib.get_proxy(rpc_server, headers=headers) |
| 52 | |
| 53 | |
showard | 5557957 | 2008-09-19 00:44:35 +0000 | [diff] [blame] | 54 | def run(self, op, *args, **data): |
mbligh | e249072 | 2008-12-22 14:55:50 +0000 | [diff] [blame^] | 55 | if 'AUTOTEST_CLI_DEBUG' in os.environ: |
| 56 | print '%s %s %s' % (op, args, data) |
mbligh | be630eb | 2008-08-01 16:41:48 +0000 | [diff] [blame] | 57 | function = getattr(self.proxy, op) |
showard | 5557957 | 2008-09-19 00:44:35 +0000 | [diff] [blame] | 58 | return function(*args, **data) |
mbligh | 759b6d0 | 2008-10-21 16:28:18 +0000 | [diff] [blame] | 59 | |
| 60 | |
| 61 | class afe_comm(rpc_comm): |
| 62 | """Handles the AFE setup and communication through RPC""" |
mbligh | 33a8a7e | 2008-11-18 14:57:11 +0000 | [diff] [blame] | 63 | def __init__(self, web_server=None, rpc_path=AFE_RPC_PATH, username=None): |
| 64 | super(afe_comm, self).__init__(web_server, rpc_path, username) |
mbligh | 759b6d0 | 2008-10-21 16:28:18 +0000 | [diff] [blame] | 65 | |
| 66 | |
| 67 | class tko_comm(rpc_comm): |
| 68 | """Handles the TKO setup and communication through RPC""" |
mbligh | 33a8a7e | 2008-11-18 14:57:11 +0000 | [diff] [blame] | 69 | def __init__(self, web_server=None, rpc_path=TKO_RPC_PATH, username=None): |
| 70 | super(tko_comm, self).__init__(web_server, rpc_path, username) |