mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
virtual-device: Add API to change current finger status
This commit is contained in:
@@ -93,7 +93,8 @@ class VirtualDevice(unittest.TestCase):
|
||||
super().tearDown()
|
||||
|
||||
def send_command(self, command, *args):
|
||||
self.assertIn(command, ['INSERT', 'REMOVE', 'SCAN', 'ERROR', 'RETRY'])
|
||||
self.assertIn(command, ['INSERT', 'REMOVE', 'SCAN', 'ERROR', 'RETRY',
|
||||
'FINGER'])
|
||||
|
||||
with Connection(self.sockaddr) as con:
|
||||
params = ' '.join(str(p) for p in args)
|
||||
@@ -102,6 +103,16 @@ class VirtualDevice(unittest.TestCase):
|
||||
while ctx.pending():
|
||||
ctx.iteration(False)
|
||||
|
||||
def send_finger_report(self, has_finger, iterate=True):
|
||||
self.send_command('FINGER', 1 if has_finger else 0)
|
||||
|
||||
if iterate:
|
||||
expected = (FPrint.FingerStatusFlags.PRESENT if has_finger
|
||||
else ~FPrint.FingerStatusFlags.PRESENT)
|
||||
|
||||
while not (self.dev.get_finger_status() & expected):
|
||||
ctx.iteration(True)
|
||||
|
||||
def enroll_print(self, nick, finger, username='testuser'):
|
||||
self._enrolled = None
|
||||
|
||||
@@ -109,6 +120,8 @@ class VirtualDevice(unittest.TestCase):
|
||||
print("Enroll done")
|
||||
self._enrolled = dev.enroll_finish(res)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
|
||||
self.send_command('SCAN', nick)
|
||||
|
||||
template = FPrint.Print.new(self.dev)
|
||||
@@ -119,6 +132,12 @@ class VirtualDevice(unittest.TestCase):
|
||||
while self._enrolled is None:
|
||||
ctx.iteration(False)
|
||||
|
||||
if not self._enrolled:
|
||||
self.assertEqual(self.dev.get_finger_status(),
|
||||
FPrint.FingerStatusFlags.NEEDED)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
|
||||
self.assertEqual(self._enrolled.get_device_stored(),
|
||||
self.dev.has_storage())
|
||||
|
||||
@@ -181,7 +200,6 @@ class VirtualDevice(unittest.TestCase):
|
||||
|
||||
self.check_verify(matching, 'not-testprint', match=False)
|
||||
|
||||
|
||||
def test_enroll_verify_error(self):
|
||||
matching = self.enroll_print('testprint', FPrint.Finger.LEFT_RING)
|
||||
|
||||
@@ -193,6 +211,31 @@ class VirtualDevice(unittest.TestCase):
|
||||
self.check_verify(FPrint.Print.new(self.dev),
|
||||
FPrint.DeviceRetry.TOO_SHORT, match=False)
|
||||
|
||||
def test_finger_status(self):
|
||||
cancellable = Gio.Cancellable()
|
||||
got_cb = False
|
||||
|
||||
def verify_cb(dev, res):
|
||||
nonlocal got_cb
|
||||
got_cb = True
|
||||
|
||||
self.dev.verify(FPrint.Print.new(self.dev), callback=verify_cb, cancellable=cancellable)
|
||||
while not self.dev.get_finger_status() is FPrint.FingerStatusFlags.NEEDED:
|
||||
ctx.iteration(True)
|
||||
|
||||
self.send_finger_report(True)
|
||||
self.assertEqual(self.dev.get_finger_status(),
|
||||
FPrint.FingerStatusFlags.NEEDED | FPrint.FingerStatusFlags.PRESENT)
|
||||
|
||||
self.send_finger_report(False)
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NEEDED)
|
||||
|
||||
cancellable.cancel()
|
||||
while not got_cb:
|
||||
ctx.iteration(True)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
|
||||
class VirtualDeviceStorage(VirtualDevice):
|
||||
|
||||
def cleanup_device_storage(self):
|
||||
|
||||
Reference in New Issue
Block a user