mirror of
https://github.com/uutils/coreutils
synced 2024-12-12 14:22:41 +00:00
207 lines
4.6 KiB
Rust
207 lines
4.6 KiB
Rust
// This file is part of the uutils coreutils package.
|
|
//
|
|
// For the full copyright and license information, please view the LICENSE
|
|
// file that was distributed with this source code.
|
|
|
|
// spell-checker:ignore wipesync
|
|
|
|
use crate::common::util::TestScenario;
|
|
|
|
#[test]
|
|
fn test_invalid_arg() {
|
|
new_ucmd!().arg("--definitely-invalid").fails().code_is(1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_remove_arg() {
|
|
new_ucmd!().arg("--remove=unknown").fails().code_is(1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_ambiguous_remove_arg() {
|
|
new_ucmd!().arg("--remove=wip").fails().code_is(1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred() {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
|
|
let file = "test_shred";
|
|
let file_original_content = "test_shred file content";
|
|
|
|
at.write(file, file_original_content);
|
|
|
|
ucmd.arg(file).succeeds();
|
|
|
|
// File exists
|
|
assert!(at.file_exists(file));
|
|
// File is obfuscated
|
|
assert!(at.read_bytes(file) != file_original_content.as_bytes());
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_remove() {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
|
|
let file = "test_shred_remove";
|
|
at.touch(file);
|
|
|
|
ucmd.arg("--remove").arg(file).succeeds();
|
|
|
|
// File was deleted
|
|
assert!(!at.file_exists(file));
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_remove_unlink() {
|
|
// spell-checker:disable-next-line
|
|
for argument in ["--remove=unlink", "--remove=unlin", "--remove=u"] {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
let file = "test_shred_remove_unlink";
|
|
at.touch(file);
|
|
ucmd.arg(argument).arg(file).succeeds();
|
|
// File was deleted
|
|
assert!(!at.file_exists(file));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_remove_wipe() {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
|
|
let file = "test_shred_remove_wipe";
|
|
at.touch(file);
|
|
|
|
ucmd.arg("--remove=wipe").arg(file).succeeds();
|
|
|
|
// File was deleted
|
|
assert!(!at.file_exists(file));
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_remove_wipesync() {
|
|
// spell-checker:disable-next-line
|
|
for argument in ["--remove=wipesync", "--remove=wipesyn", "--remove=wipes"] {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
let file = "test_shred_remove_wipesync";
|
|
at.touch(file);
|
|
ucmd.arg(argument).arg(file).succeeds();
|
|
// File was deleted
|
|
assert!(!at.file_exists(file));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_u() {
|
|
let scene = TestScenario::new(util_name!());
|
|
let at = &scene.fixtures;
|
|
|
|
let file_a = "test_shred_remove_a";
|
|
let file_b = "test_shred_remove_b";
|
|
|
|
// Create file_a and file_b.
|
|
at.touch(file_a);
|
|
at.touch(file_b);
|
|
|
|
// Shred file_a.
|
|
scene.ucmd().arg("-u").arg(file_a).succeeds();
|
|
|
|
// file_a was deleted, file_b exists.
|
|
assert!(!at.file_exists(file_a));
|
|
assert!(at.file_exists(file_b));
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_force() {
|
|
let scene = TestScenario::new(util_name!());
|
|
let at = &scene.fixtures;
|
|
|
|
let file = "test_shred_force";
|
|
|
|
// Create file_a.
|
|
at.touch(file);
|
|
assert!(at.file_exists(file));
|
|
|
|
// Make file_a readonly.
|
|
at.set_readonly(file);
|
|
|
|
// Try shred -u.
|
|
scene.ucmd().arg("-u").arg(file).run();
|
|
|
|
// file_a was not deleted because it is readonly.
|
|
assert!(at.file_exists(file));
|
|
|
|
// Try shred -u -f.
|
|
scene.ucmd().arg("-u").arg("-f").arg(file).run();
|
|
|
|
// file_a was deleted.
|
|
assert!(!at.file_exists(file));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hex() {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
|
|
let file = "test_hex";
|
|
|
|
at.touch(file);
|
|
|
|
ucmd.arg("--size=0x10").arg(file).succeeds();
|
|
}
|
|
|
|
#[test]
|
|
fn test_shred_empty() {
|
|
let scene = TestScenario::new(util_name!());
|
|
let at = &scene.fixtures;
|
|
|
|
let file_a = "test_shred_remove_a";
|
|
|
|
at.touch(file_a);
|
|
|
|
// Shred file_a and verify that, as it is empty, it doesn't have "pass 1/3 (random)"
|
|
scene
|
|
.ucmd()
|
|
.arg("-uv")
|
|
.arg(file_a)
|
|
.succeeds()
|
|
.stderr_does_not_contain("1/3 (random)");
|
|
|
|
assert!(!at.file_exists(file_a));
|
|
|
|
// if the file isn't empty, we should have random
|
|
at.touch(file_a);
|
|
at.write(file_a, "1");
|
|
scene
|
|
.ucmd()
|
|
.arg("-uv")
|
|
.arg(file_a)
|
|
.succeeds()
|
|
.stderr_contains("1/3 (random)");
|
|
|
|
assert!(!at.file_exists(file_a));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "chmod"))]
|
|
fn test_shred_fail_no_perm() {
|
|
use std::path::Path;
|
|
|
|
let scene = TestScenario::new(util_name!());
|
|
let at = &scene.fixtures;
|
|
let dir = "dir";
|
|
|
|
let file = "test_shred_remove_a";
|
|
|
|
let binding = Path::new("dir").join(file);
|
|
let path = binding.to_str().unwrap();
|
|
at.mkdir(dir);
|
|
at.touch(path);
|
|
scene.ccmd("chmod").arg("a-w").arg(dir).succeeds();
|
|
|
|
scene
|
|
.ucmd()
|
|
.arg("-uv")
|
|
.arg(path)
|
|
.fails()
|
|
.stderr_contains("Couldn't rename to");
|
|
}
|