diff --git a/src/device.c b/src/device.c index 2fbf4f6..682b085 100644 --- a/src/device.c +++ b/src/device.c @@ -1985,9 +1985,14 @@ delete_enrolled_fingers (FprintDevice *rdev, if (!user_has_print_enrolled (rdev, user, finger)) { - g_set_error (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS, - "Fingerprint for finger %s is not enrolled", - fp_finger_to_name (finger)); + if (finger != FP_FINGER_UNKNOWN) + g_set_error (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS, + "Fingerprint for finger %s is not enrolled", + fp_finger_to_name (finger)); + else + g_set_error_literal (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS, + "No fingerprint enrolled"); + return FALSE; } @@ -2192,11 +2197,8 @@ fprint_device_delete_enrolled_fingers (FprintDBusDevice *dbus_dev, if (!opened && fp_device_has_storage (priv->dev)) fp_device_close_sync (priv->dev, NULL, NULL); - if (error && - !g_error_matches (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS)) + if (error) { - /* FIXME: We should probably expose NoEnrolledPrints as an actual error, - * but not changing the API for now */ g_dbus_method_invocation_return_gerror (invocation, error); return TRUE; @@ -2237,14 +2239,8 @@ fprint_device_delete_enrolled_fingers2 (FprintDBusDevice *dbus_dev, if (!delete_enrolled_fingers (rdev, session->username, FP_FINGER_UNKNOWN, &error)) { - if (!g_error_matches (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS)) - { - /* FIXME: We should probably expose NoEnrolledPrints as an actual error, - * but not changing the API for now */ - g_dbus_method_invocation_return_gerror (invocation, - error); - return TRUE; - } + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; } fprint_dbus_device_complete_delete_enrolled_fingers2 (dbus_dev, diff --git a/tests/dbusmock/fprintd.py b/tests/dbusmock/fprintd.py index 9eae4e4..58e05a8 100644 --- a/tests/dbusmock/fprintd.py +++ b/tests/dbusmock/fprintd.py @@ -184,6 +184,11 @@ def DeleteEnrolledFingers2(device): raise dbus.exceptions.DBusException( 'Device was not claimed before use', name='net.reactivated.Fprint.Error.ClaimDevice') + if not device.fingers[device.claimed_user]: + raise dbus.exceptions.DBusException( + 'No enrolled prints in device {} for user {}'.format(device.path, + device.claimed_user), + name='net.reactivated.Fprint.Error.NoEnrolledPrints') device.fingers[device.claimed_user] = [] @dbus.service.method(DEVICE_IFACE, diff --git a/tests/fprintd.py b/tests/fprintd.py index 9408c8e..a2c51d6 100644 --- a/tests/fprintd.py +++ b/tests/fprintd.py @@ -1246,7 +1246,12 @@ class FPrintdVirtualDeviceTest(FPrintdVirtualDeviceBaseTest): self.device.EnrollStop() def test_unclaimed_delete_enrolled_fingers(self): - self.device.DeleteEnrolledFingers('(s)', 'testuser') + self.enroll_image('whorl', claim_user='foo-user') + self.device.DeleteEnrolledFingers('(s)', 'foo-user') + + def test_unclaimed_delete_enrolled_fingers_no_prints(self): + with self.assertFprintError('NoEnrolledPrints'): + self.device.DeleteEnrolledFingers('(s)', 'testuser') def test_unclaimed_delete_enrolled_finger(self): with self.assertFprintError('ClaimDevice'): @@ -2044,11 +2049,7 @@ class FPrintdVirtualDeviceClaimedTest(FPrintdVirtualDeviceBaseTest): self.wait_for_device_reply_relaxed(expected_replies=2, accepted_exceptions=accepted_exceptions) - if self.device_driver == 'virtual_device_storage': - self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) - else: - self.assertEqual([GLib.Variant('()', ()), GLib.Variant('()', ())], - self.get_all_async_replies()) + self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) def test_concourrent_delete_enrolled_fingers_unclaimed(self): self.enroll_image('whorl') @@ -2063,11 +2064,7 @@ class FPrintdVirtualDeviceClaimedTest(FPrintdVirtualDeviceBaseTest): self.wait_for_device_reply_relaxed(expected_replies=2, accepted_exceptions=accepted_exceptions) - if self.device_driver == 'virtual_device_storage': - self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) - else: - self.assertEqual([GLib.Variant('()', ()), GLib.Variant('()', ())], - self.get_all_async_replies()) + self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) def test_concourrent_delete_enrolled_fingers2(self): self.enroll_image('whorl') @@ -2081,11 +2078,7 @@ class FPrintdVirtualDeviceClaimedTest(FPrintdVirtualDeviceBaseTest): self.wait_for_device_reply_relaxed(expected_replies=2, accepted_exceptions=accepted_exceptions) - if self.device_driver == 'virtual_device_storage': - self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) - else: - self.assertEqual([GLib.Variant('()', ()), GLib.Variant('()', ())], - self.get_all_async_replies()) + self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) def test_concourrent_delete_enrolled_finger(self): self.enroll_image('whorl', finger='left-thumb') @@ -2115,6 +2108,24 @@ class FPrintdVirtualDeviceClaimedTest(FPrintdVirtualDeviceBaseTest): self.assertIn(GLib.Variant('()', ()), self.get_all_async_replies()) + def test_already_claimed_same_user_delete_enrolled_fingers(self): + self.enroll_image('whorl') + self.device.DeleteEnrolledFingers('(s)', 'testuser') + + def test_already_claimed_same_user_delete_enrolled_fingers_no_prints(self): + with self.assertFprintError('NoEnrolledPrints'): + self.device.DeleteEnrolledFingers('(s)', 'testuser') + + def test_already_claimed_other_user_delete_enrolled_fingers(self): + self.device.Release() + self.enroll_image('whorl', claim_user='nottestuser') + self.device.Claim('(s)', 'testuser') + self.device.DeleteEnrolledFingers('(s)', 'nottestuser') + + def test_already_claimed_other_user_delete_enrolled_fingers_no_prints(self): + with self.assertFprintError('NoEnrolledPrints'): + self.device.DeleteEnrolledFingers('(s)', 'nottestuser') + class FPrintdVirtualDeviceEnrollTests(FPrintdVirtualDeviceBaseTest): @@ -2843,13 +2854,6 @@ class FPrintdUtilsTest(FPrintdVirtualDeviceBaseTest): self.device.Claim('(s)', self.get_current_user()) self.device.Release() - def test_already_claimed_same_user_delete_enrolled_fingers(self): - self.device.DeleteEnrolledFingers('(s)', 'testuser') - - def test_already_claimed_other_user_delete_enrolled_fingers(self): - self.device.DeleteEnrolledFingers('(s)', 'nottestuser') - - def list_tests(): import unittest_inspector diff --git a/tests/test_fprintd_utils.py b/tests/test_fprintd_utils.py index 7dd2003..0b4e96f 100755 --- a/tests/test_fprintd_utils.py +++ b/tests/test_fprintd_utils.py @@ -158,20 +158,14 @@ class TestFprintdUtils(TestFprintdUtilsBase): self.assertEqual(ret, 0) def test_fprintd_delete(self): - # Has fingerprints enrolled - out, ret = self.run_utility_process('list', ['toto']) - self.assertRegex(out, rb'left-little-finger') - self.assertEqual(ret, 0) - self.assertRegex(out, rb'right-little-finger') - # Delete fingerprints out, ret = self.run_utility_process('delete', ['toto']) self.assertRegex(out, rb'Fingerprints deleted') self.assertEqual(ret, 0) # Doesn't have fingerprints - out, ret = self.run_utility_process('list', ['toto']) - self.assertRegex(out, rb'has no fingers enrolled for') + out, ret = self.run_utility_process('delete', ['toto']) + self.assertRegex(out, rb'No fingerprints to delete on') self.assertEqual(ret, 0)