tests/realtek: Cover duplicate enrollment errors

Extend the 2541:fa03 storage-error fixture to enroll the same finger
twice and assert FP_DEVICE_ERROR_DATA_DUPLICATE, reusing the device
session the delete test already opened rather than starting a second
one. Compact redundant polling transactions while preserving the
recorded protocol state changes.
This commit is contained in:
Ge-org Brohammer
2026-09-01 09:55:22 +02:00
parent 629860c965
commit dd0f15bf02
2 changed files with 33 additions and 3 deletions
Binary file not shown.
+33 -3
View File
@@ -6,9 +6,11 @@
# point of this test: before the fix it read freed memory, and the GError was
# freed a second time when the GTask finalized.
#
# No enrollment is involved, so this needs no recorded finger presses: the print
# below is a stored realtek print, serialized, whose template is deliberately
# not on the device.
# The print below is a stored realtek print, serialized, whose template is
# deliberately not on the device.
#
# The same session then enrolls a finger and enrolls it again, checking that the
# duplicate is reported as FP_DEVICE_ERROR_DATA_DUPLICATE rather than PROTO.
import base64
import traceback
@@ -62,6 +64,34 @@ else:
del p
print("delete attempt done")
# Storage is still empty, so enrolling the same finger twice must report the
# error class expected by fprintd.
def enroll_progress(*args):
print('enroll progress: ' + str(args))
template = FPrint.Print.new(d)
print("enrolling")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
p = d.enroll_sync(template, None, enroll_progress, None)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("enroll done")
print("enrolling duplicate")
template = FPrint.Print.new(d)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
try:
d.enroll_sync(template, None, enroll_progress, None)
except GLib.Error as error:
assert error.matches(FPrint.DeviceError.quark(),
FPrint.DeviceError.DATA_DUPLICATE)
else:
raise AssertionError("Duplicate enrollment unexpectedly succeeded")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("duplicate enrollment rejected")
d.delete_print_sync(p)
d.close_sync()
del d