#![allow(deprecated)]
use std::fs;
use tempfile::TempDir;
use tree_type::GenericFile;
use tree_type::tree_type;
#[cfg(unix)]
use std::os::unix::fs::PermissionsExt;
#[cfg(unix)]
#[test]
fn test_generic_file_secure() {
let temp_dir = TempDir::new().unwrap();
let file_path = temp_dir.path().join("test_file.txt");
fs::write(&file_path, "test content").unwrap();
let file = GenericFile::new(&file_path).unwrap();
file.secure().unwrap();
let metadata = fs::metadata(&file_path).unwrap();
let permissions = metadata.permissions();
assert_eq!(permissions.mode() & 0o777, 0o600);
}
#[cfg(unix)]
#[test]
fn test_generic_file_secure_nonexistent_file() {
let temp_dir = TempDir::new().unwrap();
let file_path = temp_dir.path().join("nonexistent.txt");
let file = GenericFile::new(&file_path).unwrap();
let result = file.secure();
assert!(result.is_err());
}
tree_type! {
SecureTestRoot {
test_file("test.txt")
}
}
#[cfg(unix)]
#[test]
fn test_macro_generated_file_secure() {
let temp_dir = TempDir::new().unwrap();
let root = SecureTestRoot::new(temp_dir.path()).unwrap();
root.test_file().write("test content").unwrap();
root.test_file().secure().unwrap();
let metadata = fs::metadata(root.test_file().as_path()).unwrap();
let permissions = metadata.permissions();
assert_eq!(permissions.mode() & 0o777, 0o600);
}
#[cfg(unix)]
#[test]
fn test_macro_generated_file_secure_delegation() {
let temp_dir = TempDir::new().unwrap();
let root = SecureTestRoot::new(temp_dir.path()).unwrap();
root.test_file().write("test content").unwrap();
let mut perms = fs::metadata(root.test_file().as_path())
.unwrap()
.permissions();
perms.set_mode(0o644);
fs::set_permissions(root.test_file().as_path(), perms).unwrap();
root.test_file().secure().unwrap();
let metadata = fs::metadata(root.test_file().as_path()).unwrap();
let permissions = metadata.permissions();
assert_eq!(permissions.mode() & 0o777, 0o600);
}
#[cfg(unix)]
#[test]
fn test_secure_method_availability() {
let temp_dir = TempDir::new().unwrap();
let root = SecureTestRoot::new(temp_dir.path()).unwrap();
root.test_file().write("test").unwrap();
let result = root.test_file().secure();
assert!(result.is_ok());
}