mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-27 11:07:44 +00:00
test(id): add tests for id
This commit is contained in:
parent
90dfa70bd3
commit
9fb00df9b3
4 changed files with 147 additions and 1 deletions
|
@ -298,7 +298,10 @@ fn id_print(possible_pw: Option<Passwd>, p_euid: bool, p_egid: bool) {
|
||||||
.map(|p| (p.uid(), p.gid()))
|
.map(|p| (p.uid(), p.gid()))
|
||||||
.unwrap_or((getuid(), getgid()));
|
.unwrap_or((getuid(), getgid()));
|
||||||
|
|
||||||
let groups = Passwd::locate(uid).unwrap().belongs_to();
|
let groups = match Passwd::locate(uid) {
|
||||||
|
Ok(p) => p.belongs_to(),
|
||||||
|
Err(e) => crash!(1, "Could not find uid {}: {}", uid, e),
|
||||||
|
};
|
||||||
|
|
||||||
print!("uid={}({})", uid, entries::uid2usr(uid).unwrap());
|
print!("uid={}({})", uid, entries::uid2usr(uid).unwrap());
|
||||||
print!(" gid={}({})", gid, entries::gid2grp(gid).unwrap());
|
print!(" gid={}({})", gid, entries::gid2grp(gid).unwrap());
|
||||||
|
|
|
@ -49,6 +49,7 @@ pub fn uumain(args: Vec<String>) -> i32 {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if matches.opt_present("help") || !matches.free.is_empty() {
|
if matches.opt_present("help") || !matches.free.is_empty() {
|
||||||
|
// TODO: use the standard method for this
|
||||||
println!("{} {}", NAME, VERSION);
|
println!("{} {}", NAME, VERSION);
|
||||||
println!();
|
println!();
|
||||||
println!("Usage:");
|
println!("Usage:");
|
||||||
|
|
141
tests/test_id.rs
Normal file
141
tests/test_id.rs
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
use common::util::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id() {
|
||||||
|
let scene = TestScenario::new(util_name!());
|
||||||
|
|
||||||
|
let mut result = scene.ucmd().arg("-u").run();
|
||||||
|
if result.stderr.contains("cannot find name for user ID") {
|
||||||
|
// In the CI, some server are failing to return whoami.
|
||||||
|
// As seems to be a configuration issue, ignoring it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert!(result.success);
|
||||||
|
|
||||||
|
let uid = String::from(result.stdout.trim());
|
||||||
|
result = scene.ucmd().run();
|
||||||
|
if result.stderr.contains("cannot find name for user ID") {
|
||||||
|
// In the CI, some server are failing to return whoami.
|
||||||
|
// As seems to be a configuration issue, ignoring it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
if !result.stderr.contains("Could not find uid") {
|
||||||
|
// Verify that the id found by --user/-u exists in the list
|
||||||
|
assert!(result.stdout.contains(&uid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id_from_name() {
|
||||||
|
let mut scene = TestScenario::new("whoami");
|
||||||
|
let result = scene.cmd("whoami").run();
|
||||||
|
if result.stderr.contains("cannot find name for user ID") {
|
||||||
|
// In the CI, some server are failing to return whoami.
|
||||||
|
// As seems to be a configuration issue, ignoring it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let username = result.stdout.trim();
|
||||||
|
|
||||||
|
scene = TestScenario::new(util_name!());
|
||||||
|
let result = scene.ucmd().arg(username).succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let uid = String::from(result.stdout.trim());
|
||||||
|
let result = scene.ucmd().succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
// Verify that the id found by --user/-u exists in the list
|
||||||
|
assert!(result.stdout.contains(&uid));
|
||||||
|
// Verify that the username found by whoami exists in the list
|
||||||
|
assert!(result.stdout.contains(&username));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id_name_from_id() {
|
||||||
|
let mut scene = TestScenario::new(util_name!());
|
||||||
|
let result = scene.ucmd().arg("-u").run();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let uid = String::from(result.stdout.trim());
|
||||||
|
|
||||||
|
scene = TestScenario::new(util_name!());
|
||||||
|
let result = scene.ucmd().arg("-nu").arg(uid).run();
|
||||||
|
if result.stderr.contains("No such user/group") {
|
||||||
|
// In the CI, some server are failing to return whoami.
|
||||||
|
// As seems to be a configuration issue, ignoring it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
|
||||||
|
let username_id = String::from(result.stdout.trim());
|
||||||
|
|
||||||
|
scene = TestScenario::new("whoami");
|
||||||
|
let result = scene.cmd("whoami").run();
|
||||||
|
|
||||||
|
let username_whoami = result.stdout.trim();
|
||||||
|
|
||||||
|
assert_eq!(username_id, username_whoami);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id_group() {
|
||||||
|
let scene = TestScenario::new(util_name!());
|
||||||
|
|
||||||
|
let mut result = scene.ucmd().arg("-g").succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let s1 = String::from(result.stdout.trim());
|
||||||
|
assert!(s1.parse::<f64>().is_ok());
|
||||||
|
|
||||||
|
result = scene.ucmd().arg("--group").succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let s1 = String::from(result.stdout.trim());
|
||||||
|
assert!(s1.parse::<f64>().is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id_groups() {
|
||||||
|
let scene = TestScenario::new(util_name!());
|
||||||
|
|
||||||
|
let result = scene.ucmd().arg("-G").succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let groups = result.stdout.trim().split_whitespace();
|
||||||
|
for s in groups {
|
||||||
|
assert!(s.parse::<f64>().is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = scene.ucmd().arg("--groups").succeeds();
|
||||||
|
println!("result.stdout = {}", result.stdout);
|
||||||
|
println!("result.stderr = {}", result.stderr);
|
||||||
|
assert!(result.success);
|
||||||
|
let groups = result.stdout.trim().split_whitespace();
|
||||||
|
for s in groups {
|
||||||
|
assert!(s.parse::<f64>().is_ok());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_id_user() {
|
||||||
|
let scene = TestScenario::new(util_name!());
|
||||||
|
|
||||||
|
let mut result = scene.ucmd().arg("-u").succeeds();
|
||||||
|
assert!(result.success);
|
||||||
|
let s1 = String::from(result.stdout.trim());
|
||||||
|
assert!(s1.parse::<f64>().is_ok());
|
||||||
|
result = scene.ucmd().arg("--user").succeeds();
|
||||||
|
assert!(result.success);
|
||||||
|
let s1 = String::from(result.stdout.trim());
|
||||||
|
assert!(s1.parse::<f64>().is_ok());
|
||||||
|
}
|
|
@ -67,6 +67,7 @@ generic! {
|
||||||
"fold", test_fold;
|
"fold", test_fold;
|
||||||
"hashsum", test_hashsum;
|
"hashsum", test_hashsum;
|
||||||
"head", test_head;
|
"head", test_head;
|
||||||
|
"id", test_id;
|
||||||
"join", test_join;
|
"join", test_join;
|
||||||
"link", test_link;
|
"link", test_link;
|
||||||
"ln", test_ln;
|
"ln", test_ln;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue