Beispiel #1
0
 def __init__(self, sw_product, request_id, **options_dict):
     self.sw_product = sw_product
     self.request_id = request_id
     self.options_dict = options_dict
     
     self.process_handler = ProcessHandler()
     
     self.hubs_params = []
     self.process_queues = []
Beispiel #2
0
class RequestHandler(object):
    """
    Handles OTS requests and splits them to several parallel testruns if
    needed.
    """
    
    def __init__(self, sw_product, request_id, **options_dict):
        self.sw_product = sw_product
        self.request_id = request_id
        self.options_dict = options_dict
        
        self.process_handler = ProcessHandler()
        
        self.hubs_params = []
        self.process_queues = []
    
    def run(self):
        """
        Start testruns in separate processes and collect results
        """
        
        try:
            self._init_hub_params()
            
            for params in self.hubs_params:
                self.process_handler.add_process(_run_hub, params)
            
            # Check that we have tasks to run
            if not self.process_handler.child_processes:
                return REQUEST_ERROR
            
            # Start processes ...
            self.process_handler.start_processes()
            
            # Read process queues
            results = self._read_queues()
            
            # Join processes
            self.process_handler.join_processes()
            
            # Check return values from test runs
            return _check_testruns_result_values(results.values())
        except ValueError:
            return REQUEST_ERROR

    #########################
    # HELPERS
    #########################
    
    def _init_hub_params(self):
        """
        Initialize parameters for each testrun
        """
        
        if self.options_dict.get('device'):
            device_specs = self.options_dict['device'].split(';')
            
            for spec in device_specs:
                options, queue = self._prepare_params(spec)
                self.process_queues.append(queue)
                self.hubs_params.append((queue,
                                         self.sw_product,
                                         self.request_id,
                                         options))
        else:
            options, queue = self._prepare_params()
            
            self.process_queues.append(queue)
            self.hubs_params.append((queue,
                                     self.sw_product,
                                     self.request_id,
                                     options))

    def _prepare_params(self, device_spec=None):
        """
        Set device specifications and return copy of parameters and a new
        queue
        """
        
        options = copy.deepcopy(self.options_dict)
        if device_spec:
            options['device'] = device_spec
        
        return options, Queue()

    def _read_queues(self):
        """
        Returns testrun_id and result pairs
        
        @rtype: C{dict}
        @return: Dictionary that contains testrun_id and result pairs
        """
        queue_results = {}
        
        for process_queue in self.process_queues:
            queue_results.update(process_queue.get())
        
        return queue_results