#!/bin/sh

# Copyright (C) 2015-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:-.}"

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

ASN1DECODING="${ASN1DECODING:-../src/asn1Decoding$EXEEXT}"
ASN1PKIX="${ASN1PKIX:-pkix.asn}"
TMPFILEOUTPUT=decoding.out.$$.tmp
FGREP=${FGREP:-fgrep}

$VALGRIND "$ASN1DECODING" "$ASN1PKIX" "${srcdir}"/TestCertOctetOverflow.der PKIX1.Certificate
if test $? != 1;then
	echo "Decoding failed"
	exit 1
fi

# test decoding of certificate with invalid time field
$VALGRIND "$ASN1DECODING" -s "$ASN1PKIX" "${srcdir}"/cert-invalid-time.der PKIX1.Certificate
if test $? != 1;then
	echo "Decoding with invalid time succeeded when not expected"
	exit 1
fi

# test decoding of certificate with invalid time field
$VALGRIND "$ASN1DECODING" -t "$ASN1PKIX" "${srcdir}"/cert-invalid-time.der PKIX1.Certificate
if test $? != 0;then
	echo "Decoding with invalid time failed when not expected"
	exit 1
fi

# test attempting to decode an invalid type
$VALGRIND "$ASN1DECODING" -t "$ASN1PKIX" "${srcdir}"/cert-invalid-time.der PKIX1.CErtificate
if test $? != 1;then
	echo "Decoding with an invalid type succeeded when not expected"
	exit 1
fi

# test attempting to decode a missing ASN file
$VALGRIND "$ASN1DECODING" -t missing.asn "${srcdir}"/cert-invalid-time.der PKIX1.Certificate
if test $? != 1;then
	echo "Decoding with a missing asn file succeeded when not expected"
	exit 1
fi

# Test invalid command line option
$VALGRIND "$ASN1DECODING" --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 invalid command line option "c"
$VALGRIND "$ASN1DECODING" -c > $TMPFILEOUTPUT 2>&1
if test $? != 1; then
	echo "Invalid command line arg (2) - incorrect return code!"
	exit 1
fi

# Test debug command line option "d" and an empty (0 byte) der file
touch "${srcdir}"/blank.der
$VALGRIND "$ASN1DECODING" -d "$ASN1PKIX" "${srcdir}"/blank.der PKIX1.Certificate
if test $? != 1; then
	echo "Blank der - incorrect return code!"
	exit 1
fi
rm "${srcdir}"/blank.der

# Test debug command line option "d" and an empty (0 byte) asn file
touch blank.asn
$VALGRIND "$ASN1DECODING" -d blank.asn "${srcdir}"/cert-invalid-time.der PKIX1.Certificate
if test $? != 1; then
	echo "Blank asn - incorrect return code!"
	exit 1
fi
rm blank.asn

# test benchmark option
$VALGRIND "$ASN1DECODING" -b "$ASN1PKIX" "${srcdir}"/cert-invalid-time.der PKIX1.Certificate > $TMPFILEOUTPUT 2>&1
if test $? != 0;then
	echo "Benchmark decoding - incorrect return code!"
	exit 1
fi

if ! $FGREP -q "structures/sec" $TMPFILEOUTPUT; then
	echo "Benchmark decoding - incorrect command output!"
    exit 1
fi

# test missing DER file
$VALGRIND "$ASN1DECODING" -b "$ASN1PKIX" "${srcdir}"/missing.der PKIX1.Certificate
if test $? != 1;then
	echo "Missing DER file - incorrect return code!"
	exit 1
fi

# Test help command line option
$VALGRIND "$ASN1DECODING" --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 options
$VALGRIND "$ASN1DECODING" > $TMPFILEOUTPUT 2>&1
if test $? != 1; then
	echo "No 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 "No command line arg - incorrect command output!"
    exit 1
fi

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

# Test passing an invalid filename
$VALGRIND "$ASN1DECODING" this_isnt_a_real_file.asn > $TMPFILEOUTPUT 2>&1
if test $? = 0; then
	echo "Test invalid filename - incorrect return code!"
	exit 1
fi

# Look for actual version in the output
if ! $FGREP -q "input files or ASN.1 type name missing" $TMPFILEOUTPUT; then
	echo "Test invalid filename - incorrect command output!"
    exit 1
fi

rm -f ${TMPFILEOUTPUT}

exit 0
