Support DSA SSH keys in bootstrap
[ganeti-local] / test / py / ganeti.config_unittest.py
index 71d60e6..bf6c654 100755 (executable)
 
 import unittest
 import os
-import time
 import tempfile
-import os.path
-import socket
 import operator
-import itertools
 
 from ganeti import bootstrap
 from ganeti import config
@@ -39,7 +35,7 @@ from ganeti import objects
 from ganeti import utils
 from ganeti import netutils
 from ganeti import compat
-from ganeti import cmdlib
+from ganeti.cmdlib import instance
 
 from ganeti.config import TemporaryReservationManager
 
@@ -80,6 +76,7 @@ class TestConfigRunner(unittest.TestCase):
     cluster_config = objects.Cluster(
       serial_no=1,
       rsahostkeypub="",
+      dsahostkeypub="",
       highest_used_port=(constants.FIRST_DRBD_PORT - 1),
       mac_prefix="aa:00:00",
       volume_group_name="xenvg",
@@ -436,11 +433,9 @@ class TestConfigRunner(unittest.TestCase):
     # depending on the owner (cluster or group)
     if isgroup:
       errs = cfg.VerifyConfig()
-      # FIXME: A bug in FillIPolicy (issue 401) makes this test fail, so we
-      # invert the assertions for the time being
-      self.assertFalse(len(errs) >= 1)
+      self.assertTrue(len(errs) >= 1)
       errstr = "%s has invalid instance policy" % ipowner
-      self.assertFalse(_IsErrorInList(errstr, errs))
+      self.assertTrue(_IsErrorInList(errstr, errs))
     else:
       self.assertRaises(AssertionError, cfg.VerifyConfig)
     del ipolicy[INVALID_KEY]
@@ -461,13 +456,18 @@ class TestConfigRunner(unittest.TestCase):
     else:
       del ipolicy[key]
 
-    ispeclist = [
-      (ipolicy[constants.ISPECS_MINMAX][constants.ISPECS_MIN],
-       "%s/%s" % (constants.ISPECS_MINMAX, constants.ISPECS_MIN)),
-      (ipolicy[constants.ISPECS_MINMAX][constants.ISPECS_MAX],
-       "%s/%s" % (constants.ISPECS_MINMAX, constants.ISPECS_MAX)),
-      (ipolicy[constants.ISPECS_STD], constants.ISPECS_STD),
-      ]
+    ispeclist = []
+    if constants.ISPECS_MINMAX in ipolicy:
+      for k in range(len(ipolicy[constants.ISPECS_MINMAX])):
+        ispeclist.extend([
+            (ipolicy[constants.ISPECS_MINMAX][k][constants.ISPECS_MIN],
+             "%s[%s]/%s" % (constants.ISPECS_MINMAX, k, constants.ISPECS_MIN)),
+            (ipolicy[constants.ISPECS_MINMAX][k][constants.ISPECS_MAX],
+             "%s[%s]/%s" % (constants.ISPECS_MINMAX, k, constants.ISPECS_MAX)),
+            ])
+    if constants.ISPECS_STD in ipolicy:
+      ispeclist.append((ipolicy[constants.ISPECS_STD], constants.ISPECS_STD))
+
     for (ispec, ispecpath) in ispeclist:
       ispec[INVALID_KEY] = None
       errs = cfg.VerifyConfig()
@@ -494,6 +494,29 @@ class TestConfigRunner(unittest.TestCase):
         errs = cfg.VerifyConfig()
         self.assertFalse(errs)
 
+    if constants.ISPECS_MINMAX in ipolicy:
+      # Test partial minmax specs
+      for minmax in ipolicy[constants.ISPECS_MINMAX]:
+        for key in constants.ISPECS_MINMAX_KEYS:
+          self.assertTrue(key in minmax)
+          ispec = minmax[key]
+          del minmax[key]
+          errs = cfg.VerifyConfig()
+          self.assertTrue(len(errs) >= 1)
+          self.assertTrue(_IsErrorInList("Missing instance specification",
+                                         errs))
+          minmax[key] = ispec
+          for par in constants.ISPECS_PARAMETERS:
+            oldv = ispec[par]
+            del ispec[par]
+            errs = cfg.VerifyConfig()
+            self.assertTrue(len(errs) >= 1)
+            self.assertTrue(_IsErrorInList("Missing instance specs parameters",
+                                           errs))
+            ispec[par] = oldv
+      errs = cfg.VerifyConfig()
+      self.assertFalse(errs)
+
   def _TestVerifyConfigGroupIPolicy(self, groupinfo, cfg):
     old_ipolicy = groupinfo.ipolicy
     ipolicy = cfg.GetClusterInfo().SimpleFillIPolicy({})
@@ -506,16 +529,6 @@ class TestConfigRunner(unittest.TestCase):
       errs = cfg.VerifyConfig()
       self.assertFalse(errs)
       ipolicy[key] = oldv
-    # Test partial minmax specs
-    minmax = ipolicy[constants.ISPECS_MINMAX]
-    for ispec_key in minmax.keys():
-      ispec = minmax[ispec_key]
-      for par in constants.ISPECS_PARAMETERS:
-        oldv = ispec[par]
-        del ispec[par]
-        errs = cfg.VerifyConfig()
-        self.assertFalse(errs)
-        ispec[par] = oldv
     groupinfo.ipolicy = old_ipolicy
 
   def _TestVerifyConfigClusterIPolicy(self, ipolicy, cfg):
@@ -526,14 +539,18 @@ class TestConfigRunner(unittest.TestCase):
       del ipolicy[key]
       self.assertRaises(AssertionError, cfg.VerifyConfig)
       ipolicy[key] = oldv
-    # Test partial minmax specs
-    minmax = ipolicy[constants.ISPECS_MINMAX]
-    for key in constants.ISPECS_MINMAX_KEYS:
-      self.assertTrue(key in minmax)
-      oldv = minmax[key]
-      del minmax[key]
-      self.assertRaises(AssertionError, cfg.VerifyConfig)
-      minmax[key] = oldv
+    errs = cfg.VerifyConfig()
+    self.assertFalse(errs)
+    # Partial standard specs
+    ispec = ipolicy[constants.ISPECS_STD]
+    for par in constants.ISPECS_PARAMETERS:
+      oldv = ispec[par]
+      del ispec[par]
+      errs = cfg.VerifyConfig()
+      self.assertTrue(len(errs) >= 1)
+      self.assertTrue(_IsErrorInList("Missing instance specs parameters",
+                                     errs))
+      ispec[par] = oldv
     errs = cfg.VerifyConfig()
     self.assertFalse(errs)
 
@@ -594,7 +611,7 @@ class TestCheckInstanceDiskIvNames(unittest.TestCase):
   def testNoError(self):
     disks = self._MakeDisks(["disk/0", "disk/1"])
     self.assertEqual(config._CheckInstanceDiskIvNames(disks), [])
-    cmdlib._UpdateIvNames(0, disks)
+    instance._UpdateIvNames(0, disks)
     self.assertEqual(config._CheckInstanceDiskIvNames(disks), [])
 
   def testWrongNames(self):
@@ -605,7 +622,7 @@ class TestCheckInstanceDiskIvNames(unittest.TestCase):
       ])
 
     # Fix names
-    cmdlib._UpdateIvNames(0, disks)
+    instance._UpdateIvNames(0, disks)
     self.assertEqual(config._CheckInstanceDiskIvNames(disks), [])