diff --git a/tests/inst/src/sysroot.rs b/tests/inst/src/sysroot.rs index 08a3d38f..bb742c23 100644 --- a/tests/inst/src/sysroot.rs +++ b/tests/inst/src/sysroot.rs @@ -31,3 +31,10 @@ fn test_sysroot_ro() -> Result<()> { Ok(()) } + +#[itest] +fn test_immutable_bit() -> Result<()> { + // https://bugzilla.redhat.com/show_bug.cgi?id=1867601 + cmd_has_output(commandspec::sh_command!("lsattr -d /").unwrap(), "-i-")?; + Ok(()) +} diff --git a/tests/inst/src/test.rs b/tests/inst/src/test.rs index 24dc8194..8b8510b8 100644 --- a/tests/inst/src/test.rs +++ b/tests/inst/src/test.rs @@ -49,6 +49,20 @@ pub(crate) fn cmd_fails_with>(mut c: C, pat: &str) -> Resu Ok(()) } +/// Run command and assert that its stdout contains pat +pub(crate) fn cmd_has_output>(mut c: C, pat: &str) -> Result<()> { + let c = c.borrow_mut(); + let o = c.output()?; + if !o.status.success() { + bail!("Command {:?} failed", c); + } + if !twoway::find_bytes(&o.stdout, pat.as_bytes()).is_some() { + dbg!(String::from_utf8_lossy(&o.stdout)); + bail!("Command {:?} stdout did not match: {}", c, pat); + } + Ok(()) +} + pub(crate) fn write_file>(p: P, buf: &str) -> Result<()> { let p = p.as_ref(); let mut f = File::create(p)?; @@ -219,6 +233,15 @@ mod tests { cmd_fails_with(oops(), "nomatch").expect_err("nomatch"); } + #[test] + fn test_output() -> Result<()> { + cmd_has_output(Command::new("true"), "")?; + assert!(cmd_has_output(Command::new("true"), "foo").is_err()); + cmd_has_output(commandspec::sh_command!("echo foobarbaz; echo fooblahbaz").unwrap(), "blah")?; + assert!(cmd_has_output(commandspec::sh_command!("echo foobarbaz").unwrap(), "blah").is_err()); + Ok(()) + } + #[test] fn test_validate_authz() -> Result<()> { assert!(validate_authz("Basic Zm9vdXNlcjpiYXJwdw==".as_bytes())?);