Handle NONE errorReason in onResponseTraceRoute and add regression test

ROUTING_APP with errorReason NONE is an ACK (success), not an error.
Only print failure message for non-NONE error reasons.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Nox
2026-06-04 21:03:49 +08:00
parent c71d3df332
commit 953d01206b
2 changed files with 22 additions and 1 deletions

View File

@@ -689,7 +689,8 @@ class MeshInterface: # pylint: disable=R0902
"""on response for trace route""" """on response for trace route"""
if p["decoded"]["portnum"] == "ROUTING_APP": if p["decoded"]["portnum"] == "ROUTING_APP":
error = p["decoded"]["routing"]["errorReason"] error = p["decoded"]["routing"]["errorReason"]
print(f"Traceroute failed: {error}") if error != "NONE":
print(f"Traceroute failed: {error}")
self._acknowledgment.receivedTraceRoute = True self._acknowledgment.receivedTraceRoute = True
return return

View File

@@ -777,3 +777,23 @@ def test_onResponseTraceRoute_routing_error(capsys):
assert iface._acknowledgment.receivedTraceRoute is True assert iface._acknowledgment.receivedTraceRoute is True
out, _ = capsys.readouterr() out, _ = capsys.readouterr()
assert "Traceroute failed: MAX_RETRANSMIT" in out assert "Traceroute failed: MAX_RETRANSMIT" in out
@pytest.mark.unit
@pytest.mark.usefixtures("reset_mt_config")
def test_onResponseTraceRoute_routing_none(capsys):
"""Test that onResponseTraceRoute does not print error for ROUTING_APP with NONE errorReason."""
iface = MeshInterface(noProto=True)
packet = {
"decoded": {
"portnum": "ROUTING_APP",
"routing": {"errorReason": "NONE"},
}
}
iface.onResponseTraceRoute(packet)
assert iface._acknowledgment.receivedTraceRoute is True
out, _ = capsys.readouterr()
assert "Traceroute failed" not in out