BW3-Core/test/boswatch/test_timer.py

110 lines
2.9 KiB
Python
Raw Permalink Normal View History

2018-09-21 13:30:41 +02:00
#!/usr/bin/python
# -*- coding: utf-8 -*-
r"""!
2018-09-21 13:30:41 +02:00
____ ____ ______ __ __ __ _____
/ __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ /
/ __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ <
/ /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ /
/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/
German BOS Information Script
by Bastian Schroll
@file: test_timer.py
2018-09-24 20:39:25 +02:00
@date: 21.09.2018
2018-09-21 13:30:41 +02:00
@author: Bastian Schroll
2019-03-03 11:13:27 +01:00
@description: Unittests for BOSWatch. File have to run as "pytest" unittest
2018-09-21 13:30:41 +02:00
"""
# problem of the pytest fixtures
# pylint: disable=redefined-outer-name
2018-09-21 13:30:41 +02:00
import logging
import time
import pytest
2019-03-11 07:47:51 +01:00
from boswatch.timer import RepeatedTimer
2018-09-21 13:30:41 +02:00
2018-09-21 14:30:20 +02:00
2019-10-24 23:11:57 +02:00
def setup_function(function):
logging.debug("[TEST] %s.%s", function.__module__, function.__name__)
2019-03-03 11:13:27 +01:00
def testTargetFast():
r"""!Fast worker thread"""
2019-03-03 11:13:27 +01:00
logging.debug("run testTargetFast")
def testTargetSlow():
r"""!Slow worker thread"""
2019-03-03 11:13:27 +01:00
logging.debug("run testTargetSlow start")
time.sleep(0.51)
logging.debug("run testTargetSlow end")
@pytest.fixture()
def useTimerFast():
r"""!Server a RepeatedTimer instance with fast worker"""
2019-03-03 11:13:27 +01:00
testTimer = RepeatedTimer(0.1, testTargetFast)
yield testTimer
if testTimer.isRunning:
assert testTimer.stop()
@pytest.fixture()
def useTimerSlow():
r"""!Server a RepeatedTimer instance slow worker"""
2019-03-03 11:13:27 +01:00
testTimer = RepeatedTimer(0.1, testTargetSlow)
yield testTimer
if testTimer.isRunning:
assert testTimer.stop()
def test_timerStartStop(useTimerFast):
r"""!Try to start and stop a timer"""
2019-03-03 11:13:27 +01:00
assert useTimerFast.start()
assert useTimerFast.stop()
def test_timerDoubleStart(useTimerFast):
r"""!Try to start a timer twice"""
2019-03-03 11:13:27 +01:00
assert useTimerFast.start()
assert useTimerFast.start()
assert useTimerFast.stop()
def test_timerStopNotStarted(useTimerFast):
r"""!Try to stop a timer where is not started"""
2019-03-03 11:13:27 +01:00
assert useTimerFast.stop()
def test_timerIsRunning(useTimerFast):
r"""!Check if a timer is running"""
2019-03-03 11:13:27 +01:00
assert useTimerFast.start()
assert useTimerFast.isRunning
assert useTimerFast.stop()
def test_timerRun(useTimerFast):
r"""!Run a timer and check overdue and lostEvents"""
2019-03-03 11:13:27 +01:00
assert useTimerFast.start()
time.sleep(0.2)
assert useTimerFast.stop()
assert useTimerFast.overdueCount == 0
assert useTimerFast.lostEvents == 0
def test_timerOverdue(useTimerSlow):
r"""!Run a timer and check overdue and lostEvents"""
2019-03-03 11:13:27 +01:00
assert useTimerSlow.start()
time.sleep(0.2)
assert useTimerSlow.stop()
assert useTimerSlow.overdueCount == 1
assert useTimerSlow.lostEvents == 5
def test_timerOverdueLong(useTimerSlow):
r"""!Run a timer and check overdue and lostEvents"""
2019-03-03 11:13:27 +01:00
assert useTimerSlow.start()
time.sleep(1)
assert useTimerSlow.stop()
assert useTimerSlow.overdueCount == 2
assert useTimerSlow.lostEvents == 10