summaryrefslogtreecommitdiffstats
path: root/util/flashrom_tester
diff options
context:
space:
mode:
authorEvan Benn <evanbenn@chromium.org>2022-11-01 11:42:39 +1100
committerEdward O'Callaghan <quasisec@chromium.org>2022-11-09 01:32:06 +0000
commit8170c895689d72f2206169d749b69bd1eff7cebf (patch)
tree314b109ce677a0d3820bfc700a0854137b21af1f /util/flashrom_tester
parentaf2ba601f4840172eb422a0f3efb5a740fb9698d (diff)
downloadflashrom-8170c895689d72f2206169d749b69bd1eff7cebf.tar.gz
flashrom-8170c895689d72f2206169d749b69bd1eff7cebf.tar.bz2
flashrom-8170c895689d72f2206169d749b69bd1eff7cebf.zip
flashrom_tester: Move layout_file to TestEnv
layout_file is part of the test environment, move it from a global to a member of the TestEnv struct. This allows layout to be part of the tempdir in a subsequent patch. BUG=b:243460685 BRANCH=None TEST=/usr/bin/flashrom_tester --flashrom_binary /usr/sbin/flashrom host TEST=/usr/bin/flashrom_tester --libflashrom host Change-Id: Ia7e8efeb4fbac0a46627f079956d671aed43f1c7 Signed-off-by: Evan Benn <evanbenn@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/69063 Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'util/flashrom_tester')
-rw-r--r--util/flashrom_tester/src/tester.rs35
-rw-r--r--util/flashrom_tester/src/tests.rs26
2 files changed, 37 insertions, 24 deletions
diff --git a/util/flashrom_tester/src/tester.rs b/util/flashrom_tester/src/tester.rs
index f2c38465d..292fb78cc 100644
--- a/util/flashrom_tester/src/tester.rs
+++ b/util/flashrom_tester/src/tester.rs
@@ -39,6 +39,8 @@ use super::utils::{self, LayoutSizes};
use flashrom::FlashromError;
use flashrom::{FlashChip, Flashrom};
use serde_json::json;
+use std::fs::File;
+use std::io::Write;
use std::mem::MaybeUninit;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Mutex;
@@ -63,10 +65,16 @@ pub struct TestEnv<'a> {
/// The path to a file containing flash-sized random data
// TODO(pmarheine) make this a PathBuf too
random_data: String,
+ /// The path to a file containing layout data.
+ pub layout_file: String,
}
impl<'a> TestEnv<'a> {
- pub fn create(chip_type: FlashChip, cmd: &'a dyn Flashrom) -> Result<Self, FlashromError> {
+ pub fn create(
+ chip_type: FlashChip,
+ cmd: &'a dyn Flashrom,
+ print_layout: bool,
+ ) -> Result<Self, FlashromError> {
let rom_sz = cmd.get_size()?;
let out = TestEnv {
chip_type,
@@ -75,6 +83,7 @@ impl<'a> TestEnv<'a> {
wp: WriteProtectState::from_hardware(cmd, chip_type)?,
original_flash_contents: "/tmp/flashrom_tester_golden.bin".into(),
random_data: "/tmp/random_content.bin".into(),
+ layout_file: create_layout_file(rom_sz, "/tmp/", print_layout),
};
info!("Stashing golden image for verification/recovery on completion");
@@ -487,17 +496,39 @@ fn decode_test_result(res: TestResult, con: TestConclusion) -> (TestConclusion,
}
}
+fn create_layout_file(rom_sz: i64, tmp_dir: &str, print_layout: bool) -> String {
+ info!("Calculate ROM partition sizes & Create the layout file.");
+ let layout_sizes = utils::get_layout_sizes(rom_sz).expect("Could not partition rom");
+
+ let mut layout_file = tmp_dir.to_string();
+ layout_file.push_str("/layout.file");
+ let mut f = File::create(&layout_file).expect("Could not create layout file");
+ let mut buf: Vec<u8> = vec![];
+ utils::construct_layout_file(&mut buf, &layout_sizes).expect("Could not construct layout file");
+
+ f.write_all(&buf).expect("Writing layout file failed");
+ if print_layout {
+ info!(
+ "Dumping layout file as requested:\n{}",
+ String::from_utf8_lossy(&buf)
+ );
+ }
+ layout_file
+}
+
pub fn run_all_tests<T, TS>(
chip: FlashChip,
cmd: &dyn Flashrom,
ts: TS,
terminate_flag: Option<&AtomicBool>,
+ print_layout: bool,
) -> Vec<(String, (TestConclusion, Option<TestError>))>
where
T: TestCase + Copy,
TS: IntoIterator<Item = T>,
{
- let mut env = TestEnv::create(chip, cmd).expect("Failed to set up test environment");
+ let mut env =
+ TestEnv::create(chip, cmd, print_layout).expect("Failed to set up test environment");
let mut results = Vec::new();
for t in ts {
diff --git a/util/flashrom_tester/src/tests.rs b/util/flashrom_tester/src/tests.rs
index 1527a6e68..3e1737e31 100644
--- a/util/flashrom_tester/src/tests.rs
+++ b/util/flashrom_tester/src/tests.rs
@@ -40,10 +40,9 @@ use flashrom::{FlashChip, Flashrom};
use std::collections::{HashMap, HashSet};
use std::convert::TryInto;
use std::fs::{self, File};
-use std::io::{BufRead, Write};
+use std::io::BufRead;
use std::sync::atomic::AtomicBool;
-const LAYOUT_FILE: &str = "/tmp/layout.file";
const ELOG_FILE: &str = "/tmp/elog.file";
/// Iterate over tests, yielding only those tests with names matching filter_names.
@@ -91,23 +90,6 @@ pub fn generic<'a, TN: Iterator<Item = &'a str>>(
) -> Result<(), Box<dyn std::error::Error>> {
utils::ac_power_warning();
- info!("Calculate ROM partition sizes & Create the layout file.");
- let rom_sz: i64 = cmd.get_size()?;
- let layout_sizes = utils::get_layout_sizes(rom_sz)?;
- {
- let mut f = File::create(LAYOUT_FILE)?;
- let mut buf: Vec<u8> = vec![];
- utils::construct_layout_file(&mut buf, &layout_sizes)?;
-
- f.write_all(&buf)?;
- if print_layout {
- info!(
- "Dumping layout file as requested:\n{}",
- String::from_utf8_lossy(&buf)
- );
- }
- }
-
info!("Record crossystem information.\n{}", crossystem);
// Register tests to run:
@@ -144,7 +126,7 @@ pub fn generic<'a, TN: Iterator<Item = &'a str>>(
// ------------------------.
// Run all the tests and collate the findings:
- let results = tester::run_all_tests(fc, cmd, tests, terminate_flag);
+ let results = tester::run_all_tests(fc, cmd, tests, terminate_flag, print_layout);
// Any leftover filtered names were specified to be run but don't exist
for leftover in filter_names.iter().flatten() {
@@ -295,7 +277,7 @@ fn partial_lock_test(section: LayoutNames) -> impl Fn(&mut TestEnv) -> TestResul
// Check that we cannot write to the protected region.
let rws = flashrom::ROMWriteSpecifics {
- layout_file: Some(LAYOUT_FILE),
+ layout_file: Some(&env.layout_file),
write_file: Some(env.random_data_file()),
name_file: Some(wp_section_name),
};
@@ -313,7 +295,7 @@ fn partial_lock_test(section: LayoutNames) -> impl Fn(&mut TestEnv) -> TestResul
let (non_wp_section_name, _, _) =
utils::layout_section(env.layout(), section.get_non_overlapping_section());
let rws = flashrom::ROMWriteSpecifics {
- layout_file: Some(LAYOUT_FILE),
+ layout_file: Some(&env.layout_file),
write_file: Some(env.random_data_file()),
name_file: Some(non_wp_section_name),
};