102 lines
2.9 KiB
Bash
Executable file
102 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Distinguishing between failures and errors isn't possible in all cases, as
|
|
# RPMbuild uses exit code 1 for more than one kind of error, but this script
|
|
# still tries to make the distinction where possible.
|
|
|
|
# Try to run the prep scriptlet of the spec found in the current directory.
|
|
# (There is one for each testcase, each in its own directory.) Save a copy of
|
|
# the output for inspection.
|
|
rpmbuild --define "_sourcedir ${PWD}" -bp *.spec 2>&1 | tee rpmbuild_output
|
|
result=${PIPESTATUS[0]} tee_result=${PIPESTATUS[1]}
|
|
if test "${test_kind}" = negative ; then
|
|
# This is a negative test. Swap the success and failure codes. Leave any
|
|
# other value as an error code.
|
|
case ${result} in
|
|
(0)
|
|
echo 'RPMbuild succeeded when it should have failed.'
|
|
exit 1
|
|
;;
|
|
(1)
|
|
echo 'RPMbuild failed as it should.'
|
|
result=0
|
|
;;
|
|
esac
|
|
fi
|
|
if test ${result} -ne 0 ; then
|
|
exit ${result}
|
|
fi
|
|
|
|
# Any problem with tee is an error in the test.
|
|
case ${tee_result} in
|
|
(0)
|
|
# OK
|
|
;;
|
|
(1)
|
|
exit 2 # Return error, not failure.
|
|
;;
|
|
(*)
|
|
exit ${tee_result}
|
|
;;
|
|
esac
|
|
|
|
# Check whether commands after the signature verification were executed.
|
|
grep --quiet --fixed-strings 'Execution of prep continues.' rpmbuild_output
|
|
result=$?
|
|
case ${result} in
|
|
(0)
|
|
if test "${test_kind}" != negative ; then
|
|
echo 'Execution continued correctly.'
|
|
else
|
|
echo 'Execution continued when it should have stopped.'
|
|
exit 1
|
|
fi
|
|
;;
|
|
(1)
|
|
if test "${test_kind}" != negative ; then
|
|
echo 'Execution stopped when it should have continued.'
|
|
exit 1
|
|
else
|
|
echo 'Execution stopped correctly.'
|
|
fi
|
|
;;
|
|
(*)
|
|
exit ${result} # error in the test
|
|
;;
|
|
esac
|
|
|
|
if test -n "${required_output}" ; then
|
|
# Look for output that must be present.
|
|
grep --quiet --fixed-strings --regexp="${required_output}" rpmbuild_output
|
|
result=$?
|
|
case ${result} in
|
|
(0)
|
|
echo "The text \"${required_output}\" was correctly present."
|
|
;;
|
|
(1)
|
|
echo "The text \"${required_output}\" didn't appear where it should."
|
|
exit 1
|
|
;;
|
|
(*)
|
|
exit ${result} # error in the test
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test -n "${forbidden_output}" ; then
|
|
# Look for output that must be absent.
|
|
grep --quiet --fixed-strings --regexp="${forbidden_output}" rpmbuild_output
|
|
result=$?
|
|
case ${result} in
|
|
(0)
|
|
echo "The text \"${forbidden_output}\" appeared where it shouldn't."
|
|
exit 1
|
|
;;
|
|
(1)
|
|
echo "The text \"${forbidden_output}\" was correctly absent."
|
|
;;
|
|
(*)
|
|
exit ${result} # error in the test
|
|
;;
|
|
esac
|
|
fi
|