def test_timer_case1d(self) -> None:
     """Test timer case1d."""
     print('mainline entered')
     timer = Timer(timeout=None, default_timeout=None)
     time.sleep(1)
     assert not timer.is_expired()
     time.sleep(1)
     assert not timer.is_expired()
     print('mainline exiting')
 def test_timer_case1a(self) -> None:
     """Test timer case1a."""
     print('mainline entered')
     timer = Timer()
     time.sleep(1)
     assert not timer.is_expired()
     time.sleep(1)
     assert not timer.is_expired()
     print('mainline exiting')
    def test_timer_remaining_time1(self,
                                   timeout_arg: IntFloat) -> None:
        """Test timer remaining time1.

        Args:
            timeout_arg: number of seconds to use for timer timeout arg

        """
        tolerance_factor = 0.80
        logger.debug('mainline entered')
        stop_watch = StopWatch()
        sleep_time = timeout_arg/3
        exp_remaining_time1: float = timeout_arg - sleep_time
        exp_remaining_time2: float = timeout_arg - sleep_time * 2
        exp_remaining_time3 = 0.0001

        timer = Timer(timeout=timeout_arg)
        stop_watch.start_clock(clock_iter=1)
        stop_watch.pause(sleep_time, clock_iter=1)

        rem_time = timer.remaining_time()
        assert ((exp_remaining_time1 * tolerance_factor)
                <= cast(float, rem_time)
                <= exp_remaining_time1)
        assert not timer.is_expired()
        logger.debug(f'after third 1: '
                     f'{exp_remaining_time1=}, {rem_time=}')

        stop_watch.pause(sleep_time * 2, clock_iter=1)

        rem_time = timer.remaining_time()
        assert ((exp_remaining_time2 * tolerance_factor)
                <= cast(float, rem_time)
                <= exp_remaining_time2)
        assert not timer.is_expired()
        logger.debug(f'after third 2: '
                     f'{exp_remaining_time2=}, {rem_time=}')

        time.sleep(sleep_time + 0.1)

        rem_time = timer.remaining_time()
        assert exp_remaining_time3 == cast(float, rem_time)
        assert timer.is_expired()

        logger.debug(f'after third 3: '
                     f'{exp_remaining_time3=}, {rem_time=}')

        logger.debug(f'{stop_watch.start_time=} '
                     f'{timer.start_time=}')

        logger.debug('mainline exiting')
    def test_timer_remaining_time_none(self) -> None:
        """Test timer remaining time none2."""
        logger.debug('mainline entered')

        timer = Timer(timeout=None)
        time.sleep(1)
        assert timer.remaining_time() is None
        assert not timer.is_expired()

        time.sleep(1)

        assert timer.remaining_time() is None
        assert not timer.is_expired()

        logger.debug('mainline exiting')
    def test_timer_case4a(self,
                          zero_or_less_timeout_arg: IntFloat) -> None:
        """Test timer case4a.

        Args:
            zero_or_less_timeout_arg: pytest fixture for timeout seconds

        """
        print('mainline entered')
        timer = Timer(timeout=zero_or_less_timeout_arg)
        time.sleep(abs(zero_or_less_timeout_arg * 0.9))
        assert not timer.is_expired()
        time.sleep(abs(zero_or_less_timeout_arg))
        assert not timer.is_expired()
        print('mainline exiting')
    def test_timer_case7a(self,
                          greater_than_zero_timeout_arg: IntFloat) -> None:
        """Test timer case7a.

        Args:
            greater_than_zero_timeout_arg: pytest fixture for timeout
                                             seconds

        """
        print('mainline entered')
        timer = Timer(timeout=greater_than_zero_timeout_arg)
        time.sleep(greater_than_zero_timeout_arg * 0.9)
        assert not timer.is_expired()
        time.sleep(greater_than_zero_timeout_arg)
        assert timer.is_expired()
        print('mainline exiting')
    def test_timer_example1(self,
                            capsys: Any) -> None:
        """Test timer example1.

        Args:
            capsys: pytest fixture to capture print output

        """
        print('mainline entered')
        timer = Timer(timeout=3)
        for idx in range(10):
            print(f'idx = {idx}')
            time.sleep(1)
            if timer.is_expired():
                print('timer has expired')
                break
        print('mainline exiting')

        expected_result = 'mainline entered\n'
        expected_result += 'idx = 0\n'
        expected_result += 'idx = 1\n'
        expected_result += 'idx = 2\n'
        expected_result += 'timer has expired\n'
        expected_result += 'mainline exiting\n'

        captured = capsys.readouterr().out

        assert captured == expected_result
 def m1(self,
        sleep_time: float,
        timeout: Optional[float] = None) -> bool:
     timer = Timer(timeout=timeout,
                   default_timeout=self.default_timeout)
     time.sleep(sleep_time)
     if timer.is_expired():
         return False
     return True
Beispiel #9
0
    def get_msg(self,
                recipient: str,
                timeout: OptIntFloat = GET_CMD_TIMEOUT) -> Any:
        """Get the next message in the queue.

        Args:
            recipient: arbitrary name that designates the target of the
                   message and which will be used with the queue_msg
                   method to identify the intended recipient of the
                   message
            timeout: number of seconds allowed for msg response. A
                       negative value, zero, or None means no timeout
                       will happen. If timeout is not specified, then
                       the default timeout value will be used.

        Returns:
            the received message

        Raises:
            GetMsgTimedOut: {recipient} timed out waiting for msg

        """
        # get a timer (the clock is started when instantiated)
        timer = Timer(timeout=timeout)

        # shared/excl lock here could improve performance
        with self.msg_lock:
            if recipient not in self.msg_array:
                # we need to add the message target if this is the first
                # time the recipient is calling get_msg
                self.msg_array[recipient] = queue.Queue(
                    maxsize=Msgs.CMD_Q_MAX_SIZE)

        while True:
            try:
                msg = self.msg_array[recipient].get(block=True, timeout=0.1)
                return msg
            except queue.Empty:
                pass

            if timer.is_expired():
                caller_info = get_formatted_call_sequence(latest=1, depth=1)
                err_msg = (f'Thread {threading.current_thread()} '
                           f'timed out on get_msg for recipient: {recipient} '
                           f'{caller_info}')
                self.logger.debug(err_msg)
                raise GetMsgTimedOut(err_msg)
 def m1(self, sleep_time: float, timeout: float) -> bool:
     timer = Timer(timeout=timeout)
     time.sleep(sleep_time)
     if timer.is_expired():
         return False
     return True