13da5c369Sopenharmony_ci// The conversion is not useless on all platforms.
23da5c369Sopenharmony_ci#[allow(clippy::useless_conversion)]
33da5c369Sopenharmony_ci#[cfg(target_os = "freebsd")]
43da5c369Sopenharmony_ci#[test]
53da5c369Sopenharmony_cifn test_chflags() {
63da5c369Sopenharmony_ci    use nix::{
73da5c369Sopenharmony_ci        sys::stat::{fstat, FileFlag},
83da5c369Sopenharmony_ci        unistd::chflags,
93da5c369Sopenharmony_ci    };
103da5c369Sopenharmony_ci    use std::os::unix::io::AsRawFd;
113da5c369Sopenharmony_ci    use tempfile::NamedTempFile;
123da5c369Sopenharmony_ci
133da5c369Sopenharmony_ci    let f = NamedTempFile::new().unwrap();
143da5c369Sopenharmony_ci
153da5c369Sopenharmony_ci    let initial = FileFlag::from_bits_truncate(
163da5c369Sopenharmony_ci        fstat(f.as_raw_fd()).unwrap().st_flags.into(),
173da5c369Sopenharmony_ci    );
183da5c369Sopenharmony_ci    // UF_OFFLINE is preserved by all FreeBSD file systems, but not interpreted
193da5c369Sopenharmony_ci    // in any way, so it's handy for testing.
203da5c369Sopenharmony_ci    let commanded = initial ^ FileFlag::UF_OFFLINE;
213da5c369Sopenharmony_ci
223da5c369Sopenharmony_ci    chflags(f.path(), commanded).unwrap();
233da5c369Sopenharmony_ci
243da5c369Sopenharmony_ci    let changed = FileFlag::from_bits_truncate(
253da5c369Sopenharmony_ci        fstat(f.as_raw_fd()).unwrap().st_flags.into(),
263da5c369Sopenharmony_ci    );
273da5c369Sopenharmony_ci
283da5c369Sopenharmony_ci    assert_eq!(commanded, changed);
293da5c369Sopenharmony_ci}
30