1be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# 2be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Copyright 2008 Google Inc. All Rights Reserved. 3be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# 4be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 51a2914a3501e0c719e2f77e1ce9ab4f9eb12067ajamesrenimport os 6be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.frontend.afe import rpc_client_lib 7be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.frontend.afe.json_rpc import proxy 8f4a6899c2460fecc0cc0b72727afc9c51cb05da7showardfrom autotest_lib.client.common_lib import global_config, utils 937eceaa2d0640edd83c4df3fc71621022433d52ambligh 1037eceaa2d0640edd83c4df3fc71621022433d52amblighGLOBAL_CONFIG = global_config.global_config 1137eceaa2d0640edd83c4df3fc71621022433d52amblighDEFAULT_SERVER = 'autotest' 12347aaf4b6830f64709ba76217c2db702a7c1a98dScott ZawalskiAFE_RPC_PATH = '/afe/server/noauth/rpc/' 13347aaf4b6830f64709ba76217c2db702a7c1a98dScott ZawalskiTKO_RPC_PATH = '/new_tko/server/noauth/rpc/' 14be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 15be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 16b68405d62bbf9b0c4a640754d6aaa2892eca9948mblighclass AuthError(Exception): 17b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh pass 18b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh 19b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh 20be630eb07ddb84310fcc580acffcaa362a2dc606mblighdef get_autotest_server(web_server=None): 21be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if not web_server: 22be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if 'AUTOTEST_WEB' in os.environ: 23be630eb07ddb84310fcc580acffcaa362a2dc606mbligh web_server = os.environ['AUTOTEST_WEB'] 24be630eb07ddb84310fcc580acffcaa362a2dc606mbligh else: 2537eceaa2d0640edd83c4df3fc71621022433d52ambligh web_server = 'http://' + GLOBAL_CONFIG.get_config_value( 2637eceaa2d0640edd83c4df3fc71621022433d52ambligh 'SERVER', 'hostname', default=DEFAULT_SERVER) 27be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 28be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # if the name doesn't start with http://, 29be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # nonexistant hosts get an obscure error 30be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if not web_server.startswith('http://'): 31be630eb07ddb84310fcc580acffcaa362a2dc606mbligh web_server = 'http://' + web_server 32be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 33be630eb07ddb84310fcc580acffcaa362a2dc606mbligh return web_server 34be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 35be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 36759b6d090629ac4a9d050dd5b267a4115d9c27e0mblighclass rpc_comm(object): 37759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh """Shared AFE/TKO RPC class stuff""" 3833a8a7e0b56d6ff330f56d06e15d54576349571fmbligh def __init__(self, web_server, rpc_path, username): 3933a8a7e0b56d6ff330f56d06e15d54576349571fmbligh self.username = username 40be630eb07ddb84310fcc580acffcaa362a2dc606mbligh self.web_server = get_autotest_server(web_server) 41b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh try: 42b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh self.proxy = self._connect(rpc_path) 43b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh except rpc_client_lib.AuthError, s: 44b68405d62bbf9b0c4a640754d6aaa2892eca9948mbligh raise AuthError(s) 45be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 4611efd23719fc94edb23540240f12969fa1d25367mbligh 475557957d382f35b85ebdc4c44dc05df1b3e1b787showard def _connect(self, rpc_path): 48be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # This does not fail even if the address is wrong. 49be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # We need to wait for an actual RPC to fail 501a2914a3501e0c719e2f77e1ce9ab4f9eb12067ajamesren headers = rpc_client_lib.authorization_headers(self.username, 511a2914a3501e0c719e2f77e1ce9ab4f9eb12067ajamesren self.web_server) 525557957d382f35b85ebdc4c44dc05df1b3e1b787showard rpc_server = self.web_server + rpc_path 53be630eb07ddb84310fcc580acffcaa362a2dc606mbligh return rpc_client_lib.get_proxy(rpc_server, headers=headers) 54be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 55be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 565557957d382f35b85ebdc4c44dc05df1b3e1b787showard def run(self, op, *args, **data): 57e249072ae260a3a7ed49c25e4fd9f60f6a8e5cfembligh if 'AUTOTEST_CLI_DEBUG' in os.environ: 589196763511b2827552abcd46fd4a1b3dc471f510mbligh print self.web_server, op, args, data 59be630eb07ddb84310fcc580acffcaa362a2dc606mbligh function = getattr(self.proxy, op) 609196763511b2827552abcd46fd4a1b3dc471f510mbligh result = function(*args, **data) 619196763511b2827552abcd46fd4a1b3dc471f510mbligh if 'AUTOTEST_CLI_DEBUG' in os.environ: 629196763511b2827552abcd46fd4a1b3dc471f510mbligh print 'result:', result 639196763511b2827552abcd46fd4a1b3dc471f510mbligh return result 64759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh 65759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh 66759b6d090629ac4a9d050dd5b267a4115d9c27e0mblighclass afe_comm(rpc_comm): 67759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh """Handles the AFE setup and communication through RPC""" 6833a8a7e0b56d6ff330f56d06e15d54576349571fmbligh def __init__(self, web_server=None, rpc_path=AFE_RPC_PATH, username=None): 6933a8a7e0b56d6ff330f56d06e15d54576349571fmbligh super(afe_comm, self).__init__(web_server, rpc_path, username) 70759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh 71759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh 72759b6d090629ac4a9d050dd5b267a4115d9c27e0mblighclass tko_comm(rpc_comm): 73759b6d090629ac4a9d050dd5b267a4115d9c27e0mbligh """Handles the TKO setup and communication through RPC""" 7433a8a7e0b56d6ff330f56d06e15d54576349571fmbligh def __init__(self, web_server=None, rpc_path=TKO_RPC_PATH, username=None): 7533a8a7e0b56d6ff330f56d06e15d54576349571fmbligh super(tko_comm, self).__init__(web_server, rpc_path, username) 76