Skip to content

Commit 402e170

Browse files
refactor: build action from tasks and updated unit tests
1 parent df5fa67 commit 402e170

4 files changed

Lines changed: 1649 additions & 2992 deletions

File tree

crates/cargo-wdk/src/actions/build/build_task.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
//! building a driver package with the provided options using the `cargo build`
66
//! command.
77
8+
#![allow(dead_code)]
9+
#![allow(clippy::unused_self)]
10+
811
use std::path::{Path, PathBuf};
912

1013
use anyhow::Result;
1114
use cargo_metadata::Message;
15+
use mockall::automock;
1216
use mockall_double::double;
1317
use tracing::debug;
1418
use wdk_build::CpuArchitecture;
@@ -33,6 +37,40 @@ pub struct BuildTask<'a> {
3337
working_dir: &'a Path,
3438
}
3539

40+
#[derive(Debug)]
41+
pub struct BuildTaskRunParams<'a> {
42+
pub package_name: &'a str,
43+
pub working_dir: &'a Path,
44+
pub profile: Option<&'a Profile>,
45+
pub target_arch: Option<CpuArchitecture>,
46+
pub locked: bool,
47+
pub verbosity_level: clap_verbosity_flag::Verbosity,
48+
}
49+
50+
#[derive(Debug, Default)]
51+
pub struct BuildTaskRunner {}
52+
53+
#[automock]
54+
impl BuildTaskRunner {
55+
pub fn run<'a>(
56+
&self,
57+
params: &BuildTaskRunParams<'a>,
58+
command_exec: &CommandExec,
59+
) -> Result<Vec<Result<Message, std::io::Error>>, BuildTaskError> {
60+
BuildTask::new(
61+
params.package_name,
62+
params.working_dir,
63+
params.profile,
64+
params.target_arch,
65+
params.locked,
66+
params.verbosity_level,
67+
command_exec,
68+
)
69+
.run()
70+
.map(Iterator::collect)
71+
}
72+
}
73+
3674
impl<'a> BuildTask<'a> {
3775
/// Creates a new instance of `BuildTask`.
3876
///

crates/cargo-wdk/src/actions/build/mod.rs

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ use std::{
1818
};
1919

2020
use anyhow::Result;
21-
use build_task::BuildTask;
2221
use cargo_metadata::{CrateType, Message, Metadata as CargoMetadata, Package, TargetKind};
2322
use error::BuildActionError;
2423
use mockall_double::double;
2524
pub use package_task::SignMode;
26-
use package_task::{PackageTask, PackageTaskParams};
2725
use tracing::{debug, error as err, info, trace, warn};
2826
use wdk_build::{
2927
CpuArchitecture,
@@ -32,7 +30,13 @@ use wdk_build::{
3230

3331
use crate::actions::Profile;
3432
#[double]
33+
use build_task::BuildTaskRunner;
34+
use build_task::BuildTaskRunParams;
35+
#[double]
3536
use crate::providers::{exec::CommandExec, fs::Fs, metadata::Metadata, wdk_build::WdkBuild};
37+
#[double]
38+
use package_task::PackageTaskRunner;
39+
use package_task::PackageTaskParams;
3640

3741
pub struct BuildActionParams<'a> {
3842
pub working_dir: &'a Path,
@@ -60,6 +64,8 @@ pub struct BuildAction<'a> {
6064
command_exec: &'a CommandExec,
6165
fs: &'a Fs,
6266
metadata: &'a Metadata,
67+
build_task_runner: BuildTaskRunner,
68+
package_task_runner: PackageTaskRunner,
6369
}
6470

6571
impl<'a> BuildAction<'a> {
@@ -86,6 +92,26 @@ impl<'a> BuildAction<'a> {
8692
command_exec: &'a CommandExec,
8793
fs: &'a Fs,
8894
metadata: &'a Metadata,
95+
) -> Result<Self> {
96+
Self::new_with_runners(
97+
params,
98+
wdk_build,
99+
command_exec,
100+
fs,
101+
metadata,
102+
BuildTaskRunner::default(),
103+
PackageTaskRunner::default(),
104+
)
105+
}
106+
107+
fn new_with_runners(
108+
params: &BuildActionParams<'a>,
109+
wdk_build: &'a WdkBuild,
110+
command_exec: &'a CommandExec,
111+
fs: &'a Fs,
112+
metadata: &'a Metadata,
113+
build_task_runner: BuildTaskRunner,
114+
package_task_runner: PackageTaskRunner,
89115
) -> Result<Self> {
90116
// TODO: validate params
91117
anyhow::ensure!(
@@ -104,6 +130,8 @@ impl<'a> BuildAction<'a> {
104130
command_exec,
105131
fs,
106132
metadata,
133+
build_task_runner,
134+
package_task_runner,
107135
})
108136
}
109137

@@ -339,16 +367,17 @@ impl<'a> BuildAction<'a> {
339367
let package_name = package.name.as_str();
340368
info!("Building package {package_name}");
341369

342-
let build_task = BuildTask::new(
343-
package_name,
344-
working_dir,
345-
self.profile,
346-
self.target_arch,
347-
self.locked,
348-
self.verbosity_level,
370+
let output_message_iter = self.build_task_runner.run(
371+
&BuildTaskRunParams {
372+
package_name,
373+
working_dir,
374+
profile: self.profile,
375+
target_arch: self.target_arch,
376+
locked: self.locked,
377+
verbosity_level: self.verbosity_level,
378+
},
349379
self.command_exec,
350-
);
351-
let output_message_iter = build_task.run()?;
380+
)?;
352381

353382
let wdk_metadata = if let Ok(wdk_metadata) = wdk_metadata {
354383
debug!("Found wdk metadata in package: {}", package_name);
@@ -382,28 +411,29 @@ impl<'a> BuildAction<'a> {
382411
self.get_target_arch_from_cargo_rustc(working_dir)?
383412
};
384413
debug!("Target architecture for package: {package_name} is: {target_arch}");
385-
let target_dir = Self::get_target_dir_from_output(package, output_message_iter)?;
414+
let target_dir = Self::get_target_dir_from_output(package, output_message_iter.into_iter())?;
386415
debug!(
387416
"Target directory for package: {} is: {}",
388417
package_name,
389418
target_dir.display()
390419
);
391420

392-
PackageTask::new(
393-
PackageTaskParams {
394-
package_name,
395-
working_dir,
396-
target_dir: &target_dir,
397-
target_arch: &target_arch,
398-
sign_mode: self.sign_mode,
399-
sample_class: self.is_sample_class,
400-
driver_model,
401-
},
421+
let package_task_params = PackageTaskParams {
422+
package_name,
423+
working_dir,
424+
target_dir: &target_dir,
425+
target_arch: &target_arch,
426+
sign_mode: self.sign_mode,
427+
sample_class: self.is_sample_class,
428+
driver_model,
429+
};
430+
431+
self.package_task_runner.run(
432+
&package_task_params,
402433
self.wdk_build,
403434
self.command_exec,
404435
self.fs,
405-
)
406-
.run()?;
436+
)?;
407437

408438
info!("Finished building {package_name}");
409439
Ok(())

0 commit comments

Comments
 (0)