mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-06-11 02:28:05 +00:00
Merge tag 'v1.94.3' into tod
2021-11-02: v1.94.3 release Highlights: * Ensure idle mainloop before completing enumeration (fprintd#119) * It is now possible to extend already enrolled prints * elanspi: Fix timeout error with some hardware (#438) * elanspi: Fix cancellation issues * goodixmoc: Return matching device print; fixes duplicate checking (#444) * goodixmoc: Support clearing the storage (usually unused) Git-EVTag-v0-SHA512: 779b560b97bc7da5972d9a4854be5b74f8d310a22ac782fde50fa02c869cf93cc11254d75519076ac8ee59f81c8a9fc0466030eb249519827343ab84eb45e640
This commit is contained in:
@@ -24,6 +24,10 @@ TW 8c62
|
||||
TW 805a
|
||||
TW 04
|
||||
TW aa07
|
||||
TW 8100
|
||||
TW 825f
|
||||
TW 8300
|
||||
TW 845f
|
||||
TW 8560
|
||||
TW 86c0
|
||||
TW 8780
|
||||
@@ -38,8 +42,11 @@ TW 9567
|
||||
TW 9804
|
||||
TW a120
|
||||
TW a236
|
||||
TW a902
|
||||
TW aa03
|
||||
TW aa5f
|
||||
TW abc0
|
||||
TW ac10
|
||||
TW aeff
|
||||
TW 01
|
||||
TW 03ff
|
||||
|
||||
@@ -21,7 +21,7 @@ assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
||||
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
||||
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
||||
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
||||
assert not d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||||
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||||
|
||||
d.open_sync()
|
||||
|
||||
|
||||
+123
-1
@@ -27,6 +27,7 @@
|
||||
#include "fpi-compat.h"
|
||||
#include "fpi-log.h"
|
||||
#include "test-device-fake.h"
|
||||
#include "fp-print-private.h"
|
||||
|
||||
#ifdef TEST_TOD_DRIVER
|
||||
|
||||
@@ -256,6 +257,16 @@ make_fake_print (FpDevice *device,
|
||||
return enrolled_print;
|
||||
}
|
||||
|
||||
static FpPrint *
|
||||
make_fake_nbis_print (FpDevice *device)
|
||||
{
|
||||
FpPrint *enrolled_print = fp_print_new (device);
|
||||
|
||||
fpi_print_set_type (enrolled_print, FPI_PRINT_NBIS);
|
||||
|
||||
return enrolled_print;
|
||||
}
|
||||
|
||||
static FpPrint *
|
||||
make_fake_print_reffed (FpDevice *device,
|
||||
GVariant *print_data)
|
||||
@@ -1193,7 +1204,6 @@ test_driver_enroll_error_no_print (void)
|
||||
out_print =
|
||||
fp_device_enroll_sync (device, fp_print_new (device), NULL, NULL, NULL, &error);
|
||||
|
||||
g_test_assert_expected_messages ();
|
||||
g_assert (fake_dev->last_called_function == dev_class->enroll);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||
g_assert_null (out_print);
|
||||
@@ -1201,6 +1211,111 @@ test_driver_enroll_error_no_print (void)
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_enroll_update_nbis (void)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(FpAutoResetClass) dev_class = auto_reset_device_class ();
|
||||
g_autoptr(FpAutoCloseDevice) device = NULL;
|
||||
g_autoptr(FpPrint) template_print = NULL;
|
||||
FpiDeviceFake *fake_dev = NULL;
|
||||
FpPrint *out_print = NULL;
|
||||
|
||||
dev_class->features |= FP_DEVICE_FEATURE_UPDATE_PRINT;
|
||||
device = auto_close_fake_device_new ();
|
||||
fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
template_print = make_fake_nbis_print (device);
|
||||
fake_dev->ret_print = template_print;
|
||||
|
||||
out_print =
|
||||
fp_device_enroll_sync (device, template_print, NULL, NULL, NULL, &error);
|
||||
|
||||
g_assert (fake_dev->last_called_function == dev_class->enroll);
|
||||
g_assert (fake_dev->action_data == template_print);
|
||||
|
||||
g_assert_no_error (error);
|
||||
g_assert (out_print == template_print);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_enroll_update_nbis_wrong_device (void)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(FpAutoResetClass) dev_class = auto_reset_device_class ();
|
||||
g_autoptr(FpAutoCloseDevice) device = NULL;
|
||||
g_autoptr(FpPrint) template_print = NULL;
|
||||
FpiDeviceFake *fake_dev = NULL;
|
||||
FpPrint *out_print = NULL;
|
||||
|
||||
dev_class->features |= FP_DEVICE_FEATURE_UPDATE_PRINT;
|
||||
|
||||
device = auto_close_fake_device_new ();
|
||||
fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
template_print = make_fake_nbis_print (device);
|
||||
template_print->device_id = g_strdup ("wrong_device");
|
||||
fake_dev->ret_print = template_print;
|
||||
|
||||
out_print =
|
||||
fp_device_enroll_sync (device, template_print, NULL, NULL, NULL, &error);
|
||||
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert (out_print == NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_enroll_update_nbis_wrong_driver (void)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(FpAutoResetClass) dev_class = auto_reset_device_class ();
|
||||
g_autoptr(FpAutoCloseDevice) device = NULL;
|
||||
g_autoptr(FpPrint) template_print = NULL;
|
||||
FpiDeviceFake *fake_dev = NULL;
|
||||
FpPrint *out_print = NULL;
|
||||
|
||||
dev_class->features |= FP_DEVICE_FEATURE_UPDATE_PRINT;
|
||||
|
||||
device = auto_close_fake_device_new ();
|
||||
fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
template_print = make_fake_nbis_print (device);
|
||||
template_print->driver = g_strdup ("wrong_driver");
|
||||
fake_dev->ret_print = template_print;
|
||||
|
||||
out_print =
|
||||
fp_device_enroll_sync (device, template_print, NULL, NULL, NULL, &error);
|
||||
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert (out_print == NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_enroll_update_nbis_missing_feature (void)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(FpAutoResetClass) dev_class = auto_reset_device_class ();
|
||||
g_autoptr(FpAutoCloseDevice) device = NULL;
|
||||
g_autoptr(FpPrint) template_print = NULL;
|
||||
FpiDeviceFake *fake_dev = NULL;
|
||||
FpPrint *out_print = NULL;
|
||||
|
||||
device = auto_close_fake_device_new ();
|
||||
fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
template_print = make_fake_nbis_print (device);
|
||||
fake_dev->ret_print = template_print;
|
||||
|
||||
out_print =
|
||||
fp_device_enroll_sync (device, template_print, NULL, NULL, NULL, &error);
|
||||
|
||||
g_assert (fake_dev->last_called_function == dev_class->open);
|
||||
g_assert (fake_dev->action_data == NULL);
|
||||
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert (out_print == NULL);
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gint completed_stages;
|
||||
@@ -3530,6 +3645,13 @@ main (int argc, char *argv[])
|
||||
g_test_add_func ("/driver/enroll/error", test_driver_enroll_error);
|
||||
g_test_add_func ("/driver/enroll/error/no_print", test_driver_enroll_error_no_print);
|
||||
g_test_add_func ("/driver/enroll/progress", test_driver_enroll_progress);
|
||||
g_test_add_func ("/driver/enroll/update_nbis", test_driver_enroll_update_nbis);
|
||||
g_test_add_func ("/driver/enroll/update_nbis_wrong_device",
|
||||
test_driver_enroll_update_nbis_wrong_device);
|
||||
g_test_add_func ("/driver/enroll/update_nbis_wrong_driver",
|
||||
test_driver_enroll_update_nbis_wrong_driver);
|
||||
g_test_add_func ("/driver/enroll/update_nbis_missing_feature",
|
||||
test_driver_enroll_update_nbis_missing_feature);
|
||||
g_test_add_func ("/driver/verify", test_driver_verify);
|
||||
g_test_add_func ("/driver/verify/fail", test_driver_verify_fail);
|
||||
g_test_add_func ("/driver/verify/retry", test_driver_verify_retry);
|
||||
|
||||
+35
-10
@@ -136,6 +136,7 @@ class VirtualImage(unittest.TestCase):
|
||||
self.assertTrue(self.dev.has_feature(FPrint.DeviceFeature.CAPTURE))
|
||||
self.assertTrue(self.dev.has_feature(FPrint.DeviceFeature.IDENTIFY))
|
||||
self.assertTrue(self.dev.has_feature(FPrint.DeviceFeature.VERIFY))
|
||||
self.assertTrue(self.dev.has_feature(FPrint.DeviceFeature.UPDATE_PRINT))
|
||||
self.assertFalse(self.dev.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK))
|
||||
self.assertFalse(self.dev.has_feature(FPrint.DeviceFeature.STORAGE))
|
||||
self.assertFalse(self.dev.has_feature(FPrint.DeviceFeature.STORAGE_LIST))
|
||||
@@ -144,7 +145,8 @@ class VirtualImage(unittest.TestCase):
|
||||
self.assertEqual(self.dev.get_features(),
|
||||
FPrint.DeviceFeature.CAPTURE |
|
||||
FPrint.DeviceFeature.IDENTIFY |
|
||||
FPrint.DeviceFeature.VERIFY)
|
||||
FPrint.DeviceFeature.VERIFY |
|
||||
FPrint.DeviceFeature.UPDATE_PRINT)
|
||||
|
||||
def test_capture_prevents_close(self):
|
||||
cancel = Gio.Cancellable()
|
||||
@@ -167,7 +169,7 @@ class VirtualImage(unittest.TestCase):
|
||||
while not self._cancelled:
|
||||
ctx.iteration(True)
|
||||
|
||||
def enroll_print(self, image):
|
||||
def enroll_print(self, image, template=None):
|
||||
self._step = 0
|
||||
self._enrolled = None
|
||||
|
||||
@@ -181,14 +183,15 @@ class VirtualImage(unittest.TestCase):
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
self._enrolled = fp
|
||||
|
||||
template = FPrint.Print.new(self.dev)
|
||||
template.props.finger = FPrint.Finger.LEFT_THUMB
|
||||
template.props.username = "testuser"
|
||||
template.props.description = "test print"
|
||||
datetime = GLib.DateTime.new_now_local()
|
||||
date = GLib.Date()
|
||||
date.set_dmy(*datetime.get_ymd()[::-1])
|
||||
template.props.enroll_date = date
|
||||
if template is None:
|
||||
template = FPrint.Print.new(self.dev)
|
||||
template.props.finger = FPrint.Finger.LEFT_THUMB
|
||||
template.props.username = "testuser"
|
||||
template.props.description = "test print"
|
||||
datetime = GLib.DateTime.new_now_local()
|
||||
date = GLib.Date()
|
||||
date.set_dmy(*datetime.get_ymd()[::-1])
|
||||
template.props.enroll_date = date
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
self.dev.enroll(template, None, progress_cb, tuple(), done_cb)
|
||||
|
||||
@@ -264,6 +267,28 @@ class VirtualImage(unittest.TestCase):
|
||||
ctx.iteration(True)
|
||||
assert(not self._verify_match)
|
||||
|
||||
# Test fingerprint updates
|
||||
# Enroll a second print
|
||||
fp_whorl_tended_arch = self.enroll_print('tented_arch', fp_whorl)
|
||||
|
||||
# Make sure the first print verifies successfully after the update
|
||||
self._verify_match = None
|
||||
self._verify_fp = None
|
||||
self.dev.verify(fp_whorl_tended_arch, callback=verify_cb)
|
||||
self.send_image('whorl')
|
||||
while self._verify_match is None:
|
||||
ctx.iteration(True)
|
||||
assert(self._verify_match)
|
||||
|
||||
# Make sure the second print verifies successfully after the update
|
||||
self._verify_match = None
|
||||
self._verify_fp = None
|
||||
self.dev.verify(fp_whorl_tended_arch, callback=verify_cb)
|
||||
self.send_image('tented_arch')
|
||||
while self._verify_match is None:
|
||||
ctx.iteration(True)
|
||||
assert(self._verify_match)
|
||||
|
||||
# Test verify error cases
|
||||
self._verify_fp = None
|
||||
self._verify_error = None
|
||||
|
||||
Reference in New Issue
Block a user