Esempio n. 1
0
    def test_queue_timeout_raised(self):
        def run():  # A dummy timeouting function
            time.sleep(3)

        queue_timeout = 1
        execution_timeout = 1
        controller_timeout = 1
        timeout = Timeout(execution_timeout, queue_timeout, controller_timeout)
        timeout.start_queue_timeout()
        self.assertRaises(OtsQueueTimeoutError, run)
Esempio n. 2
0
    def test_queue_timeout_not_raised(self):
        self.done = False

        def run():  # A dummy not timeouting function
            self.done = True

        queue_timeout = 1
        execution_timeout = 1
        controller_timeout = 1
        timeout = Timeout(execution_timeout, queue_timeout, controller_timeout)
        timeout.start_queue_timeout()
        run()
        self.assertTrue(self.done)
    def test_worker_alive_after_server_timeout_failing_task(self):
        if not DEBUG:
            self.worker_processes.start()
        self.testrun_id = 111
        self.testrun_id2 = 112
        taskrunner1 = taskrunner_factory(
            routing_key=ROUTING_KEY,
            execution_timeout=10,
            testrun_id=self.testrun_id,
            config_file=_distributor_config_filename())

        command = [
            "sleep", "5", ";", "command_error_mock", "localhost",
            str(self.testrun_id)
        ]
        taskrunner1.add_task(command)

        self.is_exception_raised = False

        def cb_handler(signal, dto, **kwargs):
            if isinstance(dto, Exception):
                self.is_exception_raised = True

        DTO_SIGNAL.connect(cb_handler)

        # Overwrite server side timeout handler with a one that timeouts
        from ots.server.distributor.timeout import Timeout
        taskrunner1.timeout_handler = Timeout(1, 1, 1)

        self.assertRaises(OtsExecutionTimeoutError, taskrunner1.run)

        #        self.assertTrue(self.is_exception_raised)

        self.is_exception_raised = False

        time.sleep(10)  # Give worker time to reconnect

        # Trigger another task to make sure worker is still alive
        taskrunner2 = taskrunner_factory(
            routing_key=ROUTING_KEY,
            execution_timeout=10,
            testrun_id=self.testrun_id2,
            config_file=_distributor_config_filename())
        taskrunner2.add_task(["echo", "foo"])
        taskrunner2.run()
        self.assertFalse(self.is_exception_raised)

        self.send_quit()
        time.sleep(1)

        self.assertFalse(all(self.worker_processes.exitcodes))
Esempio n. 4
0
    def test_stop(self):
        self.done = False

        def run():  # A dummy timeouting function
            time.sleep(2)
            self.done = True

        queue_timeout = 1
        controller_timeout = 1
        execution_timeout = 1
        timeout = Timeout(execution_timeout, queue_timeout, controller_timeout)
        timeout.start_queue_timeout()
        timeout.stop()
        run()
        self.assertTrue(self.done)
Esempio n. 5
0
    def __init__(self,
                 username,
                 password,
                 host,
                 vhost,
                 services_exchange,
                 port,
                 routing_key,
                 testrun_id,
                 execution_timeout,
                 queue_timeout,
                 controller_timeout,
                 min_worker_version=None):
        """
        @type username: C{str}
        @param username: AMQP username 

        @type password: C{str}
        @param password: AMQP password 

        @type host: C{str}
        @param host: AMQP host 

        @type vhost: C{str}
        @param vhost: AMQP vhost

        @type services_exchange: C{str}
        @param services_exchange: AMQP services exchange

        @type port: C{int}
        @param port: AMQP port (generally 5672)

        @type routing_key: C{routing_key}
        @param routing_key: AMQP routing_key (device group) 
 
        @type testrun_id: C{int}
        @param testrun_id: The testrun id

        @type execution_timeout: C{int}
        @param execution_timeout: Time out in seconds for Task execution

        @type queue_timeout: C{int}
        @param queue_timeout: Time in seconds Tasks can wait on the queue 

        @type controller_timeout: C{int}
        @param controller_timeout: The timeout for HW controllers         
        """
        #AMQP configuration
        self._username = username
        self._password = password
        self._host = host
        self._vhost = vhost
        self._services_exchange = services_exchange
        self._port = port
        #
        self._routing_key = routing_key
        self._testrun_id = testrun_id
        #
        self._init_amqp()
        #List of Tasks
        self._tasks = []
        self._is_run = False

        #
        self._min_worker_version = min_worker_version

        #timeouts
        self._execution_timeout = execution_timeout
        self._queue_timeout = queue_timeout
        self._controller_timeout = controller_timeout
        self.timeout_handler = Timeout(execution_timeout, queue_timeout,
                                       controller_timeout)