flowey_lib_hvlite/_jobs/
local_run_cca_test.rs1use crate::common::CommonArch;
7use crate::common::CommonPlatform;
8use crate::common::CommonProfile;
9use crate::common::CommonTriple;
10use flowey::node::prelude::*;
11
12flowey_request! {
13 pub struct Params {
14 pub test_root: PathBuf,
15 pub build_only: bool,
16 pub done: WriteVar<SideEffect>,
17 }
18}
19
20new_simple_flow_node!(struct Node);
21
22const ENV_CCA_TEST_ROOT: &str = "OPENVMM_CCA_TEST_ROOT";
23const ENV_CCA_TMK_VMM: &str = "OPENVMM_CCA_TMK_VMM";
24const ENV_CCA_SIMPLE_TMK: &str = "OPENVMM_CCA_SIMPLE_TMK";
25
26impl SimpleFlowNode for Node {
27 type Request = Params;
28
29 fn imports(ctx: &mut ImportCtx<'_>) {
30 ctx.import::<crate::build_tmk_vmm::Node>();
31 ctx.import::<crate::build_tmks::Node>();
32 }
33
34 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
35 let Params {
36 test_root,
37 build_only,
38 done,
39 } = request;
40
41 let tmk_vmm_output = ctx.reqv(|v| crate::build_tmk_vmm::Request {
43 target: CommonTriple::Common {
44 arch: CommonArch::Aarch64,
45 platform: CommonPlatform::LinuxGnu,
46 },
47 profile: CommonProfile::Debug,
48 tmk_vmm: v,
49 });
50
51 let simple_tmk_output = ctx.reqv(|v| crate::build_tmks::Request {
53 arch: CommonArch::Aarch64,
54 profile: CommonProfile::Debug,
55 tmks: v,
56 });
57
58 ctx.emit_rust_step("running cca tests", |ctx| {
59 done.claim(ctx);
60 let tmk_vmm_output = tmk_vmm_output.claim(ctx);
61 let simple_tmk_output = simple_tmk_output.claim(ctx);
62 move |rt| {
63 let tmk_vmm_output = rt.read(tmk_vmm_output);
64 let crate::build_tmk_vmm::TmkVmmOutput::LinuxBin {
65 bin: tmk_vmm_bin, ..
66 } = tmk_vmm_output
67 else {
68 anyhow::bail!("expect Linux tmk_vmm only");
69 };
70
71 let simple_tmk_output = rt.read(simple_tmk_output);
72 let simple_tmk_bin = simple_tmk_output.bin;
73
74 if build_only {
75 log::info!("CCA test artifacts built; skipping Petri test because --build-only was specified");
76 log::info!("tmk_vmm: {}", tmk_vmm_bin.display());
77 log::info!("simple_tmk: {}", simple_tmk_bin.display());
78 return Ok(());
79 }
80
81 flowey::shell_cmd!(rt, "cargo test -p cca_tests --test cca")
82 .env(ENV_CCA_TEST_ROOT, &test_root)
83 .env(ENV_CCA_TMK_VMM, &tmk_vmm_bin)
84 .env(ENV_CCA_SIMPLE_TMK, &simple_tmk_bin)
85 .run()
86 .with_context(|| "failed to run CCA runtime Petri test")?;
87
88 Ok(())
89 }
90 });
91
92 Ok(())
93 }
94}