11#!/usr/bin/python3
22
3+ import os
34import gi
45gi .require_version ('FPrint' , '2.0' )
56from gi .repository import FPrint , GLib
67
7- ctx = GLib .main_context_default ()
8+ import sys
9+ import traceback
10+ sys .excepthook = lambda * args : (traceback .print_exception (* args ), sys .exit (1 ))
11+
812
913c = FPrint .Context ()
1014c .enumerate ()
1317d = devices [0 ]
1418del devices
1519
20+ usb_device = d .get_property ('fpi-usb-device' )
21+ bus_num = usb_device .get_bus ()
22+ port = []
23+ while True :
24+ parent = usb_device .get_parent ()
25+ if parent is None :
26+ break
27+ port .append (str (usb_device .get_port_number ()))
28+ usb_device = parent
29+ port = '.' .join (port )
30+
31+ persist = f'/sys/bus/usb/devices/{ bus_num } -{ port } /power/persist'
32+ wakeup = f'/sys/bus/usb/devices/{ bus_num } -{ port } /power/wakeup'
33+
34+ # may not have written anything
35+ assert open (persist ).read ().strip () == "0"
36+ assert open (wakeup ).read ().strip () == "disabled"
37+
1638assert d .get_driver () == "synaptics"
1739assert not d .has_feature (FPrint .DeviceFeature .CAPTURE )
1840assert d .has_feature (FPrint .DeviceFeature .IDENTIFY )
2951template = FPrint .Print .new (d )
3052
3153def enroll_progress (* args ):
32- assert d .get_finger_status () == FPrint .FingerStatusFlags .NEEDED
54+ # assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
3355 print ('enroll progress: ' + str (args ))
3456
3557# List, enroll, list, verify, delete, list
@@ -41,6 +63,21 @@ def enroll_progress(*args):
4163
4264print ("verifying" )
4365assert d .get_finger_status () == FPrint .FingerStatusFlags .NONE
66+
67+ # Inject a suspend/resume cycle into the verify
68+ def suspend_resume ():
69+ d .suspend_sync ()
70+ assert open (persist ).read ().strip () == "0"
71+ assert open (wakeup ).read ().strip () == "enabled"
72+
73+ assert open (persist , 'w' ).write ('0\n ' )
74+ d .resume_sync ()
75+ # This tests that libfprint doesn't write if the value is correct
76+ # (i.e. the trailing \ would be lost inside umockdev if written)
77+ assert open (persist ).read () == "0\n "
78+ assert open (wakeup ).read ().strip () == "disabled"
79+
80+ GLib .idle_add (suspend_resume , priority = GLib .PRIORITY_HIGH )
4481verify_res , verify_print = d .verify_sync (p )
4582assert d .get_finger_status () == FPrint .FingerStatusFlags .NONE
4683print ("verify done" )
0 commit comments