# -*-coding:utf-8 -* # Copyright (c) 2011-2015, Intel Corporation # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation and/or # other materials provided with the distribution. # # 3. Neither the name of the copyright holder nor the names of its contributors # may be used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ Effect of criteria changes on configuration testcases List of tested functions : -------------------------- - [applyConfigurations] function - [setCriterionState] function Test cases : ------------ - test_Combinatorial_Criteria """ import os from Util.PfwUnitTestLib import PfwTestCase from Util import ACTLogging log=ACTLogging.Logger() class TestCases(PfwTestCase): def setUp(self): self.pfw.sendCmd("setTuningMode", "on") self.reference_xml = "$PFW_TEST_TOOLS/xml/XML_Test/Reference_Criteria.xml" self.temp_domain="f_Domains_Backup" self.temp_status="f_Config_Status" # Expected results are defined by Reference_Criteria.xml configuration settings self.expected_result = [["Conf_1_1", "", "Conf_3_0"] , ["Conf_1_1", "Conf_2_1", "Conf_3_1"] , ["Conf_1_1", "Conf_2_1", "Conf_3_0"] , ["Conf_1_1", "Conf_2_0", "Conf_3_0"] , ["Conf_1_0", "Conf_2_0", "Conf_3_0"] , ["Conf_1_1", "Conf_2_0", "Conf_3_0"] , ["Conf_1_1", "Conf_2_0", "Conf_3_1"]] self.criterion_setup = [["0x2", "1"] , ["0x2", "0"] , ["0x1", "0"] , ["0x1", "1"] , ["0x3", "4"] , ["0x0", "1"]] # names used in this test refer to names used in Reference_Criteria.xml self.new_domain_name = "Domain" self.crit_change_iteration = 6 def tearDown(self): self.pfw.sendCmd("setTuningMode", "off") def test_Combinatorial_Criteria(self): """ Testing combinatorial criteria ------------------------------ Test case description : ~~~~~~~~~~~~~~~~~~~~~~~ Checking that PFW behaviour is in line with expectations when setting criteria states. - Test of all combinatorial of criteria and possible errors - nominal case in configuration selection - conflict in configuration selection - no configuration selected - error in criterion setting - test of compound rules : All / Any - test of matches cases : Is / IsNot / Include / Exclude - test of criteria types : Inclusive / Exclusive Tested commands : ~~~~~~~~~~~~~~~~~ - [applyConfigurations] function - [setCriterionState] function Expected result : ~~~~~~~~~~~~~~~~~ - Configurations setting conform to expected behavior """ log.D(self.test_Combinatorial_Criteria.__doc__) # Import a reference XML file log.I("Import Domains with settings from %s"%(self.reference_xml)) out, err = self.pfw.sendCmd("importDomainsWithSettingsXML",self.reference_xml, "") assert err == None, log.E("Command [importDomainsWithSettingsXML %s] : %s"%(self.reference_xml,err)) assert out == "Done", log.F("When using function importDomainsWithSettingsXML %s]"%(self.reference_xml)) # Check number of domain log.I("Current domains listing") log.I("Command [listDomains]") out, err = self.pfw.sendCmd("listDomains","","") assert err == None, log.E("Command [listDomains] : %s"%(err)) log.I("Command [listDomains] : correctly executed") # Domains listing backup f_Domains_Backup = open(self.temp_domain, "w") f_Domains_Backup.write(out) f_Domains_Backup.close() f_Domains_Backup = open(self.temp_domain, "r") domains_nbr = 0 line=f_Domains_Backup.readline() while line!="": line=f_Domains_Backup.readline() domains_nbr+=1 f_Domains_Backup.close() # Applying default configurations out, err = self.pfw.sendCmd("setTuningMode", "off") assert err == None, log.E("Command [setTuningMode]") out, err = self.hal.sendCmd("applyConfigurations") assert err == None, log.E("Command HAL [applyConfigurations]") # Saving default status out, err = self.pfw.sendCmd("status") f_Config_Status = open(self.temp_status, "w") f_Config_Status.write(out) f_Config_Status.close() # Test cases iterations for iteration in range (self.crit_change_iteration+1): # Criteria settings # No criteria are set at the first iteration for testing default configurations if iteration != 0: log.I("Setting criterion %s to %s" % ("Crit_0", str(self.criterion_setup[iteration-1][0]))) state = str(self.criterion_setup[iteration-1][0]) out, err = self.hal.sendCmd("setCriterionState", "Crit_0", state) assert err == None, log.E("Command HAL [setCriterionState]") log.I("Setting criterion %s to %s" % ("Crit_1", str(self.criterion_setup[iteration-1][1]))) state = str(self.criterion_setup[iteration-1][1]) out, err = self.hal.sendCmd("setCriterionState", "Crit_1", state) assert err == None, log.E("Command HAL [setCriterionState]") log.I("Applaying new configurations") out, err = self.hal.sendCmd("applyConfigurations") assert err == None, log.E("Command HAL [applyConfigurations]") out, err = self.pfw.sendCmd("status") assert err == None, log.E("Command [status]") os.remove(self.temp_status) f_Config_Status = open(self.temp_status, "w") f_Config_Status.write(out) f_Config_Status.close() else : log.I("Default Configurations - no criteria are set :") out, err = self.pfw.sendCmd("status") os.remove(self.temp_status) f_Config_Status = open(self.temp_status, "w") f_Config_Status.write(out) f_Config_Status.close() # Configurations checking for domain in range (domains_nbr): domain_name = "".join([self.new_domain_name, "_", str(domain+1)]) config = str(self.expected_result[iteration][domain]) log.I("Checking that domain %s is set to configuration : %s" % (domain_name,config)) for line in open(self.temp_status, "r"): if domain_name in line: line = line.replace(domain_name,'') line = line.replace(":","") line = line.replace(' ','') line = line.replace("\n","") assert line == config, log.F("Domain %s - Expected configuration : %s, found : %s" % (domain_name,config,line)) log.I("Domain %s - configuration correctly set to %s" % (domain_name,line)) # Temporary files deletion os.remove(self.temp_domain) os.remove(self.temp_status)