1#!/usr/bin/python 2 3# Copyright 2014 The Chromium OS Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6 7import logging 8import logging.handlers 9 10import common 11from autotest_lib.client.common_lib import error 12from autotest_lib.client.cros import constants 13from autotest_lib.client.cros import xmlrpc_server 14from autotest_lib.client.cros.networking import apmanager_proxy 15 16 17class ApmanagerXmlRpcDelegate(xmlrpc_server.XmlRpcDelegate): 18 """Exposes methods called remotely during APManager autotests. 19 20 All instance methods of this object without a preceding '_' are exposed via 21 an XMLRPC server. This is not a stateless handler object, which means that 22 if you store state inside the delegate, that state will remain around for 23 future calls. 24 25 """ 26 27 28 def __init__(self): 29 self._apmanager_proxy = apmanager_proxy.ApmanagerProxy() 30 31 32 def __enter__(self): 33 super(ApmanagerXmlRpcDelegate, self).__enter__() 34 35 36 def __exit__(self, exception, value, traceback): 37 super(ApmanagerXmlRpcDelegate, self).__exit__(exception, value, traceback) 38 39 40 @xmlrpc_server.dbus_safe(None) 41 def start_service(self, config_params): 42 """Create/start an AP service. 43 44 @param config_params dictionary of configuration parameters. 45 @return string object path for the AP service. 46 47 """ 48 return self._apmanager_proxy.start_service(config_params) 49 50 51 def terminate_service(self, service): 52 """Remove/terminate an AP service. 53 54 @param service string object path of the AP service. 55 56 """ 57 self._apmanager_proxy.terminate_service(service) 58 59 60if __name__ == '__main__': 61 logging.basicConfig(level=logging.DEBUG) 62 handler = logging.handlers.SysLogHandler(address='/dev/log') 63 formatter = logging.Formatter( 64 'apmanager_xmlrpc_server: [%(levelname)s] %(message)s') 65 handler.setFormatter(formatter) 66 logging.getLogger().addHandler(handler) 67 logging.debug('apmanager_xmlrpc_server main...') 68 server = xmlrpc_server.XmlRpcServer('localhost', 69 constants.APMANAGER_XMLRPC_SERVER_PORT) 70 if server is None: 71 raise error.TestFail('Failed to setup xmlrpc server for apmanager') 72 else: 73 logging.debug('Server setup') 74 server.register_delegate(ApmanagerXmlRpcDelegate()) 75 server.run() 76