mirror of
https://github.com/uutils/coreutils
synced 2024-12-16 16:22:40 +00:00
569cd162d3
Updates to individual integration tests - use proposed conventional approach to beginning tests - use new convenience functions for using fixtures - use new names for TestScenario Updates to integration test modules - add proposed conventional module-level functions Updates to test/common/util.rs - rename TestSet, and its methods, for semantic clarity - create convenience functions for use of fixtures - delete convenience functions obsoleted by new conventions
175 lines
4.9 KiB
Rust
175 lines
4.9 KiB
Rust
extern crate libc;
|
|
extern crate time;
|
|
extern crate kernel32;
|
|
extern crate winapi;
|
|
extern crate filetime;
|
|
|
|
use self::filetime::*;
|
|
use common::util::*;
|
|
use std::os::unix::fs::PermissionsExt;
|
|
|
|
static UTIL_NAME: &'static str = "install";
|
|
fn at_and_ucmd() -> (AtPath, UCommand) {
|
|
let ts = TestScenario::new(UTIL_NAME);
|
|
let ucmd = ts.ucmd();
|
|
(ts.fixtures, ucmd)
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_help() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
|
|
let result = ucmd.arg("--help").run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
assert!(result.stdout.contains("Usage:"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_basic() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let dir = "test_install_target_dir_dir_a";
|
|
let file1 = "test_install_target_dir_file_a1";
|
|
let file2 = "test_install_target_dir_file_a2";
|
|
|
|
at.touch(file1);
|
|
at.touch(file2);
|
|
at.mkdir(dir);
|
|
let result = ucmd.arg(file1).arg(file2).arg(dir).run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
assert!(at.file_exists(file1));
|
|
assert!(at.file_exists(file2));
|
|
assert!(at.file_exists(&format!("{}/{}", dir, file1)));
|
|
assert!(at.file_exists(&format!("{}/{}", dir, file2)));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_unimplemented_arg() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let dir = "test_install_target_dir_dir_b";
|
|
let file = "test_install_target_dir_file_b";
|
|
let context_arg = "--context";
|
|
|
|
at.touch(file);
|
|
at.mkdir(dir);
|
|
let result = ucmd.arg(context_arg).arg(file).arg(dir).run();
|
|
|
|
assert!(!result.success);
|
|
assert!(result.stderr.contains("Unimplemented"));
|
|
|
|
assert!(!at.file_exists(&format!("{}/{}", dir, file)));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_component_directories() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let component1 = "test_install_target_dir_component_c1";
|
|
let component2 = "test_install_target_dir_component_c2";
|
|
let component3 = "test_install_target_dir_component_c3";
|
|
let directories_arg = "-d";
|
|
|
|
let result = ucmd.arg(directories_arg).arg(component1).arg(component2).arg(component3).run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
assert!(at.dir_exists(component1));
|
|
assert!(at.dir_exists(component2));
|
|
assert!(at.dir_exists(component3));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_component_directories_failing() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let component = "test_install_target_dir_component_d1";
|
|
let directories_arg = "-d";
|
|
|
|
at.mkdir(component);
|
|
let result = ucmd.arg(directories_arg).arg(component).run();
|
|
|
|
assert!(!result.success);
|
|
assert!(result.stderr.contains("File exists"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_mode_numeric() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let dir = "test_install_target_dir_dir_e";
|
|
let file = "test_install_target_dir_file_e";
|
|
let mode_arg = "--mode=333";
|
|
|
|
at.touch(file);
|
|
at.mkdir(dir);
|
|
let result = ucmd.arg(file).arg(dir).arg(mode_arg).run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
let dest_file = &format!("{}/{}", dir, file);
|
|
assert!(at.file_exists(file));
|
|
assert!(at.file_exists(dest_file));
|
|
let permissions = at.metadata(dest_file).permissions();
|
|
assert_eq!(0o333 as u32, PermissionsExt::mode(&permissions));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_mode_symbolic() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let dir = "test_install_target_dir_dir_f";
|
|
let file = "test_install_target_dir_file_f";
|
|
let mode_arg = "--mode=o+wx";
|
|
|
|
at.touch(file);
|
|
at.mkdir(dir);
|
|
let result = ucmd.arg(file).arg(dir).arg(mode_arg).run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
let dest_file = &format!("{}/{}", dir, file);
|
|
assert!(at.file_exists(file));
|
|
assert!(at.file_exists(dest_file));
|
|
let permissions = at.metadata(dest_file).permissions();
|
|
assert_eq!(0o003 as u32, PermissionsExt::mode(&permissions));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_mode_failing() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let dir = "test_install_target_dir_dir_g";
|
|
let file = "test_install_target_dir_file_g";
|
|
let mode_arg = "--mode=999";
|
|
|
|
at.touch(file);
|
|
at.mkdir(dir);
|
|
let result = ucmd.arg(file).arg(dir).arg(mode_arg).run();
|
|
|
|
assert!(!result.success);
|
|
assert!(result.stderr.contains("Invalid mode string: numeric parsing error"));
|
|
|
|
let dest_file = &format!("{}/{}", dir, file);
|
|
assert!(at.file_exists(file));
|
|
assert!(!at.file_exists(dest_file));
|
|
}
|
|
|
|
#[test]
|
|
fn test_install_mode_directories() {
|
|
let (at, mut ucmd) = at_and_ucmd();
|
|
let component = "test_install_target_dir_component_h";
|
|
let directories_arg = "-d";
|
|
let mode_arg = "--mode=333";
|
|
|
|
let result = ucmd.arg(directories_arg).arg(component).arg(mode_arg).run();
|
|
|
|
assert!(result.success);
|
|
assert_empty_stderr!(result);
|
|
|
|
assert!(at.dir_exists(component));
|
|
let permissions = at.metadata(component).permissions();
|
|
assert_eq!(0o333 as u32, PermissionsExt::mode(&permissions));
|
|
}
|