mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 11:41:49 +02:00
fix: rpc_server_dock fixture now spawns the server process
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
import time
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
from bec_lib.client import BECClient
|
||||
@ -8,24 +10,10 @@ from bec_widgets.cli.client import BECDockArea, BECFigure, BECImageShow, BECMoto
|
||||
from bec_widgets.utils import Colors
|
||||
|
||||
|
||||
@pytest.fixture(name="bec_client")
|
||||
def cli_bec_client(rpc_server_dock):
|
||||
"""
|
||||
Fixture to create a BECClient instance that is independent of the GUI.
|
||||
"""
|
||||
# pylint: disable=protected-access
|
||||
cli_client = BECClient(forced=True, config=rpc_server_dock.client._service_config)
|
||||
cli_client.start()
|
||||
yield cli_client
|
||||
cli_client.shutdown()
|
||||
|
||||
|
||||
def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
|
||||
dock = BECDockArea(rpc_server_dock.gui_id)
|
||||
dock_server = rpc_server_dock.gui
|
||||
|
||||
def test_rpc_add_dock_with_figure_e2e(bec_client_lib, rpc_server_dock):
|
||||
# BEC client shortcuts
|
||||
client = rpc_server_dock.client
|
||||
dock = BECDockArea(rpc_server_dock)
|
||||
client = bec_client_lib
|
||||
dev = client.device_manager.devices
|
||||
scans = client.scans
|
||||
queue = client.queue
|
||||
@ -35,17 +23,17 @@ def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
|
||||
d1 = dock.add_dock("dock_1")
|
||||
d2 = dock.add_dock("dock_2")
|
||||
|
||||
assert len(dock_server.docks) == 3
|
||||
|
||||
assert len(dock.get_docks_repr()["docks"]) == 3
|
||||
# Add 3 figures with some widgets
|
||||
fig0 = d0.add_widget("BECFigure")
|
||||
fig1 = d1.add_widget("BECFigure")
|
||||
fig2 = d2.add_widget("BECFigure")
|
||||
|
||||
assert len(dock_server.docks) == 3
|
||||
assert len(dock_server.docks["dock_0"].widgets) == 1
|
||||
assert len(dock_server.docks["dock_1"].widgets) == 1
|
||||
assert len(dock_server.docks["dock_2"].widgets) == 1
|
||||
docks = dock.get_docks_repr()["docks"]
|
||||
assert len(docks) == 3
|
||||
assert len(docks["dock_0"]["widgets"]) == 1
|
||||
assert len(docks["dock_1"]["widgets"]) == 1
|
||||
assert len(docks["dock_2"]["widgets"]) == 1
|
||||
|
||||
assert fig1.__class__.__name__ == "BECFigure"
|
||||
assert fig1.__class__ == BECFigure
|
||||
@ -98,7 +86,7 @@ def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
|
||||
|
||||
# wait for scan to finish
|
||||
while not status.status == "COMPLETED":
|
||||
qtbot.wait(200)
|
||||
time.sleep(0.2)
|
||||
|
||||
# plot
|
||||
plt_last_scan_data = queue.scan_storage.storage[-1].data
|
||||
@ -110,7 +98,7 @@ def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
|
||||
last_image_device = client.connector.get_last(MessageEndpoints.device_monitor("eiger"))[
|
||||
"data"
|
||||
].data
|
||||
qtbot.wait(500)
|
||||
time.sleep(0.5)
|
||||
last_image_plot = im.images[0].get_data()
|
||||
np.testing.assert_equal(last_image_device, last_image_plot)
|
||||
|
||||
@ -129,40 +117,40 @@ def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
|
||||
)
|
||||
|
||||
|
||||
def test_dock_manipulations_e2e(rpc_server_dock, qtbot):
|
||||
dock = BECDockArea(rpc_server_dock.gui_id)
|
||||
dock_server = rpc_server_dock.gui
|
||||
def test_dock_manipulations_e2e(rpc_server_dock):
|
||||
dock = BECDockArea(rpc_server_dock)
|
||||
|
||||
d0 = dock.add_dock("dock_0")
|
||||
d1 = dock.add_dock("dock_1")
|
||||
d2 = dock.add_dock("dock_2")
|
||||
assert len(dock_server.docks) == 3
|
||||
assert len(dock.get_docks_repr()["docks"]) == 3
|
||||
|
||||
d0.detach()
|
||||
dock.detach_dock("dock_2")
|
||||
assert len(dock_server.docks) == 3
|
||||
assert len(dock_server.tempAreas) == 2
|
||||
docks_repr = dock.get_docks_repr()
|
||||
assert len(docks_repr["docks"]) == 3
|
||||
assert len(docks_repr["tempAreas"]) == 2
|
||||
|
||||
d0.attach()
|
||||
assert len(dock_server.docks) == 3
|
||||
assert len(dock_server.tempAreas) == 1
|
||||
docks_repr = dock.get_docks_repr()
|
||||
assert len(docks_repr["docks"]) == 3
|
||||
assert len(docks_repr["tempAreas"]) == 1
|
||||
|
||||
d2.remove()
|
||||
qtbot.wait(200)
|
||||
docks_repr = dock.get_docks_repr()
|
||||
assert len(docks_repr["docks"]) == 2
|
||||
|
||||
assert len(dock_server.docks) == 2
|
||||
docks_list = list(dict(dock_server.docks).keys())
|
||||
assert ["dock_0", "dock_1"] == docks_list
|
||||
assert ["dock_0", "dock_1"] == list(docks_repr["docks"])
|
||||
|
||||
dock.clear_all()
|
||||
|
||||
assert len(dock_server.docks) == 0
|
||||
assert len(dock_server.tempAreas) == 0
|
||||
docks_repr = dock.get_docks_repr()
|
||||
assert len(docks_repr["docks"]) == 0
|
||||
assert len(docks_repr["tempAreas"]) == 0
|
||||
|
||||
|
||||
def test_spiral_bar(rpc_server_dock):
|
||||
dock = BECDockArea(rpc_server_dock.gui_id)
|
||||
dock_server = rpc_server_dock.gui
|
||||
dock = BECDockArea(rpc_server_dock)
|
||||
|
||||
d0 = dock.add_dock(name="dock_0")
|
||||
|
||||
@ -173,49 +161,42 @@ def test_spiral_bar(rpc_server_dock):
|
||||
bar.set_colors_from_map("viridis")
|
||||
bar.set_value([10, 20, 30, 40, 50])
|
||||
|
||||
bar_server = dock_server.docks["dock_0"].widgets[0]
|
||||
docks_repr = dock.get_docks_repr()
|
||||
bar_repr = docks_repr["docks"]["dock_0"]["widgets"][0]
|
||||
|
||||
expected_colors = Colors.golden_angle_color("viridis", 5, "RGB")
|
||||
bar_colors = [ring.color.getRgb() for ring in bar_server.rings]
|
||||
bar_values = [ring.config.value for ring in bar_server.rings]
|
||||
assert bar_values == [10, 20, 30, 40, 50]
|
||||
assert bar_colors == expected_colors
|
||||
assert f"Bar colors: {expected_colors}" in bar_repr
|
||||
assert f"Bar values: [10.000, 20.000, 30.000, 40.000, 50.000]" in bar_repr
|
||||
|
||||
|
||||
def test_spiral_bar_scan_update(rpc_server_dock, qtbot):
|
||||
dock = BECDockArea(rpc_server_dock.gui_id)
|
||||
dock_server = rpc_server_dock.gui
|
||||
def test_spiral_bar_scan_update(bec_client_lib, rpc_server_dock):
|
||||
dock = BECDockArea(rpc_server_dock)
|
||||
|
||||
d0 = dock.add_dock("dock_0")
|
||||
|
||||
d0.add_widget("SpiralProgressBar")
|
||||
|
||||
client = rpc_server_dock.client
|
||||
client = bec_client_lib
|
||||
dev = client.device_manager.devices
|
||||
dev.samx.tolerance.set(0)
|
||||
dev.samy.tolerance.set(0)
|
||||
scans = client.scans
|
||||
|
||||
status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
|
||||
status.wait()
|
||||
|
||||
while not status.status == "COMPLETED":
|
||||
qtbot.wait(200)
|
||||
|
||||
qtbot.wait(200)
|
||||
bar_server = dock_server.docks["dock_0"].widgets[0]
|
||||
assert bar_server.config.num_bars == 1
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.value, 10, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.min_value, 0, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.max_value, 10, atol=0.1)
|
||||
bar_repr = dock.get_docks_repr()["docks"]["dock_0"]["widgets"][0]
|
||||
assert "Num bars: 1" in bar_repr
|
||||
assert "Bar values: [10.000]" in bar_repr
|
||||
assert "0: config min=0.000, max=10.000" in bar_repr
|
||||
|
||||
status = scans.grid_scan(dev.samx, -5, 5, 4, dev.samy, -10, 10, 4, relative=True, exp_time=0.1)
|
||||
status.wait()
|
||||
|
||||
while not status.status == "COMPLETED":
|
||||
qtbot.wait(200)
|
||||
|
||||
qtbot.wait(200)
|
||||
assert bar_server.config.num_bars == 1
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.value, 16, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.min_value, 0, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.max_value, 16, atol=0.1)
|
||||
bar_repr = dock.get_docks_repr()["docks"]["dock_0"]["widgets"][0]
|
||||
assert "Num bars: 1" in bar_repr
|
||||
assert "Bar values: [16.000]" in bar_repr
|
||||
assert "0: config min=0.000, max=16.000" in bar_repr
|
||||
|
||||
init_samx = dev.samx.read()["samx"]["value"]
|
||||
init_samy = dev.samy.read()["samy"]["value"]
|
||||
@ -226,18 +207,15 @@ def test_spiral_bar_scan_update(rpc_server_dock, qtbot):
|
||||
dev.samy.velocity.put(5)
|
||||
|
||||
status = scans.umv(dev.samx, 5, dev.samy, 10, relative=True)
|
||||
status.wait()
|
||||
|
||||
while not status.status == "COMPLETED":
|
||||
qtbot.wait(200)
|
||||
|
||||
qtbot.wait(200)
|
||||
assert bar_server.config.num_bars == 2
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.value, final_samx, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[1].config.value, final_samy, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.min_value, init_samx, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[1].config.min_value, init_samy, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[0].config.max_value, final_samx, atol=0.1)
|
||||
np.testing.assert_allclose(bar_server.rings[1].config.max_value, final_samy, atol=0.1)
|
||||
bar_repr = dock.get_docks_repr()["docks"]["dock_0"]["widgets"][0]
|
||||
assert "Num bars: 2" in bar_repr
|
||||
assert f"Bar values: [{'%.3f' % final_samx}, {'%.3f' % final_samy}]" in bar_repr
|
||||
assert (
|
||||
f"0: config min={'%.3f' % init_samx}, max={'%.3f' % final_samx} | 1: config min={'%.3f' % init_samy}, max={'%.3f' % final_samy}"
|
||||
in bar_repr
|
||||
)
|
||||
|
||||
|
||||
def test_auto_update(rpc_server_dock, bec_client, qtbot):
|
||||
|
Reference in New Issue
Block a user