Module meshtastic.tests.test_remote_hardware
Meshtastic unit tests for remote_hardware.py
Expand source code
"""Meshtastic unit tests for remote_hardware.py"""
import logging
import re
from unittest.mock import patch, MagicMock
import pytest
from ..remote_hardware import RemoteHardwareClient, onGPIOreceive
from ..serial_interface import SerialInterface
@pytest.mark.unit
def test_RemoteHardwareClient():
"""Test that we can instantiate a RemoteHardwareClient instance"""
iface = MagicMock(autospec=SerialInterface)
rhw = RemoteHardwareClient(iface)
assert rhw.iface == iface
iface.close()
@pytest.mark.unit
def test_onGPIOreceive(capsys):
"""Test onGPIOreceive"""
iface = MagicMock(autospec=SerialInterface)
packet = {'decoded': {'remotehw': {'typ': 'foo', 'gpioValue': '4096' }}}
onGPIOreceive(packet, iface)
out, err = capsys.readouterr()
assert re.search(r'Received RemoteHardware', out)
assert err == ''
@pytest.mark.unit
def test_RemoteHardwareClient_no_gpio_channel(capsys):
"""Test that we can instantiate a RemoteHardwareClient instance but there is no channel named channel 'gpio'"""
iface = MagicMock(autospec=SerialInterface)
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
mo.localNode.getChannelByName.return_value = None
with pytest.raises(SystemExit) as pytest_wrapped_e:
RemoteHardwareClient(mo)
assert pytest_wrapped_e.type == SystemExit
assert pytest_wrapped_e.value.code == 1
out, err = capsys.readouterr()
assert re.search(r'Warning: No channel named', out)
assert err == ""
@pytest.mark.unit
def test_readGPIOs(caplog):
"""Test readGPIOs"""
iface = MagicMock(autospec=SerialInterface)
rhw = RemoteHardwareClient(iface)
with caplog.at_level(logging.DEBUG):
rhw.readGPIOs('0x10', 123)
assert re.search(r'readGPIOs', caplog.text, re.MULTILINE)
iface.close()
@pytest.mark.unit
def test_writeGPIOs(caplog):
"""Test writeGPIOs"""
iface = MagicMock(autospec=SerialInterface)
rhw = RemoteHardwareClient(iface)
with caplog.at_level(logging.DEBUG):
rhw.writeGPIOs('0x10', 123, 1)
assert re.search(r'writeGPIOs', caplog.text, re.MULTILINE)
iface.close()
@pytest.mark.unit
def test_watchGPIOs(caplog):
"""Test watchGPIOs"""
iface = MagicMock(autospec=SerialInterface)
rhw = RemoteHardwareClient(iface)
with caplog.at_level(logging.DEBUG):
rhw.watchGPIOs('0x10', 123)
assert re.search(r'watchGPIOs', caplog.text, re.MULTILINE)
iface.close()
@pytest.mark.unit
def test_sendHardware_no_nodeid(capsys):
"""Test sending no nodeid to _sendHardware()"""
iface = MagicMock(autospec=SerialInterface)
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
with pytest.raises(SystemExit) as pytest_wrapped_e:
rhw = RemoteHardwareClient(mo)
rhw._sendHardware(None, None)
assert pytest_wrapped_e.type == SystemExit
out, err = capsys.readouterr()
assert re.search(r'Warning: Must use a destination node ID', out)
assert err == ''
Functions
def test_RemoteHardwareClient()
-
Test that we can instantiate a RemoteHardwareClient instance
Expand source code
@pytest.mark.unit def test_RemoteHardwareClient(): """Test that we can instantiate a RemoteHardwareClient instance""" iface = MagicMock(autospec=SerialInterface) rhw = RemoteHardwareClient(iface) assert rhw.iface == iface iface.close()
def test_RemoteHardwareClient_no_gpio_channel(capsys)
-
Test that we can instantiate a RemoteHardwareClient instance but there is no channel named channel 'gpio'
Expand source code
@pytest.mark.unit def test_RemoteHardwareClient_no_gpio_channel(capsys): """Test that we can instantiate a RemoteHardwareClient instance but there is no channel named channel 'gpio'""" iface = MagicMock(autospec=SerialInterface) with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo: mo.localNode.getChannelByName.return_value = None with pytest.raises(SystemExit) as pytest_wrapped_e: RemoteHardwareClient(mo) assert pytest_wrapped_e.type == SystemExit assert pytest_wrapped_e.value.code == 1 out, err = capsys.readouterr() assert re.search(r'Warning: No channel named', out) assert err == ""
def test_onGPIOreceive(capsys)
-
Test onGPIOreceive
Expand source code
@pytest.mark.unit def test_onGPIOreceive(capsys): """Test onGPIOreceive""" iface = MagicMock(autospec=SerialInterface) packet = {'decoded': {'remotehw': {'typ': 'foo', 'gpioValue': '4096' }}} onGPIOreceive(packet, iface) out, err = capsys.readouterr() assert re.search(r'Received RemoteHardware', out) assert err == ''
def test_readGPIOs(caplog)
-
Test readGPIOs
Expand source code
@pytest.mark.unit def test_readGPIOs(caplog): """Test readGPIOs""" iface = MagicMock(autospec=SerialInterface) rhw = RemoteHardwareClient(iface) with caplog.at_level(logging.DEBUG): rhw.readGPIOs('0x10', 123) assert re.search(r'readGPIOs', caplog.text, re.MULTILINE) iface.close()
def test_sendHardware_no_nodeid(capsys)
-
Test sending no nodeid to _sendHardware()
Expand source code
@pytest.mark.unit def test_sendHardware_no_nodeid(capsys): """Test sending no nodeid to _sendHardware()""" iface = MagicMock(autospec=SerialInterface) with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo: with pytest.raises(SystemExit) as pytest_wrapped_e: rhw = RemoteHardwareClient(mo) rhw._sendHardware(None, None) assert pytest_wrapped_e.type == SystemExit out, err = capsys.readouterr() assert re.search(r'Warning: Must use a destination node ID', out) assert err == ''
def test_watchGPIOs(caplog)
-
Test watchGPIOs
Expand source code
@pytest.mark.unit def test_watchGPIOs(caplog): """Test watchGPIOs""" iface = MagicMock(autospec=SerialInterface) rhw = RemoteHardwareClient(iface) with caplog.at_level(logging.DEBUG): rhw.watchGPIOs('0x10', 123) assert re.search(r'watchGPIOs', caplog.text, re.MULTILINE) iface.close()
def test_writeGPIOs(caplog)
-
Test writeGPIOs
Expand source code
@pytest.mark.unit def test_writeGPIOs(caplog): """Test writeGPIOs""" iface = MagicMock(autospec=SerialInterface) rhw = RemoteHardwareClient(iface) with caplog.at_level(logging.DEBUG): rhw.writeGPIOs('0x10', 123, 1) assert re.search(r'writeGPIOs', caplog.text, re.MULTILINE) iface.close()