From 022ee1a4c52d21d8504643068689b4735af4eed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 28 Jan 2021 18:21:00 +0100 Subject: [PATCH] tests/fprintd: Add test for the enroll utility using virtual device commands --- tests/fprintd.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tests/fprintd.py b/tests/fprintd.py index 07b8d18..0a5116b 100644 --- a/tests/fprintd.py +++ b/tests/fprintd.py @@ -65,6 +65,7 @@ FINGERS_MAP = { "right-middle-finger": FPrint.Finger.RIGHT_MIDDLE, "right-ring-finger": FPrint.Finger.RIGHT_RING, "right-little-finger": FPrint.Finger.RIGHT_LITTLE, + "any": FPrint.Finger.UNKNOWN, } def get_timeout(topic='default'): @@ -364,6 +365,9 @@ class FPrintdTest(dbusmock.DBusTestCase): def get_print_name_file_path(self, user, finger_name): return self.get_print_file_path(user, FINGERS_MAP[finger_name]) + def get_finger_name(self, finger): + return {v: k for k, v in FINGERS_MAP.items()}[finger] + def set_print_not_writable(self, user, finger): # Replace the print with a directory, so that deletion via unlink will fail # But it is still listed, not using chmod as it won't work in CI environment @@ -2932,6 +2936,82 @@ class FPrintdUtilsTest(FPrintdVirtualStorageDeviceBaseTest): self.assertNotEqual(delete.wait(), 0) self.assertLess(delete.wait(), 128) + def test_enroll(self): + self.device.Claim('(s)', self.get_current_user()) + self.set_keep_alive(True) + self.device.Release() + + finger_name = self.get_finger_name(FPrint.Finger.LEFT_THUMB) + enroll, out = self.util_start('enroll', [self.get_current_user(), + '-f', finger_name]) + out.check_line('Using device {}'.format( + self.device.get_object_path()), get_timeout()) + + out.check_line('Enrolling {} finger.'.format(finger_name).encode('utf-8'), + get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_retry(FPrint.DeviceRetry.TOO_SHORT) + out.check_line('Enroll result: enroll-swipe-too-short', get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_retry(FPrint.DeviceRetry.CENTER_FINGER) + out.check_line('Enroll result: enroll-finger-not-centered', get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-completed', get_timeout()) + + self.assertEqual(enroll.wait(), 0) + + def test_enroll_error(self): + self.device.Claim('(s)', self.get_current_user()) + self.set_keep_alive(True) + self.device.Release() + + finger_name = self.get_finger_name(FPrint.Finger.LEFT_MIDDLE) + enroll, out = self.util_start('enroll', [self.get_current_user(), + '-f', finger_name]) + out.check_line('Using device {}'.format( + self.device.get_object_path()), get_timeout()) + + out.check_line('Enrolling {} finger.'.format(finger_name).encode('utf-8'), + get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_image('print-id') + out.check_line('Enroll result: enroll-stage-passed', get_timeout()) + + self.send_retry(FPrint.DeviceRetry.TOO_SHORT) + out.check_line('Enroll result: enroll-swipe-too-short', get_timeout()) + + self.send_error(FPrint.DeviceError.PROTO) + out.check_line('Enroll result: enroll-disconnected', get_timeout()) + + self.assertNotEqual(enroll.wait(), 0) + self.assertLess(enroll.wait(), 128) + + def test_enroll_error_invalid_finger(self): + finger_name = 'eleventh-hand-finger' + enroll, out = self.util_start('enroll', [self.get_current_user(), + '-f', finger_name]) + + out.check_line('Invalid finger name \'{}\''.format(finger_name), get_timeout()) + + self.assertNotEqual(enroll.wait(), 0) + self.assertLess(enroll.wait(), 128) + def list_tests(): import unittest_inspector