diff --git a/src/bin/create_user.rs b/src/bin/create_user.rs index a834771..415000c 100644 --- a/src/bin/create_user.rs +++ b/src/bin/create_user.rs @@ -1,10 +1,50 @@ use std::path::PathBuf; +extern crate clap; +use clap::{App, Arg}; + extern crate adduser; use adduser::api::UserDBWrite; fn main() { env_logger::init(); + let matches = App::new("Create a new linux user") + .version("0.1.0") + .author("Franz Dietrich ") + .about("Create a linux user do not use this in production (yet)") + .arg( + Arg::new("username") + .short('n') + .long("username") + .value_name("USERNAME") + .about("the new users name") + .takes_value(true) + .required(true), + ) /* + .arg( + Arg::new("INPUT") + .about("Sets the input file to use") + .required(true) + .index(1), + ) + .arg( + Arg::new("v") + .short('v') + .multiple(true) + .about("Sets the level of verbosity"), + ) + .subcommand( + App::new("test") + .about("controls testing features") + .version("1.3") + .author("Someone E. ") + .arg( + Arg::new("debug") + .short('d') + .about("print debug information verbosely"), + ), + )*/ + .get_matches(); let mf = adduser::Files { passwd: Some(PathBuf::from("./passwd")), @@ -16,7 +56,7 @@ fn main() { let _user_res: Result<&adduser::User, adduser::UserLibError> = db.new_user( adduser::api::CreateUserArgs::builder() - .username("teste") + .username(matches.value_of("username").unwrap()) // .delete_home(adduser::api::DeleteHome::Delete) .build() .unwrap(), diff --git a/tests/create_user_test.rs b/tests/create_user_test.rs index b7701a3..1c23188 100644 --- a/tests/create_user_test.rs +++ b/tests/create_user_test.rs @@ -40,3 +40,42 @@ fn test_create_user_function() { } assert!(pf2.lines().last().unwrap().starts_with("test2")); } +#[test] +fn test_create_user_binary() { + use testfiles::Fixture; + + use adduser::api::UserDBWrite; + use adduser::api::UserRead; + use std::fs; + + let p = Fixture::copy("passwd"); + let s = Fixture::copy("shadow"); + let g = Fixture::copy("group"); + + let pf = fs::read_to_string(&p.path).unwrap(); + + let mf = adduser::Files { + passwd: Some(p.path.clone()), + shadow: Some(s.path), + group: Some(g.path), + }; + + let mut db = adduser::UserDBLocal::load_files(mf).unwrap(); + + let user_res: Result<&adduser::User, adduser::UserLibError> = db.new_user( + adduser::api::CreateUserArgs::builder() + .username("test2") + // .delete_home(adduser::api::DeleteHome::Delete) + .build() + .unwrap(), + ); + let pf2 = fs::read_to_string(&p.path).unwrap(); + assert_eq!(user_res.unwrap().get_username().unwrap(), "test2"); + let pflines = pf.lines(); + let pflines2 = pf2.lines(); + for (l1, l2) in pflines.zip(pflines2) { + dbg!(l1, l2); + assert!(l1 == l2); + } + assert!(pf2.lines().last().unwrap().starts_with("test2")); +}