#!/bin/sh

exec 2>&1
set -eux
export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
export PS4='+ [${LINENO:-?}] '

TESTNR="01"
BASEDIR="$(pwd)/debian/tests"
COMMONDIR="${BASEDIR}/common"

ACCTA="test${TESTNR}a"
ACCTB="test${TESTNR}b"
PASSWD="test${TESTNR}Terah9ien7e"

HOMEDIRA="/home/${ACCTA}"
HOMEDIRB="/home/${ACCTB}"

WORK="/tmp/sudo-autopkgtest-${TESTNR}"
mkdir -p "$WORK"
chmod 1777 "$WORK"

OUTA="$WORK/A_stdout"
ERRA="$WORK/A_stderr"
OUTB="$WORK/B_stdout"
ERRB="$WORK/B_stderr"
STDOUTSTDERR="$OUTA $OUTB $ERRA $ERRB"

. "${COMMONDIR}/sudo-autopkgtest-functions.sh"

# -------------------------
# test A.1: sudo member, correct password, repeated
# -------------------------
printf "=== TEST A.1: correct password ===\n"

reset_test "$ACCTA" "$HOMEDIRA" "$PASSWD" "sudo"

RET=0
su - "$ACCTA" -c "
  ASUSER_REPEAT=1 ASUSER_STDOUT=$OUTA ASUSER_STDERR=$ERRA \
  ${COMMONDIR}/asuser \"$PASSWD\" || RET=$?
"

assert_var "RET" "$RET" "0"
if [ "$(tr -d '\n' < "$OUTA")" != "00" ]; then
  echo "unexpected stdout"
  dump_state
  exit 1
fi

# -------------------------
# test A.2: wrong password
# -------------------------
printf "=== TEST A.2: wrong password ===\n"

reset_test "$ACCTA" "$HOMEDIRA" "$PASSWD" "sudo"

RET=0
su - "$ACCTA" -c "
  ASUSER_STDOUT=$OUTA ASUSER_STDERR=$ERRA \
  ${COMMONDIR}/asuser wrongpasswd
" || RET=$?

assert_var "RET" "$RET" "1"
assert_contains "$ERRA" \
  "[sudo] password for ${ACCTA}" \
  "Sorry, try again" \
  "sudo: 1 incorrect password attempt"

# -------------------------
# test B: not sudo member
# -------------------------
printf "=== TEST B: not sudo member ===\n"

reset_test "$ACCTB" "$HOMEDIRB" "$PASSWD" ""

RET=0
su - "$ACCTB" -c "
  ASUSER_TRACE=1 ASUSER_STDOUT=$OUTB ASUSER_STDERR=$ERRB \
  ${COMMONDIR}/asuser \"$PASSWD\"
" || RET=$?

assert_var "RET" "$RET" "1"
assert_contains "$ERRB" \
  "[sudo] password for ${ACCTB}" \
  "${ACCTB} is not in the sudoers file"

echo "test series successful"
exit 0
