buildframework/helium/tools/common/python/lib/cpythontest/test_configuration_model.py
changeset 179 d8ac696cc51f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/python/lib/cpythontest/test_configuration_model.py	Wed Dec 23 19:29:07 2009 +0200
@@ -0,0 +1,120 @@
+#============================================================================ 
+#Name        : test_configuration_model.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "Eclipse Public License v1.0"
+#which accompanies this distribution, and is available
+#at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+#Initial Contributors:
+#Nokia Corporation - initial contribution.
+#
+#Contributors:
+#
+#Description:
+#===============================================================================
+
+import logging
+import os
+import sys
+import unittest
+import nose
+
+import configuration
+import configuration_model
+
+
+logger = logging.getLogger('test.configuration_model')
+#logging.basicConfig(level=logging.DEBUG)
+
+class GroupDefTest(unittest.TestCase):
+    """ Check config model groups are correctly defined. """
+    
+    def setUp(self):
+        """ Create model. """
+        self.model = configuration_model.DataModel('tests/data/data_model_test.xml')
+        
+    def test_init_model(self):
+        """ Test groups can be created. """
+        assert len(self.model.properties.keys()) == 3
+        assert len(self.model.groups.keys()) == 1
+        
+        prop1 = self.model.properties['test.property.1']
+        assert prop1.description == 'Test property one.'
+        
+        prop2 = self.model.properties['test.property.2']
+        assert prop2.description == 'Test property two.'
+        
+        assert self.model.groups['testGroup'] != None
+
+    def test_property_not_in_model(self):
+        """ Property not in model is identified. """
+        data = {'missing.property': 'foobar', 'test.property.1': '1'}
+        config = configuration.Configuration(data)
+        items = self.model.validate_config(config)
+        
+        assert len(items) == 2
+        assert isinstance(items[0], configuration_model.MissingFromDataModelItem)
+    
+    def test_required_property_in_group_not_defined(self):
+        """ Required property in a group missing from config is identified. """
+        config = configuration.Configuration({'test.property.1': '1', 'test.property.3': '3'})
+        items = self.model.validate_config(config)
+        
+        assert len(items) == 1
+        assert isinstance(items[0], configuration_model.UndefinedRequiredInGroupItem)
+ 
+        
+class MissingFromDataModelItemTest(unittest.TestCase):
+    """ Item class operations. """
+    def test_create(self):
+        """ Basic validation item usage. """
+        item = configuration_model.MissingFromDataModelItem('test.property')
+        assert str(item) == 'Property not in data model: test.property'
+        item.log(logger)
+        
+        
+class DataModelTest(unittest.TestCase):
+    """ Checks Data Model is properly defined """
+    
+    def setUp(self):
+        """ Create model. """
+        self.model = configuration_model.DataModel('tests/data/data_model_validation_test.xml')    
+       
+    def test_init_model(self):
+        """ Test groups can be created. """
+        assert len(self.model.properties.keys()) == 3
+        assert len(self.model.groups.keys()) == 1
+        
+        prop1 = self.model.properties['test.property.1']
+        assert prop1.type == 'string'
+        assert prop1.description == 'Test property one.'
+        
+        prop2 = self.model.properties['test.property.2']
+        assert prop2.type == 'string'
+        assert prop2.description == 'Test property two.'
+        
+        assert self.model.groups['testGroup'] != None
+        
+        
+class DataModelPropertyTest(unittest.TestCase):
+    """ Checks Data Model that an exception is thrown if properties are not properly defined """
+    
+    @nose.tools.raises(Exception)
+    def setUp(self):
+        """ Create model. """
+        self.model = configuration_model.DataModel('tests/data/data_model_validation__property_test.xml')
+        
+        
+class DataModelGroupTest(unittest.TestCase):
+    """ Checks Data Model that an exception is thrown if there is a required property in groups is missing"""
+    
+    @nose.tools.raises(Exception)
+    def setUp(self):
+        """ Create model. """
+        self.model = configuration_model.DataModel('tests/data/data_model_validation_group_test.xml')
+        
+             
\ No newline at end of file