mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
tests: Add umockdev based testing
Initially only the vfs5011 driver is tested. Please note that these tests will be unreliable before umockdev 0.13.2. See also https://github.com/martinpitt/umockdev/pull/92
This commit is contained in:
65
tests/umockdev-test.py
Executable file
65
tests/umockdev-test.py
Executable file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import os
|
||||
import os.path
|
||||
import shutil
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print("You need to specify exactly one argument, the directory with test data")
|
||||
|
||||
edir = os.path.dirname(sys.argv[0])
|
||||
ddir = sys.argv[1]
|
||||
|
||||
tmpdir = tempfile.mkdtemp(prefix='libfprint-umockdev-test-')
|
||||
|
||||
assert os.path.isdir(ddir)
|
||||
assert os.path.isfile(os.path.join(ddir, "device"))
|
||||
|
||||
def cmp_pngs(png_a, png_b):
|
||||
print("Comparing PNGs %s and %s" % (png_a, png_b))
|
||||
import cairo
|
||||
img_a = cairo.ImageSurface.create_from_png(png_a)
|
||||
img_b = cairo.ImageSurface.create_from_png(png_b)
|
||||
|
||||
assert img_a.get_format() == cairo.FORMAT_RGB24
|
||||
assert img_b.get_format() == cairo.FORMAT_RGB24
|
||||
assert img_a.get_width() == img_b.get_width()
|
||||
assert img_a.get_height() == img_b.get_height()
|
||||
assert img_a.get_stride () == img_b.get_stride()
|
||||
|
||||
data_a = img_a.get_data()
|
||||
data_b = img_b.get_data()
|
||||
stride = img_a.get_stride()
|
||||
|
||||
for x in range(img_a.get_width()):
|
||||
for y in range(img_a.get_height()):
|
||||
assert(data_a[y * stride + x * 4] == data_b[y * stride + x * 4])
|
||||
|
||||
def capture():
|
||||
ioctl = os.path.join(ddir, "capture.ioctl")
|
||||
device = os.path.join(ddir, "device")
|
||||
dev = open(ioctl).readline().strip()
|
||||
assert dev.startswith('@DEV ')
|
||||
dev = dev[5:]
|
||||
|
||||
subprocess.check_call(['umockdev-run', '-d', device,
|
||||
'-i', "%s=%s" % (dev, ioctl),
|
||||
'--',
|
||||
'%s' % os.path.join(edir, "capture.py"),
|
||||
'%s' % os.path.join(tmpdir, "capture.png")])
|
||||
|
||||
assert os.path.isfile(os.path.join(tmpdir, "capture.png"))
|
||||
if os.path.isfile(os.path.join(ddir, "capture.png")):
|
||||
# Compare the images, they need to be identical
|
||||
cmp_pngs(os.path.join(tmpdir, "capture.png"), os.path.join(ddir, "capture.png"))
|
||||
|
||||
try:
|
||||
if os.path.exists(os.path.join(ddir, "capture.ioctl")):
|
||||
capture()
|
||||
|
||||
finally:
|
||||
shutil.rmtree(tmpdir)
|
||||
|
||||
Reference in New Issue
Block a user