The beakerlib package
The beakerlib is a testing framework written in bash. It helps you to write a test case in bash. It provides several features such as Journaling, Logging, Assertion, and so on.
For example, QA:Testcase ClamAV would be implemented like this.
#!/bin/bash
# Include the BeakerLib environment
. /usr/share/beakerlib/beakerlib.sh
# Packaget to be tested
PACKAGE="clamav"
# Set the full test name
TEST="QA:Testcase ClamAV"
rlJournalStart
rlPhaseStartTest
grep "^Example" /etc/freshclam.conf
if [ $? -eq 0 ]; then
rlRun "sed -i 's/Example/#Example/' /etc/freshclam.conf" 0 "Comment out Example line"
fi
rlPhaseEnd
rlPhaseStartTest
rlRun "freshclam" 0 "Run freshclam"
rlPhaseEnd
rlPhaseStartSetup
rlRun "curl -O http://www.eicar.org/download/eicar.com" 0 "Getting test virus"
rlPhaseEnd
rlPhaseStartTest
# if virus is found, it returns 1
rlRun "clamscan eicar.com" 1 "Scanning test virus"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "rm -f eicar.com" 0 "Remove test virus"
rlPhaseEnd
rlJournalEnd
# Print the test report
rlJournalPrintTextAs you can see there are three "rlPhaseStartSetup" block, and one "rlPhaseStartSetup" block, and one "rlPhaseStartCleanup" block. These block is the test steps in the wiki. It is no problems to only use rlPhaseStartSetup block instead of using setup or cleanup block but it seems not actual test case so I use setup and cleanup functions.
Anyway, running this script result like this.
[masami@rune:~/tests]$ sudo ./clamav-test.sh
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ClamAV update process started at Fri Dec 2 21:41:26 2011
main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
daily.cvd is up to date (version: 14063, sigs: 43201, f-level: 60, builder: arna
ud)
bytecode.cvd is up to date (version: 154, sigs: 38, f-level: 60, builder: edwin)
:: [ PASS ] :: Run freshclam
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 68 100 68 0 0 99 0 --:--:-- --:--:-- --:--:-- 221
:: [ PASS ] :: Getting test virus
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
eicar.com: Eicar-Test-Signature FOUND
----------- SCAN SUMMARY -----------
Known viruses: 1086364
Engine version: 0.97.3
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 2.287 sec (0 m 2 s)
:: [ PASS ] :: Scanning test virus
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ PASS ] :: Remove test virus
:: [21:41:31] :: JOURNAL XML: /tmp/beakerlib-iMxU4xi/journal.xml
:: [21:41:31] :: JOURNAL TXT: /tmp/beakerlib-iMxU4xi/journal.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: TEST PROTOCOL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test run ID : iMxU4xi
:: [ LOG ] :: Package : clamav
:: [ LOG ] :: Installed: : clamav-0.97.3-1600.fc16.x86_64
:: [ LOG ] :: Test started : 2011-12-02 21:41:26 JST
:: [ LOG ] :: Test finished : 2011-12-02 21:41:31 JST
:: [ LOG ] :: Test name : QA:Testcase ClamAV
:: [ LOG ] :: Distro: : Fedora release 16 (Verne)
:: [ LOG ] :: Hostname : rune
:: [ LOG ] :: Architecture : x86_64
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test description
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PURPOSE of /tests/clamav-test.sh
Description: Testing ClamAV package
Author: Masami Ichikawa <masami256@gmail.com>
This test script is implementing
https://fedoraproject.org/wiki/QA:Testcase_ClamAV test case using beakerlib.
It does all test steps in the test case.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Duration: 0s
:: [ LOG ] :: Assertions: 0 good, 0 bad
:: [ PASS ] :: RESULT: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ PASS ] :: Run freshclam
:: [ LOG ] :: Duration: 1s
:: [ LOG ] :: Assertions: 1 good, 0 bad
:: [ PASS ] :: RESULT: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ PASS ] :: Getting test virus
:: [ LOG ] :: Duration: 1s
:: [ LOG ] :: Assertions: 1 good, 0 bad
:: [ PASS ] :: RESULT: Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ PASS ] :: Scanning test virus
:: [ LOG ] :: Duration: 3s
:: [ LOG ] :: Assertions: 1 good, 0 bad
:: [ PASS ] :: RESULT: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ LOG ] :: Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [ PASS ] :: Remove test virus
:: [ LOG ] :: Duration: 0s
:: [ LOG ] :: Assertions: 1 good, 0 bad
:: [ PASS ] :: RESULT: Cleanup
:: [ LOG ] :: JOURNAL XML: /tmp/beakerlib-iMxU4xi/journal.xml
:: [ LOG ] :: JOURNAL TXT: /tmp/beakerlib-iMxU4xi/journal.txt
In this log, you can see "PURPOSE of /tests/clamav-test.sh" line. This values came from PURPOSE file which use to write test purpose. You don't have to have the file but it would be nice to have it to understand your test purpose.