mirror of
https://github.com/ivan-usov-org/bec.git
synced 2025-04-22 02:20:02 +02:00
114 lines
4.1 KiB
Python
114 lines
4.1 KiB
Python
import os
|
|
|
|
import pytest
|
|
|
|
from bec_lib.bec_yaml_loader import yaml_load
|
|
|
|
|
|
@pytest.fixture
|
|
def test_file1():
|
|
return "eiger:\n readoutPriority: monitored\n deviceClass: ophyd_devices.SimCamera\n deviceConfig:\n device_access: true\n deviceTags:\n - detector\n enabled: true\n readOnly: false\n softwareTrigger: true"
|
|
|
|
|
|
@pytest.fixture
|
|
def test_file2():
|
|
return "samx:\n readoutPriority: monitored\n deviceClass: ophyd_devices.SimCamera\n deviceConfig:\n device_access: true\n deviceTags:\n - detector\n enabled: true\n readOnly: false\n softwareTrigger: true"
|
|
|
|
|
|
@pytest.fixture
|
|
def test_file3():
|
|
return "samy:\n readoutPriority: monitored\n deviceClass: ophyd_devices.SimCamera\n deviceConfig:\n device_access: true\n deviceTags:\n - detector\n enabled: true\n readOnly: false\n softwareTrigger: true"
|
|
|
|
|
|
def _remove_files(files):
|
|
for file in files:
|
|
if os.path.exists(file):
|
|
os.remove(file)
|
|
|
|
|
|
def test_load_yaml_without_include(test_file1):
|
|
# sastt:
|
|
# - !include /Users/wakonig_k/software/work/csaxs-bec/csaxs_bec/device_configs/bec_device_config_sastt.yaml
|
|
output_file_1 = test_file1
|
|
with open("test_file_1.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_1)
|
|
try:
|
|
out = yaml_load("test_file_1.yaml")
|
|
finally:
|
|
_remove_files(["test_file_1.yaml"])
|
|
|
|
assert "eiger" in out
|
|
assert len(out) == 1
|
|
|
|
|
|
def test_load_yaml_single_include(test_file1, test_file2):
|
|
# sastt:
|
|
# - !include /Users/wakonig_k/software/work/csaxs-bec/csaxs_bec/device_configs/bec_device_config_sastt.yaml
|
|
include_str = "sastt: !include ./test_file2.yaml"
|
|
output_file_1 = test_file1 + "\n" + include_str
|
|
output_file_2 = test_file2
|
|
with open("test_file_1.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_1)
|
|
with open("test_file2.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_2)
|
|
try:
|
|
out = yaml_load("test_file_1.yaml")
|
|
finally:
|
|
_remove_files(["test_file_1.yaml", "test_file2.yaml"])
|
|
|
|
assert "samx" in out
|
|
assert "eiger" in out
|
|
assert len(out) == 2
|
|
|
|
|
|
def test_load_yaml_single_include_with_conflict(capfd, test_file1):
|
|
# sastt:
|
|
# - !include /Users/wakonig_k/software/work/csaxs-bec/csaxs_bec/device_configs/bec_device_config_sastt.yaml
|
|
include_str = "sastt: !include ./test_file2.yaml"
|
|
output_file_1 = test_file1 + "\n" + include_str
|
|
output_file_2 = test_file1
|
|
output_file_1.replace(
|
|
"deviceClass: ophyd_devices.SimCamera", "deviceClass: ophyd_devices.Eiger"
|
|
)
|
|
with open("test_file_1.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_1)
|
|
with open("test_file2.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_2)
|
|
# capture stdout
|
|
try:
|
|
out = yaml_load("test_file_1.yaml")
|
|
finally:
|
|
_remove_files(["test_file_1.yaml", "test_file2.yaml"])
|
|
|
|
assert "eiger" in out
|
|
assert len(out) == 1
|
|
assert out["eiger"]["deviceClass"] == "ophyd_devices.SimCamera"
|
|
out, _ = capfd.readouterr()
|
|
assert (
|
|
"Warning: Multiple definitions for key eiger. Using the one from ./test_file2.yaml." in out
|
|
)
|
|
|
|
|
|
def test_load_yaml_multi_include(test_file1, test_file2, test_file3):
|
|
# sastt:
|
|
# - !include /Users/wakonig_k/software/work/csaxs-bec/csaxs_bec/device_configs/bec_device_config_sastt.yaml
|
|
include_str = "sastt:\n - !include ./test_file2.yaml\n - !include ./test_file3.yaml"
|
|
output_file_1 = test_file1 + "\n" + include_str
|
|
output_file_2 = test_file2
|
|
output_file_3 = test_file3
|
|
with open("test_file_1.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_1)
|
|
with open("test_file2.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_2)
|
|
with open("test_file3.yaml", "w", encoding="utf-8") as file:
|
|
file.write(output_file_3)
|
|
try:
|
|
out = yaml_load("test_file_1.yaml")
|
|
finally:
|
|
_remove_files(["test_file_1.yaml", "test_file2.yaml", "test_file3.yaml"])
|
|
|
|
assert "samx" in out
|
|
assert "samy" in out
|
|
assert "eiger" in out
|
|
assert len(out) == 3
|