tests: Check the immutable bit
authorColin Walters <walters@verbum.org>
Fri, 21 Aug 2020 17:35:03 +0000 (17:35 +0000)
committerColin Walters <walters@verbum.org>
Fri, 21 Aug 2020 17:39:39 +0000 (17:39 +0000)
See https://bugzilla.redhat.com/show_bug.cgi?id=1867601

We really want an upstream test for this, even if (to my knowledge)
nothing is running ostree's upstream CI on !x86_64.

tests/inst/src/sysroot.rs
tests/inst/src/test.rs

index 08a3d38f7e28774e17b177b5b2fa004b81b041dd..bb742c2355cf263f5eb3e7bcfd2c41e4be90ae73 100644 (file)
@@ -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(())
+}
index 24dc8194f52e50fc587f30f3096213e3bf7d73d0..8b8510b8ecd9c20bb6f63b8f85a0666e7bee17de 100644 (file)
@@ -49,6 +49,20 @@ pub(crate) fn cmd_fails_with<C: BorrowMut<Command>>(mut c: C, pat: &str) -> Resu
     Ok(())
 }
 
+/// Run command and assert that its stdout contains pat
+pub(crate) fn cmd_has_output<C: BorrowMut<Command>>(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: AsRef<Path>>(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())?);