| OLD | NEW | 
 | (Empty) | 
|   1 # Copyright 2015 The Chromium Authors. All rights reserved. |  | 
|   2 # Use of this source code is governed by a BSD-style license that can be |  | 
|   3 # found in the LICENSE file. |  | 
|   4  |  | 
|   5 """The registration server used to register tasks. |  | 
|   6  |  | 
|   7 The registration server is started by the test controller and allows the tasks |  | 
|   8 to register themselves when they start. Authentication of the tasks controllers |  | 
|   9 is based on an OTP passed to the run_task binary on startup. |  | 
|  10 """ |  | 
|  11  |  | 
|  12 import logging |  | 
|  13 import threading |  | 
|  14 import xmlrpclib |  | 
|  15 import SimpleXMLRPCServer |  | 
|  16  |  | 
|  17 #pylint: disable=relative-import |  | 
|  18 import common_lib |  | 
|  19  |  | 
|  20  |  | 
|  21 class TaskRegistrationServer(object): |  | 
|  22   """Discovery server run on the host.""" |  | 
|  23  |  | 
|  24   def __init__(self): |  | 
|  25     self._expected_tasks = {} |  | 
|  26     self._rpc_server = None |  | 
|  27     self._thread = None |  | 
|  28  |  | 
|  29   def _RegisterTaskRPC(self, otp, ip): |  | 
|  30     """The RPC used by a task to register with the registration server.""" |  | 
|  31     assert otp in self._expected_tasks |  | 
|  32     cb = self._expected_tasks.pop(otp) |  | 
|  33     cb(ip) |  | 
|  34  |  | 
|  35   def RegisterTaskCallback(self, otp, callback): |  | 
|  36     """Registers a callback associated with an OTP.""" |  | 
|  37     assert callable(callback) |  | 
|  38     self._expected_tasks[otp] = callback |  | 
|  39  |  | 
|  40   def Start(self): |  | 
|  41     """Starts the registration server.""" |  | 
|  42     logging.debug('Starting task registration server') |  | 
|  43     self._rpc_server = SimpleXMLRPCServer.SimpleXMLRPCServer( |  | 
|  44         (common_lib.SERVER_ADDRESS, common_lib.SERVER_PORT), |  | 
|  45         allow_none=True, logRequests=False) |  | 
|  46     self._rpc_server.register_function( |  | 
|  47         self._RegisterTaskRPC, 'RegisterTask') |  | 
|  48     self._thread = threading.Thread(target=self._rpc_server.serve_forever) |  | 
|  49     self._thread.start() |  | 
|  50  |  | 
|  51   def Shutdown(self): |  | 
|  52     """Shuts the discovery server down.""" |  | 
|  53     if self._thread and self._thread.is_alive(): |  | 
|  54       logging.debug('Shutting down task registration server') |  | 
|  55       self._rpc_server.shutdown() |  | 
| OLD | NEW |