#!/bin/bash

# Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com>
# Copyright 2013 Robin Mittal <robinmittal.it@gmail.com>

[ -f testing.sh ] && . testing.sh

if [ "$(id -u)" -ne 0 ]
then
  echo "$SHOWSKIP: useradd (not root)"
  continue 2>/dev/null
  exit
fi

# Redirecting all output to /dev/null for grep, adduser and deluser
arg="&>/dev/null"

#testing "name" "command" "result" "infile" "stdin"

# Default password for adding user is: 'password'
pass=`echo -ne 'password\npassword\n'`

user="toyTestUser"
testing "(text)" "useradd $user $arg || 
   grep '^$user:' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

user="toy1Test2User3"
testing "(alphanumeric)" "useradd $user $arg ||
   grep '^$user:' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

user="987654321"
testing "(numeric)" "useradd $user $arg ||
   grep '^$user:' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

user="toy.1Test-2User_3"
testing "(with ./-/_)" "useradd $user $arg ||
   grep '^$user:' /etc/passwd $arg && [ -d /home/$user ] && 
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

# 70 characters long string; hereafter, we will use it as per our need.
user="abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123456789"
testing "(long string)" "useradd $user $arg ||
   grep '^$user:' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

user="toyTestUser"
testing "dir" "useradd -h $PWD/dir $user $arg ||
   grep '^$user:.*dir' /etc/passwd $arg && [ -d $PWD/dir ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg
rm -rf $PWD/dir

gecos="aaa,bbb,ccc,ddd,eee"
testing "gecos" "useradd -g '$gecos' $user $arg ||
   grep '^$user:.*$gecos' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

shl="/bin/sh"
testing "shell" "useradd -s $shl $user $arg ||
   grep '^$user:.*$shl$' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

g_name="root"
g_id=`grep $g_name':.*:.*' /etc/group | cut -d : -f 3`
testing "group" "useradd -G $g_name $user $arg ||
   grep '^$user:.*:.*:$g_id:.*' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

testing "(system user)" "useradd -S $user $arg ||
   grep '^$user:.*:.*:.*' /etc/passwd $arg && [ ! -e /home/$user ] && 
   echo 'yes'" "yes\n" "" "$pass"   
userdel -r $user $arg

testing "-D" "useradd -D $user $arg ||
   grep '^$user:.*:.*:.*' /etc/passwd $arg && [ -d /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

testing "-H" "useradd -H $user $arg ||
   grep '^$user:.*:.*:.*' /etc/passwd $arg && [ ! -e /home/$user ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

testing "dir and -H" "useradd -H -h $PWD/dir $user $arg ||
   grep '^$user:.*dir' /etc/passwd $arg && [ ! -e $PWD/dir ] &&
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

testing "-u" "useradd -u 49999 $user $arg ||
   grep '^$user:x:49999:.*' /etc/passwd $arg && [ -d /home/$user ] && 
   echo 'yes'" "yes\n" "" "$pass"
userdel -r $user $arg

