BaseCscTestCase¶
- class lsst.ts.salobj.BaseCscTestCase¶
Bases:
object
Base class for CSC tests.
Subclasses must:
Inherit both from this and
unittest.IsolatedAsyncioTestCase
.Override
basic_make_csc
to return a CSC.
Also we suggest:
Add a method
test_standard_state_transitions
which callscheck_standard_state_transitions
.Add a method
test_bin_script
which callscheck_bin_script
, assuming you have a binary script to run your CSC.
Methods Summary
assert_next_sample
(topic[, flush, timeout])Wait for the next data sample for the specified topic, check specified fields for equality, and return the data.
assert_next_summary_state
(state[, flush, ...])Wait for and check the next
summaryState
event.basic_make_csc
(initial_state, config_dir, ...)Make and return a CSC.
check_bad_commands
([bad_commands, good_commands])Check that bad commands fail.
check_bin_script
(name, index, exe_name[, ...])Test running the CSC command line script.
check_standard_state_transitions
(...[, ...])Test standard CSC state transitions.
make_csc
([initial_state, config_dir, ...])Create a CSC and remote and wait for them to start.
Get the next SAL index.
run
([result])Set a random LSST_DDS_PARTITION_PREFIX and set LSST_SITE=test for every test.
Methods Documentation
- async assert_next_sample(topic: ReadTopic, flush: bool = False, timeout: float = 60, **kwargs: Any) BaseMsgType ¶
Wait for the next data sample for the specified topic, check specified fields for equality, and return the data.
- Parameters:
- topic
topics.ReadTopic
Topic to read, e.g.
remote.evt_logMessage
.- flush
bool
, optional Flush the read queue before waiting?
- timeout
double
, optional Time limit for getting the data sample (sec).
- kwargs
dict
Dict of field_name: expected_value The specified fields will be checked for equality.
- topic
- Returns:
- datatopic data type
The data read.
- Raises:
- asyncio.TimeoutError
If no message is available within the specified time limit.
- async assert_next_summary_state(state: State, flush: bool = False, timeout: float = 60, remote: lsst.ts.salobj.remote.Remote | None = None) None ¶
Wait for and check the next
summaryState
event.- Parameters:
- state
lsst.ts.salobj.State
orint
Desired summary state.
- flush
bool
, optional Flush the read queue before waiting?
- timeout
float
, optional Time limit for getting the data sample (sec).
- remote
Remote
, optional Remote to use;
self.remote
if None.
- state
- Raises:
- asyncio.TimeoutError
If summary state is not seen within the specified time limit.
- abstract basic_make_csc(initial_state: lsst.ts.salobj.sal_enums.State | int, config_dir: str | pathlib.Path | None, simulation_mode: int, **kwargs: Any) BaseCsc ¶
Make and return a CSC.
- Parameters:
- initial_state
lsst.ts.salobj.State
orint
The initial state of the CSC.
- config_dir
str
orpathlib.Path
orNone
Directory of configuration files, or None for the standard configuration directory (obtained from
ConfigureCsc._get_default_config_dir
).- simulation_mode
int
Simulation mode.
- kwargs
dict
Extra keyword arguments, if needed.
- initial_state
- async check_bad_commands(bad_commands: collections.abc.Sequence[str] | None = None, good_commands: collections.abc.Sequence[str] | None = None) None ¶
Check that bad commands fail.
- Parameters:
Notes
If a command appears in both lists, it is considered a good command, so it is skipped.
- async check_bin_script(name: str, index: int, exe_name: str, default_initial_state: State = State.STANDBY, initial_state: lsst.ts.salobj.sal_enums.State | None = None, override: str | None = None, cmdline_args: Sequence[str] = (), timeout: float = 60) None ¶
Test running the CSC command line script.
- Parameters:
- name
str
Name of SAL component, e.g. “Rotator”
- index
int
orNone
SAL index of component.
- exe_name
str
Name of executable, e.g. “run_rotator.py”
- default_initial_state
lsst.ts.salobj.State
, optional The default initial state of the CSC. Ignored unless
initial_state
is None.- initial_state
lsst.ts.salobj.State
orint
orNone
, optional The desired initial state of the CSC; used to specify the
--state
command-argument.- override
str
orNone
, optional Value for the
--override
command-line argument, which is omitted if override is None.- cmdline_args
List
[str
] Additional command-line arguments, such as “–simulate”.
- timeout
float
, optional Time limit for the CSC to start and output the summaryState event.
- name
- Raises:
- asyncio.TimeoutError
If the CSC cannot be started within the specified time limit.
- async check_standard_state_transitions(enabled_commands: Sequence[str], skip_commands: collections.abc.Sequence[str] | None = None, override: str = '', timeout: float = 60) None ¶
Test standard CSC state transitions.
- Parameters:
- enabled_commands
List
[str
] List of CSC-specific commands that are valid in the enabled state. Need not include the standard commands, which are “disable” and “setLogLevel” (which is valid in any state).
- skip_commands
List
[str
] orNone
, optional List of commands to skip.
- override
str
, optional Configuration override file to apply when the CSC is taken from state
State.STANDBY
toState.DISABLED
.- timeout
float
, optional Time limit for state transition commands (seconds).
- enabled_commands
- Raises:
- asyncio.TimeoutError
If any state transition takes longer than the specified time limit.
Notes
timeout
is only used for state transition commands that are expected to succceed.STD_TIMEOUT
is used for things that should happen quickly:Commands that should fail, due to the CSC being in the wrong state.
The
summaryState
event after each state transition:
- make_csc(initial_state: State = State.STANDBY, config_dir: str | pathlib.Path | None = None, simulation_mode: int = 0, log_level: int | None = None, timeout: float = 60, **kwargs: Any) AsyncGenerator[None, None] ¶
Create a CSC and remote and wait for them to start.
The csc is accessed as
self.csc
and the remote asself.remote
.The topics in
self.remote
will queue all telemetry and events from when the CSC is constructed, with one exception: self.remote.evt_summaryState will only have the final summary state, because earlier values are read and checked against the expected startup states. (The final summary state is left queued for backwards compatibility.)- Parameters:
- name
str
Name of SAL component.
- initial_state
lsst.ts.salobj.State
orint
, optional The initial state of the CSC. Defaults to STANDBY.
- config_dir
str
, optional Directory of configuration files, or
None
(the default) for the standard configuration directory (obtained fromConfigureCsc._get_default_config_dir
).- simulation_mode
int
, optional Simulation mode. Defaults to 0 because not all CSCs support simulation. However, tests of CSCs that support simulation will almost certainly want to set this nonzero.
- log_level
int
orNone
, optional Logging level, such as
logging.INFO
. IfNone
then do not set the log level, leaving the default behavior ofSalInfo
: increase the log level to INFO.- timeout
float
, optional Time limit for the CSC to start (seconds).
- **kwargs
dict
, optional Extra keyword arguments for
basic_make_csc
. For a configurable CSC this may includeoverride
, especially ifinitial_state
is DISABLED or ENABLED.
- name
- Raises:
- asyncio.TimeoutError
If the CSC cannot be constructed within the specified time limit.