diff options
Diffstat (limited to 'util/flashrom_tester/src')
| -rw-r--r-- | util/flashrom_tester/src/main.rs | 5 | ||||
| -rw-r--r-- | util/flashrom_tester/src/tests.rs | 6 | ||||
| -rw-r--r-- | util/flashrom_tester/src/utils.rs | 103 | 
3 files changed, 22 insertions, 92 deletions
| diff --git a/util/flashrom_tester/src/main.rs b/util/flashrom_tester/src/main.rs index 69bb92db..dd09f9a3 100644 --- a/util/flashrom_tester/src/main.rs +++ b/util/flashrom_tester/src/main.rs @@ -113,6 +113,10 @@ fn main() {      );      debug!("Args parsed and logging initialized OK"); +    debug!("Collecting crossystem info"); +    let crossystem = +        flashrom_tester::utils::collect_crosssystem(&[]).expect("could not run crossystem"); +      let flashrom_path = matches          .value_of("flashrom_binary")          .expect("flashrom_binary should be required"); @@ -143,6 +147,7 @@ fn main() {          output_format,          test_names,          Some(handle_sigint()), +        crossystem,      ) {          eprintln!("Failed to run tests: {:?}", e);          std::process::exit(1); diff --git a/util/flashrom_tester/src/tests.rs b/util/flashrom_tester/src/tests.rs index 7c6b8e8c..ed912e95 100644 --- a/util/flashrom_tester/src/tests.rs +++ b/util/flashrom_tester/src/tests.rs @@ -86,6 +86,7 @@ pub fn generic<'a, TN: Iterator<Item = &'a str>>(      output_format: OutputFormat,      test_names: Option<TN>,      terminate_flag: Option<&AtomicBool>, +    crossystem: String,  ) -> Result<(), Box<dyn std::error::Error>> {      utils::ac_power_warning(); @@ -106,10 +107,7 @@ pub fn generic<'a, TN: Iterator<Item = &'a str>>(          }      } -    info!( -        "Record crossystem information.\n{}", -        utils::collect_crosssystem()? -    ); +    info!("Record crossystem information.\n{}", crossystem);      // Register tests to run:      let tests: &[&dyn TestCase] = &[ diff --git a/util/flashrom_tester/src/utils.rs b/util/flashrom_tester/src/utils.rs index 717e103e..e8fbb531 100644 --- a/util/flashrom_tester/src/utils.rs +++ b/util/flashrom_tester/src/utils.rs @@ -139,12 +139,23 @@ fn pause() {  }  pub fn get_hardware_wp() -> std::result::Result<bool, String> { -    let (_, wp) = parse_crosssystem(&collect_crosssystem()?)?; -    Ok(wp) +    let wp_s_val = collect_crosssystem(&["wpsw_cur"])?.parse::<u32>(); +    match wp_s_val { +        Ok(v) => { +            if v == 1 { +                return Ok(true); +            } else if v == 0 { +                return Ok(false); +            } else { +                return Err("Unknown write protect value".into()); +            } +        } +        Err(_) => return Err("Cannot parse write protect value".into()), +    }  } -pub fn collect_crosssystem() -> Result<String, String> { -    let cmd = match Command::new("crossystem").output() { +pub fn collect_crosssystem(args: &[&str]) -> Result<String, String> { +    let cmd = match Command::new("crossystem").args(args).output() {          Ok(x) => x,          Err(e) => return Err(format!("Failed to run crossystem: {}", e)),      }; @@ -156,39 +167,6 @@ pub fn collect_crosssystem() -> Result<String, String> {      Ok(String::from_utf8_lossy(&cmd.stdout).into_owned())  } -fn parse_crosssystem(s: &str) -> Result<(Vec<&str>, bool), &'static str> { -    // grep -v 'fwid +=' | grep -v 'hwid +=' -    let sysinfo = s -        .split_terminator("\n") -        .filter(|s| !s.contains("fwid +=") && !s.contains("hwid +=")); - -    let state_line = match sysinfo.clone().filter(|s| s.starts_with("wpsw_cur")).next() { -        None => return Err("No wpsw_cur in system info"), -        Some(line) => line, -    }; -    let wp_s_val = state_line -        .trim_start_matches("wpsw_cur") -        .trim_start_matches(' ') -        .trim_start_matches('=') -        .trim_start_matches(' ') -        .get(..1) -        .unwrap() -        .parse::<u32>(); - -    match wp_s_val { -        Ok(v) => { -            if v == 1 { -                return Ok((sysinfo.collect(), true)); -            } else if v == 0 { -                return Ok((sysinfo.collect(), false)); -            } else { -                return Err("Unknown state value"); -            } -        } -        Err(_) => return Err("Cannot parse state value"), -    } -} -  pub fn translate_command_error(output: &std::process::Output) -> std::io::Error {      use std::io::{Error, ErrorKind};      // There is two cases on failure; @@ -260,55 +238,4 @@ mod tests {              }          );      } - -    #[test] -    fn parse_crosssystem() { -        use super::parse_crosssystem; - -        assert_eq!( -            parse_crosssystem("This is not the tool you are looking for").err(), -            Some("No wpsw_cur in system info") -        ); - -        assert_eq!( -            parse_crosssystem("wpsw_cur = ERROR").err(), -            Some("Cannot parse state value") -        ); - -        assert_eq!( -            parse_crosssystem("wpsw_cur = 3").err(), -            Some("Unknown state value") -        ); - -        assert_eq!( -            parse_crosssystem("wpsw_cur = 0"), -            Ok((vec!["wpsw_cur = 0"], false)) -        ); - -        assert_eq!( -            parse_crosssystem("wpsw_cur = 1"), -            Ok((vec!["wpsw_cur = 1"], true)) -        ); - -        assert_eq!( -            parse_crosssystem("wpsw_cur=1"), -            Ok((vec!["wpsw_cur=1"], true)) -        ); - -        assert_eq!( -            parse_crosssystem( -                "fwid += 123wpsw_cur\n\ -                 hwid += aaaaa\n\ -                 wpsw_boot                  = 0                      # [RO/int]\n\ -                 wpsw_cur                   = 1                      # [RO/int]\n" -            ), -            Ok(( -                vec![ -                    "wpsw_boot                  = 0                      # [RO/int]", -                    "wpsw_cur                   = 1                      # [RO/int]" -                ], -                true -            )) -        ); -    }  } | 
