28
28
from unittest.mock import call, patch
30
30
import openlp.core.projectors.pjlink
31
from openlp.core.common.registry import Registry
31
32
from openlp.core.projectors.constants import PJLINK_PORT
33
33
from openlp.core.projectors.pjlink import PJLinkUDP
34
from openlp.core.projectors.tab import ProjectorTab
36
from tests.helpers.testmixin import TestMixin
34
37
from tests.resources.projector.data import TEST1_DATA
37
class TestPJLinkBase(TestCase):
40
class TestPJLinkBase(TestCase, TestMixin):
39
42
Tests for the PJLinkUDP class
46
Create the UI and setup necessary options
48
self.setup_application()
52
with patch('openlp.core.projectors.db.init_url') as mocked_init_url:
53
if os.path.exists(TEST_DB):
55
mocked_init_url.return_value = 'sqlite:///%s' % TEST_DB
56
self.projectordb = ProjectorDB()
57
if not hasattr(self, 'projector_manager'):
58
self.projector_manager = ProjectorManager(projectordb=self.projectordb)
64
Delete all the C++ objects at the end so that we don't have a segfault.
66
# self.projectordb.session.close()
67
self.destroy_settings()
68
# del self.projector_manager
41
70
@patch.object(openlp.core.projectors.pjlink, 'log')
42
71
def test_get_datagram_data_negative_zero_length(self, mock_log):
101
130
# THEN: Log entries should be made and method returns
102
131
mock_log.warning.assert_has_calls(log_warning_calls)
103
132
mock_log.debug.assert_has_calls(log_debug_calls)
134
@patch.object(openlp.core.projectors.tab, 'log')
135
def test_pjlinksettings_add_udp_listener(self, mock_log):
137
Test adding UDP listners to PJLink Settings tab
139
# GIVEN: Initial setup
140
log_debug_calls = [call('PJLink settings tab initialized'),
141
call('PJLinkSettings: new callback list: dict_keys([4352])')]
142
log_warning_calls = []
144
pjlink_udp = PJLinkUDP()
145
settings_tab = ProjectorTab(parent=None)
147
# WHEN: add_udp_listener is called with single port
148
settings_tab.add_udp_listener(port=pjlink_udp.port, callback=pjlink_udp.check_settings)
150
# THEN: settings tab should have one entry
151
assert len(settings_tab.udp_listeners) == 1
152
assert pjlink_udp.port in settings_tab.udp_listeners
153
mock_log.debug.assert_has_calls(log_debug_calls)
154
mock_log.warning.assert_has_calls(log_warning_calls)
156
@patch.object(openlp.core.projectors.tab, 'log')
157
def test_pjlinksettings_add_udp_listener_multiple_same(self, mock_log):
159
Test adding second UDP listner with same port to PJLink Settings tab
161
# GIVEN: Initial setup
162
log_debug_calls = [call('PJLink settings tab initialized'),
163
call('PJLinkSettings: new callback list: dict_keys([4352])')]
164
log_warning_calls = [call('Port 4352 already in list - not adding')]
165
pjlink_udp = PJLinkUDP()
166
settings_tab = ProjectorTab(parent=None)
167
settings_tab.add_udp_listener(port=pjlink_udp.port, callback=pjlink_udp.check_settings)
169
# WHEN: add_udp_listener is called with second instance same port
170
settings_tab.add_udp_listener(port=pjlink_udp.port, callback=pjlink_udp.check_settings)
172
# THEN: settings tab should have one entry
173
assert len(settings_tab.udp_listeners) == 1
174
assert pjlink_udp.port in settings_tab.udp_listeners
175
mock_log.debug.assert_has_calls(log_debug_calls)
176
mock_log.warning.assert_has_calls(log_warning_calls)
178
@patch.object(openlp.core.projectors.tab, 'log')
179
def test_pjlinksettings_add_udp_listener_multiple_different(self, mock_log):
181
Test adding second UDP listner with different port to PJLink Settings tab
183
# GIVEN: Initial setup
184
log_debug_calls = [call('PJLink settings tab initialized'),
185
call('PJLinkSettings: new callback list: dict_keys([4352])')]
186
log_warning_calls = []
188
settings_tab = ProjectorTab(parent=None)
189
pjlink_udp1 = PJLinkUDP(port=4352)
190
settings_tab.add_udp_listener(port=pjlink_udp1.port, callback=pjlink_udp1.check_settings)
192
# WHEN: add_udp_listener is called with second instance different port
193
pjlink_udp2 = PJLinkUDP(port=4353)
194
settings_tab.add_udp_listener(port=pjlink_udp2.port, callback=pjlink_udp2.check_settings)
196
# THEN: settings tab should have two entry
197
assert len(settings_tab.udp_listeners) == 2
198
assert pjlink_udp1.port in settings_tab.udp_listeners
199
assert pjlink_udp2.port in settings_tab.udp_listeners
200
mock_log.debug.assert_has_calls(log_debug_calls)
201
mock_log.warning.assert_has_calls(log_warning_calls)
203
@patch.object(openlp.core.projectors.tab, 'log')
204
def test_pjlinksettings_remove_udp_listener(self, mock_log):
206
Test removing UDP listners to PJLink Settings tab
208
# GIVEN: Initial setup
209
log_debug_calls = [call('PJLink settings tab initialized'),
210
call('PJLinkSettings: new callback list: dict_keys([4352])'),
211
call('PJLinkSettings: new callback list: dict_keys([])')]
212
log_warning_calls = []
214
pjlink_udp = PJLinkUDP()
215
settings_tab = ProjectorTab(parent=None)
216
settings_tab.add_udp_listener(port=pjlink_udp.port, callback=pjlink_udp.check_settings)
218
# WHEN: remove_udp_listener is called with single port
219
settings_tab.remove_udp_listener(port=pjlink_udp.port)
221
# THEN: settings tab should have one entry
222
assert len(settings_tab.udp_listeners) == 0
223
mock_log.debug.assert_has_calls(log_debug_calls)
224
mock_log.warning.assert_has_calls(log_warning_calls)
226
@patch.object(openlp.core.projectors.tab, 'log')
227
def test_pjlinksettings_remove_udp_listener_multiple_different(self, mock_log):
229
Test adding second UDP listner with different port to PJLink Settings tab
231
# GIVEN: Initial setup
232
log_debug_calls = [call('PJLink settings tab initialized'),
233
call('PJLinkSettings: new callback list: dict_keys([4352])')]
234
log_warning_calls = []
236
settings_tab = ProjectorTab(parent=None)
237
pjlink_udp1 = PJLinkUDP(port=4352)
238
settings_tab.add_udp_listener(port=pjlink_udp1.port, callback=pjlink_udp1.check_settings)
239
pjlink_udp2 = PJLinkUDP(port=4353)
240
settings_tab.add_udp_listener(port=pjlink_udp2.port, callback=pjlink_udp2.check_settings)
242
# WHEN: remove_udp_listener called for one port
243
settings_tab.remove_udp_listener(port=4353)
245
# THEN: settings tab should have one entry
246
assert len(settings_tab.udp_listeners) == 1
247
assert pjlink_udp1.port in settings_tab.udp_listeners
248
assert pjlink_udp2.port not in settings_tab.udp_listeners
249
mock_log.debug.assert_has_calls(log_debug_calls)
250
mock_log.warning.assert_has_calls(log_warning_calls)
252
@patch.object(PJLinkUDP, 'check_settings')
253
@patch.object(openlp.core.projectors.pjlink, 'log')
254
@patch.object(openlp.core.projectors.tab, 'log')
255
def test_pjlinksettings_call_udp_listener(self, mock_tab_log, mock_pjlink_log, mock_check_settings):
257
Test calling UDP listners in PJLink Settings tab
259
# GIVEN: Initial setup
260
tab_debug_calls = [call('PJLink settings tab initialized'),
261
call('PJLinkSettings: new callback list: dict_keys([4352])'),
262
call('PJLinkSettings: Calling UDP listeners')]
263
pjlink_debug_calls = [call.debug('(UDP:4352) PJLinkUDP() Initialized')]
265
pjlink_udp = PJLinkUDP()
266
settings_tab = ProjectorTab(parent=None)
267
settings_tab.add_udp_listener(port=pjlink_udp.port, callback=pjlink_udp.check_settings)
269
# WHEN: calling UDP listener via registry
270
settings_tab.call_udp_listener()
272
# THEN: settings tab should have one entry
273
assert len(settings_tab.udp_listeners) == 1
274
mock_check_settings.assert_called()
275
mock_tab_log.debug.assert_has_calls(tab_debug_calls)
276
mock_pjlink_log.assert_has_calls(pjlink_debug_calls)