forked from openlp/openlp
Tests for ProjectorManager 2022-01-23
This commit is contained in:
parent
91322f87d2
commit
2d0855f975
@ -328,6 +328,8 @@ class ProjectorManager(QtWidgets.QWidget, RegistryBase, UiProjectorManager, LogM
|
|||||||
def udp_listen_add(self, port=PJLINK_PORT):
|
def udp_listen_add(self, port=PJLINK_PORT):
|
||||||
"""
|
"""
|
||||||
Add UDP broadcast listener
|
Add UDP broadcast listener
|
||||||
|
|
||||||
|
NOTE: Check if PJLinkUDP port needs to be started when adding
|
||||||
"""
|
"""
|
||||||
if port in self.pjlink_udp:
|
if port in self.pjlink_udp:
|
||||||
log.warning('UDP Listener for port {port} already added - skipping'.format(port=port))
|
log.warning('UDP Listener for port {port} already added - skipping'.format(port=port))
|
||||||
@ -339,6 +341,8 @@ class ProjectorManager(QtWidgets.QWidget, RegistryBase, UiProjectorManager, LogM
|
|||||||
def udp_listen_delete(self, port):
|
def udp_listen_delete(self, port):
|
||||||
"""
|
"""
|
||||||
Remove a UDP broadcast listener
|
Remove a UDP broadcast listener
|
||||||
|
|
||||||
|
NOTE: Check if PJLinkUDP port needs to be closed/stopped when deleting
|
||||||
"""
|
"""
|
||||||
log.debug('Checking for UDP port {port} listener deletion'.format(port=port))
|
log.debug('Checking for UDP port {port} listener deletion'.format(port=port))
|
||||||
if port not in self.pjlink_udp:
|
if port not in self.pjlink_udp:
|
||||||
|
@ -21,17 +21,50 @@
|
|||||||
"""
|
"""
|
||||||
Interface tests to test the themeManager class and related methods.
|
Interface tests to test the themeManager class and related methods.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from openlp.core.projectors.constants import PJLINK_PORT
|
|
||||||
from openlp.core.projectors.db import ProjectorDB
|
from openlp.core.projectors.db import ProjectorDB
|
||||||
from openlp.core.projectors.editform import ProjectorEditForm
|
from openlp.core.projectors.editform import ProjectorEditForm
|
||||||
from openlp.core.projectors.manager import ProjectorManager
|
from openlp.core.projectors.manager import ProjectorManager
|
||||||
from tests.resources.projector.data import TEST_DB
|
from tests.resources.projector.data import TEST_DB
|
||||||
|
|
||||||
|
'''
|
||||||
|
NOTE: Since Registry is a singleton, sleight of hand allows us to verify
|
||||||
|
calls to Registry.methods()
|
||||||
|
|
||||||
|
@patch(path.to.imported.Registry)
|
||||||
|
def test_function(mock_registry):
|
||||||
|
mocked_registry = MagicMock()
|
||||||
|
mock_registry.return_value = mocked_registry
|
||||||
|
...
|
||||||
|
assert mocked_registry.method.has_call(...)
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
class FakeProjector(object):
|
||||||
|
"""
|
||||||
|
Helper test class
|
||||||
|
"""
|
||||||
|
def __init__(self, port=4352, name="Faker"):
|
||||||
|
self.link = self
|
||||||
|
self.port = port
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
|
||||||
|
class FakePJLinkUDP(object):
|
||||||
|
"""
|
||||||
|
Helper test class
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def check_settings(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def projector_manager(settings):
|
def projector_manager(settings):
|
||||||
@ -67,13 +100,12 @@ def test_bootstrap_initialise_nodb(projector_manager_nodb, caplog):
|
|||||||
Test log entry creating new projector DB
|
Test log entry creating new projector DB
|
||||||
"""
|
"""
|
||||||
caplog.set_level(logging.DEBUG)
|
caplog.set_level(logging.DEBUG)
|
||||||
|
log_entries = 'Creating new ProjectorDB() instance'
|
||||||
# WHEN: ProjectorManager created with no DB set
|
# WHEN: ProjectorManager created with no DB set
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
projector_manager_nodb.bootstrap_initialise()
|
projector_manager_nodb.bootstrap_initialise()
|
||||||
# THEN: Log should indicate new DB being created
|
# THEN: Log should indicate new DB being created
|
||||||
assert caplog.record_tuples[3] == ('openlp.core.projectors.manager', 10, 'Creating new ProjectorDB() instance'), \
|
assert caplog.messages[3] == log_entries, "ProjectorManager should have indicated a new DB being created"
|
||||||
"ProjectorManager should have indicated a new DB being created"
|
|
||||||
|
|
||||||
|
|
||||||
def test_bootstrap_post_set_up(projector_manager):
|
def test_bootstrap_post_set_up(projector_manager):
|
||||||
@ -103,6 +135,7 @@ def test_bootstrap_post_set_up_autostart_projector(projector_manager_nodb, caplo
|
|||||||
# GIVEN: Setup mocks
|
# GIVEN: Setup mocks
|
||||||
with patch('openlp.core.projectors.manager.QtCore.QTimer.singleShot') as mock_timer:
|
with patch('openlp.core.projectors.manager.QtCore.QTimer.singleShot') as mock_timer:
|
||||||
caplog.set_level(logging.DEBUG)
|
caplog.set_level(logging.DEBUG)
|
||||||
|
log_entries = 'Delaying 1.5 seconds before loading all projectors'
|
||||||
# WHEN: Initializations called
|
# WHEN: Initializations called
|
||||||
projector_manager_nodb.bootstrap_initialise()
|
projector_manager_nodb.bootstrap_initialise()
|
||||||
projector_manager_nodb.autostart = True
|
projector_manager_nodb.autostart = True
|
||||||
@ -110,41 +143,109 @@ def test_bootstrap_post_set_up_autostart_projector(projector_manager_nodb, caplo
|
|||||||
|
|
||||||
# THEN: verify log entries and timer calls
|
# THEN: verify log entries and timer calls
|
||||||
mock_timer.assert_called_once_with(1500, projector_manager_nodb._load_projectors)
|
mock_timer.assert_called_once_with(1500, projector_manager_nodb._load_projectors)
|
||||||
assert caplog.record_tuples[-1] == ('openlp.core.projectors.manager', 10,
|
assert caplog.messages[-1] == log_entries, "Invalid log entries"
|
||||||
'Delaying 1.5 seconds before loading all projectors'), \
|
|
||||||
"Last log entry should be autoloading entry"
|
|
||||||
|
|
||||||
|
|
||||||
def test_udp_listen_add_duplicate_port(projector_manager_nodb, caplog):
|
def test_udp_listen_add_duplicate(projector_manager_nodb, caplog):
|
||||||
"""
|
"""
|
||||||
Test adding UDP port listener to port already registered
|
Test adding UDP port listener to port already registered
|
||||||
"""
|
"""
|
||||||
# GIVEN: Initial setup
|
# GIVEN: Initial setup
|
||||||
caplog.set_level(logging.DEBUG)
|
caplog.set_level(logging.DEBUG)
|
||||||
projector_manager_nodb.pjlink_udp[PJLINK_PORT] = "Something to set index item"
|
log_entries = ['UDP Listener for port 10 already added - skipping']
|
||||||
|
port_list = {10: 'port1', 20: 'port2'}
|
||||||
|
projector_manager_nodb.pjlink_udp = port_list
|
||||||
|
|
||||||
# WHEN: udp_listen_add is called with duplicate port number
|
# WHEN: udp_listen_add is called with duplicate port number
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
projector_manager_nodb.udp_listen_add(port=PJLINK_PORT)
|
projector_manager_nodb.udp_listen_add(port=10)
|
||||||
|
|
||||||
# THEN: Verify log entry and registry entry not called
|
# THEN: Verify log entry and registry entry not called
|
||||||
assert caplog.record_tuples[0] == ('openlp.core.projectors.manager', 30,
|
assert projector_manager_nodb.pjlink_udp == port_list, "Invalid ports in list"
|
||||||
'UDP Listener for port 4352 already added - skipping')
|
assert caplog.messages == log_entries, "Invalid log entries"
|
||||||
|
|
||||||
|
|
||||||
|
@patch('openlp.core.projectors.manager.PJLinkUDP')
|
||||||
@patch('openlp.core.projectors.manager.Registry')
|
@patch('openlp.core.projectors.manager.Registry')
|
||||||
def test_udp_listen_add_new(mock_registry, projector_manager_nodb, caplog):
|
def test_udp_listen_add_new(mock_registry, mock_udp, projector_manager_nodb, caplog):
|
||||||
"""
|
"""
|
||||||
Test adding new UDP port listener
|
Test adding new UDP port listener
|
||||||
"""
|
"""
|
||||||
# GIVEN: Initial setup
|
# GIVEN: Initial setup
|
||||||
caplog.set_level(logging.DEBUG)
|
caplog.set_level(logging.DEBUG)
|
||||||
log_entries = [('openlp.core.projectors.manager', 10, 'Adding UDP listener on port 4352'),
|
mocked_registry = MagicMock()
|
||||||
('openlp.core.projectors.pjlink', 10, '(UDP:4352) PJLinkUDP() Initialized')]
|
mock_registry.return_value = mocked_registry
|
||||||
|
mock_udp.return_value = FakePJLinkUDP()
|
||||||
|
log_entries = ['Adding UDP listener on port 20']
|
||||||
|
projector_manager_nodb.pjlink_udp = {10: 'port1'}
|
||||||
# WHEN: Adding new listener
|
# WHEN: Adding new listener
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
projector_manager_nodb.udp_listen_add(port=PJLINK_PORT)
|
projector_manager_nodb.udp_listen_add(port=20)
|
||||||
|
|
||||||
# THEN: Appropriate listener and log entries
|
# THEN: Appropriate listener and log entries
|
||||||
mock_registry.execute.called_with('udp_broadcast_add', port=PJLINK_PORT)
|
assert 20 in projector_manager_nodb.pjlink_udp, "Port not added"
|
||||||
assert caplog.record_tuples == log_entries, 'Invalid log entries'
|
assert 2 == len(projector_manager_nodb.pjlink_udp), "Invalid ports in list"
|
||||||
|
assert type(projector_manager_nodb.pjlink_udp[20]) == FakePJLinkUDP, \
|
||||||
|
'PJLinkUDP instance should have been added'
|
||||||
|
assert mocked_registry.execute.has_call('udp_broadcast_add', port=20)
|
||||||
|
assert caplog.messages == log_entries, 'Invalid log entries'
|
||||||
|
|
||||||
|
|
||||||
|
def test_udp_listen_delete_missing(projector_manager_nodb, caplog):
|
||||||
|
"""
|
||||||
|
Test deleting UDP port listener not in list
|
||||||
|
"""
|
||||||
|
# GIVEN: Initial setup
|
||||||
|
caplog.set_level(logging.DEBUG)
|
||||||
|
projector_manager_nodb.pjlink_udp = {10: 'port1'}
|
||||||
|
log_entries = ['Checking for UDP port 20 listener deletion',
|
||||||
|
'UDP listener for port 20 not there - skipping delete']
|
||||||
|
# WHEN: Deleting port listener from dictinary
|
||||||
|
projector_manager_nodb.udp_listen_delete(port=20)
|
||||||
|
# THEN: Log missing port and exit method
|
||||||
|
assert projector_manager_nodb.pjlink_udp == {10: 'port1'}, "Invalid ports in list"
|
||||||
|
assert caplog.messages == log_entries, "Invalid log entries"
|
||||||
|
|
||||||
|
|
||||||
|
@patch('openlp.core.projectors.manager.Registry')
|
||||||
|
def test_udp_listen_delete_single(mock_registry, projector_manager_nodb, caplog):
|
||||||
|
"""
|
||||||
|
Test deleting UDP listener
|
||||||
|
"""
|
||||||
|
# GIVEN: Initial setup
|
||||||
|
mocked_registry = MagicMock()
|
||||||
|
mock_registry.return_value = mocked_registry
|
||||||
|
caplog.set_level(logging.DEBUG)
|
||||||
|
log_entries = ['Checking for UDP port 10 listener deletion',
|
||||||
|
'UDP listener for port 10 deleted']
|
||||||
|
port_list = {20: 'port2'}
|
||||||
|
projector_manager_nodb.pjlink_udp = {10: 'port1', **port_list}
|
||||||
|
projector_manager_nodb.projector_list = [FakeProjector(port=20)]
|
||||||
|
# WHEN: deleting a listener
|
||||||
|
caplog.clear()
|
||||||
|
projector_manager_nodb.udp_listen_delete(port=10)
|
||||||
|
# THEN: pjlink_udp and logs should have appropriate entries
|
||||||
|
assert caplog.messages == log_entries, 'Invalid log entries'
|
||||||
|
assert projector_manager_nodb.pjlink_udp == port_list, 'Invalid ports in list'
|
||||||
|
assert mocked_registry.execute.has_call('udp_broadcast_delete', port=10)
|
||||||
|
|
||||||
|
|
||||||
|
def test_udp_listen_delete_skip(projector_manager_nodb, caplog):
|
||||||
|
"""
|
||||||
|
Test not deleting UDP listener
|
||||||
|
"""
|
||||||
|
# GIVEN: Initial setup
|
||||||
|
caplog.set_level(logging.DEBUG)
|
||||||
|
log_entries = ['Checking for UDP port 10 listener deletion',
|
||||||
|
'UDP listener for port 10 needed for other projectors - skipping delete']
|
||||||
|
port_list = {10: 'port1', 20: 'port2'}
|
||||||
|
projector_manager_nodb.pjlink_udp = port_list
|
||||||
|
projector_manager_nodb.projector_list = [FakeProjector(port=10),
|
||||||
|
FakeProjector(port=20)]
|
||||||
|
# WHEN: deleting a listener
|
||||||
|
caplog.clear()
|
||||||
|
projector_manager_nodb.udp_listen_delete(port=10)
|
||||||
|
print(projector_manager_nodb.pjlink_udp)
|
||||||
|
print(caplog.record_tuples)
|
||||||
|
# THEN: pjlink_udp and logs should have appropriate entries
|
||||||
|
assert caplog.messages == log_entries, 'Invalid log entries'
|
||||||
|
assert projector_manager_nodb.pjlink_udp == port_list, 'Invalid ports in list'
|
||||||
|
Loading…
Reference in New Issue
Block a user