Skip to content

Commit

Permalink
selftests: add media controller regression test scripts and document
Browse files Browse the repository at this point in the history
Add regression test scripts open_loop_test.sh, and bind_unbind_sample.sh.
Also add regression_test.txt that describes the regression test procedure.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
  • Loading branch information
Shuah Khan committed Jun 27, 2016
1 parent b96da0f commit fe8777a
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
12 changes: 12 additions & 0 deletions tools/testing/selftests/media_tests/bind_unbind_sample.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash
# Find device number in /sys/bus/usb/drivers/drivername
# Edit this file to update the driver numer and name
# Example test for uvcvideo driver
#i=0
# while :; do
# i=$((i+1))
# echo 1-5:1.0 > /sys/bus/usb/drivers/uvcvideo/unbind;
# echo 1-5:1.0 > /sys/bus/usb/drivers/uvcvideo/bind;
# clear
# echo $i
#done
10 changes: 10 additions & 0 deletions tools/testing/selftests/media_tests/open_loop_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
i=0
file=/dev/media$1
while :; do
echo $file
i=$((i+1))
R=$(./media_device_open -d $file);
# clear
echo -e "Loop $i\n$R"
done
43 changes: 43 additions & 0 deletions tools/testing/selftests/media_tests/regression_test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Testing for regressions in Media Controller API register, ioctl, syscall,
and unregister paths. There have a few problems that result in user-after
free on media_device, media_devnode, and cdev pointers when the driver is
unbound while ioctl is in progress.

Test Procedure:

Run bin/unbind loop while ioctls are in progress.
Run rmmod and modprobe.
Disconnect the device.

Setup:

Build media_device_test
cd tools/testing/selftests/media_tests
make

Regressions test for cdev user-after free error on /dev/mediaX when driver
is unbound:

Start media_device_test to regression test media devnode dynamic alloc
and cdev user-after-free fixes. This opens media dev files and sits in
a loop running media ioctl MEDIA_IOC_DEVICE_INFO command once every 10
seconds. The idea is when device file goes away, media devnode and cdev
should stick around until this test exits.

The test for a random number of iterations or until user kills it with a
sleep 10 in between the ioctl calls.

sudo ./media_device_test -d /dev/mediaX

Regression test for media_devnode unregister race with ioctl_syscall:

Start 6 open_loop_test.sh tests with different /dev/mediaX files. When
device file goes away after unbind, device file name changes. Start the
test with possible device names. If we start with /dev/media0 for example,
after unbind, /dev/media1 or /dev/media2 could get created. The idea is
keep ioctls going while bind/unbind runs.

Copy bind_unbind_sample.txt and make changes to specify the driver name
and number to run bind and unbind. Start the bind_unbind.sh

Run dmesg looking for any user-after free errors or mutex lock errors.

0 comments on commit fe8777a

Please sign in to comment.