def _prepareXMLRPCBinding(self): if config.getboolean('vars', 'xmlrpc_enable'): try: from vdsm.rpc.bindingxmlrpc import BindingXMLRPC from vdsm.rpc.bindingxmlrpc import XmlDetector except ImportError: self.log.error('Unable to load the xmlrpc server module. ' 'Please make sure it is installed.') else: xml_binding = BindingXMLRPC(self, self.log) self.bindings['xmlrpc'] = xml_binding xml_detector = XmlDetector(xml_binding) self._acceptor.add_detector(xml_detector)
def constructAcceptor(log, ssl, jsonBridge, dest=LEGACY_SUBSCRIPTION_ID_RESPONSE): sslctx = DEAFAULT_SSL_CONTEXT if ssl else None reactor = Reactor() acceptor = MultiProtocolAcceptor( reactor, "::1", 0, sslctx, ) scheduler = schedule.Scheduler(name="test.Scheduler", clock=utils.monotonic_time) scheduler.start() cif = FakeClientIf(dest) json_binding = BindingJsonRpc(jsonBridge, defaultdict(list), 60, scheduler, cif) json_binding.start() cif.json_binding = json_binding with namedTemporaryDir() as tmp_dir: client_log = os.path.join(tmp_dir, 'client.log') with MonkeyPatchScope([(API.clientIF, 'getInstance', lambda _: cif), (constants, 'P_VDSM_CLIENT_LOG', client_log)]): xml_binding = BindingXMLRPC(cif, cif.log) xml_binding.start() xmlDetector = XmlDetector(xml_binding) acceptor.add_detector(xmlDetector) jsonBridge.cif = cif stompDetector = StompDetector(json_binding) acceptor.add_detector(stompDetector) thread = threading.Thread(target=reactor.process_requests, name='Detector thread') thread.setDaemon(True) thread.start() try: yield acceptor finally: acceptor.stop() json_binding.stop() xml_binding.stop() scheduler.stop(wait=False)