flowey_lib_hvlite/
test_nextest_vmm_tests_archive.rs1use crate::build_nextest_vmm_tests::NextestVmmTestsArchive;
11use crate::run_cargo_nextest_run::NextestProfile;
12use flowey::node::prelude::*;
13use flowey_lib_common::run_cargo_nextest_run::TestResults;
14use std::collections::BTreeMap;
15
16flowey_request! {
17 pub struct Request {
18 pub nextest_archive_file: ReadVar<NextestVmmTestsArchive>,
20 pub nextest_filter_expr: Option<String>,
22 pub nextest_profile: NextestProfile,
24 pub nextest_working_dir: Option<ReadVar<PathBuf>>,
26 pub nextest_config_file: Option<ReadVar<PathBuf>>,
28 pub nextest_bin: Option<ReadVar<PathBuf>>,
30 pub target: Option<ReadVar<target_lexicon::Triple>>,
32 pub extra_env: ReadVar<BTreeMap<String, String>>,
34 pub pre_run_deps: Vec<ReadVar<SideEffect>>,
38 pub results: WriteVar<TestResults>,
40 }
41}
42
43new_simple_flow_node!(struct Node);
44
45impl SimpleFlowNode for Node {
46 type Request = Request;
47
48 fn imports(ctx: &mut ImportCtx<'_>) {
49 ctx.import::<crate::run_cargo_nextest_run::Node>();
50 }
51
52 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
53 let Request {
54 nextest_archive_file,
55 nextest_filter_expr,
56 nextest_profile,
57 nextest_working_dir,
58 nextest_config_file,
59 nextest_bin,
60 target,
61 extra_env,
62 mut pre_run_deps,
63 results,
64 } = request;
65
66 if !matches!(ctx.backend(), FlowBackend::Local)
67 && matches!(ctx.platform(), FlowPlatform::Linux(_))
68 {
69 pre_run_deps.push({
70 ctx.emit_rust_step("ensure /dev/kvm is accessible", |_| {
71 |rt| {
72 flowey::shell_cmd!(rt, "sudo chmod a+rw /dev/kvm").run()?;
73 Ok(())
74 }
75 })
76 });
77 }
78
79 let nextest_archive = nextest_archive_file.map(ctx, |x| x.archive_file);
80
81 ctx.req(crate::run_cargo_nextest_run::Request {
82 friendly_name: "vmm_tests".into(),
83 run_kind: flowey_lib_common::run_cargo_nextest_run::NextestRunKind::RunFromArchive {
84 archive_file: nextest_archive,
85 target,
86 nextest_bin,
87 },
88 nextest_profile,
89 nextest_filter_expr,
90 nextest_working_dir,
91 nextest_config_file,
92 run_ignored: false,
93 extra_env: Some(extra_env),
94 pre_run_deps,
95 results,
96 });
97
98 Ok(())
99 }
100}