blob: 5708dd62935f56209e7a8855e582ad43e3da1717 [file] [log] [blame]
mblighbe630eb2008-08-01 16:41:48 +00001#
2# Copyright 2008 Google Inc. All Rights Reserved.
3#
4
5import os, getpass
6from autotest_lib.frontend.afe import rpc_client_lib
7from autotest_lib.frontend.afe.json_rpc import proxy
mbligh37eceaa2008-12-15 22:56:37 +00008from autotest_lib.client.common_lib import global_config
mblighbe630eb2008-08-01 16:41:48 +00009
mbligh37eceaa2008-12-15 22:56:37 +000010GLOBAL_CONFIG = global_config.global_config
11DEFAULT_SERVER = 'autotest'
12AFE_RPC_PATH = '/afe/server/noauth/rpc/'
13TKO_RPC_PATH = '/new_tko/server/noauth/rpc/'
14
mblighbe630eb2008-08-01 16:41:48 +000015
16def 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:
mbligh37eceaa2008-12-15 22:56:37 +000021 web_server = 'http://' + GLOBAL_CONFIG.get_config_value(
22 'SERVER', 'hostname', default=DEFAULT_SERVER)
mblighbe630eb2008-08-01 16:41:48 +000023
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
mbligh759b6d02008-10-21 16:28:18 +000032class rpc_comm(object):
33 """Shared AFE/TKO RPC class stuff"""
mbligh33a8a7e2008-11-18 14:57:11 +000034 def __init__(self, web_server, rpc_path, username):
35 self.username = username
mblighbe630eb2008-08-01 16:41:48 +000036 self.web_server = get_autotest_server(web_server)
showard55579572008-09-19 00:44:35 +000037 self.proxy = self._connect(rpc_path)
mblighbe630eb2008-08-01 16:41:48 +000038
mbligh11efd232008-11-27 00:20:46 +000039
showard55579572008-09-19 00:44:35 +000040 def _connect(self, rpc_path):
mblighbe630eb2008-08-01 16:41:48 +000041 # This does not fail even if the address is wrong.
42 # We need to wait for an actual RPC to fail
mbligh33a8a7e2008-11-18 14:57:11 +000043 if self.username:
44 username = self.username
mbligh11efd232008-11-27 00:20:46 +000045 elif 'AUTOTEST_USER' in os.environ:
46 username = os.environ['AUTOTEST_USER']
mbligh33a8a7e2008-11-18 14:57:11 +000047 else:
48 username = getpass.getuser()
49 headers = {'AUTHORIZATION' : username}
showard55579572008-09-19 00:44:35 +000050 rpc_server = self.web_server + rpc_path
mblighbe630eb2008-08-01 16:41:48 +000051 return rpc_client_lib.get_proxy(rpc_server, headers=headers)
52
53
showard55579572008-09-19 00:44:35 +000054 def run(self, op, *args, **data):
mblighe2490722008-12-22 14:55:50 +000055 if 'AUTOTEST_CLI_DEBUG' in os.environ:
56 print '%s %s %s' % (op, args, data)
mblighbe630eb2008-08-01 16:41:48 +000057 function = getattr(self.proxy, op)
showard55579572008-09-19 00:44:35 +000058 return function(*args, **data)
mbligh759b6d02008-10-21 16:28:18 +000059
60
61class afe_comm(rpc_comm):
62 """Handles the AFE setup and communication through RPC"""
mbligh33a8a7e2008-11-18 14:57:11 +000063 def __init__(self, web_server=None, rpc_path=AFE_RPC_PATH, username=None):
64 super(afe_comm, self).__init__(web_server, rpc_path, username)
mbligh759b6d02008-10-21 16:28:18 +000065
66
67class tko_comm(rpc_comm):
68 """Handles the TKO setup and communication through RPC"""
mbligh33a8a7e2008-11-18 14:57:11 +000069 def __init__(self, web_server=None, rpc_path=TKO_RPC_PATH, username=None):
70 super(tko_comm, self).__init__(web_server, rpc_path, username)