Home | History | Annotate | Download | only in Domains
      1 # -*-coding:utf-8 -*
      2 
      3 # Copyright (c) 2011-2015, Intel Corporation
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without modification,
      7 # are permitted provided that the following conditions are met:
      8 #
      9 # 1. Redistributions of source code must retain the above copyright notice, this
     10 # list of conditions and the following disclaimer.
     11 #
     12 # 2. Redistributions in binary form must reproduce the above copyright notice,
     13 # this list of conditions and the following disclaimer in the documentation and/or
     14 # other materials provided with the distribution.
     15 #
     16 # 3. Neither the name of the copyright holder nor the names of its contributors
     17 # may be used to endorse or promote products derived from this software without
     18 # specific prior written permission.
     19 #
     20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     21 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     22 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     23 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     24 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     25 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     26 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     27 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     29 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30 
     31 """
     32 Effect of criteria changes on configuration testcases
     33 
     34 List of tested functions :
     35 --------------------------
     36     - [applyConfigurations] function
     37     - [setCriterionState] function
     38 
     39 Test cases :
     40 ------------
     41     - test_Combinatorial_Criteria
     42 """
     43 import os
     44 from Util.PfwUnitTestLib import PfwTestCase
     45 from Util import ACTLogging
     46 log=ACTLogging.Logger()
     47 
     48 class TestCases(PfwTestCase):
     49 
     50     def setUp(self):
     51         self.pfw.sendCmd("setTuningMode", "on")
     52         self.reference_xml = os.environ["PFW_TEST_TOOLS"] + "/xml/XML_Test/Reference_Criteria.xml"
     53         self.temp_status="f_Config_Status"
     54         # Expected results are defined by Reference_Criteria.xml configuration settings
     55         self.expected_result = [["Conf_1_1", "<none>",   "Conf_3_0"] ,
     56                                 ["Conf_1_1", "Conf_2_1", "Conf_3_1"] ,
     57                                 ["Conf_1_1", "Conf_2_1", "Conf_3_0"] ,
     58                                 ["Conf_1_1", "Conf_2_0", "Conf_3_0"] ,
     59                                 ["Conf_1_0", "Conf_2_0", "Conf_3_0"] ,
     60                                 ["Conf_1_1", "Conf_2_0", "Conf_3_0"] ,
     61                                 ["Conf_1_1", "Conf_2_0", "Conf_3_1"]]
     62         self.criterion_setup = [["0x2", "1"] ,
     63                                 ["0x2", "0"] ,
     64                                 ["0x1", "0"] ,
     65                                 ["0x1", "1"] ,
     66                                 ["0x3", "4"] ,
     67                                 ["0x0", "1"]]
     68         # names used in this test refer to names used in Reference_Criteria.xml
     69         self.new_domain_name = "Domain"
     70         self.crit_change_iteration = 6
     71 
     72     def tearDown(self):
     73         self.pfw.sendCmd("setTuningMode", "off", expectSuccess=False)
     74 
     75     def test_Combinatorial_Criteria(self):
     76         """
     77         Testing combinatorial criteria
     78         ------------------------------
     79             Test case description :
     80             ~~~~~~~~~~~~~~~~~~~~~~~
     81                 Checking that PFW behaviour is in line with expectations when setting criteria states.
     82                     - Test of all combinatorial of criteria and possible errors
     83                         - nominal case in configuration selection
     84                         - conflict in configuration selection
     85                         - no configuration selected
     86                         - error in criterion setting
     87                     - test of compound rules : All / Any
     88                     - test of matches cases  : Is / IsNot / Include / Exclude
     89                     - test of criteria types : Inclusive / Exclusive
     90             Tested commands :
     91             ~~~~~~~~~~~~~~~~~
     92                 - [applyConfigurations] function
     93                 - [setCriterionState] function
     94             Expected result :
     95             ~~~~~~~~~~~~~~~~~
     96                 - Configurations setting conform to expected behavior
     97         """
     98         log.D(self.test_Combinatorial_Criteria.__doc__)
     99 
    100         # Import a reference XML file
    101         log.I("Import Domains with settings from %s"%(self.reference_xml))
    102         out, err = self.pfw.sendCmd("importDomainsWithSettingsXML",self.reference_xml, "")
    103         assert err == None, log.E("Command [importDomainsWithSettingsXML %s] : %s"%(self.reference_xml,err))
    104         assert out == "Done", log.F("When using function importDomainsWithSettingsXML %s]"%(self.reference_xml))
    105 
    106         # Check number of domain
    107         log.I("Current domains listing")
    108         log.I("Command [listDomains]")
    109         out, err = self.pfw.sendCmd("listDomains","","")
    110         assert err == None, log.E("Command [listDomains] : %s"%(err))
    111         log.I("Command [listDomains] : correctly executed")
    112 
    113         # Applying default configurations
    114         out, err = self.pfw.sendCmd("setTuningMode", "off")
    115         assert err == None, log.E("Command [setTuningMode]")
    116         out, err = self.hal.sendCmd("applyConfigurations")
    117         assert err == None, log.E("Command HAL [applyConfigurations]")
    118 
    119         # Saving default status
    120         out, err = self.pfw.sendCmd("status")
    121         f_Config_Status = open(self.temp_status, "w")
    122         f_Config_Status.write(out)
    123         f_Config_Status.close()
    124 
    125         # Test cases iterations
    126         for iteration in range (self.crit_change_iteration+1):
    127 
    128             # Criteria settings
    129             # No criteria are set at the first iteration for testing default configurations
    130             if iteration != 0:
    131                 log.I("Setting criterion %s to %s" % ("Crit_0", str(self.criterion_setup[iteration-1][0])))
    132                 state = str(self.criterion_setup[iteration-1][0])
    133                 out, err = self.hal.sendCmd("setCriterionState", "Crit_0", state)
    134                 assert err == None, log.E("Command HAL [setCriterionState]")
    135                 log.I("Setting criterion %s to %s" % ("Crit_1", str(self.criterion_setup[iteration-1][1])))
    136                 state = str(self.criterion_setup[iteration-1][1])
    137                 out, err = self.hal.sendCmd("setCriterionState", "Crit_1", state)
    138                 assert err == None, log.E("Command HAL [setCriterionState]")
    139                 log.I("Applaying new configurations")
    140                 out, err = self.hal.sendCmd("applyConfigurations")
    141                 assert err == None, log.E("Command HAL [applyConfigurations]")
    142                 out, err = self.pfw.sendCmd("status")
    143                 assert err == None, log.E("Command [status]")
    144                 os.remove(self.temp_status)
    145                 f_Config_Status = open(self.temp_status, "w")
    146                 f_Config_Status.write(out)
    147                 f_Config_Status.close()
    148             else :
    149                 log.I("Default Configurations - no criteria are set :")
    150                 out, err = self.pfw.sendCmd("status")
    151                 os.remove(self.temp_status)
    152                 f_Config_Status = open(self.temp_status, "w")
    153                 f_Config_Status.write(out)
    154                 f_Config_Status.close()
    155 
    156             # Configurations checking
    157             for domain in range (len(self.expected_result[0])):
    158                 domain_name = "".join([self.new_domain_name, "_", str(domain+1), "[<none>]"])
    159                 config = str(self.expected_result[iteration][domain])
    160                 log.I("Checking that domain %s is set to configuration : %s" % (domain_name,config))
    161                 for line in open(self.temp_status, "r"):
    162                     if domain_name in line:
    163                         line = line.replace(domain_name,'')
    164                         line = line.replace(":","")
    165                         line = line.replace(' ','')
    166                         line = line.replace("\n","")
    167                         assert line == config, log.F("Domain %s - Expected configuration : %s, found : %s" % (domain_name,config,line))
    168                         log.I("Domain %s - configuration correctly set to %s" % (domain_name,line))
    169 
    170         # Temporary files deletion
    171         os.remove(self.temp_status)
    172