From c209d524c5f89ada4b2d71e9f2dd462b1ce3767f Mon Sep 17 00:00:00 2001 From: Julian Stirling Date: Wed, 20 Aug 2025 13:22:35 +0100 Subject: [PATCH] Split calibration and aquisition tests --- .../picamera2/test_acquisition.py | 32 ++---------- .../picamera2/test_calibration.py | 49 +++++++++++++++++++ 2 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 hardware-specific-tests/picamera2/test_calibration.py diff --git a/hardware-specific-tests/picamera2/test_acquisition.py b/hardware-specific-tests/picamera2/test_acquisition.py index 4876e701..c787f227 100644 --- a/hardware-specific-tests/picamera2/test_acquisition.py +++ b/hardware-specific-tests/picamera2/test_acquisition.py @@ -1,7 +1,5 @@ """Test data collection from the Raspberry Picamera.""" -import tempfile - from fastapi.testclient import TestClient from PIL import Image import numpy as np @@ -12,18 +10,8 @@ import labthings_fastapi as lt from openflexure_microscope_server.things.camera.picamera import StreamingPiCamera2 -@fixture() -def picamera_thing() -> StreamingPiCamera2: - """Return a StreamingPiCamera2 Thing. - - This is the Thing that the fixture client uses. It can be used to probe the - Thing directly to check actions had the expected response. - """ - return StreamingPiCamera2() - - -@fixture() -def client(picamera_thing) -> lt.ThingClient: +@fixture(scope="module") +def client() -> lt.ThingClient: """Initialise a test client for the StreamingPiCamera2 Thing. This fixture: @@ -32,25 +20,13 @@ def client(picamera_thing) -> lt.ThingClient: * Registers a StreamingPiCamera2 instance at the "/camera/" endpoint * Provides a ThingClient for interacting with it during tests. """ - temp_folder = tempfile.TemporaryDirectory() - server = lt.ThingServer(settings_folder=temp_folder.name) - server.add_thing(picamera_thing, "/camera/") + server = lt.ThingServer() + server.add_thing(StreamingPiCamera2(), "/camera/") with TestClient(server.app) as test_client: client = lt.ThingClient.from_url("/camera/", client=test_client) yield client -def test_calibration(picamera_thing, client): - """Check that full auto calibrate completes without an exception.""" - tuning = picamera_thing.tuning - default_tuning = picamera_thing.default_tuning - # Tuning should start the same as the server is loading with no settings. - assert default_tuning == tuning - # After calibration they should be different - client.full_auto_calibrate() - assert default_tuning != tuning - - def test_jpeg_and_array(client): """Check that a jpeg grabbed from the stream is the same size as other captures. diff --git a/hardware-specific-tests/picamera2/test_calibration.py b/hardware-specific-tests/picamera2/test_calibration.py new file mode 100644 index 00000000..6dc8ffc4 --- /dev/null +++ b/hardware-specific-tests/picamera2/test_calibration.py @@ -0,0 +1,49 @@ +"""Test data collection from the Raspberry Picamera.""" + +import tempfile + +from fastapi.testclient import TestClient +from pytest import fixture + +import labthings_fastapi as lt + +from openflexure_microscope_server.things.camera.picamera import StreamingPiCamera2 + + +@fixture() +def picamera_thing() -> StreamingPiCamera2: + """Return a StreamingPiCamera2 Thing. + + This is the Thing that the fixture client uses. It can be used to probe the + Thing directly to check actions had the expected response. + """ + return StreamingPiCamera2() + + +@fixture() +def client(picamera_thing) -> lt.ThingClient: + """Initialise a test client for the StreamingPiCamera2 Thing. + + This fixture: + + * Sets up a ThingServer, + * Registers a StreamingPiCamera2 instance at the "/camera/" endpoint + * Provides a ThingClient for interacting with it during tests. + """ + temp_folder = tempfile.TemporaryDirectory() + server = lt.ThingServer(settings_folder=temp_folder.name) + server.add_thing(picamera_thing, "/camera/") + with TestClient(server.app) as test_client: + client = lt.ThingClient.from_url("/camera/", client=test_client) + yield client + + +def test_calibration(picamera_thing, client): + """Check that full auto calibrate completes without an exception.""" + tuning = picamera_thing.tuning + default_tuning = picamera_thing.default_tuning + # Tuning should start the same as the server is loading with no settings. + assert default_tuning == tuning + # After calibration they should be different + client.full_auto_calibrate() + assert default_tuning != tuning