Source code for virttest.utils_config_unittest

#!/usr/bin/env python

import os
import unittest
import common
import tempfile
import utils_config

# Test conf file content
content = """# This is a comment line.
a = 1
b = [hi, there]
c = hello
d = "hi, there"
e = [hi,
    there]

"""

# Expected changed conf file content
changed_content = """a = 1
b = [hi, there]
c = hello
d = "hi, there"
f = test

"""


[docs]class SectionlessConfigTest(unittest.TestCase):
[docs] def test_accessers(self): config_file = tempfile.NamedTemporaryFile() config_path = config_file.name config_file.close() try: config_file = open(config_path, 'w') config_file.write(content) config_file.close() # Test 'try...finally...' usage. config = utils_config.SectionlessConfig(config_path) try: # Test loader. self.assertEqual(len(config), 5) self.assertEqual(config['a'], '1') self.assertEqual(config['b'], '[hi, there]') self.assertEqual(config['c'], 'hello') self.assertEqual(config['d'], '"hi, there"') self.assertEqual(config['e'], '[hi,\nthere]') # Test getter. try: config['f'] except Exception, e: self.assertEqual(utils_config.ConfigNoOptionError, e.__class__) self.assertTrue('no option' in str(e)) # Test setter. config['f'] = 'test' self.assertEqual(config['f'], 'test') # Test deleter. # delete exist option. del config['f'] # delete non-exist option. try: del config['f'] except Exception, e: self.assertEqual(utils_config.ConfigNoOptionError, e.__class__) self.assertTrue('no option' in str(e)) # Test contain. self.assertTrue('a' in config) self.assertFalse('f' in config) finally: config.restore() # Test 'with' usage. with utils_config.SectionlessConfig(config_path) as config: # Test loader. self.assertEqual(len(config), 5) self.assertEqual(config['a'], '1') self.assertEqual(config['b'], '[hi, there]') self.assertEqual(config['c'], 'hello') self.assertEqual(config['d'], '"hi, there"') self.assertEqual(config['e'], '[hi,\nthere]') # Test getter. try: config['f'] except Exception, e: self.assertEqual(utils_config.ConfigNoOptionError, e.__class__) self.assertTrue('no option' in str(e)) # Test setter. config['f'] = 'test' self.assertEqual(config['f'], 'test') # Test deleter. del config['f'] try: config['f'] except Exception, e: self.assertEqual(utils_config.ConfigNoOptionError, e.__class__) self.assertTrue('no option' in str(e)) # Test contain. self.assertTrue('a' in config) self.assertFalse('f' in config) finally: os.remove(config_path)
[docs] def test_specific_accessers(self): config_file = tempfile.NamedTemporaryFile() config_path = config_file.name config_file.close() try: config_file = open(config_path, 'w') config_file.write(content) config_file.close() config = utils_config.SectionlessConfig(config_path) try: config.set_string('a', 'Hi') self.assertEqual(config['a'], '"Hi"') self.assertEqual(config.get_string('a'), 'Hi') config['a'] = "'Hi'" self.assertEqual(config.get_string('a'), 'Hi') config['a'] = 'Hi' self.assertRaises(ValueError, config.get_string, 'a') config['a'] = '"Hi' self.assertRaises(ValueError, config.get_string, 'a') config.set_int('a', 15) self.assertEqual(config['a'], '15') self.assertEqual(config.get_int('a'), 15) config.set_int('a', -15) self.assertEqual(config.get_int('a'), -15) config.set_string('a', 'invalid') self.assertRaises(ValueError, config.get_float, 'a') config.set_float('a', 15.123) self.assertEqual(config['a'], '15.123') self.assertEqual(config.get_float('a'), 15.123) config.set_string('a', 'invalid') self.assertRaises(ValueError, config.get_float, 'a') config.set_boolean('a', True) self.assertEqual(config['a'], '1') self.assertTrue(config.get_boolean('a')) config.set_string('a', 'Yes') self.assertTrue(config.get_boolean('a')) config.set_string('a', 'ON') self.assertTrue(config.get_boolean('a')) config.set_boolean('a', False) self.assertEqual(config['a'], '0') self.assertFalse(config.get_boolean('a')) config.set_string('a', 'fAlSe') self.assertFalse(config.get_boolean('a')) config.set_string('a', 'off') self.assertFalse(config.get_boolean('a')) config.set_string('a', 'invalid') self.assertRaises(ValueError, config.get_boolean, 'a') config.set_list('a', [15, 'Hello']) self.assertEqual(config['a'], '["15", "Hello"]') config.set_list('a', [15, 'Hello']) self.assertEqual(config.get_list('a'), ["15", "Hello"]) config['a'] = '[15, \n "Hello"]' self.assertEqual(config.get_list('a'), ["15", "Hello"]) config['a'] = '[15, "Hi, there"]' self.assertEqual(config.get_list('a'), ["15", "Hi, there"]) finally: config.restore() finally: os.remove(config_path)
[docs] def test_restore(self): config_file = tempfile.NamedTemporaryFile() config_path = config_file.name config_file.close() # Restore after use. try: config_file = open(config_path, 'w') config_file.write(content) config_file.close() config = utils_config.SectionlessConfig(config_path) try: # Change the config. config['f'] = 'test' self.assertEqual(config['f'], 'test') del config['e'] finally: config.restore() finally: final_file = open(config_path) try: self.assertEqual(final_file.read(), content) finally: final_file.close() os.remove(config_path) # Don't restore after use. try: config_file = open(config_path, 'w') config_file.write(content) config_file.close() config = utils_config.SectionlessConfig(config_path) # Change the config. config['f'] = 'test' self.assertEqual(config['f'], 'test') del config['e'] finally: final_file = open(config_path) try: self.assertEqual(final_file.read(), changed_content) finally: final_file.close() os.remove(config_path)
[docs] def test_sync_file(self): config_file = tempfile.NamedTemporaryFile() config_path = config_file.name config_file.close() try: config_file = open(config_path, 'w') config_file.write(content) config_file.close() config = utils_config.SectionlessConfig(config_path) try: # Change the config. config['f'] = 'test' self.assertEqual(config['f'], 'test') del config['e'] # Test the change is applied to target file. cur_file = open(config_path) try: self.assertEqual(cur_file.read(), changed_content) finally: cur_file.close() finally: config.restore() finally: os.remove(config_path)
[docs]class LibvirtConfigCommonTest(unittest.TestCase):
[docs] class UnimplementedConfig(utils_config.LibvirtConfigCommon): pass
[docs] class NoTypesConfig(utils_config.LibvirtConfigCommon): conf_path = '/tmp/config_unittest.conf'
[docs] class UndefinedTypeConfig(utils_config.LibvirtConfigCommon): __option_types__ = { 'test': 'invalid_type', 'test2': 'boolean', } conf_path = '/tmp/config_unittest.conf'
[docs] def test_unimplemented(self): try: self.UnimplementedConfig() except Exception, e: self.assertEqual(utils_config.ConfigError, e.__class__) self.assertTrue("not set up" in str(e))
[docs] def test_no_path(self): try: self.NoTypesConfig() except Exception, e: self.assertEqual(utils_config.ConfigError, e.__class__) self.assertTrue("not set up" in str(e))
[docs] def test_undefined_type(self): try: config = self.UndefinedTypeConfig() except Exception, e: self.assertEqual(utils_config.ConfigError, e.__class__) self.assertTrue("don't exists" in str(e)) try: config_file = open('/tmp/config_unittest.conf', 'w') config_file.write('') config_file.close() config = self.UndefinedTypeConfig() # Test setter getter # Normal option config.test2 = True self.assertEqual(config.test2, True) # Repeat set option config.test2 = False self.assertEqual(config.test2, False) # Set unknown type try: config.test = '1' except Exception, e: self.assertEqual(utils_config.LibvirtConfigUnknownKeyTypeError, e.__class__) self.assertTrue('Unknown type' in str(e)) # Get unknown type try: print config.test except Exception, e: self.assertEqual(utils_config.LibvirtConfigUnknownKeyTypeError, e.__class__) self.assertTrue('Unknown type' in str(e)) # Set Get not defined type config.test3 = "abc" self.assertEqual(config.test3, "abc") config.test3 = True self.assertTrue(config.test3) # Test deleter # Normal option del config.test2 # Non set option del config.test2 # Unknown type option try: del config.test except Exception, e: self.assertEqual(utils_config.LibvirtConfigUnknownKeyTypeError, e.__class__) self.assertTrue('Unknown type' in str(e)) # Not defined option try: del config.test3 except Exception, e: self.assertEqual(utils_config.LibvirtConfigUnknownKeyError, e.__class__) self.assertTrue('Unknown config key' in str(e)) config.restore() finally: os.remove('/tmp/config_unittest.conf')
[docs]class LibvirtConfigTest(unittest.TestCase):
[docs] def test_accessers(self): config_file = tempfile.NamedTemporaryFile() config_path = config_file.name config_file.close() try: config_file = open(config_path, 'w') config_file.write('') config_file.close() config = utils_config.LibvirtdConfig(path=config_path) # Test internal property. self.assertEqual(config.conf_path, config_path) # Test undefined property. try: config.undefined_property except Exception, e: self.assertEqual(utils_config.LibvirtConfigUnknownKeyError, e.__class__) self.assertTrue('Unknown config key' in str(e)) # Test defined boolean property. self.assertEqual(config.listen_tls, None) config.listen_tls = 1 self.assertEqual(config.get_raw('listen_tls'), '1') self.assertEqual(config.listen_tls, 1) config.listen_tls = False self.assertEqual(config.get_raw('listen_tls'), '0') self.assertEqual(config.listen_tls, 0) config.listen_tls = "1" self.assertEqual(config.get_raw('listen_tls'), '1') config.listen_tls = "undefined" self.assertEqual(config.get_raw('listen_tls'), 'undefined') del config.listen_tls self.assertEqual(config.listen_tls, None) # Test defined string property. self.assertEqual(config.host_uuid, None) config.host_uuid = 1 self.assertEqual(config.get_raw('host_uuid'), '"1"') config.host_uuid = 'a' self.assertEqual(config.get_raw('host_uuid'), '"a"') # Test defined integer property. self.assertEqual(config.max_clients, None) config.max_clients = 1 self.assertEqual(config.get_raw('max_clients'), '1') # Test defined list property. self.assertEqual(config.access_drivers, None) config.access_drivers = [1, "a"] self.assertEqual( config.get_raw('access_drivers'), '["1", "a"]') finally: os.remove(config_path)
if __name__ == '__main__': unittest.main()