shepherd-core 2023.12.1__py3-none-any.whl → 2024.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. shepherd_core/__init__.py +3 -2
  2. shepherd_core/data_models/base/calibration.py +3 -1
  3. shepherd_core/data_models/base/content.py +11 -4
  4. shepherd_core/data_models/base/shepherd.py +2 -0
  5. shepherd_core/data_models/content/energy_environment.py +1 -1
  6. shepherd_core/data_models/content/virtual_harvester.py +1 -1
  7. shepherd_core/data_models/content/virtual_source.py +18 -13
  8. shepherd_core/data_models/experiment/experiment.py +10 -10
  9. shepherd_core/data_models/experiment/observer_features.py +5 -6
  10. shepherd_core/data_models/task/observer_tasks.py +1 -1
  11. shepherd_core/data_models/task/testbed_tasks.py +7 -3
  12. shepherd_core/data_models/testbed/cape.py +1 -1
  13. shepherd_core/data_models/testbed/gpio.py +1 -1
  14. shepherd_core/data_models/testbed/mcu.py +1 -1
  15. shepherd_core/data_models/testbed/observer.py +1 -1
  16. shepherd_core/data_models/testbed/target.py +1 -1
  17. shepherd_core/data_models/testbed/testbed.py +1 -1
  18. shepherd_core/decoder_waveform/uart.py +1 -0
  19. shepherd_core/fw_tools/validation.py +1 -2
  20. shepherd_core/inventory/__init__.py +51 -1
  21. shepherd_core/inventory/system.py +8 -0
  22. shepherd_core/reader.py +19 -16
  23. shepherd_core/testbed_client/cache_path.py +15 -0
  24. shepherd_core/testbed_client/client.py +2 -3
  25. shepherd_core/testbed_client/fixtures.py +4 -1
  26. shepherd_core/testbed_client/user_model.py +6 -4
  27. shepherd_core/vsource/virtual_converter_model.py +1 -1
  28. shepherd_core/vsource/virtual_harvester_model.py +1 -0
  29. shepherd_core/vsource/virtual_source_model.py +1 -0
  30. shepherd_core/writer.py +5 -2
  31. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/METADATA +49 -34
  32. shepherd_core-2024.4.1.dist-info/RECORD +64 -0
  33. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/WHEEL +1 -1
  34. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/top_level.txt +0 -1
  35. shepherd_core/data_models/content/_external_fixtures.yaml +0 -394
  36. shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -50
  37. shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -159
  38. shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -229
  39. shepherd_core/data_models/testbed/cape_fixture.yaml +0 -94
  40. shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -166
  41. shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -19
  42. shepherd_core/data_models/testbed/observer_fixture.yaml +0 -220
  43. shepherd_core/data_models/testbed/target_fixture.yaml +0 -137
  44. shepherd_core/data_models/testbed/testbed_fixture.yaml +0 -25
  45. shepherd_core-2023.12.1.dist-info/RECORD +0 -117
  46. tests/__init__.py +0 -0
  47. tests/conftest.py +0 -64
  48. tests/data_models/__init__.py +0 -0
  49. tests/data_models/conftest.py +0 -14
  50. tests/data_models/example_cal_data.yaml +0 -31
  51. tests/data_models/example_cal_data_faulty.yaml +0 -29
  52. tests/data_models/example_cal_meas.yaml +0 -178
  53. tests/data_models/example_cal_meas_faulty1.yaml +0 -142
  54. tests/data_models/example_cal_meas_faulty2.yaml +0 -136
  55. tests/data_models/example_config_emulator.yaml +0 -41
  56. tests/data_models/example_config_experiment.yaml +0 -16
  57. tests/data_models/example_config_experiment_alternative.yaml +0 -14
  58. tests/data_models/example_config_harvester.yaml +0 -15
  59. tests/data_models/example_config_testbed.yaml +0 -26
  60. tests/data_models/example_config_virtsource.yaml +0 -78
  61. tests/data_models/test_base_models.py +0 -205
  62. tests/data_models/test_content_fixtures.py +0 -41
  63. tests/data_models/test_content_models.py +0 -282
  64. tests/data_models/test_examples.py +0 -48
  65. tests/data_models/test_experiment_models.py +0 -277
  66. tests/data_models/test_task_generation.py +0 -52
  67. tests/data_models/test_task_models.py +0 -131
  68. tests/data_models/test_testbed_fixtures.py +0 -47
  69. tests/data_models/test_testbed_models.py +0 -187
  70. tests/decoder_waveform/__init__.py +0 -0
  71. tests/decoder_waveform/test_decoder.py +0 -34
  72. tests/fw_tools/__init__.py +0 -0
  73. tests/fw_tools/conftest.py +0 -5
  74. tests/fw_tools/test_converter.py +0 -76
  75. tests/fw_tools/test_patcher.py +0 -66
  76. tests/fw_tools/test_validation.py +0 -56
  77. tests/inventory/__init__.py +0 -0
  78. tests/inventory/test_inventory.py +0 -20
  79. tests/test_cal_hw.py +0 -34
  80. tests/test_examples.py +0 -40
  81. tests/test_logger.py +0 -15
  82. tests/test_reader.py +0 -283
  83. tests/test_writer.py +0 -169
  84. tests/testbed_client/__init__.py +0 -0
  85. tests/vsource/__init__.py +0 -0
  86. tests/vsource/conftest.py +0 -49
  87. tests/vsource/test_converter.py +0 -161
  88. tests/vsource/test_harvester.py +0 -73
  89. tests/vsource/test_z.py +0 -5
  90. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/zip-safe +0 -0
