Skip to content
Snippets Groups Projects
Unverified Commit b8f5e042 authored by Drew Devereux's avatar Drew Devereux
Browse files

[MCCS-163] State specs into JSON

parent 00162ecf
Branches
No related tags found
No related merge requests found
"""
A module defining a list of fixtures that are shared across all ska.base tests.
"""
from collections import defaultdict
import importlib
import itertools
import json
......@@ -8,9 +9,11 @@ import pytest
from queue import Empty, Queue
from transitions import MachineError
from tango import EventType
from tango import DevState, EventType
from tango.test_context import DeviceTestContext
from ska.base.control_model import AdminMode, ObsState
def pytest_configure(config):
"""
......@@ -31,32 +34,26 @@ def pytest_generate_tests(metafunc):
will have its tests parameterised by the states and actions in the
specification provided by that mark
"""
# called once per each test function
mark = metafunc.definition.get_closest_marker("state_machine_tester")
if mark:
spec = mark.args[0]
states = set()
triggers = set()
expected = {}
for (from_state, trigger, to_state) in spec:
states.add(from_state)
states.add(to_state)
triggers.add(trigger)
expected[(from_state, trigger)] = to_state
states = sorted(states)
triggers = sorted(triggers)
states = {state: spec["states"][state] or state for state in spec["states"]}
triggers = set(transition["trigger"] for transition in spec["transitions"])
expected = defaultdict(lambda: None, (((transition["from"], transition["trigger"]), states[transition["to"]]) for transition in spec["transitions"]))
test_cases = list(itertools.product(sorted(states), sorted(triggers)))
test_ids = [f"{state}-{trigger}" for (state, trigger) in test_cases]
metafunc.parametrize(
"state_under_test, action_under_test, expected_state",
[
(
state,
states[state],
trigger,
expected[(state, trigger)] if (state, trigger) in expected else None
) for (state, trigger) in itertools.product(states, triggers)
]
expected[(state, trigger)]
) for (state, trigger) in test_cases
],
ids=test_ids
)
......@@ -259,6 +256,25 @@ def load_data(name):
with open(f"tests/data/{name}.json", "r") as json_file:
return json.load(json_file)
def load_state_machine_spec(name):
"""
Loads a state machine specification by name.
:param name: name of the dataset to be loaded; this implementation
uses the name to find a JSON file containing the data to be
loaded.
:type name: string
"""
machine_spec = load_data(name)
for state in machine_spec["states"]:
state_spec = machine_spec["states"][state]
if "admin_mode" in state_spec:
state_spec["admin_mode"] = AdminMode[state_spec["admin_mode"]]
if "op_state" in state_spec:
state_spec["op_state"] = getattr(DevState, state_spec["op_state"])
if "obs_state" in state_spec:
state_spec["obs_state"] = ObsState[state_spec["obs_state"]]
return machine_spec
@pytest.fixture(scope="class")
def tango_context(request):
......
[
[
"RESERVED",
"to_notfitted",
"NOT_FITTED"
],
[
"NOT_FITTED",
"to_reserved",
"RESERVED"
],
[
"NOT_FITTED",
"to_offline",
"OFFLINE"
],
[
"OFFLINE",
"to_notfitted",
"NOT_FITTED"
],
[
"OFFLINE",
"to_maintenance",
"MAINTENANCE"
],
[
"OFFLINE",
"to_online",
"ONLINE"
],
[
"MAINTENANCE",
"to_offline",
"OFFLINE"
],
[
"ONLINE",
"to_offline",
"OFFLINE"
]
{
"states": {
"RESERVED": {},
"NOT_FITTED": {},
"OFFLINE": {},
"MAINTENANCE": {},
"ONLINE": {}
},
"transitions": [
{
"from": "RESERVED",
"to": "NOT_FITTED",
"trigger": "to_notfitted"
},
{
"from": "NOT_FITTED",
"to": "RESERVED",
"trigger": "to_reserved"
},
{
"from": "NOT_FITTED",
"to": "OFFLINE",
"trigger": "to_offline"
},
{
"from": "OFFLINE",
"to": "NOT_FITTED",
"trigger": "to_notfitted"
},
{
"from": "OFFLINE",
"to": "MAINTENANCE",
"trigger": "to_maintenance"
},
{
"from": "OFFLINE",
"to": "ONLINE",
"trigger": "to_online"
},
{
"from": "MAINTENANCE",
"to": "OFFLINE",
"trigger": "to_offline"
},
{
"from": "ONLINE",
"to": "OFFLINE",
"trigger": "to_offline"
}
]
}
\ No newline at end of file
This diff is collapsed.
[
[
"EMPTY",
"assign_started",
"RESOURCING"
],
[
"EMPTY",
"fatal_error",
"FAULT"
],
[
"RESOURCING",
"resourcing_succeeded_some_resources",
"IDLE"
],
[
"RESOURCING",
"resourcing_succeeded_no_resources",
"EMPTY"
],
[
"RESOURCING",
"resourcing_failed",
"FAULT"
],
[
"RESOURCING",
"fatal_error",
"FAULT"
],
[
"IDLE",
"assign_started",
"RESOURCING"
],
[
"IDLE",
"release_started",
"RESOURCING"
],
[
"IDLE",
"configure_started",
"CONFIGURING"
],
[
"IDLE",
"abort_started",
"ABORTING"
],
[
"IDLE",
"fatal_error",
"FAULT"
],
[
"CONFIGURING",
"configure_succeeded",
"READY"
],
[
"CONFIGURING",
"configure_failed",
"FAULT"
],
[
"CONFIGURING",
"abort_started",
"ABORTING"
],
[
"CONFIGURING",
"fatal_error",
"FAULT"
],
[
"READY",
"end_succeeded",
"IDLE"
],
[
"READY",
"end_failed",
"FAULT"
],
[
"READY",
"configure_started",
"CONFIGURING"
],
[
"READY",
"abort_started",
"ABORTING"
],
[
"READY",
"scan_started",
"SCANNING"
],
[
"READY",
"fatal_error",
"FAULT"
],
[
"SCANNING",
"scan_succeeded",
"READY"
],
[
"SCANNING",
"scan_failed",
"FAULT"
],
[
"SCANNING",
"end_scan_succeeded",
"READY"
],
[
"SCANNING",
"end_scan_failed",
"FAULT"
],
[
"SCANNING",
"abort_started",
"ABORTING"
],
[
"SCANNING",
"fatal_error",
"FAULT"
],
[
"ABORTING",
"abort_succeeded",
"ABORTED"
],
[
"ABORTING",
"abort_failed",
"FAULT"
],
[
"ABORTING",
"fatal_error",
"FAULT"
],
[
"ABORTED",
"reset_started",
"RESETTING"
],
[
"ABORTED",
"restart_started",
"RESTARTING"
],
[
"ABORTED",
"fatal_error",
"FAULT"
],
[
"FAULT",
"reset_started",
"RESETTING"
],
[
"FAULT",
"restart_started",
"RESTARTING"
],
[
"FAULT",
"fatal_error",
"FAULT"
],
[
"RESETTING",
"reset_succeeded",
"IDLE"
],
[
"RESETTING",
"reset_failed",
"FAULT"
],
[
"RESETTING",
"abort_started",
"ABORTING"
],
[
"RESETTING",
"fatal_error",
"FAULT"
],
[
"RESTARTING",
"restart_succeeded",
"EMPTY"
],
[
"RESTARTING",
"restart_failed",
"FAULT"
],
[
"RESTARTING",
"fatal_error",
"FAULT"
]
{
"states": {
"EMPTY": {},
"RESOURCING": {},
"FAULT": {},
"IDLE": {},
"CONFIGURING": {},
"ABORTING": {},
"READY": {},
"SCANNING": {},
"ABORTED": {},
"RESETTING": {},
"RESTARTING": {}
},
"transitions": [
{
"from": "EMPTY",
"to": "RESOURCING",
"trigger": "assign_started"
},
{
"from": "EMPTY",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "RESOURCING",
"to": "IDLE",
"trigger": "resourcing_succeeded_some_resources"
},
{
"from": "RESOURCING",
"to": "EMPTY",
"trigger": "resourcing_succeeded_no_resources"
},
{
"from": "RESOURCING",
"to": "FAULT",
"trigger": "resourcing_failed"
},
{
"from": "RESOURCING",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "IDLE",
"to": "RESOURCING",
"trigger": "assign_started"
},
{
"from": "IDLE",
"to": "RESOURCING",
"trigger": "release_started"
},
{
"from": "IDLE",
"to": "CONFIGURING",
"trigger": "configure_started"
},
{
"from": "IDLE",
"to": "ABORTING",
"trigger": "abort_started"
},
{
"from": "IDLE",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "CONFIGURING",
"to": "READY",
"trigger": "configure_succeeded"
},
{
"from": "CONFIGURING",
"to": "FAULT",
"trigger": "configure_failed"
},
{
"from": "CONFIGURING",
"to": "ABORTING",
"trigger": "abort_started"
},
{
"from": "CONFIGURING",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "READY",
"to": "IDLE",
"trigger": "end_succeeded"
},
{
"from": "READY",
"to": "FAULT",
"trigger": "end_failed"
},
{
"from": "READY",
"to": "CONFIGURING",
"trigger": "configure_started"
},
{
"from": "READY",
"to": "ABORTING",
"trigger": "abort_started"
},
{
"from": "READY",
"to": "SCANNING",
"trigger": "scan_started"
},
{
"from": "READY",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "SCANNING",
"to": "READY",
"trigger": "scan_succeeded"
},
{
"from": "SCANNING",
"to": "FAULT",
"trigger": "scan_failed"
},
{
"from": "SCANNING",
"to": "READY",
"trigger": "end_scan_succeeded"
},
{
"from": "SCANNING",
"to": "FAULT",
"trigger": "end_scan_failed"
},
{
"from": "SCANNING",
"to": "ABORTING",
"trigger": "abort_started"
},
{
"from": "SCANNING",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "ABORTING",
"to": "ABORTED",
"trigger": "abort_succeeded"
},
{
"from": "ABORTING",
"to": "FAULT",
"trigger": "abort_failed"
},
{
"from": "ABORTING",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "ABORTED",
"to": "RESETTING",
"trigger": "reset_started"
},
{
"from": "ABORTED",
"to": "RESTARTING",
"trigger": "restart_started"
},
{
"from": "ABORTED",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "FAULT",
"to": "RESETTING",
"trigger": "reset_started"
},
{
"from": "FAULT",
"to": "RESTARTING",
"trigger": "restart_started"
},
{
"from": "FAULT",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "RESETTING",
"to": "IDLE",
"trigger": "reset_succeeded"
},
{
"from": "RESETTING",
"to": "FAULT",
"trigger": "reset_failed"
},
{
"from": "RESETTING",
"to": "ABORTING",
"trigger": "abort_started"
},
{
"from": "RESETTING",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "RESTARTING",
"to": "EMPTY",
"trigger": "restart_succeeded"
},
{
"from": "RESTARTING",
"to": "FAULT",
"trigger": "restart_failed"
},
{
"from": "RESTARTING",
"to": "FAULT",
"trigger": "fatal_error"
}
]
}
\ No newline at end of file
[
[
"UNINITIALISED",
"init_started",
"INIT"
],
[
"INIT",
"init_succeeded_disable",
"DISABLE"
],
[
"INIT_ADMIN",
"init_succeeded_disable",
"DISABLE_ADMIN"
],
[
"INIT",
"init_succeeded_standby",
"STANDBY"
],
[
"INIT",
"init_succeeded_off",
"OFF"
],
[
"INIT",
"init_failed",
"FAULT"
],
[
"INIT_ADMIN",
"init_failed",
"FAULT_ADMIN"
],
[
"INIT",
"fatal_error",
"FAULT"
],
[
"INIT",
"admin_on",
"INIT_ADMIN"
],
[
"INIT",
"admin_off",
"INIT"
],
[
"INIT_ADMIN",
"admin_on",
"INIT_ADMIN"
],
[
"INIT_ADMIN",
"admin_off",
"INIT"
],
[
"INIT_ADMIN",
"fatal_error",
"FAULT_ADMIN"
],
[
"FAULT",
"reset_succeeded_disable",
"DISABLE"
],
[
"FAULT_ADMIN",
"reset_succeeded_disable",
"DISABLE_ADMIN"
],
[
"FAULT",
"reset_succeeded_standby",
"STANDBY"
],
[
"FAULT",
"reset_succeeded_off",
"OFF"
],
[
"FAULT",
"reset_failed",
"FAULT"
],
[
"FAULT_ADMIN",
"reset_failed",
"FAULT_ADMIN"
],
[
"FAULT",
"fatal_error",
"FAULT"
],
[
"FAULT_ADMIN",
"fatal_error",
"FAULT_ADMIN"
],
[
"FAULT",
"admin_on",
"FAULT_ADMIN"
],
[
"FAULT",
"admin_off",
"FAULT"
],
[
"FAULT_ADMIN",
"admin_on",
"FAULT_ADMIN"
],
[
"FAULT_ADMIN",
"admin_off",
"FAULT"
],
[
"DISABLE",
"standby_succeeded",
"STANDBY"
],
[
"DISABLE",
"standby_failed",
"FAULT"
],
[
"DISABLE",
"off_succeeded",
"OFF"
],
[
"DISABLE",
"off_failed",
"FAULT"
],
[
"DISABLE",
"fatal_error",
"FAULT"
],
[
"DISABLE_ADMIN",
"fatal_error",
"FAULT_ADMIN"
],
[
"DISABLE",
"admin_on",
"DISABLE_ADMIN"
],
[
"DISABLE",
"admin_off",
"DISABLE"
],
[
"DISABLE_ADMIN",
"admin_on",
"DISABLE_ADMIN"
],
[
"DISABLE_ADMIN",
"admin_off",
"DISABLE"
],
[
"STANDBY",
"disable_succeeded",
"DISABLE"
],
[
"STANDBY",
"disable_failed",
"FAULT"
],
[
"STANDBY",
"off_succeeded",
"OFF"
],
[
"STANDBY",
"off_failed",
"FAULT"
],
[
"STANDBY",
"fatal_error",
"FAULT"
],
[
"OFF",
"disable_succeeded",
"DISABLE"
],
[
"OFF",
"disable_failed",
"FAULT"
],
[
"OFF",
"standby_succeeded",
"STANDBY"
],
[
"OFF",
"standby_failed",
"FAULT"
],
[
"OFF",
"on_succeeded",
"ON"
],
[
"OFF",
"on_failed",
"FAULT"
],
[
"OFF",
"fatal_error",
"FAULT"
],
[
"ON",
"off_succeeded",
"OFF"
],
[
"ON",
"off_failed",
"FAULT"
],
[
"ON",
"fatal_error",
"FAULT"
]
{
"states": {
"UNINITIALISED": {},
"INIT": {},
"DISABLE": {},
"INIT_ADMIN": {},
"DISABLE_ADMIN": {},
"STANDBY": {},
"OFF": {},
"FAULT": {},
"FAULT_ADMIN": {},
"ON": {}
},
"transitions": [
{
"from": "UNINITIALISED",
"to": "INIT",
"trigger": "init_started"
},
{
"from": "INIT",
"to": "DISABLE",
"trigger": "init_succeeded_disable"
},
{
"from": "INIT_ADMIN",
"to": "DISABLE_ADMIN",
"trigger": "init_succeeded_disable"
},
{
"from": "INIT",
"to": "STANDBY",
"trigger": "init_succeeded_standby"
},
{
"from": "INIT",
"to": "OFF",
"trigger": "init_succeeded_off"
},
{
"from": "INIT",
"to": "FAULT",
"trigger": "init_failed"
},
{
"from": "INIT_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "init_failed"
},
{
"from": "INIT",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "INIT",
"to": "INIT_ADMIN",
"trigger": "admin_on"
},
{
"from": "INIT",
"to": "INIT",
"trigger": "admin_off"
},
{
"from": "INIT_ADMIN",
"to": "INIT_ADMIN",
"trigger": "admin_on"
},
{
"from": "INIT_ADMIN",
"to": "INIT",
"trigger": "admin_off"
},
{
"from": "INIT_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "fatal_error"
},
{
"from": "FAULT",
"to": "DISABLE",
"trigger": "reset_succeeded_disable"
},
{
"from": "FAULT_ADMIN",
"to": "DISABLE_ADMIN",
"trigger": "reset_succeeded_disable"
},
{
"from": "FAULT",
"to": "STANDBY",
"trigger": "reset_succeeded_standby"
},
{
"from": "FAULT",
"to": "OFF",
"trigger": "reset_succeeded_off"
},
{
"from": "FAULT",
"to": "FAULT",
"trigger": "reset_failed"
},
{
"from": "FAULT_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "reset_failed"
},
{
"from": "FAULT",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "FAULT_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "fatal_error"
},
{
"from": "FAULT",
"to": "FAULT_ADMIN",
"trigger": "admin_on"
},
{
"from": "FAULT",
"to": "FAULT",
"trigger": "admin_off"
},
{
"from": "FAULT_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "admin_on"
},
{
"from": "FAULT_ADMIN",
"to": "FAULT",
"trigger": "admin_off"
},
{
"from": "DISABLE",
"to": "STANDBY",
"trigger": "standby_succeeded"
},
{
"from": "DISABLE",
"to": "FAULT",
"trigger": "standby_failed"
},
{
"from": "DISABLE",
"to": "OFF",
"trigger": "off_succeeded"
},
{
"from": "DISABLE",
"to": "FAULT",
"trigger": "off_failed"
},
{
"from": "DISABLE",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "DISABLE_ADMIN",
"to": "FAULT_ADMIN",
"trigger": "fatal_error"
},
{
"from": "DISABLE",
"to": "DISABLE_ADMIN",
"trigger": "admin_on"
},
{
"from": "DISABLE",
"to": "DISABLE",
"trigger": "admin_off"
},
{
"from": "DISABLE_ADMIN",
"to": "DISABLE_ADMIN",
"trigger": "admin_on"
},
{
"from": "DISABLE_ADMIN",
"to": "DISABLE",
"trigger": "admin_off"
},
{
"from": "STANDBY",
"to": "DISABLE",
"trigger": "disable_succeeded"
},
{
"from": "STANDBY",
"to": "FAULT",
"trigger": "disable_failed"
},
{
"from": "STANDBY",
"to": "OFF",
"trigger": "off_succeeded"
},
{
"from": "STANDBY",
"to": "FAULT",
"trigger": "off_failed"
},
{
"from": "STANDBY",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "OFF",
"to": "DISABLE",
"trigger": "disable_succeeded"
},
{
"from": "OFF",
"to": "FAULT",
"trigger": "disable_failed"
},
{
"from": "OFF",
"to": "STANDBY",
"trigger": "standby_succeeded"
},
{
"from": "OFF",
"to": "FAULT",
"trigger": "standby_failed"
},
{
"from": "OFF",
"to": "ON",
"trigger": "on_succeeded"
},
{
"from": "OFF",
"to": "FAULT",
"trigger": "on_failed"
},
{
"from": "OFF",
"to": "FAULT",
"trigger": "fatal_error"
},
{
"from": "ON",
"to": "OFF",
"trigger": "off_succeeded"
},
{
"from": "ON",
"to": "FAULT",
"trigger": "off_failed"
},
{
"from": "ON",
"to": "FAULT",
"trigger": "fatal_error"
}
]
}
\ No newline at end of file
This diff is collapsed.
......@@ -32,7 +32,7 @@ from ska.base.base_device import (
)
from ska.base.faults import StateModelError
from .conftest import load_data, StateMachineTester
from .conftest import load_state_machine_spec, StateMachineTester
# PROTECTED REGION END # // SKABaseDevice.test_additional_imports
# Device test case
......@@ -333,11 +333,12 @@ def device_state_model():
yield DeviceStateModel(logging.getLogger())
@pytest.mark.state_machine_tester(load_data("device_state_machine"))
@pytest.mark.state_machine_tester(load_state_machine_spec("device_state_machine"))
class TestDeviceStateModel(StateMachineTester):
"""
This class contains the test suite for the ska.base.SKABaseDevice class.
"""
@pytest.fixture
def machine(self, device_state_model):
"""
......@@ -347,30 +348,6 @@ class TestDeviceStateModel(StateMachineTester):
"""
yield device_state_model
state_checks = {
"INIT_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.INIT),
"INIT_ONLINE": (AdminMode.ONLINE, DevState.INIT),
"INIT_OFFLINE": (AdminMode.OFFLINE, DevState.INIT),
"INIT_NOTFITTED": (AdminMode.NOT_FITTED, DevState.INIT),
"INIT_RESERVED": (AdminMode.RESERVED, DevState.INIT),
"FAULT_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.FAULT),
"FAULT_ONLINE": (AdminMode.ONLINE, DevState.FAULT),
"FAULT_OFFLINE": (AdminMode.OFFLINE, DevState.FAULT),
"FAULT_NOTFITTED": (AdminMode.NOT_FITTED, DevState.FAULT),
"FAULT_RESERVED": (AdminMode.RESERVED, DevState.FAULT),
"DISABLE_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.DISABLE),
"DISABLE_ONLINE": (AdminMode.ONLINE, DevState.DISABLE),
"DISABLE_OFFLINE": (AdminMode.OFFLINE, DevState.DISABLE),
"DISABLE_NOTFITTED": (AdminMode.NOT_FITTED, DevState.DISABLE),
"DISABLE_RESERVED": (AdminMode.RESERVED, DevState.DISABLE),
"STANDBY_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.STANDBY),
"STANDBY_ONLINE": (AdminMode.ONLINE, DevState.STANDBY),
"OFF_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.OFF),
"OFF_ONLINE": (AdminMode.ONLINE, DevState.OFF),
"ON_MAINTENANCE": (AdminMode.MAINTENANCE, DevState.ON),
"ON_ONLINE": (AdminMode.ONLINE, DevState.ON),
}
def assert_state(self, machine, state):
"""
Assert the current state of this state machine, based on the
......@@ -383,10 +360,8 @@ class TestDeviceStateModel(StateMachineTester):
state of the state machine under test
:type state: str
"""
(admin_mode, op_state) = self.state_checks[state]
assert machine.admin_mode == admin_mode
assert machine.op_state == op_state
assert machine.admin_mode == state["admin_mode"]
assert machine.op_state == state["op_state"]
def is_action_allowed(self, machine, action):
"""
......@@ -434,8 +409,7 @@ class TestDeviceStateModel(StateMachineTester):
machine under test into
:type target_state: str
"""
(admin_mode, op_state) = self.state_checks[target_state]
machine._straight_to_state(op_state=op_state, admin_mode=admin_mode)
machine._straight_to_state(**target_state)
# PROTECTED REGION END # // SKABaseDevice.test_SKABaseDevice_decorators
......
......@@ -8,10 +8,10 @@ from ska.base.state_machine import (
OperationStateMachine,
ObservationStateMachine,
)
from .conftest import load_data, TransitionsStateMachineTester
from .conftest import load_state_machine_spec, TransitionsStateMachineTester
@pytest.mark.state_machine_tester(load_data("operation_state_machine"))
@pytest.mark.state_machine_tester(load_state_machine_spec("operation_state_machine"))
class TestOperationStateMachine(TransitionsStateMachineTester):
"""
This class contains the test for the DeviceStateMachine class.
......@@ -27,7 +27,7 @@ class TestOperationStateMachine(TransitionsStateMachineTester):
yield OperationStateMachine()
@pytest.mark.state_machine_tester(load_data("admin_mode_state_machine"))
@pytest.mark.state_machine_tester(load_state_machine_spec("admin_mode_state_machine"))
class TestAdminModeStateMachine(TransitionsStateMachineTester):
"""
This class contains the test for the DeviceStateMachine class.
......@@ -43,7 +43,7 @@ class TestAdminModeStateMachine(TransitionsStateMachineTester):
yield AdminModeStateMachine()
@pytest.mark.state_machine_tester(load_data("observation_state_machine"))
@pytest.mark.state_machine_tester(load_state_machine_spec("observation_state_machine"))
class TestObservationStateMachine(TransitionsStateMachineTester):
"""
This class contains the test for the ObservationStateMachine class.
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment