123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- import unittest
- import os
- from isc.config import ModuleSpec, ModuleSpecError
- import isc.cc.data
- class TestModuleSpec(unittest.TestCase):
- def setUp(self):
- if 'CONFIG_TESTDATA_PATH' in os.environ:
- self.data_path = os.environ['CONFIG_TESTDATA_PATH']
- else:
- self.data_path = "../../../testdata"
- def spec_file(self, filename):
- return(self.data_path + os.sep + filename)
- def read_spec_file(self, filename):
- return isc.config.module_spec_from_file(self.spec_file(filename))
- def spec1(self, dd):
- module_spec = dd.get_full_spec()
- self.assert_('module_name' in module_spec)
- self.assertEqual(module_spec['module_name'], "Spec1")
-
- def test_open_file_name(self):
- dd = self.read_spec_file("spec1.spec")
- self.spec1(dd)
- def test_open_file_obj(self):
- file1 = open(self.spec_file("spec1.spec"))
- dd = isc.config.module_spec_from_file(file1)
- self.spec1(dd)
- def test_open_bad_file_obj(self):
- self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, 1)
-
-
- self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, self.spec_file("spec28.spec"), False)
- my_spec_file = open(self.spec_file("spec28.spec"))
- self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, my_spec_file, False)
- self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, self.spec_file("does_not_exist"), False)
- def test_bad_specfiles(self):
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec3.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec4.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec5.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec6.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec7.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec8.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec9.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec10.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec11.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec12.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec13.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec14.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec15.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec16.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec17.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec18.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec19.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec20.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec21.spec")
- self.assertRaises(ModuleSpecError, self.read_spec_file, "spec26.spec")
- def validate_data(self, specfile_name, datafile_name):
- dd = self.read_spec_file(specfile_name);
- data_file = open(self.spec_file(datafile_name))
- data_str = data_file.read()
- data = isc.cc.data.parse_value_str(data_str)
- return dd.validate_config(True, data)
-
- def test_data_validation(self):
- self.assertEqual(True, self.validate_data("spec22.spec", "data22_1.data"))
- self.assertEqual(False, self.validate_data("spec22.spec", "data22_2.data"))
- self.assertEqual(False, self.validate_data("spec22.spec", "data22_3.data"))
- self.assertEqual(False, self.validate_data("spec22.spec", "data22_4.data"))
- self.assertEqual(False, self.validate_data("spec22.spec", "data22_5.data"))
- self.assertEqual(True, self.validate_data("spec22.spec", "data22_6.data"))
- self.assertEqual(True, self.validate_data("spec22.spec", "data22_7.data"))
- self.assertEqual(False, self.validate_data("spec22.spec", "data22_8.data"))
- def validate_command_params(self, specfile_name, datafile_name, cmd_name):
- dd = self.read_spec_file(specfile_name);
- data_file = open(self.spec_file(datafile_name))
- data_str = data_file.read()
- params = isc.cc.data.parse_value_str(data_str)
- return dd.validate_command(cmd_name, params)
- def test_command_validation(self):
- self.assertEqual(True, self.validate_command_params("spec27.spec", "data22_1.data", 'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_2.data",'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_3.data", 'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_4.data", 'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_5.data", 'cmd1'))
- self.assertEqual(True, self.validate_command_params("spec27.spec", "data22_6.data", 'cmd1'))
- self.assertEqual(True, self.validate_command_params("spec27.spec", "data22_7.data", 'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_8.data", 'cmd1'))
- self.assertEqual(False, self.validate_command_params("spec27.spec", "data22_8.data", 'cmd2'))
- def test_init(self):
- self.assertRaises(ModuleSpecError, ModuleSpec, 1)
- module_spec = isc.config.module_spec_from_file(self.spec_file("spec1.spec"), False)
- self.spec1(module_spec)
- module_spec = isc.config.module_spec_from_file(self.spec_file("spec25.spec"), True)
- self.assertEqual("Spec25", module_spec.get_module_name())
- self.assertEqual("Just an empty module", module_spec.get_module_description())
- def test_str(self):
- module_spec = isc.config.module_spec_from_file(self.spec_file("spec1.spec"), False)
- self.assertEqual(module_spec.__str__(), "{'module_name': 'Spec1'}")
- def test_check_module_spec(self):
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check, 1)
-
- def test_check_command_spec(self):
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_command_spec, 1 )
-
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_command_spec, [ 1 ] )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_command_spec,
- [ { 'command_name': 1,
- 'command_description': 'just for testing',
- 'command_args': [
- { 'item_name': 'arg1',
- 'item_type': 'string',
- 'item_optional': True
- }
- ]
- }
- ]
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_command_spec,
- [ { 'command_name': 'test_command',
- 'command_description': 1,
- 'command_args': [
- { 'item_name': 'arg1',
- 'item_type': 'string',
- 'item_optional': True
- }
- ]
- }
- ]
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_command_spec,
- [ { 'command_name': 'test_command',
- 'command_args': [ 1 ]
- }
- ]
- )
- def test_check_item_spec(self):
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec, 1 )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': 1,
- 'item_type': "string",
- 'item_optional': False,
- 'item_default': "asdf"
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "bad_type",
- 'item_optional': False,
- 'item_default': "asdf"
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': 1,
- 'item_optional': False,
- 'item_default': "asdf"
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "string",
- 'item_optional': False,
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "string",
- 'item_optional': 1,
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "string",
- 'item_optional': False,
- 'item_default': 1
- }
- )
-
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "list",
- 'item_optional': False,
- 'item_default': []
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "list",
- 'item_optional': False,
- 'item_default': [],
- 'list_item_spec': 1
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "map",
- 'item_optional': False,
- 'item_default': {}
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "map",
- 'item_optional': False,
- 'item_default': {},
- 'map_item_spec': 1
- }
- )
- self.assertRaises(ModuleSpecError, isc.config.module_spec._check_item_spec,
- { 'item_name': "an_item",
- 'item_type': "map",
- 'item_optional': False,
- 'item_default': {},
- 'map_item_spec': [ 1 ]
- }
- )
- def test_validate_type(self):
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'integer' }, 1, errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'integer' }, "a", None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'integer' }, "a", errors))
- self.assertEqual(['a should be an integer'], errors)
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'real' }, 1.1, errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'real' }, "a", None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'real' }, "a", errors))
- self.assertEqual(['a should be a real'], errors)
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'boolean' }, True, errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'boolean' }, "a", None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'boolean' }, "a", errors))
- self.assertEqual(['a should be a boolean'], errors)
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'string' }, "a", errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'string' }, 1, None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'string' }, 1, errors))
- self.assertEqual(['1 should be a string'], errors)
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'list' }, [ 1, 1], errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'list' }, 1, None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'list' }, 1, errors))
- self.assertEqual(['1 should be a list'], errors)
- errors = []
- self.assertEqual(True, isc.config.module_spec._validate_type({ 'item_type': 'map' }, {"a": 1}, errors))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'map' }, 1, None))
- self.assertEqual(False, isc.config.module_spec._validate_type({ 'item_type': 'map' }, 1, errors))
- self.assertEqual(['1 should be a map'], errors)
- def test_validate_spec(self):
- spec = { 'item_name': "an_item",
- 'item_type': "string",
- 'item_optional': False,
- 'item_default': "asdf"
- }
- errors = []
- self.assertEqual(False, isc.config.module_spec._validate_spec(spec, True, {}, None))
- self.assertEqual(False, isc.config.module_spec._validate_spec(spec, True, {}, errors))
- self.assertEqual(['non-optional item an_item missing'], errors)
- def test_validate_unknown_items(self):
- spec = [{ 'item_name': "an_item",
- 'item_type': "string",
- 'item_optional': True,
- 'item_default': "asdf"
- }]
- errors = []
- self.assertEqual(False, isc.config.module_spec._validate_spec_list(spec, True, { 'does_not_exist': 1 }, None))
- self.assertEqual(False, isc.config.module_spec._validate_spec_list(spec, True, { 'does_not_exist': 1 }, errors))
- self.assertEqual(['unknown item does_not_exist'], errors)
-
- if __name__ == '__main__':
- unittest.main()
|