Skip to content

Commit c7d195f

Browse files
committed
WIP: Add small test for coverage
1 parent d8159bb commit c7d195f

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import os
2+
from unittest.mock import patch
3+
4+
import pytest
5+
6+
from commonwealth.mavlink_comm.MavlinkComm import MavlinkMessenger
7+
8+
9+
class TestMavlinkMessenger:
10+
"""Test cases for MavlinkMessenger class."""
11+
12+
def test_init_default_values(self) -> None:
13+
"""Test initialization with default values."""
14+
with patch.dict(os.environ, {"MAV_SYSTEM_ID": "1", "MAV_COMPONENT_ID_ONBOARD_COMPUTER4": "194"}):
15+
messenger = MavlinkMessenger()
16+
assert messenger.system_id == 1
17+
assert messenger.component_id == 194
18+
assert messenger.sequence == 0
19+
assert messenger.m2r_address == "localhost:6040"
20+
21+
def test_set_system_id(self) -> None:
22+
"""Test setting system ID."""
23+
messenger = MavlinkMessenger()
24+
messenger.set_system_id(10)
25+
assert messenger.system_id == 10
26+
27+
def test_set_component_id(self) -> None:
28+
"""Test setting component ID."""
29+
messenger = MavlinkMessenger()
30+
messenger.set_component_id(200)
31+
assert messenger.component_id == 200
32+
33+
def test_set_sequence(self) -> None:
34+
"""Test setting sequence."""
35+
messenger = MavlinkMessenger()
36+
messenger.set_sequence(5)
37+
assert messenger.sequence == 5
38+
39+
def test_set_m2r_address_valid(self) -> None:
40+
"""Test setting valid m2r address."""
41+
messenger = MavlinkMessenger()
42+
messenger.set_m2r_address("192.168.1.100:8080")
43+
assert messenger.m2r_address == "192.168.1.100:8080"
44+
45+
def test_set_m2r_address_invalid(self) -> None:
46+
"""Test setting invalid m2r address."""
47+
messenger = MavlinkMessenger()
48+
with pytest.raises(
49+
ValueError, match="Invalid address. Valid address should follow the format 'localhost:6040'."
50+
):
51+
messenger.set_m2r_address("invalid_address")
52+
53+
def test_m2r_rest_url_property(self) -> None:
54+
"""Test m2r_rest_url property."""
55+
messenger = MavlinkMessenger()
56+
assert messenger.m2r_rest_url == "http://localhost:6040/mavlink"
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import asyncio
2+
import pathlib
3+
import subprocess
4+
from unittest.mock import AsyncMock, MagicMock, patch
5+
6+
import pytest
7+
8+
from exceptions import FirmwareUploadFail, InvalidUploadTool, UploadToolNotFound
9+
from firmware.FirmwareUpload import FirmwareUploader
10+
11+
12+
class TestFirmwareUploader:
13+
"""Test cases for FirmwareUploader class."""
14+
15+
def test_binary_name(self) -> None:
16+
"""Test that binary_name returns the correct name."""
17+
assert FirmwareUploader.binary_name() == "ardupilot_fw_uploader.py"
18+
19+
@patch("shutil.which")
20+
def test_init_binary_not_found(self, mock_which: MagicMock) -> None:
21+
"""Test that UploadToolNotFound is raised when binary is not found."""
22+
mock_which.return_value = None
23+
with pytest.raises(UploadToolNotFound, match="Uploader binary not found on system's PATH."):
24+
FirmwareUploader()
25+
26+
@patch("shutil.which")
27+
@patch("subprocess.check_output")
28+
def test_init_binary_invalid(self, mock_check_output: MagicMock, mock_which: MagicMock) -> None:
29+
"""Test that InvalidUploadTool is raised when binary validation fails."""
30+
mock_which.return_value = "/fake/path/ardupilot_fw_uploader.py"
31+
mock_check_output.side_effect = subprocess.CalledProcessError(1, "test")
32+
33+
with pytest.raises(InvalidUploadTool):
34+
FirmwareUploader()
35+
36+
@patch("shutil.which")
37+
@patch("subprocess.check_output")
38+
def test_init_success(self, mock_check_output: MagicMock, mock_which: MagicMock) -> None:
39+
"""Test successful initialization."""
40+
mock_which.return_value = "/fake/path/ardupilot_fw_uploader.py"
41+
mock_check_output.return_value = b"help output"
42+
43+
uploader = FirmwareUploader()
44+
assert uploader.binary() == pathlib.Path("/fake/path/ardupilot_fw_uploader.py")
45+
46+
@patch("shutil.which")
47+
@patch("subprocess.check_output")
48+
def test_set_autopilot_port(self, mock_check_output: MagicMock, mock_which: MagicMock) -> None:
49+
"""Test setting autopilot port."""
50+
mock_which.return_value = "/fake/path/ardupilot_fw_uploader.py"
51+
mock_check_output.return_value = b"help output"
52+
53+
uploader = FirmwareUploader()
54+
new_port = pathlib.Path("/dev/ttyUSB0")
55+
uploader.set_autopilot_port(new_port)
56+
assert uploader._autopilot_port == new_port
57+
58+
@patch("shutil.which")
59+
@patch("subprocess.check_output")
60+
def test_set_baudrate_bootloader(self, mock_check_output: MagicMock, mock_which: MagicMock) -> None:
61+
"""Test setting bootloader baudrate."""
62+
mock_which.return_value = "/fake/path/ardupilot_fw_uploader.py"
63+
mock_check_output.return_value = b"help output"
64+
65+
uploader = FirmwareUploader()
66+
uploader.set_baudrate_bootloader(921600)
67+
assert uploader._baudrate_bootloader == 921600
68+
69+
@patch("shutil.which")
70+
@patch("subprocess.check_output")
71+
def test_set_baudrate_flightstack(self, mock_check_output: MagicMock, mock_which: MagicMock) -> None:
72+
"""Test setting flightstack baudrate."""
73+
mock_which.return_value = "/fake/path/ardupilot_fw_uploader.py"
74+
mock_check_output.return_value = b"help output"
75+
76+
uploader = FirmwareUploader()
77+
uploader.set_baudrate_flightstack(115200)
78+
assert uploader._baudrate_flightstack == 115200

0 commit comments

Comments
 (0)