#!/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
