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""" 32Bit block parameter type testcases. 33 34List of tested functions : 35-------------------------- 36 - [setParameter] function 37 - [getParameter] function 38 39Initial Settings : 40------------------ 41 Block size = 8bits : 42 - BIT_0_3, size = 3, pos=0 43 - BIT_3_1, size = 1, pos=3 44 - BIT_4_1, size = 1, pos=4 45 - BIT_6_2, size = 2, pos=6 46 - BIT_7_1, size = 1, pos=7 47 48Test cases : 49------------ 50 - Testing nominal TestCase : set bit to bit 51 - Testing error testcase : set block in one shot 52 - Testing out of bound TestCase 53 - Testing conflicting TestCase : two bits at the same position 54 - Testing out of size TestCase : Bit define on a wrong position 55""" 56 57import os 58import commands 59import unittest 60from Util.PfwUnitTestLib import PfwTestCase 61from Util import ACTLogging 62log=ACTLogging.Logger() 63 64# Test of type UINT16 - range [0, 1000] 65class TestCases(PfwTestCase): 66 def setUp(self): 67 self.block_name = "/Test/Test/TEST_TYPES/BLOCK_8BIT" 68 self.filesystem_name=os.environ["PFW_RESULT"] + "/BLOCK_8BIT" 69 70 self.bit_name=[] 71 72 #BIT_0_3, size = 3, pos = 0 73 self.bit_name.append("/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_0_3") 74 #BIT_3_1, size = 1, pos = 3 75 self.bit_name.append("/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_3_1") 76 #BIT_4_1, size = 1, pos = 4 77 self.bit_name.append("/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_4_1") 78 #BIT_6_2, size = 2, pos = 6 79 self.bit_name.append("/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_6_2") 80 #BIT_7_1, size = 1, pos = 7 81 self.bit_name.append("/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_7_1") 82 83 self.pfw.sendCmd("setTuningMode", "on") 84 85 def tearDown(self): 86 self.pfw.sendCmd("setTuningMode", "off") 87 88 89 def test_Nominal_Case(self): 90 """ 91 Testing Bit block parameter in nominal case 92 ------------------------------------------- 93 Test case description : 94 ~~~~~~~~~~~~~~~~~~~~~~~ 95 - set Bit parameter in nominal case : 96 - BLOCK_BIT = 0b01011101, 0x5D, 93 97 - BIT_0_3 = 5 98 - BIT_3_1 = 1 99 - BIT_4_1 = 1 100 - BIT_6_1 = 1 101 Tested commands : 102 ~~~~~~~~~~~~~~~~~ 103 - [setParameter] function 104 Used commands : 105 ~~~~~~~~~~~~~~~ 106 - [getParameter] function 107 Expected result : 108 ~~~~~~~~~~~~~~~~~ 109 - BIT parameters set to nominal value 110 - FILESYSTEM BLOCK_8BIT set to 0x5D 111 """ 112 log.D(self.test_Nominal_Case.__doc__) 113 114 value_bit=["5","1","1","1"] 115 filesystem_value=["0x5","0xd","0x1d","0x5d"] 116 117 for index_bit in range(4): 118 log.I("set parameter %s to %s"%(self.bit_name[index_bit],value_bit[index_bit])) 119 out,err = self.pfw.sendCmd("setParameter",self.bit_name[index_bit],value_bit[index_bit]) 120 assert err == None, log.E("setParameter %s %s : %s" % (self.bit_name[index_bit],value_bit[index_bit], err)) 121 assert out == "Done", log.F("setParameter %s %s" %(self.bit_name[index_bit],value_bit[index_bit])) 122 log.I("Check bit %s value"%(self.bit_name[index_bit])) 123 out,err = self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 124 assert err == None, log.E("getParameter %s : %s" % (self.block_name, err)) 125 assert out == value_bit[index_bit], log.F("getParameter %s - Expected : %s Found : %s" %(self.bit_name[index_bit],value_bit[index_bit], out)) 126 log.I("Check filesystem value") 127 assert open(self.filesystem_name).read()[:-1] == filesystem_value[index_bit], log.F("FILESYSTEM : parameter update error for %s after setting bit %s "%(self.block_name, self.bit_name[index_bit])) 128 129 130 def test_Set_Block_Directly_Case(self): 131 """ 132 Testing setting Bit block parameter in one shot 133 ----------------------------------------------- 134 Test case description : 135 ~~~~~~~~~~~~~~~~~~~~~~~ 136 - set Bit block directly without setting bit to bit : 137 - BLOCK_BIT = 0b01011101, 0x5D, 93 138 Tested commands : 139 ~~~~~~~~~~~~~~~~~ 140 - [setParameter] function 141 Used commands : 142 ~~~~~~~~~~~~~~~ 143 - [getParameter] function 144 Expected result : 145 ~~~~~~~~~~~~~~~~~ 146 - Unable to set directly a block bit 147 - FILESYSTEM BLOCK_8BIT must not change 148 """ 149 log.D(self.test_Set_Block_Directly_Case.__doc__) 150 151 value = "93" 152 153 log.I("Load the initial value of bit parameter") 154 init_value_bit=[] 155 for index_bit in range(4): 156 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 157 assert err == None, log.E("getParameter %s"%self.bit_name[index_bit]) 158 init_value_bit.append(out) 159 160 init_filesystem_value=open(self.filesystem_name).read()[:-1] 161 162 log.I("Try to set parameter %s to %s, failed expected"%(self.block_name,value)) 163 out,err = self.pfw.sendCmd("setParameter",self.block_name, value, expectSuccess=False) 164 assert err == None, log.E("setParameter %s %s : %s" % (self.block_name, value, err)) 165 assert out != "Done", log.F("Error not detected when setting directly the block %s" % (self.block_name)) 166 log.I("Try to get parameter %s to %s, failed expected"%(self.block_name,value)) 167 out,err = self.pfw.sendCmd("getParameter",self.block_name, value, expectSuccess=False) 168 assert err == None, log.E("getParameter %s : %s" % (self.block_name, err)) 169 assert out != value, log.F("Error not detected when getting directly the block %s" % (self.block_name)) 170 log.I("Check filesystem value") 171 assert open(self.filesystem_name).read()[:-1] == init_filesystem_value, log.F("FILESYSTEM : parameter update error for %s"%(self.block_name)) 172 173 log.I("Check Bit value") 174 for index_bit in range(4): 175 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 176 assert out==init_value_bit[index_bit], log.F("BLACKBOARD: Forbidden change value for bit %s - Expected : %s Found : %s"%(self.bit_name[index_bit],init_value_bit[index_bit],out)) 177 178 def test_Out_Of_Bound_Bit_Value_Case(self): 179 """ 180 Testing setting bit in out of bound 181 ----------------------------------- 182 Test case description : 183 ~~~~~~~~~~~~~~~~~~~~~~~ 184 - set bit BIT_3_1 to 2 185 - check bit BIT_3_1 value 186 - check bit BIT_0_3 value 187 - check bit BIT_4_1 value 188 - check block bit Filesystem value 189 Tested commands : 190 ~~~~~~~~~~~~~~~~~ 191 - [setParameter] function 192 Used commands : 193 ~~~~~~~~~~~~~~~ 194 - [getParameter] function 195 Expected result : 196 ~~~~~~~~~~~~~~~~~ 197 - Error detected when setting BIT_3_1 to out of bound value 198 - FILESYSTEM BLOCK_8BIT must not change 199 """ 200 log.D(self.test_Out_Of_Bound_Bit_Value_Case.__doc__) 201 202 bit_value="3" 203 204 log.I("Load the initial value of bit parameter") 205 init_value_bit=[] 206 for index_bit in range(4): 207 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 208 assert err == None, log.E("getParameter %s"%self.bit_name[index_bit]) 209 init_value_bit.append(out) 210 211 init_filesystem_value=open(self.filesystem_name).read()[:-1] 212 213 log.I("set parameter %s to %s, failed expected"%(self.bit_name[1],bit_value)) 214 out,err = self.pfw.sendCmd("setParameter",self.bit_name[1],bit_value, expectSuccess=False) 215 assert err == None, log.E("setParameter %s %s : %s" % (self.bit_name[1],bit_value, err)) 216 assert out != "Done", log.F("Error not detected when setting the bit %s to out of bound value %s" % (self.bit_name[1],bit_value)) 217 log.I("Check Bit value") 218 for index_bit in range(4): 219 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 220 assert out==init_value_bit[index_bit], log.F("BLACKBOARD: Forbidden change value for bit %s - Expected : %s Found : %s"%(self.bit_name[index_bit],init_value_bit[index_bit],out)) 221 log.I("Check filesystem value") 222 assert open(self.filesystem_name).read()[:-1] == init_filesystem_value, log.F("FILESYSTEM : parameter update error for %s"%(self.block_name)) 223 224 def test_Undefined_Bit_Case(self): 225 """ 226 Testing setting an undefined bit 227 -------------------------------- 228 Test case description : 229 ~~~~~~~~~~~~~~~~~~~~~~~ 230 - set bit BIT_UNDEF to 1 231 - check block bit Filesystem value 232 Tested commands : 233 ~~~~~~~~~~~~~~~~~ 234 - [setParameter] function 235 Used commands : 236 ~~~~~~~~~~~~~~~ 237 - [getParameter] function 238 Expected result : 239 ~~~~~~~~~~~~~~~~~ 240 - Error detected when setting BIT_UNDEF 241 - FILESYSTEM BLOCK_8BIT must not change 242 """ 243 log.D(self.test_Undefined_Bit_Case.__doc__) 244 245 bit_value="1" 246 bit_undefined_name="/Test/Test/TEST_TYPES/BLOCK_8BIT/BIT_UNDEF" 247 248 log.I("Load the initial value of bit parameter") 249 init_value_bit=[] 250 for index_bit in range(4): 251 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 252 assert err == None, log.E("getParameter %s"%self.bit_name[index_bit]) 253 init_value_bit.append(out) 254 255 init_filesystem_value=open(self.filesystem_name).read()[:-1] 256 257 log.I("set parameter %s to %s, failed expected"%(bit_undefined_name,bit_value)) 258 out,err = self.pfw.sendCmd("setParameter",bit_undefined_name,bit_value, expectSuccess=False) 259 assert err == None, log.E("setParameter %s %s : %s" % (bit_undefined_name,bit_value, err)) 260 assert out != "Done", log.F("Error not detected when setting the bit %s to out of bound value %s" % (bit_undefined_name,bit_value)) 261 log.I("Check Bit value") 262 for index_bit in range(4): 263 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 264 assert out==init_value_bit[index_bit], log.F("BLACKBOARD: Forbidden change value for bit %s - Expected : %s Found : %s"%(self.bit_name[index_bit],init_value_bit[index_bit],out)) 265 log.I("Check filesystem value") 266 assert open(self.filesystem_name).read()[:-1] == init_filesystem_value, log.F("FILESYSTEM : parameter update error for %s"%(self.block_name)) 267 268 @unittest.expectedFailure 269 def test_Position_Conflicting_Case(self): 270 """ 271 Testing conflicting position 272 ---------------------------- 273 Parameter : 274 ~~~~~~~~~~~ 275 BIT_6_2 : Position = 6, size = 2 conflicting with 276 BIT_7_1 : Position = 7; size = 1 277 Test case description : 278 ~~~~~~~~~~~~~~~~~~~~~~~ 279 - set bit BIT_6_2 to 0 280 - set bit BIT_7_1 to 1 281 - check bit BIT_6_2 value 282 - check block bit Filesystem value 283 Tested commands : 284 ~~~~~~~~~~~~~~~~~ 285 - [setParameter] function 286 Used commands : 287 ~~~~~~~~~~~~~~~ 288 - [getParameter] function 289 Expected result : 290 ~~~~~~~~~~~~~~~~~ 291 - Unable to define 2 bits at the same position 292 """ 293 log.D(self.test_Position_Conflicting_Case.__doc__) 294 295 bit_value_6_2="0" 296 bit_value_7_1="1" 297 298 log.I("set parameter %s to %s"%(self.bit_name[3],bit_value_6_2)) 299 out,err = self.pfw.sendCmd("setParameter",self.bit_name[3],bit_value_6_2) 300 assert err == None, log.E("setParameter %s %s : %s" % (self.bit_name[3],bit_value_6_2, err)) 301 assert out == "Done", log.F("setParameter %s %s" %(self.bit_name[3],bit_value_6_2)) 302 303 log.I("Load the value of bit parameter") 304 init_value_bit=[] 305 for index_bit in range(4): 306 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 307 init_value_bit.append(out) 308 309 init_filesystem_value=open(self.filesystem_name).read()[:-1] 310 311 log.I("set parameter %s to %s, failed expected"%(self.bit_name[4],bit_value_7_1)) 312 out,err = self.pfw.sendCmd("setParameter",self.bit_name[4],bit_value_7_1) 313 assert err == None, log.E("setParameter %s %s : %s" % (self.bit_name[4],bit_value_7_1, err)) 314 assert out != "Done", log.F("Error not detected when setting the conflicting bit %s" % (self.bit_name[4])) 315 log.I("Check Bit value") 316 for index_bit in range(4): 317 out,err=self.pfw.sendCmd("getParameter",self.bit_name[index_bit]) 318 assert out==init_value_bit[index_bit], log.F("BLACKBOARD: Forbidden change value for bit %s - Expected : %s Found : %s"%(self.bit_name[index_bit],init_value_bit[index_bit],out)) 319 log.I("Check filesystem value") 320 assert open(self.filesystem_name).read()[:-1] == init_filesystem_value, log.F("FILESYSTEM : parameter update error for %s"%(self.block_name)) 321