libfprint/tests/umockdev-test.py

66 lines
2 KiB
Python
Raw Normal View History

#!/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)