//@ run-pass
//@ ignore-android
//@ ignore-emscripten
//@ ignore-sgx
//@ ignore-fuchsia no '/bin/sh', '/bin/ls'

#![feature(rustc_private)]

fn main() {
    #[cfg(unix)]
    run()
}

#[cfg(unix)]
fn run() {
    extern crate libc;
    use std::process::Command;
    use std::os::unix::prelude::*;

    let mut p = Command::new("/bin/sh")
        .arg("-c").arg("true")
        .uid(unsafe { libc::getuid() })
        .gid(unsafe { libc::getgid() })
        .spawn().unwrap();
    assert!(p.wait().unwrap().success());

    // if we're already root, this isn't a valid test. Most of the bots run
    // as non-root though (android is an exception).
    if unsafe { libc::getuid() != 0 } {
        assert!(Command::new("/bin/ls").uid(0).gid(0).spawn().is_err());
    }
}
