Skip to content

Commit d8e438b

Browse files
authored
Merge pull request #890 from h3lix1/traffic_module
Add traffic management module to the python libraries
2 parents 94c531e + 6511d06 commit d8e438b

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

meshtastic/mesh_interface.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,10 @@ def _handleFromRadio(self, fromRadioBytes):
14551455
self.localNode.moduleConfig.paxcounter.CopyFrom(
14561456
fromRadio.moduleConfig.paxcounter
14571457
)
1458+
elif fromRadio.moduleConfig.HasField("traffic_management"):
1459+
self.localNode.moduleConfig.traffic_management.CopyFrom(
1460+
fromRadio.moduleConfig.traffic_management
1461+
)
14581462

14591463
else:
14601464
logger.debug("Unexpected FromRadio payload")

meshtastic/node.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ def writeConfig(self, config_name):
244244
p.set_module_config.ambient_lighting.CopyFrom(self.moduleConfig.ambient_lighting)
245245
elif config_name == "paxcounter":
246246
p.set_module_config.paxcounter.CopyFrom(self.moduleConfig.paxcounter)
247+
elif config_name == "traffic_management":
248+
p.set_module_config.traffic_management.CopyFrom(self.moduleConfig.traffic_management)
247249
else:
248250
our_exit(f"Error: No valid config with name {config_name}")
249251

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
"""Meshtastic unit tests for traffic management handling in mesh_interface.py."""
2+
3+
import pytest
4+
5+
from ..mesh_interface import MeshInterface
6+
from ..protobuf import mesh_pb2
7+
8+
9+
@pytest.mark.unit
10+
@pytest.mark.usefixtures("reset_mt_config")
11+
def test_handleFromRadio_with_traffic_management_module_config():
12+
"""Test _handleFromRadio with moduleConfig.traffic_management."""
13+
iface = MeshInterface(noProto=True)
14+
from_radio = mesh_pb2.FromRadio()
15+
from_radio.moduleConfig.traffic_management.enabled = True
16+
from_radio.moduleConfig.traffic_management.rate_limit_enabled = True
17+
18+
iface._handleFromRadio(from_radio.SerializeToString())
19+
20+
assert iface.localNode.moduleConfig.traffic_management.enabled is True
21+
assert iface.localNode.moduleConfig.traffic_management.rate_limit_enabled is True
22+
iface.close()

meshtastic/tests/test_node.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,30 @@ def test_writeConfig_with_no_radioConfig(capsys):
794794
assert err == ""
795795

796796

797+
@pytest.mark.unit
798+
@pytest.mark.usefixtures("reset_mt_config")
799+
def test_writeConfig_traffic_management():
800+
"""Test writeConfig with traffic_management module config."""
801+
iface = MagicMock(autospec=SerialInterface)
802+
anode = Node(iface, 123, noProto=True)
803+
anode.moduleConfig.traffic_management.enabled = True
804+
anode.moduleConfig.traffic_management.rate_limit_enabled = True
805+
806+
sent_admin = []
807+
808+
def capture_send(p, *args, **kwargs): # pylint: disable=W0613
809+
sent_admin.append(p)
810+
811+
with patch.object(anode, "_sendAdmin", side_effect=capture_send):
812+
anode.writeConfig("traffic_management")
813+
814+
assert len(sent_admin) == 1
815+
assert sent_admin[0].HasField("set_module_config")
816+
assert sent_admin[0].set_module_config.HasField("traffic_management")
817+
assert sent_admin[0].set_module_config.traffic_management.enabled is True
818+
assert sent_admin[0].set_module_config.traffic_management.rate_limit_enabled is True
819+
820+
797821
# TODO
798822
# @pytest.mark.unit
799823
# def test_writeConfig(caplog):

0 commit comments

Comments
 (0)