Skip to content

Commit

Permalink
refractor(test_runner/{local,remote}): use pattern matching for metad…
Browse files Browse the repository at this point in the history
…ata extraction

- Replaced `.get().unwrap()` with pattern matching to avoid potential panics in both local and remote test runners.
- Ensured proper handling of metadata vector by validating its length before extraction.
- Improved code safety and readability by removing unsafe `unwrap()` calls.
  • Loading branch information
255doesnotexist committed Sep 22, 2024
1 parent d243709 commit d9115d7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 14 deletions.
23 changes: 16 additions & 7 deletions src/test_runner/local.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,10 @@ impl TestRunner for LocalTestRunner {
}

let package_metadata = if let Some(metadata_script) = script_manager.get_metadata_script() {
let metadata_command = format!("source {} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", metadata_script);
let metadata_command = format!(
"source {} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION",
metadata_script
);
let metadata_output = Command::new("bash")
.arg("-c")
.arg(metadata_command)
Expand All @@ -89,18 +92,24 @@ impl TestRunner for LocalTestRunner {
.lines()
.map(|line| line.to_string())
.collect();
PackageMetadata {
package_version: metadata_vec.get(0).unwrap().to_owned(),
package_pretty_name: metadata_vec.get(1).unwrap().to_owned(),
package_type: metadata_vec.get(2).unwrap().to_owned(),
package_description: metadata_vec.get(3).unwrap().to_owned(),

if let [version, pretty_name, package_type, description] = &metadata_vec[..] {
PackageMetadata {
package_version: version.to_owned(),
package_pretty_name: pretty_name.to_owned(),
package_type: package_type.to_owned(),
package_description: description.to_owned(),
}
} else {
// 处理错误情况,向量长度不足
panic!("Unexpected metadata format: not enough elements in metadata_vec");
}
} else {
PackageMetadata {
package_pretty_name: package.to_string(),
..Default::default()
}
};
};

let report = Report {
distro: distro.to_string(),
Expand Down
23 changes: 16 additions & 7 deletions src/test_runner/remote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,26 +215,35 @@ impl TestRunner for RemoteTestRunner {
let kernel_version = self.run_command(&sess, "uname -r")?;

let package_metadata = if let Some(metadata_script_name) = script_manager.get_metadata_script_name() {
let metadata_command = format!("source {}/{} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", remote_dir, metadata_script_name);
let metadata_command = format!(
"source {}/{} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION",
remote_dir, metadata_script_name
);
let metadata_output = self.run_command(&sess, &metadata_command)?;
let metadata_vec: Vec<String> = metadata_output
.output
.to_string()
.lines()
.map(|line| line.to_string())
.collect();
PackageMetadata {
package_version: metadata_vec.get(0).unwrap().to_owned(),
package_pretty_name: metadata_vec.get(1).unwrap().to_owned(),
package_type: metadata_vec.get(2).unwrap().to_owned(),
package_description: metadata_vec.get(3).unwrap().to_owned(),

if let [version, pretty_name, package_type, description] = &metadata_vec[..] {
PackageMetadata {
package_version: version.to_owned(),
package_pretty_name: pretty_name.to_owned(),
package_type: package_type.to_owned(),
package_description: description.to_owned(),
}
} else {
// 处理错误情况,如果 metadata_vec 不包含四个元素
panic!("Unexpected metadata format: not enough elements in metadata_vec");
}
} else {
PackageMetadata {
package_pretty_name: package.to_string(),
..Default::default()
}
};
};

let report = Report {
distro: distro.to_string(),
Expand Down

0 comments on commit d9115d7

Please sign in to comment.