flowey_lib_hvlite/_jobs/
download_and_run_nextest_vmm_tests.rs1use crate::_jobs::consume_and_test_nextest_vmm_tests_archive::TestContentConfig;
13use crate::common::CommonTriple;
14use crate::init_vmm_tests_content_dir::VmmTestsBuiltArtifacts;
15use crate::init_vmm_tests_content_dir::VmmTestsBuiltArtifactsWrite;
16use crate::init_vmm_tests_content_dir::vmm_tests_artifact_builders::VmmTestsArtifactsBuilderWindowsX86;
17use crate::init_vmm_tests_env::PetriParams;
18use crate::install_vmm_tests_external_deps::VmmTestsExternalDeps;
19use crate::install_vmm_tests_external_deps::VmmTestsExternalDepsWindows;
20use crate::run_cargo_nextest_run::NextestProfile;
21use flowey::node::prelude::*;
22use vmm_test_images::KnownTestArtifacts;
23
24#[derive(Serialize, Deserialize)]
25pub enum VmmTestsProfile {
26 X64WindowsAll,
27}
28
29struct VmmTestsParameters {
30 target: CommonTriple,
31 nextest_filter_expr: String,
32 built_artifacts: VmmTestsBuiltArtifacts,
33 built_artifacts_write: VmmTestsBuiltArtifactsWrite,
34 downloaded_artifacts: Vec<KnownTestArtifacts>,
35 prep_steps_variants: Vec<String>,
36 external_deps: VmmTestsExternalDeps,
37}
38
39impl VmmTestsProfile {
40 fn parameters(&self, ctx: &mut NodeCtx<'_>) -> VmmTestsParameters {
41 match self {
42 VmmTestsProfile::X64WindowsAll => {
43 let (built_artifacts, built_artifacts_write) =
44 VmmTestsArtifactsBuilderWindowsX86::pair(ctx);
45 let mut nextest_filter_expr = "all()".to_string();
46 nextest_filter_expr.push_str(" & !test(storvsp_nvme_hyperv)");
49 nextest_filter_expr.push_str(" & !test(dio_nic)");
52
53 VmmTestsParameters {
54 target: CommonTriple::X86_64_WINDOWS_MSVC,
55 nextest_filter_expr,
56 built_artifacts,
57 built_artifacts_write,
58 downloaded_artifacts: vec![
59 KnownTestArtifacts::Alpine323X64Vhd,
60 KnownTestArtifacts::FreeBsd13_2X64Vhd,
61 KnownTestArtifacts::FreeBsd13_2X64Iso,
62 KnownTestArtifacts::Gen1WindowsDataCenterCore2022X64Vhd,
63 KnownTestArtifacts::Gen2WindowsDataCenterCore2022X64Vhd,
64 KnownTestArtifacts::Gen2WindowsDataCenterCore2025X64Vhd,
65 KnownTestArtifacts::Ubuntu2404ServerX64Vhd,
66 KnownTestArtifacts::Ubuntu2504ServerX64Vhd,
67 KnownTestArtifacts::VmgsWithBootEntry,
68 KnownTestArtifacts::VmgsWith16kTpm,
69 ],
70 prep_steps_variants: vec!["standard".into(), "no-vmbus".into()],
71 external_deps: VmmTestsExternalDeps::Windows(VmmTestsExternalDepsWindows {
72 hyperv: true,
73 whp: true,
74 hardware_isolation: true,
75 }),
76 }
77 }
78 }
79 }
80}
81
82flowey_request! {
83 pub struct Params {
84 pub label: String,
85 pub profile: VmmTestsProfile,
86 pub repetitions: std::num::NonZeroU64,
87 pub done: WriteVar<SideEffect>,
88 }
89}
90
91new_simple_flow_node!(struct Node);
92
93impl SimpleFlowNode for Node {
94 type Request = Params;
95
96 fn imports(ctx: &mut ImportCtx<'_>) {
97 ctx.import::<crate::download_vmm_tests_built_artifacts::Node>();
98 ctx.import::<crate::_jobs::consume_and_test_nextest_vmm_tests_archive::Node>();
99 }
100
101 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
102 let Params {
103 label,
104 profile,
105 repetitions,
106 done,
107 } = request;
108
109 let VmmTestsParameters {
110 target,
111 nextest_filter_expr,
112 built_artifacts,
113 built_artifacts_write,
114 downloaded_artifacts,
115 prep_steps_variants,
116 external_deps,
117 } = profile.parameters(ctx);
118
119 ctx.req(crate::download_vmm_tests_built_artifacts::Request {
120 built_artifacts_write,
121 target: target.clone(),
122 });
123
124 ctx.req(
125 crate::_jobs::consume_and_test_nextest_vmm_tests_archive::Params {
126 junit_test_label: format!("{label}-vmm-tests"),
127 target: target.as_triple(),
128 nextest_profile: NextestProfile::Ci,
129 nextest_filter_expr: Some(nextest_filter_expr),
130 test_content_config: TestContentConfig::Uninitialized {
131 test_content_dir: None,
132 built_artifacts,
133 needs_release_igvm: true, },
135 downloaded_artifacts,
136 prep_steps_variants,
137 external_deps,
138 incubator_profile: None,
139 upload_logs_on_success: false,
140 fail_job_on_test_fail: true,
141 repetitions,
142 petri_params: PetriParams {
144 disable_remote_artifacts: true,
145 reuse_prepped_vhds: false,
146 require_2mb_hugetlb: false,
147 },
148 test_content_dir_as_repo_root: false,
149 done,
150 },
151 );
152
153 Ok(())
154 }
155}