6903c7
commit fab797fcf5e4c8e09e4cde45647951acd764415e
6903c7
Author: Tomas Bzatek <tbzatek@redhat.com>
6903c7
Date:   Mon Oct 10 13:58:15 2022 +0200
6903c7
6903c7
    tests: Add bad auth test for iscsi
6903c7
    
6903c7
    This tests that the auth info is properly set for each login call,
6903c7
    overriding previously set auth info with no trace.
6903c7
6903c7
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
6903c7
index 34bdfc4b..6ac8386b 100644
6903c7
--- a/src/tests/dbus-tests/test_30_iscsi.py
6903c7
+++ b/src/tests/dbus-tests/test_30_iscsi.py
6903c7
@@ -284,3 +284,61 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
6903c7
         # make sure the session object is no longer on dbus
6903c7
         objects = udisks.GetManagedObjects(dbus_interface='org.freedesktop.DBus.ObjectManager')
6903c7
         self.assertNotIn(session_path, objects.keys())
6903c7
+
6903c7
+    def test_login_noauth_badauth(self):
6903c7
+        """
6903c7
+        Test auth info override
6903c7
+        """
6903c7
+        manager = self.get_object('/Manager')
6903c7
+        nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
6903c7
+                                               dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
6903c7
+                                               timeout=self.iscsi_timeout)
6903c7
+
6903c7
+        node = next((node for node in nodes if node[0] == self.noauth_iqn), None)
6903c7
+        self.assertIsNotNone(node)
6903c7
+
6903c7
+        (iqn, tpg, host, port, iface) = node
6903c7
+        self.assertEqual(iqn, self.noauth_iqn)
6903c7
+        self.assertEqual(host, self.address)
6903c7
+        self.assertEqual(port, self.port)
6903c7
+
6903c7
+        self.addCleanup(self._force_lougout, self.noauth_iqn)
6903c7
+
6903c7
+        # first attempt - wrong password
6903c7
+        options = dbus.Dictionary(signature='sv')
6903c7
+        options['username'] = self.initiator
6903c7
+        msg = 'Login failed: initiator reported error'
6903c7
+        with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
6903c7
+            options['password'] = '12345'
6903c7
+            manager.Login(iqn, tpg, host, port, iface, options,
6903c7
+                          dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
6903c7
+                          timeout=self.iscsi_timeout)
6903c7
+
6903c7
+        # second atttempt - no password
6903c7
+        manager.Login(iqn, tpg, host, port, iface, self.no_options,
6903c7
+                      dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
6903c7
+                      timeout=self.iscsi_timeout)
6903c7
+
6903c7
+        devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
6903c7
+        self.assertEqual(len(devs), 1)
6903c7
+
6903c7
+        # check if the block device have 'Symlinks' property updated
6903c7
+        disk_name = os.path.realpath(devs[0]).split('/')[-1]
6903c7
+        disk_obj = self.get_object('/block_devices/' + disk_name)
6903c7
+        dbus_path = str(disk_obj.object_path)
6903c7
+        self.assertIsNotNone(disk_obj)
6903c7
+
6903c7
+        symlinks = self.get_property_raw(disk_obj, '.Block', 'Symlinks')
6903c7
+        self.assertIn(self.str_to_ay(devs[0]), symlinks)
6903c7
+
6903c7
+        manager.Logout(iqn, tpg, host, port, iface, self.no_options,
6903c7
+                       dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
6903c7
+                       timeout=self.iscsi_timeout)
6903c7
+
6903c7
+        devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
6903c7
+        self.assertEqual(len(devs), 0)
6903c7
+
6903c7
+        # make sure the disk is no longer on dbus
6903c7
+        udisks = self.get_object('')
6903c7
+        objects = udisks.GetManagedObjects(dbus_interface='org.freedesktop.DBus.ObjectManager')
6903c7
+        self.assertNotIn(dbus_path, objects.keys())