@@ -1,277 +0,0 @@
1
- from datetime import timedelta
2
-
3
- import pytest
4
- from pydantic import ValidationError
5
-
6
- from shepherd_core import local_now
7
- from shepherd_core.data_models import VirtualHarvesterConfig
8
- from shepherd_core.data_models import VirtualSourceConfig
9
- from shepherd_core.data_models.content import EnergyEnvironment
10
- from shepherd_core.data_models.content import Firmware
11
- from shepherd_core.data_models.experiment import Experiment
12
- from shepherd_core.data_models.experiment import GpioActuation
13
- from shepherd_core.data_models.experiment import GpioEvent
14
- from shepherd_core.data_models.experiment import GpioLevel
15
- from shepherd_core.data_models.experiment import GpioTracing
16
- from shepherd_core.data_models.experiment import PowerTracing
17
- from shepherd_core.data_models.experiment import SystemLogging
18
- from shepherd_core.data_models.experiment import TargetConfig
19
- from shepherd_core.data_models.testbed import GPIO
20
- from shepherd_core.data_models.testbed import Target
21
-
22
- from .conftest import load_yaml
23
-
24
-
25
- def test_experiment_model_exp_min() -> None:
26
- Experiment(
27
- name="mex per",
28
- target_configs=[
29
- TargetConfig(
30
- target_IDs=[1],
31
- energy_env=EnergyEnvironment(name="SolarSunny"),
32
- firmware1=Firmware(name="nrf52_demo_rf"),
33
- )
34
- ],
35
- )
36
-
37
-
38
- def test_experiment_model_exp_yaml_load() -> None:
39
- exp1_data = load_yaml("example_config_experiment_alternative.yaml")
40
- Experiment(**exp1_data)
41
-
42
-
43
- def test_experiment_model_exp_yaml_comparison() -> None:
44
- exp1_data = load_yaml("example_config_experiment_alternative.yaml")
45
- exp1 = Experiment(**exp1_data)
46
-
47
- target_cfgs = TargetConfig(
48
- target_IDs=list(range(1, 5)),
49
- custom_IDs=list(range(4)),
50
- energy_env={"name": "SolarSunny"},
51
- virtual_source={"name": "diode+capacitor"},
52
- firmware1={"name": "nrf52_demo_rf"},
53
- )
54
- exp2 = Experiment(
55
- id=4567,
56
- name="meaningful Test-Name",
57
- created="2023-11-11 11:11:11",
58
- time_start="2023-12-12 12:12:12",
59
- target_configs=[target_cfgs],
60
- )
61
- assert exp1.get_hash() == exp2.get_hash()
62
-
63
-
64
- def test_experiment_model_exp_collision_target_id() -> None:
65
- hrv = VirtualHarvesterConfig(name="mppt_bq_thermoelectric")
66
- target_cfgs = [
67
- TargetConfig(
68
- target_IDs=[1, 2, 3], # <- collision
69
- custom_IDs=[0, 1, 2, 3],
70
- energy_env={"name": "SolarSunny"},
71
- virtual_source={"name": "diode+capacitor"},
72
- firmware1={"name": "nrf52_demo_rf"},
73
- ),
74
- TargetConfig(
75
- target_IDs=list(range(1, 5)), # <- collision
76
- custom_IDs=list(range(7, 18)), # note: longer list is OK
77
- energy_env=EnergyEnvironment(name="ThermoelectricWashingMachine"),
78
- virtual_source=VirtualSourceConfig(name="BQ25570-Schmitt", harvester=hrv),
79
- firmware1=Firmware(name="nrf52_demo_rf"),
80
- firmware2=Firmware(name="msp430_deep_sleep"),
81
- ),
82
- ]
83
- with pytest.raises(ValueError):
84
- _ = Experiment(
85
- id="4567",
86
- name="meaningful Test-Name",
87
- time_start=local_now() + timedelta(minutes=30),
88
- target_configs=target_cfgs,
89
- )
90
-
91
-
92
- def test_experiment_model_exp_collision_custom_id() -> None:
93
- hrv = VirtualHarvesterConfig(name="mppt_bq_thermoelectric")
94
- target_cfgs = [
95
- TargetConfig(
96
- target_IDs=[1, 2, 3],
97
- custom_IDs=[0, 1, 7], # <- collision
98
- energy_env={"name": "SolarSunny"},
99
- virtual_source={"name": "diode+capacitor"},
100
- firmware1={"name": "nrf52_demo_rf"},
101
- ),
102
- TargetConfig(
103
- target_IDs=list(range(1, 5)),
104
- custom_IDs=list(range(7, 18)), # <- collision
105
- energy_env=EnergyEnvironment(name="ThermoelectricWashingMachine"),
106
- virtual_source=VirtualSourceConfig(name="BQ25570-Schmitt", harvester=hrv),
107
- firmware1=Firmware(name="nrf52_demo_rf"),
108
- firmware2=Firmware(name="msp430_deep_sleep"),
109
- ),
110
- ]
111
- with pytest.raises(ValueError):
112
- _ = Experiment(
113
- id="4567",
114
- name="meaningful Test-Name",
115
- time_start=local_now() + timedelta(minutes=30),
116
- target_configs=target_cfgs,
117
- )
118
-
119
-
120
- def test_experiment_model_exp_collision_observer() -> None:
121
- hrv = VirtualHarvesterConfig(name="mppt_bq_thermoelectric")
122
- target_cfgs = [
123
- TargetConfig(
124
- target_IDs=[1, 1001], # <- both on same observer
125
- custom_IDs=list(range(7, 18)),
126
- energy_env=EnergyEnvironment(name="ThermoelectricWashingMachine"),
127
- virtual_source=VirtualSourceConfig(name="BQ25570-Schmitt", harvester=hrv),
128
- firmware1=Firmware(name="nrf52_demo_rf"),
129
- firmware2=Firmware(name="msp430_deep_sleep"),
130
- ),
131
- ]
132
- with pytest.raises(ValueError):
133
- _ = Experiment(
134
- id="4567",
135
- name="meaningful Test-Name",
136
- time_start=local_now() + timedelta(minutes=30),
137
- target_configs=target_cfgs,
138
- )
139
-
140
-
141
- def test_experiment_model_exp_missing_target() -> None:
142
- hrv = VirtualHarvesterConfig(name="mppt_bq_thermoelectric")
143
- with pytest.raises(ValidationError):
144
- # should raise ValueError in Experiment
145
- # buts gets already caught in target_config
146
- _ = [
147
- TargetConfig(
148
- target_IDs=[1234567], # <- not existent
149
- custom_IDs=list(range(7, 18)),
150
- energy_env=EnergyEnvironment(name="ThermoelectricWashingMachine"),
151
- virtual_source=VirtualSourceConfig(name="BQ25570-Schmitt", harvester=hrv),
152
- firmware1=Firmware(name="nrf52_demo_rf"),
153
- firmware2=Firmware(name="msp430_deep_sleep"),
154
- ),
155
- ]
156
- # experiment (like above) removed
157
-
158
-
159
- def test_experiment_model_pwrtracing_min() -> None:
160
- PowerTracing()
161
-
162
-
163
- def test_experiment_model_pwrtracing_fault_post() -> None:
164
- with pytest.raises(ValueError):
165
- PowerTracing(calculate_power=True)
166
-
167
-
168
- def test_experiment_model_pwrtracing_fault_discard_all() -> None:
169
- with pytest.raises(ValueError):
170
- PowerTracing(calculate_power=False, discard_current=True, discard_voltage=True)
171
-
172
-
173
- def test_experiment_model_gpiotracing_min() -> None:
174
- GpioTracing()
175
-
176
-
177
- def test_experiment_model_gpiotracing_fault_mask() -> None:
178
- with pytest.raises(ValueError):
179
- GpioTracing(mask=0)
180
-
181
-
182
- def test_experiment_model_gpioevent_min() -> None:
183
- gevt = GpioEvent(
184
- delay=300,
185
- gpio=GPIO(name="GPIO3"),
186
- level=GpioLevel.high,
187
- )
188
- gevt.get_events()
189
-
190
-
191
- def test_experiment_model_gpioevent_fault_readonly() -> None:
192
- with pytest.raises(ValueError):
193
- GpioEvent(
194
- delay=300,
195
- gpio=GPIO(name="BAT_OK"),
196
- level=GpioLevel.high,
197
- )
198
-
199
-
200
- def test_experiment_model_gpioactuation_min() -> None:
201
- gact = GpioActuation(
202
- events=[
203
- GpioEvent(
204
- delay=300,
205
- gpio=GPIO(name="GPIO2"),
206
- level=GpioLevel.high,
207
- )
208
- ]
209
- )
210
- gact.get_gpios()
211
-
212
-
213
- def test_experiment_model_syslogging_min() -> None:
214
- SystemLogging()
215
-
216
-
217
- def test_experiment_model_tgt_cfg_min1() -> None:
218
- cfg = TargetConfig(
219
- target_IDs=[1],
220
- energy_env=EnergyEnvironment(name="SolarSunny"),
221
- firmware1=Firmware(name="nrf52_demo_rf"),
222
- )
223
- for _id in cfg.target_IDs:
224
- Target(id=_id)
225
- assert cfg.get_custom_id(1) is None
226
-
227
-
228
- def test_experiment_model_tgt_cfg_min2() -> None:
229
- cfg = TargetConfig(
230
- target_IDs=[1, 2],
231
- custom_IDs=[7, 9],
232
- energy_env=EnergyEnvironment(name="SolarSunny"),
233
- firmware1=Firmware(name="nrf52_demo_rf"),
234
- )
235
- for _id in cfg.target_IDs:
236
- Target(id=_id)
237
- assert cfg.get_custom_id(1) == 7
238
- assert cfg.get_custom_id(2) == 9
239
- assert cfg.get_custom_id(3) is None
240
-
241
-
242
- def test_experiment_model_tgt_cfg_fault_valid_ee() -> None:
243
- with pytest.raises(ValueError):
244
- _ = TargetConfig(
245
- target_IDs=[1],
246
- energy_env=EnergyEnvironment(name="nuclear"),
247
- firmware1=Firmware(name="nrf52_demo_rf"),
248
- )
249
-
250
-
251
- def test_experiment_model_tgt_cfg_fault_firmware1() -> None:
252
- with pytest.raises(ValueError):
253
- _ = TargetConfig(
254
- target_IDs=[1], # is nRF
255
- energy_env=EnergyEnvironment(name="SolarSunny"),
256
- firmware1=Firmware(name="msp430_spi_fram"),
257
- )
258
-
259
-
260
- def test_experiment_model_tgt_cfg_fault_firmware2() -> None:
261
- with pytest.raises(ValueError):
262
- _ = TargetConfig(
263
- target_IDs=[1], # is nRF
264
- energy_env=EnergyEnvironment(name="SolarSunny"),
265
- firmware1=Firmware(name="nrf52_demo_rf"),
266
- firmware2=Firmware(name="nrf52_demo_rf"),
267
- )
268
-
269
-
270
- def test_experiment_model_tgt_cfg_fault_custom_ids() -> None:
271
- with pytest.raises(ValueError):
272
- _ = TargetConfig(
273
- target_IDs=[1, 2, 3],
274
- custom_IDs=[0, 1], # not enough
275
- energy_env=EnergyEnvironment(name="SolarSunny"),
276
- firmware1=Firmware(name="nrf52_demo_rf"),
277
- )
@@ -1,52 +0,0 @@
1
- from datetime import timedelta
2
- from pathlib import Path
3
-
4
- from shepherd_core import local_now
5
- from shepherd_core.data_models import EnergyEnvironment
6
- from shepherd_core.data_models import Experiment
7
- from shepherd_core.data_models import Firmware
8
- from shepherd_core.data_models import TargetConfig
9
- from shepherd_core.data_models import VirtualHarvesterConfig
10
- from shepherd_core.data_models import VirtualSourceConfig
11
- from shepherd_core.data_models.task import TestbedTasks as TasteBadTasks
12
-
13
-
14
- def test_task_generation_file(tmp_path: Path) -> None:
15
- path = Path(__file__).with_name("example_config_experiment.yaml")
16
- xp1 = Experiment.from_file(path)
17
- tb_tasks = TasteBadTasks.from_xp(xp1)
18
- tb_tasks.to_file(tmp_path / "tbt1.yaml")
19
-
20
-
21
- def test_task_generation_script(tmp_path: Path) -> None:
22
- hrv = VirtualHarvesterConfig(name="mppt_bq_thermoelectric")
23
-
24
- target_cfgs = [
25
- # first init similar to yaml
26
- TargetConfig(
27
- target_IDs=list(range(1, 4)),
28
- custom_IDs=list(range(3)),
29
- energy_env={"name": "SolarSunny"},
30
- virtual_source={"name": "diode+capacitor"},
31
- firmware1={"name": "nrf52_demo_rf"},
32
- ),
33
- # second Instance fully object-oriented
34
- TargetConfig(
35
- target_IDs=list(range(6, 9)),
36
- custom_IDs=list(range(7, 18)),
37
- energy_env=EnergyEnvironment(name="ThermoelectricWashingMachine"),
38
- virtual_source=VirtualSourceConfig(name="BQ25570-Schmitt", harvester=hrv),
39
- firmware1=Firmware(name="nrf52_demo_rf"),
40
- firmware2=Firmware(name="msp430_deep_sleep"),
41
- ),
42
- ]
43
-
44
- xperi = Experiment(
45
- id="4567",
46
- name="meaningful Test-Name",
47
- time_start=local_now() + timedelta(minutes=30),
48
- target_configs=target_cfgs,
49
- )
50
-
51
- tb_tasks = TasteBadTasks.from_xp(xperi)
52
- tb_tasks.to_file(tmp_path / "tbt2.yaml")
@@ -1,131 +0,0 @@
1
- from pathlib import Path
2
- from typing import Union
3
-
4
- import pytest
5
-
6
- from shepherd_core.data_models import Experiment
7
- from shepherd_core.data_models import FirmwareDType
8
- from shepherd_core.data_models import GpioActuation
9
- from shepherd_core.data_models import GpioEvent
10
- from shepherd_core.data_models.task import ObserverTasks
11
- from shepherd_core.data_models.task.emulation import EmulationTask
12
- from shepherd_core.data_models.task.firmware_mod import FirmwareModTask
13
- from shepherd_core.data_models.task.harvest import HarvestTask
14
- from shepherd_core.data_models.task.programming import ProgrammingTask
15
- from shepherd_core.data_models.testbed import GPIO
16
- from shepherd_core.data_models.testbed import ProgrammerProtocol
17
- from shepherd_core.data_models.testbed import Testbed as TasteBad
18
-
19
-
20
- def test_task_model_emu_min() -> None:
21
- EmulationTask(
22
- input_path="./here",
23
- )
24
-
25
-
26
- def test_task_model_emu_fault_in_past() -> None:
27
- with pytest.raises(ValueError):
28
- EmulationTask(
29
- input_path="./here",
30
- time_start="1984-01-01 11:12:13",
31
- )
32
-
33
-
34
- @pytest.mark.parametrize("value", [0, 1, 2, 3, 4, 4.5, "buffer", "main"])
35
- def test_task_model_emu_custom_aux(value: Union[float, str]) -> None:
36
- EmulationTask(
37
- input_path="./here",
38
- voltage_aux=value,
39
- )
40
-
41
-
42
- @pytest.mark.parametrize("value", [-1.0, 5, "max", "something"])
43
- def test_task_model_emu_fault_aux(value: Union[float, str]) -> None:
44
- with pytest.raises(ValueError):
45
- EmulationTask(
46
- input_path="./here",
47
- voltage_aux=value,
48
- )
49
-
50
-
51
- def test_task_model_emu_fault_gpio_actuation() -> None:
52
- with pytest.raises(ValueError):
53
- EmulationTask(
54
- input_path="./here",
55
- gpio_actuation=GpioActuation(
56
- events=[GpioEvent(delay=5, gpio=GPIO(name="GPIO5"))],
57
- ),
58
- )
59
-
60
-
61
- def test_task_model_fw_min() -> None:
62
- FirmwareModTask(
63
- data=Path("/"),
64
- data_type=FirmwareDType.path_elf,
65
- custom_id=42,
66
- firmware_file=Path("fw_to_be.elf"),
67
- )
68
-
69
-
70
- def test_task_model_fw_fault_hex() -> None:
71
- # just a warning for now
72
- FirmwareModTask(
73
- data=Path("/"),
74
- data_type=FirmwareDType.path_hex,
75
- custom_id=42,
76
- firmware_file=Path("fw_to_be.hex"),
77
- )
78
-
79
-
80
- def test_task_model_hrv_min() -> None:
81
- HarvestTask(
82
- output_path="./here",
83
- )
84
-
85
-
86
- def test_task_model_hrv_duration() -> None:
87
- hrv = HarvestTask(
88
- output_path="./here",
89
- duration=42,
90
- )
91
- assert hrv.duration.total_seconds() == 42
92
-
93
-
94
- def test_task_model_hrv_too_late() -> None:
95
- with pytest.raises(ValueError):
96
- HarvestTask(
97
- output_path="./here",
98
- time_start="1984-01-01 11:12:13",
99
- )
100
-
101
-
102
- def test_task_model_observer_min1() -> None:
103
- ObserverTasks(
104
- observer="peeping tom",
105
- owner_id=666,
106
- time_prep="2044-01-01 12:13:14",
107
- root_path="/usr",
108
- abort_on_error=False,
109
- )
110
-
111
-
112
- def test_task_model_observer_min2() -> None:
113
- path = Path(__file__).with_name("example_config_experiment.yaml")
114
- xp = Experiment.from_file(path)
115
- ObserverTasks.from_xp(xp=xp, tb=TasteBad(name="shepherd_tud_nes"), tgt_id=1)
116
-
117
-
118
- def test_task_model_prog_min() -> None:
119
- ProgrammingTask(
120
- firmware_file=Path("fw_to_load.hex"),
121
- protocol=ProgrammerProtocol.SWD,
122
- mcu_type="nrf52",
123
- )
124
-
125
-
126
- def test_task_model_prog_fault_elf() -> None:
127
- ProgrammingTask(
128
- firmware_file=Path("fw_to_load.elf"),
129
- protocol=ProgrammerProtocol.SWD,
130
- mcu_type="nrf52",
131
- )
@@ -1,47 +0,0 @@
1
- from shepherd_core.data_models.content.firmware import Firmware
2
- from shepherd_core.data_models.testbed.cape import Cape
3
- from shepherd_core.data_models.testbed.gpio import GPIO
4
- from shepherd_core.data_models.testbed.mcu import MCU
5
- from shepherd_core.data_models.testbed.observer import Observer
6
- from shepherd_core.data_models.testbed.target import Target
7
- from shepherd_core.data_models.testbed.testbed import Testbed as TasteBad
8
- from shepherd_core.testbed_client.fixtures import Fixtures
9
-
10
- # ⤷ TasteBad avoids pytest-warning
11
-
12
-
13
- def test_testbed_fixture_cape() -> None:
14
- for fix in Fixtures()["Cape"]:
15
- Cape(name=fix["name"])
16
- Cape(id=fix["id"])
17
-
18
-
19
- def test_testbed_fixture_gpio() -> None:
20
- for fix in Fixtures()["GPIO"]:
21
- GPIO(name=fix["name"])
22
- GPIO(id=fix["id"])
23
-
24
-
25
- def test_testbed_fixture_mcu() -> None:
26
- for fix in Fixtures()["MCU"]:
27
- MCU(name=fix["name"])
28
- mcu = MCU(id=fix["id"])
29
- Firmware(name=mcu.fw_name_default)
30
-
31
-
32
- def test_testbed_fixture_observer() -> None:
33
- for fix in Fixtures()["Observer"]:
34
- Observer(name=fix["name"])
35
- Observer(id=fix["id"])
36
-
37
-
38
- def test_testbed_fixture_target() -> None:
39
- for fix in Fixtures()["Target"]:
40
- Target(name=fix["name"])
41
- Target(id=fix["id"])
42
-
43
-
44
- def test_testbed_fixture_tb() -> None:
45
- for fix in Fixtures()["Testbed"]:
46
- TasteBad(name=fix["name"])
47
- TasteBad(id=fix["id"])
@@ -1,187 +0,0 @@
1
- import pytest
2
-
3
- from shepherd_core.data_models.testbed import GPIO
4
- from shepherd_core.data_models.testbed import MCU
5
- from shepherd_core.data_models.testbed import Cape
6
- from shepherd_core.data_models.testbed import Direction
7
- from shepherd_core.data_models.testbed import Observer
8
- from shepherd_core.data_models.testbed import ProgrammerProtocol
9
- from shepherd_core.data_models.testbed import Target
10
- from shepherd_core.data_models.testbed import Testbed as TasteBad
11
-
12
- # ⤷ TasteBad avoids pytest-warning
13
-
14
-
15
- def test_testbed_model_cape_min() -> None:
16
- cape = Cape(
17
- id=9999,
18
- name="cappi",
19
- version="1.0.0",
20
- description="lorem",
21
- )
22
- print(cape)
23
-
24
-
25
- def test_testbed_model_gpio_min() -> None:
26
- gpio = GPIO(
27
- id=9999,
28
- name="gippi",
29
- reg_pru="ABCD",
30
- pin_pru="EFGH",
31
- )
32
- print(gpio)
33
-
34
-
35
- def test_testbed_model_gpio_fault() -> None:
36
- with pytest.raises(ValueError):
37
- GPIO(
38
- id=9999,
39
- name="gippi",
40
- )
41
-
42
-
43
- def test_testbed_model_gpio_var() -> None:
44
- GPIO(
45
- id=9999,
46
- name="gippi",
47
- direction=Direction.Bidirectional,
48
- reg_pru="ABCD",
49
- pin_pru="EFGH",
50
- )
51
-
52
-
53
- def test_testbed_model_mcu_min() -> None:
54
- mcu = MCU(
55
- id=9922,
56
- name="controller2",
57
- description="lorem",
58
- platform="arm32",
59
- core="STM32F7",
60
- prog_protocol=ProgrammerProtocol.SWD,
61
- fw_name_default="nananana",
62
- )
63
- print(mcu)
64
-
65
-
66
- def test_testbed_model_observer_min() -> None:
67
- obs = Observer(
68
- id=9933,
69
- name="sheep120",
70
- description="not existing",
71
- ip="127.0.0.1",
72
- mac="FF:FF:FF:FF:FF:FF",
73
- room="IIE72",
74
- eth_port="375b2",
75
- cape=Cape(name="cape53"),
76
- )
77
- print(obs)
78
-
79
-
80
- def test_testbed_model_observer_fault_cape_a() -> None:
81
- with pytest.raises(ValueError):
82
- Observer(
83
- id=9933,
84
- name="sheep120",
85
- description="not existing",
86
- ip="127.0.0.1",
87
- mac="FF:FF:FF:FF:FF:FF",
88
- room="IIE72",
89
- eth_port="375b2",
90
- target_a=Target(id=3),
91
- )
92
-
93
-
94
- def test_testbed_model_observer_fault_cape_b() -> None:
95
- with pytest.raises(ValueError):
96
- Observer(
97
- id=9933,
98
- name="sheep120",
99
- description="not existing",
100
- ip="127.0.0.1",
101
- mac="FF:FF:FF:FF:FF:FF",
102
- room="IIE72",
103
- eth_port="375b2",
104
- target_b=Target(id=3),
105
- )
106
-
107
-
108
- def test_testbed_model_observer_fault_target() -> None:
109
- obs = Observer(
110
- id=9933,
111
- name="sheep120",
112
- description="not existing",
113
- ip="127.0.0.1",
114
- mac="FF:FF:FF:FF:FF:FF",
115
- room="IIE72",
116
- eth_port="375b2",
117
- cape=Cape(name="cape53"),
118
- target_a=Target(id=3),
119
- target_b=Target(id=2),
120
- )
121
- obs.get_target(2)
122
- obs.get_target(3)
123
- obs.get_target_port(2)
124
- obs.get_target_port(3)
125
- with pytest.raises(ValueError):
126
- obs.get_target_port(123456)
127
- with pytest.raises(ValueError):
128
- obs.get_target(123456)
129
-
130
-
131
- def test_testbed_model_target_min1() -> None:
132
- tgt = Target(
133
- id=9944,
134
- name="TerraTarget",
135
- version="v1.00",
136
- description="lorem",
137
- mcu1=MCU(name="MSP430FR"),
138
- )
139
- print(tgt)
140
-
141
-
142
- def test_testbed_model_target_min2() -> None:
143
- Target(
144
- id=9944,
145
- name="TerraTarget",
146
- version="v1.00",
147
- description="lorem",
148
- mcu1="MSP430FR",
149
- mcu2="MSP430FR",
150
- )
151
-
152
-
153
- def test_testbed_model_tb_min() -> None:
154
- tb = TasteBad(
155
- name="shepherd",
156
- id="9955",
157
- description="lorem",
158
- observers=[Observer(name="sheep02")],
159
- data_on_server="/mnt/driveA",
160
- data_on_observer="/mnt/driveB",
161
- )
162
- print(tb)
163
-
164
-
165
- def test_testbed_model_tb_fault_observer() -> None:
166
- with pytest.raises(ValueError):
167
- TasteBad(
168
- name="shepherd",
169
- id="9955",
170
- description="lorem",
171
- observers=[Observer(name="sheep02"), Observer(name="sheep02")],
172
- data_on_server="/mnt/driveA",
173
- data_on_observer="/mnt/driveB",
174
- )
175
-
176
-
177
- def test_testbed_model_tb_fault_shared() -> None:
178
- with pytest.raises(ValueError):
179
- TasteBad(
180
- name="shepherd",
181
- id="9955",
182
- description="lorem",
183
- observers=[Observer(name="sheep02")],
184
- data_on_server="/mnt/driveA",
185
- data_on_observer="/mnt/driveB",
186
- shared_storage=False,
187
- )
File without changes