#!/bin/sh

# Copyright (C) 2017-2025 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

srcdir="${srcdir:-.}"

ASAN_OPTIONS="detect_leaks=0:exitcode=6"
export ASAN_OPTIONS

if ! test -z "${VALGRIND}";then
VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=7"
fi

ASN1CODING="${ASN1CODING:-../src/asn1Coding$EXEEXT}"
ASN1PKIX="${ASN1PKIX:-pkix.asn}"
TMPFILE="asn1.$$.tmp"
TMPASSIGNFILE="assignments.$$.tmp"
TMPFILEOUTPUT=coding.out.$$.tmp
FGREP=${FGREP:-fgrep}

cat <<EOF >$TMPFILE
PKIX1 { }

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

Dss-Sig-Value ::= SEQUENCE {
     r       INTEGER,
     s       INTEGER
}

END
EOF

cat <<EOF >$TMPASSIGNFILE
dp PKIX1.Dss-Sig-Value

r 65
s 66
EOF

$VALGRIND "$ASN1CODING" -c $TMPFILE "${srcdir}"/invalid-assignments1.txt
if test $? != 1;then
	echo "Encoding failed (1)"
	exit 1
fi

$VALGRIND "$ASN1CODING" -c $TMPFILE "${srcdir}"/invalid-assignments2.txt
if test $? != 1;then
	echo "Encoding failed (2)"
	exit 1
fi

# Test invalid command line option
$VALGRIND "$ASN1CODING" --asdf > "$TMPFILEOUTPUT" 2>&1
if test $? != 1; then
	echo "Invalid command line arg - incorrect return code!"
	exit 1
fi

# Look for "--help" in the output, make grep quiet.
# "--" to avoid grep trying to interpret "--help" as an option.
if ! $FGREP -q -- "--help" "$TMPFILEOUTPUT"; then
	echo "Invalid command line arg - incorrect command output!"
    exit 1
fi

# Test help command line option
$VALGRIND "$ASN1CODING" --help > $TMPFILEOUTPUT 2>&1
if test $? != 0; then
	echo "Help command line arg - incorrect return code!"
	exit 1
fi

# Look for "--help" in the output, make grep quiet.
# "--" to avoid grep trying to interpret "--help" as an option.
if ! $FGREP -q -- "--help" $TMPFILEOUTPUT; then
	echo "Help command line arg - incorrect command output!"
    exit 1
fi

# Test no command line option
$VALGRIND "$ASN1CODING" > $TMPFILEOUTPUT 2>&1
if test $? != 1; then
	echo "Help command line arg - incorrect return code!"
	exit 1
fi

# Look for "--help" in the output, make grep quiet.
# "--" to avoid grep trying to interpret "--help" as an option.
if ! $FGREP -q -- "--help" $TMPFILEOUTPUT; then
	echo "Help command line arg - incorrect command output!"
    exit 1
fi

# Test missing asn file
$VALGRIND "$ASN1CODING" -c missingfile.asn "${srcdir}"/invalid-assignments1.txt
if test $? != 1;then
	echo "Encoding failed (1)"
	exit 1
fi

# Test version option
$VALGRIND "$ASN1CODING" --version
if test $? != 0; then
	echo "Version command line arg - incorrect return code!"
	exit 1
fi

# Test valid case
$VALGRIND "$ASN1CODING" $TMPFILE $TMPASSIGNFILE -o $TMPFILEOUTPUT
if test $? != 0;then
	echo "Encoding failed (2)"
	exit 1
fi

# Expected output for the above
# Viewed with xxd:
# 00000000: 3006 0201 4102 0142                      0...A..B
# md5sum of this should be b1cea8feb4e3d83c1bc2314151e9a0fe
md5sum $TMPFILEOUTPUT > md5sum.$TMPFILEOUTPUT
if  ! $FGREP -q "b1cea8feb4e3d83c1bc2314151e9a0fe" md5sum.$TMPFILEOUTPUT;then
	echo "Encoded output differs from expected (2)!"
	exit 1
fi

# Test valid case without specifying output file
$VALGRIND "$ASN1CODING" $TMPFILE $TMPASSIGNFILE
if test $? != 0;then
	echo "Encoding failed (3)"
	exit 1
fi

# Expected output for the above
# Viewed with xxd:
# 00000000: 3006 0201 4102 0142                      0...A..B
# md5sum of this should be b1cea8feb4e3d83c1bc2314151e9a0fe
AUTOOUTPUTFILE=$(echo $TMPASSIGNFILE | sed -e s/tmp/out/)

md5sum "$AUTOOUTPUTFILE" > md5sum.$TMPFILEOUTPUT
if  ! $FGREP -q "b1cea8feb4e3d83c1bc2314151e9a0fe" md5sum.$TMPFILEOUTPUT;then
	echo "Encoded output differs from expected (3)!"
	exit 1
fi

# Test valid case without specifying output file and assign file has slash
$VALGRIND "$ASN1CODING" $TMPFILE ./$TMPASSIGNFILE
if test $? != 0;then
	echo "Encoding failed (4)"
	exit 1
fi

# Expected output for the above
# Viewed with xxd:
# 00000000: 3006 0201 4102 0142                      0...A..B
# md5sum of this should be b1cea8feb4e3d83c1bc2314151e9a0fe
AUTOOUTPUTFILE=$(echo $TMPASSIGNFILE | sed -e s/tmp/out/)

md5sum "$AUTOOUTPUTFILE" > md5sum.$TMPFILEOUTPUT
if  ! $FGREP -q "b1cea8feb4e3d83c1bc2314151e9a0fe" md5sum.$TMPFILEOUTPUT;then
	echo "Encoded output differs from expected (4)!"
	exit 1
fi

# Test invalid OID value case (first digit of OID max is 2, we give 3)
$VALGRIND "$ASN1CODING" "${srcdir}"/"Test_oid_invalid.asn" "${srcdir}"/"invalid-oid-assignments.txt" -o $TMPFILEOUTPUT
if test $? != 1;then
	echo "Encoding failed (6)"
	exit 1
fi

# Test invalid case - try to set a (NULL)
sed -i -e 's/s 66/s \(NULL\)/' $TMPASSIGNFILE
$VALGRIND "$ASN1CODING" $TMPFILE $TMPASSIGNFILE
if test $? != 1;then
	echo "Encoding passed when not expected"
	exit 1
fi

# Test providing a missing assignment file
$VALGRIND "$ASN1CODING" $TMPFILE missing_assignment_file.txt
if test $? != 1;then
	echo "Encoding passed when not expected (2)"
	exit 1
fi

# Test an empty variable case identified by double single quotes
sed -i -e "s/s (NULL)/\'\' 66/" $TMPASSIGNFILE
$VALGRIND "$ASN1CODING" $TMPFILE $TMPASSIGNFILE
if test $? != 1;then
	echo "Encoding passed when not expected (3)"
	exit 1
fi

rm -f "$AUTOOUTPUTFILE"
rm -f md5sum.$TMPFILEOUTPUT
rm -f $TMPASSIGNFILE
rm -f $TMPFILEOUTPUT
rm -f $TMPFILE

exit 0
