fipscheck/tests/fipshmac/runtest.sh
2023-07-10 13:44:28 +02:00

130 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /CoreOS/fipscheck/Sanity/fipshmac
# Description: Test fipshmac helper tool.
# Author: Ondrej Moris <omoris@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2014 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# 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, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE="fipscheck"
rlJournalStart
rlPhaseStartSetup
rlCheckRpm "fipscheck" || rlDie
testdir=$(mktemp -d)
testpath=$(mktemp)
testfile=$(basename $testpath)
mountdir=$(mktemp -d)
rlRun "useradd testuser" 0
rlRun "mount -t tmpfs -o size=512k tmpfs $mountdir" 0
rlRun "dd if=/dev/urandom bs=512k count=1 of=${mountdir}/blob" 0
rlPhaseEnd
rlPhaseStartTest "HMAC generation"
# Create HMAC.
rlRun "echo 'abc' > $testpath" 0
rlRun "fipshmac $testpath" 0
# Create HMAC in specified directory.
rlRun "fipshmac -d $testdir $testpath" 0
# Create HMAC with a specific suffix.
rlRun "fipshmac -s .suffix $testpath" 0
# Check that HMAC files exist.
rlAssertExists "/tmp/.${testfile}.hmac"
rlAssertExists "/tmp/.${testfile}.suffix"
rlAssertExists "$testdir/${testfile}.hmac"
# Verify HMAC.
rlRun "fipscheck $testpath" 0
# Check that HMAC file is not empty.
rlRun "test -s /tmp/.${testfile}.hmac" 0
# Check that HMAC file does not change when recomputed.
old=$(cat /tmp/.${testfile}.hmac)
rlRun "fipshmac $testpath" 0
new=$(cat /tmp/.${testfile}.hmac)
rlAssertEquals "Hashes should not differ" "$old" "$new"
# Check that HMAC file changes when recomputed and file changed.
old=$(cat /tmp/.${testfile}.hmac)
rlRun "echo 'efg' >> $testpath" 0
rlRun "fipshmac $testpath" 0
new=$(cat ./.test.hmac)
rlAssertNotEquals "Hashes should differ" "$old" "$new"
rlPhaseEnd
rlPhaseStartTest "Return Codes"
# 0: OK.
rlLog "0: OK"
rlRun "fipshmac $testpath" 0
# 2: Missing filename.
rlLog "2: Missing filename"
rlRun "fipshmac" 2
# 3: Cannot open the checksum file for writing.
rlLog "3: Cannot open the checksum file for writing"
rlRun "chmod a-r $testpath" 0
rlRun "runuser -u testuser fipshmac $testpath" 3
rlRun "chmod a+r $testpath" 0
# 4: Cannot read the file to be checksummed.
rlLog "4: Cannot read the file to be checksummed"
rlRun "fipshmac missing" 4
# 5: Memory allocation error
# N/A
# 6,7: Cannot write to the checksum file.
rlLog "6,7: Cannot write to the checksum file"
rlRun "fipshmac -d $mountdir $testpath" 6,7
rlPhaseEnd
rlPhaseStartCleanup
rlRun "rm -rf $testpath .${testfile}.hmac $testdir" 0
rlRun "userdel testuser" 0
rlRun "umount $mountdir" 0
rlPhaseEnd
rlJournalPrintText
rlJournalEnd