expect alsa-utils python3 python3-construct python3-graphviz
sudo apt install expect alsa-utils python3 python3-construct python3-graphviz
sudo adm audio
You can use this script to ensure the sof-test environment is set up properly
To run a test, call the scripts directly
-h
will show the usage for the test
Example:
~/sof-test/test-case$ SOF_ALSA_OPTS='-q --fatal-errors' ./check-playback.sh -h
Usage: ./check-playback.sh [OPTION]
-F | --fmts
Iterate all supported formats
Default Value: Off
-d parameter | --duration parameter
aplay duration in second
Default Value: 10
...
~/sof-test/test-case$ ./check-playback.sh -d 4
2020-03-19 22:13:32 UTC [INFO] no source file, use /dev/zero as dummy playback source
2020-03-19 22:13:32 UTC [INFO] ./check-playback.sh using /lib/firmware/intel/sof-tplg/sof-apl-pcm512x.tplg as target TPLG to run the test case
2020-03-19 22:13:32 UTC [INFO] Catch block option from TPLG_BLOCK_LST will block 'pcm=HDA Digital,Media Playback,DMIC16k' for /lib/firmware/intel/sof-tplg/sof-apl-pcm512x.tplg
2020-03-19 22:13:32 UTC [INFO] Run command: 'sof-tplgreader.py /lib/firmware/intel/sof-tplg/sof-apl-pcm512x.tplg -f type:playback,both -b pcm:'HDA Digital,Media Playback,DMIC16k' -s 0 -e' to get BASH Array
2020-03-19 22:13:32 UTC [INFO] Testing: (Round: 1/1) (PCM: Port5 [hw:0,0]<both>) (Loop: 1/3)
2020-03-19 22:13:32 UTC [COMMAND] aplay -q --fatal-errors -Dhw:0,0 -r 48000 -c 2 -f S16_LE -d 4 /dev/zero -v -q
...
Some tests support SOF_ALSA_OPTS, SOF_APLAY_OPTS and SOF_ARECORD_OPTS, work in progress. Where supported, optional parameters in SOF_APLAY_OPTS and SOF_ARECORD_OPTS are passed to all aplay and arecord invocations. SOF_ALSA_OPTS parameters are passed to both aplay and arecord. Warning these environments variables do NOT support parameters with whitespace or globbing characters, in other words this does NOT work:
SOF_ALSA_OPTS='--foo --bar="spaces do not work"'
For the up-to-date list of tests supporting these environment variables run:
git grep -l 'a[[:alnum:]]*_opts'
To use tool script, call the scripts directly
-h
will show the usage for the tool
Example:
$ ./tools/sof-dump-status.py -p
apl
exit code | display | description |
---|---|---|
0 | PASS | Test has passed |
1 | FAIL | Test has failed |
2 | N/A | Test is not applicable |
* | unknown exit status |
-
case-lib
Test case helper functions library -
test-case
The test cases -
tools
Script helper tools for the test cases.
Can also be used directly via the command line
Filenames should have the "sof-" prefix -
logs
Records in the test-case log folder.
It will be auto created and follow the test name
Ordered by time tag, the last link will link to the last run result
-
sof-boot-once.sh
This script writes to rc.local, which is loaded and read after reboot.
After rc.local command is run, the command will be removed.
example: sof-boot-once.sh reboot
Effect: when system boots up it will auto reboot again -
sof-combinatoric.py
Used to compute permutations or combinations of the various pipelines avilable during tests if multiple are needed at once. -
sof-disk-usage.sh
Used to ensure we have enough disk space to collect logs and avoid system problems. -
sof-dump-status.py
Dump the sound card status -
sof-get-default-tplg.sh
Load the tplg file name from system log which is recorded from system bootup -
sof-get-kernel-line.sh
Print all kernel versions and their line numbers from /var/log/kern.log, with the most recent <first/last> -
sof-kernel-dump.sh
Catch all kernel information after system boot up from /var/log/kern.log file -
sof-kernel-log-check.sh
Check dmesg for errors and ensure that any found are real errors -
sof-process-kill.sh
Kills aplay or arecord processes -
sof-process-state.sh
Shows the current state of a given process -
sof-tplgreader.py
tplgtool.py wrapper, it reads info from tplgtool.py to analyze topologies. -
tplgtool2.py
Dumps info from tplg binary file. SOF CI uses this to generate a topology graph. -
tplgtool.py
Dumps info from tplg binary file. sof-tplgreader.py still use this but new features will go to tplgtool2.py. When all functions are migrated to tplgtool2.py it will be deprecated.
sof-test uses sudo a lot which creates a lot of noise in journalctl
output which is especially a problem when testing. To turn off that
noise first run sudo visudo
and add the following line:
Defaults:USER_LOGIN,root !log_allowed
For more see man sudoers
.
Then add the following line at the top of /etc/pam.d/sudo
# Be "done" when the pam_succeed_if.so arguments are matched; don't
# process other lines. If not matched then "ignore" this line.
# Also support "double sudo" :-(
session [success=done default=ignore] pam_succeed_if.so quiet uid = 0 ruser = root
session [success=done default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = USER_LOGIN
Note PAM security configuration is complex and
distribution-specific. This was tested only on Ubuntu 20.04. See man pam.d
or one of the PAM guides available on the Internet. Be careful
not to make your system vulnerable.
On systems using auditd, sof-test will also generate a huge amount of
log. If you need to keep audit
, check man auditctl
to find how to
filter out sudo noise.