diff options
| author | Evan Benn <evanbenn@chromium.org> | 2022-11-01 11:42:39 +1100 | 
|---|---|---|
| committer | Edward O'Callaghan <quasisec@chromium.org> | 2022-11-09 01:32:06 +0000 | 
| commit | 8170c895689d72f2206169d749b69bd1eff7cebf (patch) | |
| tree | 314b109ce677a0d3820bfc700a0854137b21af1f /util/flashrom_tester | |
| parent | af2ba601f4840172eb422a0f3efb5a740fb9698d (diff) | |
| download | flashrom-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.rs | 35 | ||||
| -rw-r--r-- | util/flashrom_tester/src/tests.rs | 26 | 
2 files changed, 37 insertions, 24 deletions
diff --git a/util/flashrom_tester/src/tester.rs b/util/flashrom_tester/src/tester.rs index f2c38465..292fb78c 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 1527a6e6..3e1737e3 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),          };  | 
