How to run UTIL & MDB tests on VM environment
1. Setup VM with:
CPU - 4
Memory - 8GB
Hard disk - 100GB
Have to use DEBUG build, where we have debug macro
Setup process is described in this instruction.
Note : If you already created dilos_BASE BE according the instruction, and there is no any new tested stable version, just execute the following command:
beadm activate dilos_BASE
In other case if you have already the dilos_ISO_orig BE - make the command:
beadm activate dilos_ISO_orig
Then reboot and start the instruction from the section Step 6. Prepare VM for Tests Running:
reboot
If you have no one of these 2 BEs then start the instruction from the beginning.
Note : Create ztest user if you forgot to do it according the instruction:
sudo useradd -m -d /var/ztest -g staff -s /bin/bash ztest
sudo passwd ztest
echo "ztest ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ztest
2. Install packages for UTIL & MDB tests:
Note : If you already did it on the previous step when preparing VM to run, then you can skip this step and go to the next one.
sudo apt update
reboot
sudo apt install system-test-utiltest testrunner python3 build-essential libjedec1 libdemangle-sys1 diagnostic-pci bc
3. Login by user ztest and run tests:
/opt/util-tests/bin/utiltest
Wait for about several seconds and found full logs at:
/var/tmp/test_results/<ISO TIME>
Note : You can run the test using a shell script. It can be created with any text editor or by executing the following command:
ztest@zone:~# cat > test-script.sh <<EOT
#!/bin/bash
ipa=\$(sudo ifconfig | grep -A 1 vmxnet3s0 | sed '1d; s/^[ \\t]*inet[ \\t]*//; s/[ \\t]*netmask.*\$//')
if [ -n "\$1" ]; then
CLOG="/var/tmp/util-stability.\$(date +%F-%T).txt"
echo "================== Stability util & mdb tests \$(date +%F-%T) ==================" > \${CLOG}
uname -a >> \${CLOG}
echo "IP Address : \${ipa}" >> \${CLOG}
for (( i=1; i<=\$1; i++ ))
do
echo "--------------------------------------- Pass \${i} ------------------------------------" 2>&1 | /usr/bin/tee -a \${CLOG}
START_TIME=\$(date +%s)
LOG="/var/tmp/util-test.\$i.txt"
uname -a > \${LOG}
echo "IP Address : \${ipa}" >> \${LOG}
echo "---------------------------------------- UTILS --------------------------------------" 2>&1 | /usr/bin/tee -a \${LOG}
/opt/util-tests/bin/utiltest 2>&1 | /usr/bin/tee -a \${LOG}
percent="\$(grep 'Percent passed:' \${LOG} | sed 's/Percent passed:[ \\t]*//; s/[ \\t]*\$//')"
echo " UTILS percent passed: \${percent}" >> \${CLOG}
folder="\$(grep 'Log directory:' \${LOG} | sed 's/Log directory:[ \\t]*//; s/[ \\t]*\$//')"
if [ "\${percent}" != "100.0%" ]; then
END_TIME=\$(date +%s)
delta=\$((\$END_TIME - \$START_TIME))
sec=\$((\$delta % 60))
let "amin = \$delta / 60"
let "hour = \$amin / 60"
min=\$((\$amin%60))
printf " Running time: %02d:%02d:%02d\\n" $hour $min $sec >> \${CLOG}
echo " PASS \${i} IS FAILED! (See \${LOG})" >> \${CLOG}
echo "Fault on \${i} pass! Just \${percent} are successfull. You can find logs in \${folder}." 2>&1 | /usr/bin/tee -a \${LOG}
exit 1
fi
sudo rm -r -f \${folder}
echo "---------------------------------------- MDB --------------------------------------" 2>&1 | /usr/bin/tee -a \${LOG}
/opt/util-tests/bin/utiltest -c /opt/util-tests/runfiles/mdb.run > tmp.log
folder="\$(grep 'Log directory:' tmp.log | sed 's/Log directory:[ \\t]*//; s/[ \\t]*\$//')"
sudo rm -f tmp.log
LOG1="\${folder}/log"
rt=\$(sed '/^Test: /!d;s/ \\[[A-Z]*\\]//;s/^.*\\[//;s/\\].*//' \${LOG1})
pass=\$(sed -n '/ Tests passed:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*//;s/[ \\t]*\$//')
total=\$(sed -n '/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests ran:[ \\t]*//;s/[ \\t]*\$//')
percent=\$(echo "scale=1; \${pass}*100.0/\${total}" | bc)
folder=\$(sed -n '/ output directory:/p' \${LOG1} | sed 's/^.* output directory:[ \\t]*//;s/[ \\t]*\$//')
echo " MDB percent passed: \${percent}" >> \${CLOG}
END_TIME=\$(date +%s)
delta=\$((\$END_TIME - \$START_TIME))
sec=\$((\$delta % 60))
let "amin = \$delta / 60"
let "hour = \$amin / 60"
min=\$((\$amin%60))
printf " Running time: %02d:%02d:%02d\\n" \$hour \$min \$sec >> \${CLOG}
cat \${LOG1} 2>&1 | /usr/bin/tee -a \${LOG}
if [ "\${percent}" == "100.0" ]; then
sudo rm -f \${LOG}
sudo rm -r -f \${folder}
else
echo " PASS \${i} IS FAILED! (See \${LOG})" >> \${CLOG}
echo "Fault on \${i} pass! Just \${percent}% are successfull. You can find logs in \${folder}." 2>&1 | /usr/bin/tee -a \${LOG}
exit 1
fi
done
else
LOG="/var/tmp/util-test.\$(date +%F-%T).txt"
uname -a > u.tmp
echo "IP Address : \${ipa}" >> u.tmp
echo "" >> u.tmp
echo "---------------------------------------- UTILS --------------------------------------" 2>&1 | /usr/bin/tee -a \${LOG}
/opt/util-tests/bin/utiltest 2>&1 | /usr/bin/tee -a \${LOG}
fail=\$(sed -n '/^FAIL[ \\t]*/p' \${LOG} | sed 's/^FAIL[ \\t]*//; s/[ \\t]*\$//')
pass=\$(sed -n '/^PASS[ \\t]*/p' \${LOG} | sed 's/^PASS[ \\t]*//; s/[ \\t]*\$//')
utotal=0
if [ "\${pass}" != "" ]; then
utotal=\$((\${utotal} + \${pass}))
fi
if [ "\${fail}" != "" ]; then
utotal=\$((\${utotal} + \${fail}))
fi
echo "---------------------------------------- MDB --------------------------------------" 2>&1 | /usr/bin/tee -a \${LOG}
/opt/util-tests/bin/utiltest -c /opt/util-tests/runfiles/mdb.run > tmp.log
folder="\$(grep 'Log directory:' tmp.log | sed 's/Log directory:[ \\t]*//; s/[ \\t]*\$//')"
sudo rm -f tmp.log
LOG1="\${folder}/log"
tm=\$(sed '/^Test: /!d;s/ \\[[A-Z]*\\]//;s/^.*\\[//;s/\\].*//' \${LOG1})
mtotal=\$(sed -n '/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests ran:[ \\t]*//;s/[ \\t]*\$//')
total=\$((\${utotal} + \${mtotal}))
echo "TOTAL TESTS: \$total" >> u.tmp
echo "---------------------------------------------------------" >> u.tmp
echo "UTIL TESTS: \$utotal" >> u.tmp
sed -n '/Results Summary/,/Log directory:/p' \${LOG} >> u.tmp
echo "---------------------------------------------------------" >> u.tmp
echo "MDB TESTS: \$mtotal" >> u.tmp
pass=\$(sed -n '/ Tests passed:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*//;s/[ \\t]*\$//')
result=\$(echo "scale=1; \${pass}*100.0/\${mtotal}" | bc)
folder=\$(sed -n '/ output directory:/p' \${LOG1} | sed 's/^.* output directory:[ \\t]*//;s/[ \\t]*\$//')
sed -n '/ Tests passed:/,/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*/PASS \\t/;s/^.*Tests failed:[ \\t]*/FAIL \\t/;s/^.*Tests ran:[ \\t]*/TOTAL\\t/' >> u.tmp
echo "" >> u.tmp
echo "Running Time: 00:\${tm}" >> u.tmp
echo "Percent passed: \${result}" >> u.tmp
echo "Log directory: \${folder}" >> u.tmp
echo "---------------------------------------------------------" >> u.tmp
echo "" >> u.tmp
cat \${LOG} >> u.tmp
cat \${LOG1} 2>&1 | /usr/bin/tee -a u.tmp
mv -f u.tmp \${LOG}
fi
EOT
ztest@zone:~# sed -i '/./!d' test-script.sh && chmod 777 test-script.sh
You can run the test script in a single mode, i.e. all tests will be executed once (./test-script.sh
- without parameters). After running of this script you will find the log in the /var/tmp/util-test.<ISO TIME>.txt and /var/tmp/mdb-test.<ISO TIME>.txt files. It will contain information in the format that is used in Test Results.
4. To run only MDB test run:
/opt/util-tests/bin/utiltest -c /opt/util-tests/runfiles/mdb.run
Full logs are in /var/tmp/test_results/<ISO TIME>.
Note : You can run the test using a shell script. It can be created with any text editor or by executing the following command:
ztest@zone:~# cat > test-script-mdb.sh <<EOT
#!/bin/bash
ipa=\$(sudo ifconfig | grep -A 1 vmxnet3s0 | sed '1d; s/^[ \\t]*inet[ \\t]*//; s/[ \\t]*netmask.*\$//')
if [ -n "\$1" ]; then
CLOG="/var/tmp/mdb-stability.\$(date +%F-%T).txt"
echo "=== Stability mdb tests \$(date +%F-%T) ===" > \${CLOG}
uname -a >> \${CLOG}
echo "IP Address : \${ipa}" >> \${CLOG}
for (( i=1; i<=\$1; i++ ))
do
echo "------------------ Pass \${i} ---------------------" 2>&1 | /usr/bin/tee -a \${CLOG}
LOG="/var/tmp/mdb-test.\$i.txt"
uname -a > \${LOG}
echo "IP Address : \${ipa}" >> \${LOG}
/opt/util-tests/bin/utiltest -c /opt/util-tests/runfiles/mdb.run > tmp.log
folder="\$(grep 'Log directory:' tmp.log | sed 's/Log directory:[ \\t]*//; s/[ \\t]*\$//')"
sudo rm -f tmp.log
LOG1="\${folder}/log"
rt=\$(sed '/^Test: /!d;s/ \\[[A-Z]*\]//;s/^.*\\[//;s/\\].*//' \${LOG1})
pass=\$(sed -n '/ Tests passed:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*//;s/[ \\t]*\$//')
total=$(sed -n '/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests ran:[ \t]*//;s/[ \t]*$//')
percent=\$(echo "scale=1; \${pass}*100.0/\${total}" | bc)
folder=\$(sed -n '/ output directory:/p' \${LOG1} | sed 's/^.* output directory:[ \\t]*//;s/[ \\t]*\$//')
echo " Percent passed: \${percent}" >> \${CLOG}
echo " Running Time: \${rt}" >> \${CLOG}
sed -n '/ Tests passed:/,/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*/PASS \\t/;s/^.*Tests failed:[ \\t]*/FAIL \\t/;s/^.*Tests ran:[ \\t]*/TOTAL\\t/' >> u.tmp
echo "---------------------------------------------------------" >> u.tmp
echo "" >> u.tmp
cat \${LOG1} 2>&1 | /usr/bin/tee -a u.tmp
mv -f u.tmp \${LOG}
if [ "\${percent}" == "100.0" ]; then
sudo rm -f \${LOG}
sudo rm -r -f \${folder}
else
echo " PASS \${i} IS FAILED! (See \${LOG})" >> \${CLOG}
echo "Fault on \${i} pass! Just \${percent}% are successfull. You can find logs in \${folder}." 2>&1 | /usr/bin/tee -a \${LOG}
exit 1
fi
done
else
LOG="/var/tmp/mdb-test.\$(date +%F-%T).txt"
uname -a > u.tmp
echo "IP Address : \${ipa}" >> u.tmp
echo "" >> u.tmp
/opt/util-tests/bin/utiltest -c /opt/util-tests/runfiles/mdb.run > tmp.log
folder="\$(grep 'Log directory:' tmp.log | sed 's/Log directory:[ \\t]*//; s/[ \\t]*\$//')"
sudo rm -f tmp.log
LOG1="\${folder}/log"
tm=\$(sed '/^Test: /!d;s/ \\[[A-Z]*\\]//;s/^.*\\[//;s/\\].*//' \${LOG1})
pass=\$(sed -n '/ Tests passed:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*//;s/[ \\t]*\$//')
total=\$(sed -n '/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests ran:[ \\t]*//;s/[ \\t]*\$//')
echo "TOTAL TESTS: \$total" >> u.tmp
result=\$(echo "scale=1; \${pass}*100.0/\${total}" | bc)
folder=\$(sed -n '/ output directory:/p' \${LOG1} | sed 's/^.* output directory:[ \\t]*//;s/[ \\t]*\$//')
sed -n '/ Tests passed:/,/ Tests ran:/p' \${LOG1} | sed 's/^.*Tests passed:[ \\t]*/PASS \\t/;s/^.*Tests failed:[ \\t]*/FAIL \\t/;s/^.*Tests ran:[ \\t]*/TOTAL\\t/' >> u.tmp
echo "" >> u.tmp
echo "Running Time: 00:\${tm}" >> u.tmp
echo "Percent passed: \${result}" >> u.tmp
echo "Log directory: \${folder}" >> u.tmp
echo "---------------------------------------------------------" >> u.tmp
echo "" >> u.tmp
cat \${LOG1} 2>&1 | /usr/bin/tee -a u.tmp
mv -f u.tmp \${LOG}
fi
EOT
ztest@zone:~# sed -i '/./!d' test-script-mdb.sh && chmod 777 test-script-mdb.sh
After running of this script you will find the log in the /var/tmp/mdb-test.<ISO TIME>.txt or in the /var/tmp/mdb-stability.<ISO TIME>.txt and /var/tmp/mdb-test.<N>.txt files respectively.