Test if the AttachInstanceDisk and DetachInstanceDisk wrappers update
the configuration as expected.

Signed-off-by: Alex Pyrgiotis <[email protected]>

diff --git a/test/py/ganeti.config_unittest.py 
b/test/py/ganeti.config_unittest.py
index 22f34dd..0af8c2f 100755
--- a/test/py/ganeti.config_unittest.py
+++ b/test/py/ganeti.config_unittest.py
@@ -661,6 +661,60 @@ class TestConfigRunner(unittest.TestCase):
     cfg.RemoveNodeFromCandidateCerts(node_uuid, warn_fn=None)
     self.assertEqual(0, len(cfg.GetCandidateCerts()))
 
+  def testAttachDetachDisks(self):
+    """Test if the attach/detach wrappers work properly."""
+    # construct instance
+    cfg = self._get_object_mock()
+    inst = self._create_instance(cfg)
+    disk = objects.Disk(dev_type=constants.DT_PLAIN, size=128,
+                        logical_id=("myxenvg", "disk25494"), uuid="disk0")
+    fake_disk = objects.Disk(dev_type=constants.DT_PLAIN, size=128,
+                             logical_id=("myxenvg", "disk25494"), uuid="disk1")
+    cfg.AddInstance(inst, "my-job")
+    cfg.AddInstanceDisk(inst.uuid, disk)
+
+    # Test 1a - Detach disk from non-existent instance
+    with self.assertRaises(errors.ConfigurationError) as cm:
+      cfg.DetachInstanceDisk("1134", "disk0")
+    self.assertEqual(cm.exception.message, "Instance 1134 doesn't exist")
+
+    # Test 1b - Detach non-existent disk
+    with self.assertRaises(errors.ConfigurationError) as cm:
+      cfg.DetachInstanceDisk("test-uuid", "disk1")
+    self.assertEqual(cm.exception.message, "Disk disk1 doesn't exist")
+
+    # Test 1c - Detach disk
+    cfg.DetachInstanceDisk("test-uuid", "disk0")
+    instance_disks = cfg.GetInstanceDisks("test-uuid")
+    self.assertEqual(instance_disks, [])
+
+    # Test 1d - Detach disk again
+    with self.assertRaises(errors.ProgrammerError) as cm:
+      cfg.DetachInstanceDisk("test-uuid", "disk0")
+    self.assertEqual(cm.exception.message, "Disk disk0 is not attached to an"
+                     " instance")
+
+    # Test 2a - Attach disk to non-existent instance
+    with self.assertRaises(errors.ConfigurationError) as cm:
+      cfg.AttachInstanceDisk("1134", disk)
+    self.assertEqual(cm.exception.message, "Instance 1134 doesn't exist")
+
+    # Test 2b - Attach non-existent disk
+    with self.assertRaises(errors.ConfigurationError) as cm:
+      cfg.AttachInstanceDisk("test-uuid", fake_disk)
+    self.assertEqual(cm.exception.message, "Disk disk1 doesn't exist")
+
+    # Test 2c - Attach disk
+    cfg.AttachInstanceDisk("test-uuid", disk)
+    instance_disks = cfg.GetInstanceDisks("test-uuid")
+    self.assertEqual(instance_disks, [disk])
+
+    # Test 2d - Attach disk again
+    with self.assertRaises(errors.ReservationError) as cm:
+      cfg.AttachInstanceDisk("test-uuid", disk)
+    self.assertEqual(cm.exception.message, "Disk disk0 already attached to"
+                     " instance test.example.com")
+
 
 def _IsErrorInList(err_str, err_list):
   return any(map(lambda e: err_str in e, err_list))
-- 
1.7.10.4

Reply via email to