configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/tests/unittest_rule_plugin.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
import unittest
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    18
import os
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
import logging
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    21
from cone.public import plugin,api
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
from ruleplugin import ruleml
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    23
from testautomation.base_testcase import BaseTestCase
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
# Hardcoded value of testdata folder that must be under the current working dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
testdata  = os.path.join(ROOT_PATH,'ruleproject')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
class TestRulePlugin(unittest.TestCase):    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
      
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    36
class TestRulePluginOnFileStorage(BaseTestCase):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    def test_get_impl_container(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules')))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        config = project.get_configuration('root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        implcontainer = plugin.get_impl_set(config, 'ruleml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        impl = implcontainer.get_implementations_by_file('implml/rules.ruleml')[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    43
        EXPECTED_REFS = ['imaker.imagetarget',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    44
                         'mms.imagesize',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    45
                         'imakerapi.outputLocationY',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    46
                         'operations.minus',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    47
                         'operations.minus1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    48
                         'operations.minus4',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    49
                         'operations.minus6',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    50
                         'Foo.Bar']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    51
        self.assertEquals(sorted(EXPECTED_REFS), sorted(impl.get_child_refs()))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        self.assertEquals([], impl.list_output_files())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    54
    def test_rules_get_refs(self):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        config = project.get_configuration('root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        implcontainer = plugin.get_impl_set(config, 'ruleml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        ruleimpl = implcontainer.get_implementations_by_file('implml/container_with_rules.ruleml')[0]
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    60
        self.assertEquals(ruleimpl.get_child_refs(), [u'imakerapi.PRODUCT_NAME',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    61
                                                      u'imaker.imagetarget'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    62
        self.assertEquals(len(ruleimpl.get_outputs()), 8)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    63
        outputs = [output.name for output in ruleimpl.get_outputs()]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
        self.assertEquals(outputs, [u'imakerapi.PRODUCT_NAME', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    65
                                    u'imakerapi.outputLocation', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    66
                                    u'StringConcatenationTest.Result1', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    67
                                    u'StringConcatenationTest.Result2', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    68
                                    u'StringConcatenationTest.Result3', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    69
                                    u'StringConcatenationTest.Result4', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    70
                                    u'StringConcatenationTest.Result5', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    71
                                    u'StringConcatenationTest.Result6'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    72
        inputs = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    73
        for output in ruleimpl.get_outputs():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    74
            inputs += output.implementation.get_refs()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    75
        self.assertEquals(inputs, [u'imakerapi.PRODUCT_NAME', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    76
                                   u'imaker.imagetarget'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    77
        impls_refs = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    78
        for output in ruleimpl.get_outputs():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    79
            impls_refs.append("%s <= %s" % (output.name, output.implementation.implml.ref))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    80
        self.assertEquals(impls_refs, [u'imakerapi.PRODUCT_NAME <= implml/container_with_rules.ruleml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    81
                                       u'imakerapi.outputLocation <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    82
                                       u'StringConcatenationTest.Result1 <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    83
                                       u'StringConcatenationTest.Result2 <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    84
                                       u'StringConcatenationTest.Result3 <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    85
                                       u'StringConcatenationTest.Result4 <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    86
                                       u'StringConcatenationTest.Result5 <= implml/container_with_rules.ruleml', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    87
                                       u'StringConcatenationTest.Result6 <= implml/container_with_rules.ruleml'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    88
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    89
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    90
    def test_impl_container_execute_pre_rules(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    91
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    92
        project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "a" ))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    93
        config = project.get_configuration('root.confml')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    94
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    95
        implcontainer = plugin.get_impl_set(config, 'ruleml$')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    96
        ruleimpl = implcontainer.get_implementations_by_file('implml/container_with_rules.ruleml')[0]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    97
        context = plugin.GenerationContext(configuration=config)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        context.phase = "pre"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        ruleimpl.generate(context)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        lastconfig = config.get_last_configuration()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        self.assertEquals(lastconfig.list_all_datas(),['imakerapi', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
                                                       'imakerapi.outputLocation', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
                                                       'StringConcatenationTest', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
                                                       'StringConcatenationTest.Result1', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
                                                       'StringConcatenationTest.Result2'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
        self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        project.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
    def test_impl_container_execute_rules(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   114
        project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "r" ))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        config = project.get_configuration('root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        implcontainer = plugin.get_impl_set(config, 'ruleml$')
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   118
        context = plugin.GenerationContext(configuration=config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   119
        implcontainer.generate(context)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        lastconfig = config.get_last_configuration()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        self.assertEquals(lastconfig.get_path(), plugin.AUTOCONFIG_CONFML)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_ref(),'outputLocation')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        self.assertEquals(lastconfig.get_data('imakerapi.outputLocation').get_value(),'2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        project.close()
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   126
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   127
    def _prepare_log(self, log_file, level=logging.DEBUG, formatter="%(levelname)s - %(name)s - %(message)s", logger='cone'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   128
        FULL_PATH = os.path.join(ROOT_PATH, "temp", log_file)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   129
        self.remove_if_exists(FULL_PATH)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   130
        self.create_dir_for_file_path(FULL_PATH)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   132
        handler = logging.FileHandler(FULL_PATH)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   133
        handler.setLevel(level)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   134
        frm = logging.Formatter(formatter)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   135
        handler.setFormatter(frm)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   136
        logger = logging.getLogger(logger)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   137
        logger.addHandler(handler)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   138
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   139
        return [FULL_PATH, handler, logger]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   140
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   141
    def test_rule_debug_messages(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   142
        log_file, handler, logger = self._prepare_log('debug_msg_test.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   143
        project = None
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   144
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   145
            project = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'ruleproject/rules'), "r" ))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   146
            config = project.get_configuration('root.confml')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   147
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   148
            implcontainer = plugin.get_impl_set(config, r'rules\.ruleml$')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   149
            context = plugin.GenerationContext(configuration=config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   150
            implcontainer.generate(context)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   151
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   152
            self.assert_file_contains(log_file,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   153
                ["Set imakerapi.outputLocationY = 'hello' from ConfigureRelation(ref='implml/rules.ruleml', lineno=8)",
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   154
                 "Set operations.minus = 18 from ConfigureRelation(ref='implml/rules.ruleml', lineno=9)",
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   155
                 "Set SequenceTest.Sequence1 = [['foo', 1], ['bar', 2], ['baz', 3]] from ConfigureRelation(ref='implml/rules.ruleml', lineno=23)"])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   156
        finally:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   157
            logger.removeHandler(handler)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   158
            if project: project.close()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
    unittest.main()