configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/tests/unittest_rule_plugin.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    13 #
    13 #
    14 # Description: 
    14 # Description: 
    15 #
    15 #
    16 
    16 
    17 import unittest
    17 import unittest
    18 import os, shutil
    18 import os
    19 import sys
       
    20 import logging
    19 import logging
    21 import __init__
       
    22 
    20 
    23 from cone.public import exceptions,plugin,api,container
    21 from cone.public import plugin,api
    24 from cone.storage import filestorage
       
    25 from ruleplugin import ruleml
    22 from ruleplugin import ruleml
       
    23 from testautomation.base_testcase import BaseTestCase
    26 
    24 
    27 # Hardcoded value of testdata folder that must be under the current working dir
    25 # Hardcoded value of testdata folder that must be under the current working dir
    28 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    26 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    29 testdata  = os.path.join(ROOT_PATH,'ruleproject')
    27 testdata  = os.path.join(ROOT_PATH,'ruleproject')
    30 
    28 
    33         pass
    31         pass
    34       
    32       
    35     def tearDown(self):
    33     def tearDown(self):
    36         pass
    34         pass
    37 
    35 
    38 class TestRulePluginOnFileStorage(unittest.TestCase):    
    36 class TestRulePluginOnFileStorage(BaseTestCase):
    39     def test_get_impl_container(self):
    37     def test_get_impl_container(self):
    40         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules')))
    38         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules')))
    41         config = project.get_configuration('root.confml')
    39         config = project.get_configuration('root.confml')
    42         implcontainer = plugin.get_impl_set(config, 'ruleml$')
    40         implcontainer = plugin.get_impl_set(config, 'ruleml$')
    43         impl = implcontainer.get_implementations_by_file('implml/rules.ruleml')[0]
    41         impl = implcontainer.get_implementations_by_file('implml/rules.ruleml')[0]
    44         
    42         
    45         self.assertEquals(None, impl.get_refs())
    43         EXPECTED_REFS = ['imaker.imagetarget',
       
    44                          'mms.imagesize',
       
    45                          'imakerapi.outputLocationY',
       
    46                          'operations.minus',
       
    47                          'operations.minus1',
       
    48                          'operations.minus4',
       
    49                          'operations.minus6',
       
    50                          'Foo.Bar']
       
    51         self.assertEquals(sorted(EXPECTED_REFS), sorted(impl.get_child_refs()))
    46         self.assertEquals([], impl.list_output_files())
    52         self.assertEquals([], impl.list_output_files())
    47 
    53 
    48     def test_impl_container_execute_pre_rules(self):
    54     def test_rules_get_refs(self):
    49         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
    55         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
    50         config = project.get_configuration('root.confml')
    56         config = project.get_configuration('root.confml')
    51         
    57         
    52         implcontainer = plugin.get_impl_set(config, 'ruleml$')
    58         implcontainer = plugin.get_impl_set(config, 'ruleml$')
    53         ruleimpl = implcontainer.get_implementations_by_file('implml/container_with_rules.ruleml')[0]
    59         ruleimpl = implcontainer.get_implementations_by_file('implml/container_with_rules.ruleml')[0]
    54         context = plugin.GenerationContext()
    60         self.assertEquals(ruleimpl.get_child_refs(), [u'imakerapi.PRODUCT_NAME',
       
    61                                                       u'imaker.imagetarget'])
       
    62         self.assertEquals(len(ruleimpl.get_outputs()), 8)
       
    63         outputs = [output.name for output in ruleimpl.get_outputs()]
       
    64         self.assertEquals(outputs, [u'imakerapi.PRODUCT_NAME', 
       
    65                                     u'imakerapi.outputLocation', 
       
    66                                     u'StringConcatenationTest.Result1', 
       
    67                                     u'StringConcatenationTest.Result2', 
       
    68                                     u'StringConcatenationTest.Result3', 
       
    69                                     u'StringConcatenationTest.Result4', 
       
    70                                     u'StringConcatenationTest.Result5', 
       
    71                                     u'StringConcatenationTest.Result6'])
       
    72         inputs = []
       
    73         for output in ruleimpl.get_outputs():
       
    74             inputs += output.implementation.get_refs()
       
    75         self.assertEquals(inputs, [u'imakerapi.PRODUCT_NAME', 
       
    76                                    u'imaker.imagetarget'])
       
    77         impls_refs = []
       
    78         for output in ruleimpl.get_outputs():
       
    79             impls_refs.append("%s <= %s" % (output.name, output.implementation.implml.ref))
       
    80         self.assertEquals(impls_refs, [u'imakerapi.PRODUCT_NAME <= implml/container_with_rules.ruleml',
       
    81                                        u'imakerapi.outputLocation <= implml/container_with_rules.ruleml', 
       
    82                                        u'StringConcatenationTest.Result1 <= implml/container_with_rules.ruleml', 
       
    83                                        u'StringConcatenationTest.Result2 <= implml/container_with_rules.ruleml', 
       
    84                                        u'StringConcatenationTest.Result3 <= implml/container_with_rules.ruleml', 
       
    85                                        u'StringConcatenationTest.Result4 <= implml/container_with_rules.ruleml', 
       
    86                                        u'StringConcatenationTest.Result5 <= implml/container_with_rules.ruleml', 
       
    87                                        u'StringConcatenationTest.Result6 <= implml/container_with_rules.ruleml'])
       
    88         
       
    89         
       
    90     def test_impl_container_execute_pre_rules(self):
       
    91         
       
    92         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
       
    93         config = project.get_configuration('root.confml')
       
    94         
       
    95         implcontainer = plugin.get_impl_set(config, 'ruleml$')
       
    96         ruleimpl = implcontainer.get_implementations_by_file('implml/container_with_rules.ruleml')[0]
       
    97         context = plugin.GenerationContext(configuration=config)
    55         context.phase = "pre"
    98         context.phase = "pre"
    56         ruleimpl.generate(context)
    99         ruleimpl.generate(context)
    57         
   100         
    58         lastconfig = config.get_last_configuration()
   101         lastconfig = config.get_last_configuration()
    59         self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
   102         self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
    66         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
   109         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
    67         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
   110         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
    68         project.close()
   111         project.close()
    69 
   112 
    70     def test_impl_container_execute_rules(self):
   113     def test_impl_container_execute_rules(self):
    71         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
   114         project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "r" ))
    72         config = project.get_configuration('root.confml')
   115         config = project.get_configuration('root.confml')
    73         
   116         
    74         implcontainer = plugin.get_impl_set(config, 'ruleml$')
   117         implcontainer = plugin.get_impl_set(config, 'ruleml$')
    75         implcontainer.generate()
   118         context = plugin.GenerationContext(configuration=config)
       
   119         implcontainer.generate(context)
    76         
   120         
    77         lastconfig = config.get_last_configuration()
   121         lastconfig = config.get_last_configuration()
    78         self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
   122         self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
    79         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
   123         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
    80         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
   124         self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
    81         project.close()
   125         project.close()
       
   126     
       
   127     def _prepare_log(self, log_file, level=logging.DEBUG, formatter="%(levelname)s - %(name)s - %(message)s", logger='cone'):
       
   128         FULL_PATH = os.path.join(ROOT_PATH, "temp", log_file)
       
   129         self.remove_if_exists(FULL_PATH)
       
   130         self.create_dir_for_file_path(FULL_PATH)
    82         
   131         
       
   132         handler = logging.FileHandler(FULL_PATH)
       
   133         handler.setLevel(level)
       
   134         frm = logging.Formatter(formatter)
       
   135         handler.setFormatter(frm)
       
   136         logger = logging.getLogger(logger)
       
   137         logger.addHandler(handler)
       
   138         
       
   139         return [FULL_PATH, handler, logger]
       
   140     
       
   141     def test_rule_debug_messages(self):
       
   142         log_file, handler, logger = self._prepare_log('debug_msg_test.log')
       
   143         project = None
       
   144         try:
       
   145             project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "r" ))
       
   146             config = project.get_configuration('root.confml')
       
   147             
       
   148             implcontainer = plugin.get_impl_set(config, r'rules\.ruleml$')
       
   149             context = plugin.GenerationContext(configuration=config)
       
   150             implcontainer.generate(context)
       
   151             
       
   152             self.assert_file_contains(log_file,
       
   153                 ["Set imakerapi.outputLocationY = 'hello' from ConfigureRelation(ref='implml/rules.ruleml', lineno=8)",
       
   154                  "Set operations.minus = 18 from ConfigureRelation(ref='implml/rules.ruleml', lineno=9)",
       
   155                  "Set SequenceTest.Sequence1 = [['foo', 1], ['bar', 2], ['baz', 3]] from ConfigureRelation(ref='implml/rules.ruleml', lineno=23)"])
       
   156         finally:
       
   157             logger.removeHandler(handler)
       
   158             if project: project.close()
    83         
   159         
    84 if __name__ == '__main__':
   160 if __name__ == '__main__':
    85     unittest.main()
   161     unittest.main()