test(cameras): use fixture for realsense patching + depth read test
This commit is contained in:
@@ -36,27 +36,33 @@ except (ImportError, ModuleNotFoundError):
|
|||||||
TEST_ARTIFACTS_DIR = Path(__file__).parent.parent / "artifacts" / "cameras"
|
TEST_ARTIFACTS_DIR = Path(__file__).parent.parent / "artifacts" / "cameras"
|
||||||
BAG_FILE_PATH = TEST_ARTIFACTS_DIR / "test_rs.bag"
|
BAG_FILE_PATH = TEST_ARTIFACTS_DIR / "test_rs.bag"
|
||||||
|
|
||||||
# NOTE(Steven): Missing tests for depth
|
|
||||||
# NOTE(Steven): Takes 20sec, the patch being the biggest bottleneck
|
# NOTE(Steven): Takes 20sec, the patch being the biggest bottleneck
|
||||||
# NOTE(Steven): more tests + assertions?
|
|
||||||
|
|
||||||
|
|
||||||
def mock_rs_config_enable_device_from_file(rs_config_instance, sn):
|
def mock_rs_config_enable_device_from_file(rs_config_instance, _sn):
|
||||||
return rs_config_instance.enable_device_from_file(str(BAG_FILE_PATH), repeat_playback=True)
|
return rs_config_instance.enable_device_from_file(str(BAG_FILE_PATH), repeat_playback=True)
|
||||||
|
|
||||||
|
|
||||||
def mock_rs_config_enable_device_bad_file(rs_config_instance, sn):
|
def mock_rs_config_enable_device_bad_file(rs_config_instance, _sn):
|
||||||
return rs_config_instance.enable_device_from_file("non_existent_file.bag", repeat_playback=True)
|
return rs_config_instance.enable_device_from_file("non_existent_file.bag", repeat_playback=True)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="patch_realsense", autouse=True)
|
||||||
|
def fixture_patch_realsense():
|
||||||
|
"""Automatically mock pyrealsense2.config.enable_device for all tests."""
|
||||||
|
with patch(
|
||||||
|
"pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file
|
||||||
|
) as mock:
|
||||||
|
yield mock
|
||||||
|
|
||||||
|
|
||||||
def test_abc_implementation():
|
def test_abc_implementation():
|
||||||
"""Instantiation should raise an error if the class doesn't implement abstract methods/properties."""
|
"""Instantiation should raise an error if the class doesn't implement abstract methods/properties."""
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
_ = RealSenseCamera(config)
|
_ = RealSenseCamera(config)
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_connect():
|
||||||
def test_connect(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
|
|
||||||
@@ -64,8 +70,7 @@ def test_connect(mock_enable_device):
|
|||||||
assert camera.is_connected
|
assert camera.is_connected
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_connect_already_connected():
|
||||||
def test_connect_already_connected(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
@@ -74,8 +79,8 @@ def test_connect_already_connected(mock_enable_device):
|
|||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_bad_file)
|
def test_connect_invalid_camera_path(patch_realsense):
|
||||||
def test_connect_invalid_camera_path(mock_enable_device):
|
patch_realsense.side_effect = mock_rs_config_enable_device_bad_file
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
|
|
||||||
@@ -83,8 +88,7 @@ def test_connect_invalid_camera_path(mock_enable_device):
|
|||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_invalid_width_connect():
|
||||||
def test_invalid_width_connect(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42, width=99999, height=480, fps=30)
|
config = RealSenseCameraConfig(serial_number_or_name=42, width=99999, height=480, fps=30)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
|
|
||||||
@@ -92,8 +96,7 @@ def test_invalid_width_connect(mock_enable_device):
|
|||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_read():
|
||||||
def test_read(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
@@ -102,6 +105,15 @@ def test_read(mock_enable_device):
|
|||||||
assert isinstance(img, np.ndarray)
|
assert isinstance(img, np.ndarray)
|
||||||
|
|
||||||
|
|
||||||
|
def test_read_depth():
|
||||||
|
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30, use_depth=True)
|
||||||
|
camera = RealSenseCamera(config)
|
||||||
|
camera.connect(warmup=False)
|
||||||
|
|
||||||
|
img = camera.read_depth(timeout_ms=500) # NOTE(Steven): Reading depth takes longer
|
||||||
|
assert isinstance(img, np.ndarray)
|
||||||
|
|
||||||
|
|
||||||
def test_read_before_connect():
|
def test_read_before_connect():
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
@@ -110,8 +122,7 @@ def test_read_before_connect():
|
|||||||
_ = camera.read()
|
_ = camera.read()
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_disconnect():
|
||||||
def test_disconnect(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42)
|
config = RealSenseCameraConfig(serial_number_or_name=42)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
@@ -129,8 +140,7 @@ def test_disconnect_before_connect():
|
|||||||
camera.disconnect()
|
camera.disconnect()
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_async_read():
|
||||||
def test_async_read(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
@@ -146,8 +156,7 @@ def test_async_read(mock_enable_device):
|
|||||||
camera.disconnect() # To stop/join the thread. Otherwise get warnings when the test ends
|
camera.disconnect() # To stop/join the thread. Otherwise get warnings when the test ends
|
||||||
|
|
||||||
|
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_async_read_timeout():
|
||||||
def test_async_read_timeout(mock_enable_device):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
config = RealSenseCameraConfig(serial_number_or_name=42, width=640, height=480, fps=30)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
@@ -180,8 +189,7 @@ def test_async_read_before_connect():
|
|||||||
],
|
],
|
||||||
ids=["no_rot", "rot90", "rot180", "rot270"],
|
ids=["no_rot", "rot90", "rot180", "rot270"],
|
||||||
)
|
)
|
||||||
@patch("pyrealsense2.config.enable_device", side_effect=mock_rs_config_enable_device_from_file)
|
def test_rotation(rotation):
|
||||||
def test_rotation(mock_enable_device, rotation):
|
|
||||||
config = RealSenseCameraConfig(serial_number_or_name=42, rotation=rotation)
|
config = RealSenseCameraConfig(serial_number_or_name=42, rotation=rotation)
|
||||||
camera = RealSenseCamera(config)
|
camera = RealSenseCamera(config)
|
||||||
camera.connect(warmup=False)
|
camera.connect(warmup=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user