Skip to main content

flowey_lib_hvlite/_jobs/
local_run_nextest_vmm_tests.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! A local-only job that runs the VMM tests out of a directory populated
5//! by local_build_and_run_nextest_vmm_tests with the build_only option.
6
7use crate::_jobs::consume_and_test_nextest_vmm_tests_archive::TestContentConfig;
8use crate::_jobs::local_build_and_run_nextest_vmm_tests::build_test_label;
9use crate::_jobs::local_build_and_run_nextest_vmm_tests::init_artifacts_dir;
10use crate::common::CommonTriple;
11use crate::init_vmm_tests_env::PetriParams;
12use crate::install_vmm_tests_external_deps::VmmTestsExternalDeps;
13use flowey::node::prelude::*;
14use petri_artifacts_vmm_test::ErasedVmmTestImage;
15use std::num::NonZeroU64;
16
17flowey_request! {
18    pub struct Params {
19        pub target: CommonTriple,
20
21        /// Test content dir with all artifacts and repo root
22        pub test_content_dir: PathBuf,
23
24        // Subset of `VmmTestSelections`
25        pub filter: String,
26        pub downloaded_artifacts: Vec<ErasedVmmTestImage>,
27        pub external_deps: VmmTestsExternalDeps,
28        pub prep_steps_variants: Vec<String>,
29        pub needs_test_igvm_agent_rpc_server: bool,
30
31        /// Skip the interactive VHD download prompt
32        pub skip_vhd_prompt: bool,
33
34        pub nextest_profile: crate::run_cargo_nextest_run::NextestProfile,
35
36        pub petri_params: PetriParams,
37
38        pub repetitions: NonZeroU64,
39
40        pub done: WriteVar<SideEffect>,
41    }
42}
43
44new_simple_flow_node!(struct Node);
45
46impl SimpleFlowNode for Node {
47    type Request = Params;
48
49    fn imports(ctx: &mut ImportCtx<'_>) {
50        ctx.import::<crate::_jobs::consume_and_test_nextest_vmm_tests_archive::Node>();
51        ctx.import::<crate::download_openvmm_vmm_tests_artifacts::Node>();
52    }
53
54    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
55        let Params {
56            target,
57            test_content_dir,
58            filter,
59            downloaded_artifacts,
60            external_deps,
61            prep_steps_variants,
62            needs_test_igvm_agent_rpc_server,
63            skip_vhd_prompt,
64            nextest_profile,
65            petri_params,
66            repetitions,
67            done,
68        } = request;
69
70        let test_content_dir = test_content_dir.absolute()?;
71
72        let target_triple = target.as_triple();
73        let test_label = build_test_label(&target_triple);
74
75        init_artifacts_dir(ctx, &test_content_dir, skip_vhd_prompt)?;
76
77        ctx.req(
78            crate::_jobs::consume_and_test_nextest_vmm_tests_archive::Params {
79                junit_test_label: test_label,
80                target: target_triple,
81                nextest_profile,
82                nextest_filter_expr: Some(filter),
83                test_content_config: TestContentConfig::Initialized {
84                    test_content_dir: ReadVar::from_static(test_content_dir),
85                    needs_test_igvm_agent_rpc_server,
86                },
87                downloaded_artifacts,
88                prep_steps_variants,
89                external_deps,
90                upload_logs_on_success: true,
91                fail_job_on_test_fail: true,
92                repetitions,
93                petri_params,
94                test_content_dir_as_repo_root: true,
95                done,
96            },
97        );
98
99        Ok(())
100    }
101}