sysknife_daemon/actions/
multipass.rs1use super::{command_mechanism, ActionSpec};
12use sysknife_types::RiskLevel;
13
14pub fn specs() -> Vec<ActionSpec> {
20 vec![multipass_list()]
21}
22
23pub fn multipass_list() -> ActionSpec {
32 ActionSpec {
33 action_name: "MultipassList",
34 mechanism: command_mechanism("multipass", ["list"]),
35 risk_level: RiskLevel::Low,
36 reboot_required: false,
37 rollback_available: false,
38 }
39}
40
41#[cfg(test)]
46mod tests {
47 use super::*;
48 use crate::actions::ActionMechanism;
49
50 fn extract_cmd(spec: &ActionSpec) -> (&'static str, Vec<&str>) {
51 match &spec.mechanism {
52 ActionMechanism::Command { program, args } => {
53 (*program, args.iter().map(String::as_str).collect())
54 }
55 _ => panic!("expected Command mechanism"),
56 }
57 }
58
59 #[test]
60 fn multipass_list_action_name() {
61 assert_eq!(multipass_list().action_name, "MultipassList");
62 }
63
64 #[test]
65 fn multipass_list_risk_low() {
66 assert_eq!(multipass_list().risk_level, RiskLevel::Low);
67 }
68
69 #[test]
70 fn multipass_list_no_reboot() {
71 assert!(!multipass_list().reboot_required);
72 }
73
74 #[test]
75 fn multipass_list_no_rollback() {
76 assert!(!multipass_list().rollback_available);
77 }
78
79 #[test]
80 fn multipass_list_argv() {
81 let spec = multipass_list();
82 let (prog, args) = extract_cmd(&spec);
83 assert_eq!(prog, "multipass");
84 assert!(args.contains(&"list"));
85 }
86
87 #[test]
88 fn specs_covers_all_action_names() {
89 let expected = ["MultipassList"];
90 let spec_names: Vec<&str> = specs().iter().map(|s| s.action_name).collect();
91 for name in &expected {
92 assert!(spec_names.contains(name), "specs() missing {name}");
93 }
94 }
95}