blob: b155ee536f530077ccfb34eb6abc897aacd20798 [file] [log] [blame]
mblighbe630eb2008-08-01 16:41:48 +00001#
2# Copyright 2008 Google Inc. All Rights Reserved.
3#
4
Gregory Nisbet8d60b1c2020-07-14 16:26:46 -07005from __future__ import print_function
6
jamesren1a2914a2010-02-12 00:44:31 +00007import os
mblighbe630eb2008-08-01 16:41:48 +00008from autotest_lib.frontend.afe import rpc_client_lib
9from autotest_lib.frontend.afe.json_rpc import proxy
showardf4a68992010-02-03 20:29:59 +000010from autotest_lib.client.common_lib import global_config, utils
mblighbe630eb2008-08-01 16:41:48 +000011
mbligh37eceaa2008-12-15 22:56:37 +000012GLOBAL_CONFIG = global_config.global_config
13DEFAULT_SERVER = 'autotest'
Scott Zawalski347aaf42012-04-03 16:33:00 -040014AFE_RPC_PATH = '/afe/server/noauth/rpc/'
15TKO_RPC_PATH = '/new_tko/server/noauth/rpc/'
mbligh37eceaa2008-12-15 22:56:37 +000016
mblighbe630eb2008-08-01 16:41:48 +000017
mblighb68405d2010-03-11 18:32:39 +000018class AuthError(Exception):
19 pass
20
21
mblighbe630eb2008-08-01 16:41:48 +000022def get_autotest_server(web_server=None):
23 if not web_server:
24 if 'AUTOTEST_WEB' in os.environ:
25 web_server = os.environ['AUTOTEST_WEB']
26 else:
Prathmesh Prabhu02163aa2017-12-12 19:13:21 -080027 web_server = GLOBAL_CONFIG.get_config_value(
mbligh37eceaa2008-12-15 22:56:37 +000028 'SERVER', 'hostname', default=DEFAULT_SERVER)
mblighbe630eb2008-08-01 16:41:48 +000029
Prathmesh Prabhu2892ff62017-12-19 10:21:31 -080030 web_server = rpc_client_lib.add_protocol(web_server)
mblighbe630eb2008-08-01 16:41:48 +000031 return web_server
32
33
mbligh759b6d02008-10-21 16:28:18 +000034class rpc_comm(object):
35 """Shared AFE/TKO RPC class stuff"""
mbligh33a8a7e2008-11-18 14:57:11 +000036 def __init__(self, web_server, rpc_path, username):
37 self.username = username
mblighbe630eb2008-08-01 16:41:48 +000038 self.web_server = get_autotest_server(web_server)
mblighb68405d2010-03-11 18:32:39 +000039 try:
40 self.proxy = self._connect(rpc_path)
Gregory Nisbet8d60b1c2020-07-14 16:26:46 -070041 except rpc_client_lib.AuthError as s:
mblighb68405d2010-03-11 18:32:39 +000042 raise AuthError(s)
mblighbe630eb2008-08-01 16:41:48 +000043
mbligh11efd232008-11-27 00:20:46 +000044
showard55579572008-09-19 00:44:35 +000045 def _connect(self, rpc_path):
mblighbe630eb2008-08-01 16:41:48 +000046 # This does not fail even if the address is wrong.
47 # We need to wait for an actual RPC to fail
jamesren1a2914a2010-02-12 00:44:31 +000048 headers = rpc_client_lib.authorization_headers(self.username,
49 self.web_server)
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:
Gregory Nisbet8d60b1c2020-07-14 16:26:46 -070056 print(self.web_server, op, args, data)
mblighbe630eb2008-08-01 16:41:48 +000057 function = getattr(self.proxy, op)
mbligh91967632009-03-16 21:45:52 +000058 result = function(*args, **data)
59 if 'AUTOTEST_CLI_DEBUG' in os.environ:
Gregory Nisbet8d60b1c2020-07-14 16:26:46 -070060 print('result:', result)
mbligh91967632009-03-16 21:45:52 +000061 return result
mbligh759b6d02008-10-21 16:28:18 +000062
63
64class afe_comm(rpc_comm):
65 """Handles the AFE setup and communication through RPC"""
mbligh33a8a7e2008-11-18 14:57:11 +000066 def __init__(self, web_server=None, rpc_path=AFE_RPC_PATH, username=None):
67 super(afe_comm, self).__init__(web_server, rpc_path, username)
mbligh759b6d02008-10-21 16:28:18 +000068
69
70class tko_comm(rpc_comm):
71 """Handles the TKO setup and communication through RPC"""
mbligh33a8a7e2008-11-18 14:57:11 +000072 def __init__(self, web_server=None, rpc_path=TKO_RPC_PATH, username=None):
73 super(tko_comm, self).__init__(web_server, rpc_path, username)