a bit more coverage around USB interactions (aka lots of mocks)
This commit is contained in:
parent
5bcb3dba3f
commit
2c446f595a
|
@ -25,6 +25,46 @@ def with_pb2s(test, *args, **kwargs):
|
|||
del sys.modules['config_pb2']
|
||||
|
||||
|
||||
def test_get_bootsel_endpoints():
|
||||
"""Test our expected method of finding the BOOTSEL mode Pico board."""
|
||||
mock_device = mock.MagicMock(name='mock_device')
|
||||
mock_device.is_kernel_driver_active.return_value = False
|
||||
mock_configuration = mock.MagicMock(name='mock_configuration')
|
||||
mock_device.get_active_configuration.return_value = mock_configuration
|
||||
mock_interface = mock.MagicMock(name='mock_interface')
|
||||
with mock.patch('usb.core.find', return_value=mock_device) as mock_find:
|
||||
with mock.patch('usb.util.find_descriptor', return_value=mock_interface) as mock_find_descriptor:
|
||||
_, _ = pico.get_bootsel_endpoints()
|
||||
|
||||
mock_find.assert_called_with(idVendor=pico.PICO_VENDOR, idProduct=pico.PICO_PRODUCT)
|
||||
mock_device.is_kernel_driver_active.assert_called_with(0)
|
||||
mock_device.detach_kernel_driver.assert_not_called()
|
||||
mock_device.get_active_configuration.assert_called_once()
|
||||
assert mock_find_descriptor.call_args_list[0].args[0] == mock_configuration
|
||||
assert mock_find_descriptor.call_args_list[1].args[0] == mock_interface
|
||||
assert mock_find_descriptor.call_args_list[2].args[0] == mock_interface
|
||||
|
||||
|
||||
def test_get_bootsel_endpoints_with_kernel_disconnect():
|
||||
"""Test our expected method of finding the BOOTSEL mode Pico board."""
|
||||
mock_device = mock.MagicMock(name='mock_device')
|
||||
mock_device.is_kernel_driver_active.return_value = True
|
||||
mock_configuration = mock.MagicMock(name='mock_configuration')
|
||||
mock_device.get_active_configuration.return_value = mock_configuration
|
||||
mock_interface = mock.MagicMock(name='mock_interface')
|
||||
with mock.patch('usb.core.find', return_value=mock_device) as mock_find:
|
||||
with mock.patch('usb.util.find_descriptor', return_value=mock_interface) as mock_find_descriptor:
|
||||
_, _ = pico.get_bootsel_endpoints()
|
||||
|
||||
mock_find.assert_called_with(idVendor=pico.PICO_VENDOR, idProduct=pico.PICO_PRODUCT)
|
||||
mock_device.is_kernel_driver_active.assert_called_with(0)
|
||||
mock_device.detach_kernel_driver.assert_called_with(0)
|
||||
mock_device.get_active_configuration.assert_called_once()
|
||||
assert mock_find_descriptor.call_args_list[0].args[0] == mock_configuration
|
||||
assert mock_find_descriptor.call_args_list[1].args[0] == mock_interface
|
||||
assert mock_find_descriptor.call_args_list[2].args[0] == mock_interface
|
||||
|
||||
|
||||
def test_exclusive_access():
|
||||
"""Test that we can get exclusive access to a BOOTSEL board."""
|
||||
end_out, end_in = mock.MagicMock(), mock.MagicMock()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Unit tests for the storage module."""
|
||||
import os
|
||||
import sys
|
||||
import unittest.mock as mock
|
||||
|
||||
import pytest
|
||||
from decorator import decorator
|
||||
|
@ -150,3 +151,21 @@ def test_pad_config_to_storage_raises(config_binary):
|
|||
"""Test that we raise an exception if the config is bigger than the storage section."""
|
||||
with pytest.raises(storage.ConfigLengthError):
|
||||
_ = storage.pad_config_to_storage_size(config_binary * 5)
|
||||
|
||||
|
||||
@with_pb2s
|
||||
def test_get_config_from_usb(config_binary):
|
||||
"""Test we attempt to read from the proper location over USB."""
|
||||
mock_out = mock.MagicMock()
|
||||
mock_out.device.idVendor = 0xbeef
|
||||
mock_out.device.idProduct = 0xcafe
|
||||
mock_out.device.bus = 1
|
||||
mock_out.device.address = 2
|
||||
mock_in = mock.MagicMock()
|
||||
with mock.patch('gp2040ce_bintools.storage.get_bootsel_endpoints', return_value=(mock_out, mock_in)) as mock_get:
|
||||
with mock.patch('gp2040ce_bintools.storage.read', return_value=config_binary) as mock_read:
|
||||
config, _, _ = storage.get_config_from_usb()
|
||||
|
||||
mock_get.assert_called_once()
|
||||
mock_read.assert_called_with(mock_out, mock_in, 0x101FE000, 8192)
|
||||
assert config == storage.get_config(config_binary)
|
||||
|
|
Loading…
Reference in New Issue