1#!/usr/bin/python2
2# -*-coding:utf-8 -*
3
4# Copyright (c) 2011-2015, Intel Corporation
5# All rights reserved.
6#
7# Redistribution and use in source and binary forms, with or without modification,
8# are permitted provided that the following conditions are met:
9#
10# 1. Redistributions of source code must retain the above copyright notice, this
11# list of conditions and the following disclaimer.
12#
13# 2. Redistributions in binary form must reproduce the above copyright notice,
14# this list of conditions and the following disclaimer in the documentation and/or
15# other materials provided with the distribution.
16#
17# 3. Neither the name of the copyright holder nor the names of its contributors
18# may be used to endorse or promote products derived from this software without
19# specific prior written permission.
20#
21# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
25# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
28# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32"""
33Integer parameter type testcases - UINT8
34
35List of tested functions :
36--------------------------
37    - [setParameter]  function
38    - [getParameter] function
39
40Initial Settings :
41------------------
42    UINT8 :
43        - unsigned
44        - size = 8
45        - range : [0, 100]
46
47Test cases :
48------------
49    - UINT8 parameter min value = 0
50    - UINT8 parameter min value out of bounds = -1
51    - UINT8 parameter max value = 100
52    - UINT8 parameter max value out of bounds = 101
53    - UINT8 parameter in nominal case = 50
54"""
55import os
56from Util.PfwUnitTestLib import PfwTestCase
57from Util import ACTLogging
58log=ACTLogging.Logger()
59
60# Test of type UINT8 - range [0, 100]
61class TestCases(PfwTestCase):
62    def setUp(self):
63        self.param_name = "/Test/Test/TEST_DIR/UINT8"
64        self.pfw.sendCmd("setTuningMode", "on")
65
66    def tearDown(self):
67        self.pfw.sendCmd("setTuningMode", "off")
68
69    def test_Nominal_Case(self):
70        """
71        Testing UINT8 in nominal case = 50
72        ----------------------------------
73            Test case description :
74            ~~~~~~~~~~~~~~~~~~~~~~~
75                - set UINT8 parameter in nominal case = 50
76            Tested commands :
77            ~~~~~~~~~~~~~~~~~
78                - [setParameter] function
79            Used commands :
80            ~~~~~~~~~~~~~~~
81                - [getParameter] function
82            Expected result :
83            ~~~~~~~~~~~~~~~~~
84                - UINT8 parameter set to 50
85                - Blackboard and filesystem values checked
86        """
87        log.D(self.test_Nominal_Case.__doc__)
88        log.I("UINT8 parameter in nominal case = 50")
89        value = "50"
90        hex_value = "0x32"
91        #Set parameter value
92        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
93        assert err == None, log.E("when setting parameter %s : %s"
94                                  % (self.param_name, err))
95        assert out == "Done", log.F("when setting parameter %s : %s"
96                                  % (self.param_name, out))
97        #Check parameter value on blackboard
98        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
99        assert err == None, log.E("when setting parameter %s : %s"
100                                  % (self.param_name, err))
101        assert out == value, log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s"
102                                   % (self.param_name, value, out))
103        #Check parameter value on filesystem
104        assert open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error")
105        log.I("test OK")
106
107    def test_TypeMin(self):
108        """
109        Testing UINT8 minimal value = 0
110        -------------------------------
111            Test case description :
112            ~~~~~~~~~~~~~~~~~~~~~~~
113                - set UINT8 parameter min value = 0
114            Tested commands :
115            ~~~~~~~~~~~~~~~~~
116                - [setParameter] function
117            Used commands :
118            ~~~~~~~~~~~~~~~
119                - [getParameter] function
120            Expected result :
121            ~~~~~~~~~~~~~~~~~
122                - UINT8 parameter set to 0
123                - Blackboard and filesystem values checked
124        """
125        log.D(self.test_TypeMin.__doc__)
126        log.I("UINT8 parameter min value = 0")
127        value = "0"
128        hex_value = "0x0"
129        #Set parameter value
130        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
131        assert err == None, log.E("when setting parameter %s : %s"
132                                  % (self.param_name, err))
133        assert out == "Done", log.F("when setting parameter %s : %s"
134                                  % (self.param_name, out))
135        #Check parameter value on blackboard
136        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
137        assert err == None, log.E("when setting parameter %s : %s"
138                                  % (self.param_name, err))
139        assert out == value, log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s"
140                                   % (self.param_name, value, out))
141        #Check parameter value on filesystem
142        assert open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error")
143        log.I("test OK")
144
145    def test_TypeMin_Overflow(self):
146        """
147        Testing UINT8 parameter value out of negative range
148        ---------------------------------------------------
149            Test case description :
150            ~~~~~~~~~~~~~~~~~~~~~~~
151                - set UINT8 to -1
152            Tested commands :
153            ~~~~~~~~~~~~~~~~~
154                - [setParameter] function
155            Used commands :
156            ~~~~~~~~~~~~~~~
157                - [getParameter] function
158            Expected result :
159            ~~~~~~~~~~~~~~~~~
160                - error detected
161                - UINT8 parameter not updated
162                - Blackboard and filesystem values checked
163        """
164        log.D(self.test_TypeMin_Overflow.__doc__)
165        log.I("UINT8 parameter min value out of bounds = -1")
166        value = "-1"
167        param_check = open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1]
168        #Set parameter value
169        out, err = self.pfw.sendCmd("setParameter", self.param_name, value, expectSuccess=False)
170        assert err == None, log.E("when setting parameter %s : %s"
171                                  % (self.param_name, err))
172        assert out != "Done", log.F("PFW : Error not detected when setting parameter %s out of bounds"
173                                    % (self.param_name))
174        #Check parameter value on filesystem
175        assert open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1] == param_check, log.F("FILESYSTEM : Forbiden parameter change")
176        log.I("test OK")
177
178    def test_TypeMax(self):
179        """
180        Testing UINT8 parameter maximum value
181        -------------------------------------
182            Test case description :
183            ~~~~~~~~~~~~~~~~~~~~~~~
184                - set UINT8 to 100
185            Tested commands :
186            ~~~~~~~~~~~~~~~~~
187                - [setParameter] function
188            Used commands :
189            ~~~~~~~~~~~~~~~
190                - [getParameter] function
191            Expected result :
192            ~~~~~~~~~~~~~~~~~
193                - UINT8 parameter set to 100
194                - Blackboard and filesystem values checked
195        """
196        log.D(self.test_TypeMax.__doc__)
197        log.I("UINT8 parameter max value = 100")
198        value = "100"
199        hex_value = "0x64"
200        #Set parameter value
201        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
202        assert err == None, log.E("when setting parameter %s : %s"
203                                  % (self.param_name, err))
204        assert out == "Done", log.F("when setting parameter %s : %s"
205                                  % (self.param_name, out))
206        #Check parameter value on blackboard
207        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
208        assert err == None, log.E("when setting parameter %s : %s"
209                                  % (self.param_name, err))
210        assert out == value, log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s"
211                                   % (self.param_name, value, out))
212        #Check parameter value on filesystem
213        assert open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error")
214        log.I("test OK")
215
216    def test_TypeMax_Overflow(self):
217        """
218        Testing UINT8 parameter value out of positive range
219        ---------------------------------------------------
220            Test case description :
221            ~~~~~~~~~~~~~~~~~~~~~~~
222                - set UINT8 to 101
223            Tested commands :
224            ~~~~~~~~~~~~~~~~~
225                - [setParameter] function
226            Used commands :
227            ~~~~~~~~~~~~~~~
228                - [getParameter] function
229            Expected result :
230            ~~~~~~~~~~~~~~~~~
231                - error detected
232                - UINT8 parameter not updated
233                - Blackboard and filesystem values checked
234        """
235        log.D(self.test_TypeMax_Overflow.__doc__)
236        log.I("UINT8 parameter max value out of bounds = 101")
237        value = "101"
238        param_check = open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1]
239        #Set parameter value
240        out, err = self.pfw.sendCmd("setParameter", self.param_name, value, expectSuccess=False)
241        assert err == None, log.E("when setting parameter %s : %s"
242                                  % (self.param_name, err))
243        assert out != "Done", log.F("PFW : Error not detected when setting parameter %s out of bounds"
244                                    % (self.param_name))
245        #Check parameter value on filesystem
246        assert open(os.environ["PFW_RESULT"] + "/UINT8").read()[:-1] == param_check, log.F("FILESYSTEM : Forbiden parameter change")
247        log.I("test OK")
248