libfprint/tests
Benjamin Berg 1b5dd0057f tests: Add device removal test
This tests all relevant scenarios of device removal, i.e.:
 * device is not open
 * device is currently closing
 * device is open and idle
 * device is currently opening
 * device is open and active

The test ensures that in all scenarios the following holds true:
 * device "removed" signal is only emitted after the action completes
 * context "device-removed" signal is only emitted after the device has
   been closed

Note that the "opening" case is special. Here we confirm that a success
from "open" will not be overriden by a FP_DEVICE_ERROR_REMOVED error, in
order to correctly signal that the internal device state is open and it
needs to be closed.
2020-11-23 17:47:03 +01:00
..
aes3500 tests: Add AES3500 test case 2020-09-29 10:35:48 +02:00
elan tests/elan: Fix typos 2020-04-14 13:51:02 +02:00
goodixmoc tests: add identify test for driver goodixmoc 2020-09-14 09:55:55 +00:00
synaptics synaptics: Report finger status to libfprint 2020-11-07 13:23:30 +00:00
vfs0050 tests: Add test for vfs0050 driver 2020-06-05 15:03:38 +00:00
vfs301 tests: Add a new test for vfs301 2020-11-05 15:55:09 +01:00
vfs5011 assembling: Use fixed point for image assembly 2019-11-28 20:41:45 +00:00
capture.py tests: Ensure objects are free'ed at the end of tests 2019-12-16 10:20:49 +00:00
meson.build tests: Add a new test for vfs301 2020-11-05 15:55:09 +01:00
README.md tests: Improve the instructions to create new umockdev captures 2020-06-05 15:03:38 +00:00
test-device-fake.c tests: An enrolled print needs to have a type set 2020-06-05 14:48:57 +00:00
test-device-fake.h test-fpi-device: Verify device action error operations 2020-01-17 19:44:52 +01:00
test-fp-context.c tests: Add device removal test 2020-11-23 17:47:03 +01:00
test-fp-device.c fp-device: Add finger-status property 2020-11-07 13:23:30 +00:00
test-fpi-assembling.c nbis: Apply patch to fix scan-build warnings 2020-05-07 14:22:02 +00:00
test-fpi-device.c device: Treat devices as closed even after a close failure 2020-11-23 17:47:03 +01:00
test-fpi-ssm.c Uncrustify with newer version 2020-06-02 11:56:19 +00:00
test-runner.sh tests: Add basic unit tests for fp-context 2019-12-14 17:20:45 +01:00
test-utils.c tests: Add fp-device basic unit tests 2019-12-14 17:20:45 +01:00
test-utils.h tests: Add fp-device basic unit tests 2019-12-14 17:20:45 +01:00
umockdev-test.py tests: Store temporary directory on failure 2020-11-05 15:52:54 +01:00
unittest_inspector.py tests: Make meson be aware of the single python unit tests 2020-02-10 11:41:40 +01:00
valgrind-python.supp tests: Add setup mode to run tests using valgrind 2019-11-27 21:40:43 +01:00
virtual-image.py fp-image-device: Report finger status changes to the device 2020-11-07 13:23:30 +00:00

umockdev Tests

umockdev tests use fingerprint devices mocked by umockdev toolchain.

This document describes how to create a 'capture' test: a test that captures a picture of a fingerprint from the device (mocked by umockdev) and compares it with the standard one.

Other kinds of umockdev tests could be created in a similar manner.

'Capture' Test Creation

A new 'capture' test is created by means of capture.py script:

  1. Create (if needed) a directory for the driver under tests directory:

    mkdir DRIVER

  2. Prepare your execution environment.

    In the next step a working and up to date libfprint is needed. This can be achieved by installing it into your system. Alternatively, you can set the following environment variables to run a local build:

    • export LD_PRELOAD=<meson-build-dir>/libfprint/libfprint-2.so
    • export GI_TYPELIB_PATH=<meson-build-dir>/libfprint

    Also, sometimes the driver must be adopted to the emulated environment (mainly if it uses random numbers, see synaptics.c for an example). Set the following environment variable to enable this adaptation:

    • export FP_DEVICE_EMULATION=1

    Run the next steps in the same terminal.

  3. Find the real USB fingerprint device with lsusb, e.g.:

    Bus 001 Device 005: ID 138a:0090 Validity Sensors, Inc. VFS7500 Touch Fingerprint Sensor

    The following USB device is used in the example above: /dev/bus/usb/001/005.

  4. Record information about this device:

    umockdev-record /dev/bus/usb/001/005 > DRIVER/device

  5. Record interaction of capture.py (or other test) with the device:

    umockdev-record -i /dev/bus/usb/001/005=DRIVER/capture.ioctl -- python3 ./capture.py DRIVER/capture.png

    Files capture.ioctl and capture.png will be created as the result of this command.

  6. Add driver's name to drivers_tests in the meson.build.

  7. Check whether everything works as expected.

Note. To avoid submitting a real fingerprint, the side of finger, arm, or anything else producing an image with the device can be used.

Possible Issues

umockdev-record aggressively groups URBs. In most cases, manual intervention is unfortunately required. Often, drivers do a chain of commands like: A then B each with a different reply. However, umockdev-record could create a file like this:

A
 reply 1
 reply 2
B
 reply 1
 reply 2

In that case, records must be re-ordered:

A
 reply 1
B
 reply 1
A
 reply 2
B
 reply 2

Other changes may be needed to get everything working. For example the elan driver relies on a timeout that is not reported correctly. In this case the driver works around it by interpreting the protocol error differently in the virtual environment (by means of FP_DEVICE_EMULATION environment variable).