Skip to content

Commit 4dadcda

Browse files
committed
Detect available non-loopback address for tests
Some environments disallow '0.0.0.0'
1 parent 10b79c8 commit 4dadcda

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

doc/source/conftest.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# from loguru import logger
22
import pytest
33
import asyncio
4+
import socket
5+
6+
@pytest.fixture(scope='session')
7+
def non_loopback_hostaddr():
8+
hostname, aliases, addrs = socket.gethostbyname_ex(socket.gethostname())
9+
addrs = [addr for addr in addrs if addr != '127.0.0.1']
10+
assert len(addrs)
11+
return addrs[0]
412

513

614
@pytest.fixture(scope='function')
@@ -13,13 +21,11 @@ def new_loop(request, doctest_namespace):
1321
loop.close()
1422
policy.set_event_loop(None)
1523

16-
def receiver_setup(request, loop):
17-
24+
def receiver_setup(request, loop, hostaddr):
1825
cleanup_coro = None
19-
2026
from tslumd import UmdSender, TallyType, TallyColor
2127

22-
sender = UmdSender(clients=[('0.0.0.0', 65000)], all_off_on_close=False)
28+
sender = UmdSender(clients=[(hostaddr, 65000)], all_off_on_close=False)
2329
screen_index = 1
2430

2531
async def open_sender():
@@ -50,11 +56,11 @@ async def cleanup():
5056
asyncio.set_event_loop_policy(None)
5157

5258
@pytest.fixture(scope="function", autouse=True)
53-
def doctest_stuff(request, new_loop, doctest_namespace):
59+
def doctest_stuff(request, new_loop, non_loopback_hostaddr):
5460
node_name = request.node.name
5561
loop = asyncio.get_event_loop()
5662
assert loop is new_loop
5763
if node_name == 'receiver.rst':
58-
yield from receiver_setup(request, new_loop)
64+
yield from receiver_setup(request, new_loop, non_loopback_hostaddr)
5965
else:
6066
yield

tests/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from pathlib import Path
22
import json
3+
import socket
34
import pytest
45

56
from tslumd import TallyColor, Message, Display
@@ -9,6 +10,13 @@
910
MESSAGE_FILE = DATA_DIR / 'uhs500-message.umd'
1011
MESSAGE_JSON = DATA_DIR / 'uhs500-tally.json'
1112

13+
@pytest.fixture(scope='session')
14+
def non_loopback_hostaddr():
15+
hostname, aliases, addrs = socket.gethostbyname_ex(socket.gethostname())
16+
addrs = [addr for addr in addrs if addr != '127.0.0.1']
17+
assert len(addrs)
18+
return addrs[0]
19+
1220
@pytest.fixture
1321
def uhs500_msg_bytes() -> bytes:
1422
"""Real message data received from an AV-UHS500 switcher

tests/test_receiver.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,21 +158,30 @@ async def test_broadcast_display(uhs500_msg_bytes, uhs500_msg_parsed, udp_endpoi
158158

159159

160160
@pytest.mark.asyncio
161-
async def test_rebind(uhs500_msg_bytes, uhs500_msg_parsed, udp_endpoint, udp_port, unused_tcp_port_factory):
161+
async def test_rebind(
162+
uhs500_msg_bytes,
163+
uhs500_msg_parsed,
164+
udp_endpoint,
165+
udp_port,
166+
unused_tcp_port_factory,
167+
non_loopback_hostaddr
168+
):
162169
transport, protocol, endpoint_port = udp_endpoint
163170
assert udp_port != endpoint_port
164171

172+
host_addrs = ['127.0.0.1', non_loopback_hostaddr]
173+
165174
loop = asyncio.get_event_loop()
166175

167-
receiver = UmdReceiver(hostaddr='127.0.0.1', hostport=udp_port)
176+
receiver = UmdReceiver(hostaddr=host_addrs[0], hostport=udp_port)
168177

169178
evt_listener = EventListener()
170179
receiver.bind_async(loop, on_tally_added=evt_listener.callback)
171180

172181
async with receiver:
173182

174183
# Send message bytes to receiver and wait for ``on_tally_added`` events
175-
transport.sendto(uhs500_msg_bytes, ('127.0.0.1', udp_port))
184+
transport.sendto(uhs500_msg_bytes, (host_addrs[0], udp_port))
176185
_ = await evt_listener.get()
177186
while not evt_listener.empty():
178187
_ = await evt_listener.get()
@@ -185,13 +194,13 @@ async def test_rebind(uhs500_msg_bytes, uhs500_msg_parsed, udp_endpoint, udp_por
185194

186195

187196
# Change bind address and trigger a change
188-
await receiver.set_hostaddr('0.0.0.0')
189-
assert receiver.hostaddr == '0.0.0.0'
197+
await receiver.set_hostaddr(host_addrs[1])
198+
assert receiver.hostaddr == host_addrs[1]
190199

191200
disp = uhs500_msg_parsed.displays[0]
192201
disp.brightness = 1
193202

194-
transport.sendto(uhs500_msg_parsed.build_message(), ('0.0.0.0', udp_port))
203+
transport.sendto(uhs500_msg_parsed.build_message(), (host_addrs[1], udp_port))
195204

196205
evt_args, evt_kwargs = await evt_listener.get()
197206
evt_tally = evt_args[0]
@@ -205,7 +214,7 @@ async def test_rebind(uhs500_msg_bytes, uhs500_msg_parsed, udp_endpoint, udp_por
205214
assert receiver.hostport == new_port
206215

207216
disp.brightness = 2
208-
transport.sendto(uhs500_msg_parsed.build_message(), ('0.0.0.0', new_port))
217+
transport.sendto(uhs500_msg_parsed.build_message(), (host_addrs[1], new_port))
209218

210219
evt_args, evt_kwargs = await evt_listener.get()
211220
evt_tally = evt_args[0]

0 commit comments

Comments
 (0)