import os.path
import socket
-from ganeti import errors
-from ganeti import constants
+from ganeti import bootstrap
from ganeti import config
+from ganeti import constants
+from ganeti import errors
from ganeti import objects
from ganeti import utils
def setUp(self):
fd, self.cfg_file = tempfile.mkstemp()
os.close(fd)
+ self._init_cluster(self.cfg_file)
def tearDown(self):
try:
def _init_cluster(self, cfg):
"""Initializes the cfg object"""
- cfg.InitConfig(utils.HostInfo().name, constants.LOCALHOST_IP_ADDRESS,
- None, '', 'aa:00:00', 'xenvg',
- constants.DEFAULT_BRIDGE)
+ me = utils.HostInfo()
+ ip = constants.LOCALHOST_IP_ADDRESS
+
+ cluster_config = objects.Cluster(
+ serial_no=1,
+ rsahostkeypub="",
+ highest_used_port=(constants.FIRST_DRBD_PORT - 1),
+ mac_prefix="aa:00:00",
+ volume_group_name="xenvg",
+ nicparams={constants.PP_DEFAULT: constants.NICC_DEFAULTS},
+ tcpudp_port_pool=set(),
+ enabled_hypervisors=[constants.HT_FAKE],
+ master_node=me.name,
+ master_ip="127.0.0.1",
+ master_netdev=constants.DEFAULT_BRIDGE,
+ cluster_name="cluster.local",
+ file_storage_dir="/tmp",
+ )
+
+ master_node_config = objects.Node(name=me.name,
+ primary_ip=me.ip,
+ secondary_ip=ip,
+ serial_no=1,
+ master_candidate=True)
+
+ bootstrap.InitConfig(constants.CONFIG_VERSION,
+ cluster_config, master_node_config, self.cfg_file)
def _create_instance(self):
"""Create and return an instance object"""
- inst = objects.Instance(name="test.example.com", disks=[],
- disk_template=constants.DT_DISKLESS)
+ inst = objects.Instance(name="test.example.com", disks=[], nics=[],
+ disk_template=constants.DT_DISKLESS,
+ primary_node=self._get_object().GetMasterNode())
return inst
def testEmpty(self):
def testInit(self):
"""Test initialize the config file"""
cfg = self._get_object()
- self._init_cluster(cfg)
self.failUnlessEqual(1, len(cfg.GetNodeList()))
self.failUnlessEqual(0, len(cfg.GetInstanceList()))
# construct a fake cluster object
fake_cl = objects.Cluster()
# fail if we didn't read the config
- self.failUnlessRaises(errors.ProgrammerError, cfg.Update, fake_cl)
+ self.failUnlessRaises(errors.ConfigurationError, cfg.Update, fake_cl)
- self._init_cluster(cfg)
cl = cfg.GetClusterInfo()
# first pass, must not fail
cfg.Update(cl)
# construct a fake node
fake_node = objects.Node()
# fail if we didn't read the config
- self.failUnlessRaises(errors.ProgrammerError, cfg.Update, fake_node)
+ self.failUnlessRaises(errors.ConfigurationError, cfg.Update, fake_node)
- self._init_cluster(cfg)
node = cfg.GetNodeInfo(cfg.GetNodeList()[0])
# first pass, must not fail
cfg.Update(node)
inst = self._create_instance()
fake_instance = objects.Instance()
# fail if we didn't read the config
- self.failUnlessRaises(errors.ProgrammerError, cfg.Update, fake_instance)
+ self.failUnlessRaises(errors.ConfigurationError, cfg.Update, fake_instance)
- self._init_cluster(cfg)
cfg.AddInstance(inst)
instance = cfg.GetInstanceInfo(cfg.GetInstanceList()[0])
# first pass, must not fail
# but the fake_instance update should still fail
self.failUnlessRaises(errors.ConfigurationError, cfg.Update, fake_instance)
+ def testNICParameterSyntaxCheck(self):
+ """Test the NIC's CheckParameterSyntax function"""
+ mode = constants.NIC_MODE
+ link = constants.NIC_LINK
+ m_bridged = constants.NIC_MODE_BRIDGED
+ m_routed = constants.NIC_MODE_ROUTED
+ CheckSyntax = objects.NIC.CheckParameterSyntax
+
+ CheckSyntax(constants.NICC_DEFAULTS)
+ CheckSyntax({mode: m_bridged, link: 'br1'})
+ CheckSyntax({mode: m_routed, link: 'default'})
+ self.assertRaises(errors.ConfigurationError,
+ CheckSyntax, {mode: '000invalid', link: 'any'})
+ self.assertRaises(errors.ConfigurationError,
+ CheckSyntax, {mode: m_bridged, link: None})
+ self.assertRaises(errors.ConfigurationError,
+ CheckSyntax, {mode: m_bridged, link: ''})
+
if __name__ == '__main__':
unittest.main()