• Ivan Orlov's avatar
    selftests: ALSA: Add test for the 'pcmtest' driver · 10b98a4d
    Ivan Orlov authored
    This test covers the new Virtual PCM Test Driver, including the capturing,
    playback and ioctl redefinition functionalities for both interleaved and
    non-interleaved access modes. This test is also helpful as an usage example
    of the 'pcmtest' driver.
    
    We have a lot of different virtual media drivers, which can be used for
    testing of the userspace applications and media subsystem middle layer.
    However, all of them are aimed at testing the video functionality and
    simulating the video devices. For audio devices we have only snd-dummy
    module, which is good in simulating the correct behavior of an ALSA device.
    I decided to write a tool, which would help to test the userspace ALSA
    programs (and the PCM middle layer as well) under unusual circumstances
    to figure out how they would behave. So I came up with this Virtual PCM
    Test Driver.
    
    This new Virtual PCM Test Driver has several features which can be useful
    during the userspace ALSA applications testing/fuzzing, or testing/fuzzing
    of the PCM middle layer. Not all of them can be implemented using the
    existing virtual drivers (like dummy or loopback). Here is what can this
    driver do:
    
    - Simulate both capture and playback processes
    - Generate random or pattern-based capture data
    - Check the playback stream for containing the looped pattern
    - Inject delays into the playback and capturing processes
    - Inject errors during the PCM callbacks
    
    Also, this driver can check the playback stream for containing the
    predefined pattern, which is used in the corresponding selftest to check
    the PCM middle layer data transferring functionality. Additionally, this
    driver redefines the default RESET ioctl, and the selftest covers this PCM
    API functionality as well.
    
    The driver supports both interleaved and non-interleaved access modes, and
    have separate pattern buffers for each channel. The driver supports up to
    4 channels and up to 8 substreams.
    Signed-off-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
    Acked-by: default avatarJaroslav Kysela <perex@perex.cz>
    Link: https://lore.kernel.org/r/20230606193254.20791-3-ivan.orlov0322@gmail.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    10b98a4d
test-pcmtest-driver.c 9.35 KB