• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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"""
32Element Sequence testcases
33
34List of tested functions :
35--------------------------
36    - [setElementSequence]  function
37    - [getElementSequence] function
38
39Test cases :
40------------
41    - Testing setElementSequence errors
42    - Testing getElementSequence errors
43    - Testing nominal case
44"""
45import os
46from Util.PfwUnitTestLib import PfwTestCase
47from Util import ACTLogging
48log=ACTLogging.Logger()
49
50class TestCases(PfwTestCase):
51    def setUp(self):
52        self.pfw.sendCmd("setTuningMode", "on")
53        self.domain_name = "Domain_0"
54        self.elem_0_path = "/Test/Test/TEST_DIR"
55        self.elem_1_path = "/Test/Test/TEST_DOMAIN_0"
56        self.elem_2_path = "/Test/Test/TEST_DOMAIN_1"
57        self.configuration = "Conf_0"
58
59    def tearDown(self):
60        self.pfw.sendCmd("setTuningMode", "off")
61
62    def test_Nominal_Case(self):
63        """
64        Testing nominal case
65        --------------------
66            Test case description :
67            ~~~~~~~~~~~~~~~~~~~~~~~
68                - set a new sequences order for a selected configuration
69            Tested commands :
70            ~~~~~~~~~~~~~~~~~
71                - [setElementSequence] function
72                - [getElementSequence] function
73            Expected result :
74            ~~~~~~~~~~~~~~~~~
75                - all operations succeed
76                - new sequences order conform to expected order
77        """
78        log.D(self.test_Nominal_Case.__doc__)
79
80        # Adding new domain elements
81        log.I("Working on domain %s" % (self.domain_name))
82        log.I("Adding a new domain element to domain %s" % (self.domain_name))
83        out, err = self.pfw.sendCmd("addElement", str(self.domain_name), str(self.elem_1_path))
84        assert err == None, "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_1_path)
85        assert out == "Done", "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_1_path)
86        log.I("Adding a new domain element to domain %s" % (self.domain_name))
87        out, err = self.pfw.sendCmd("addElement", str(self.domain_name), str(self.elem_2_path))
88        assert err == None, "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_2_path)
89        assert out == "Done", "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_2_path)
90        log.I("New domain elements %s and %s added to domain %s" % (self.elem_1_path, self.elem_2_path, self.domain_name))
91
92        # Getting elements sequence from selected configuration
93        log.I("Getting elements sequence from configuration %s" % (self.configuration))
94        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
95        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
96        log.I("Listing elements sequence for configuration %s correctly executed :\n%s" % (self.configuration, out))
97
98        # Setting new elements sequence order for selected configuration
99        log.I("Setting new elements sequence order for configuration %s" % (self.configuration))
100        out, err = self.pfw.sendCmd("setElementSequence", self.domain_name, self.configuration, self.elem_2_path, self.elem_0_path, self.elem_1_path)
101        assert err == None, "ERROR : command [setElementSequence] - Error while setting new elements sequence for configuration %s" % (self.configuration)
102        assert out == "Done", "ERROR : command [setElementSequence] - Error while setting new elements sequence for configuration %s" % (self.configuration)
103        log.I("Setting new elements sequence for configuration %s correctly executed")
104        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
105        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
106        log.I("New elements sequence for configuration %s :\n%s" % (self.configuration, out))
107
108        # Checking new elements sequence order conformity for selected configuration
109        log.I("Checking new elements sequence order for configuration")
110        expected = [self.elem_2_path, self.elem_0_path, self.elem_1_path]
111        # Only check the element reordered
112        configElementOrder = out.strip('\r\n').splitlines()[:len(expected)]
113        assert configElementOrder == expected, "ERROR : Error while modifying configuration %s elements order on domain %s, expected %s, found %s" % (self.configuration, self.domain_name, expected, configElementOrder)
114        log.I("New elements sequence order conform to expected order for configuration %s" % (self.configuration))
115        # Removing created domain element
116        out, err = self.pfw.sendCmd("removeElement", str(self.domain_name), str(self.elem_1_path))
117        assert err == None, "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
118        assert out == "Done", "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
119        out, err = self.pfw.sendCmd("removeElement", str(self.domain_name), str(self.elem_2_path))
120        assert err == None, "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_2_path)
121        assert out == "Done", "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_2_path)
122
123    def test_setElementSequence_errors(self):
124        """
125        Testing setElementSequence_errors
126        ---------------------------------
127            Test case description :
128            ~~~~~~~~~~~~~~~~~~~~~~~
129                - Setting an element not belonging to configuration
130                - Setting undefined element in sequence order
131            Tested commands :
132            ~~~~~~~~~~~~~~~~~
133                - [setElementSequence] function
134            Expected result :
135            ~~~~~~~~~~~~~~~~~
136                - all errors correctly detected
137                - no impact on initial sequences order
138        """
139        log.D(self.test_setElementSequence_errors.__doc__)
140
141        # Adding a new domain element
142        log.I("Working on domain %s" % (self.domain_name))
143        log.I("Adding a new domain element to domain %s" % (self.domain_name))
144        out, err = self.pfw.sendCmd("addElement", str(self.domain_name), str(self.elem_1_path))
145        assert err == None, "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_1_path)
146        assert out == "Done", "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_1_path)
147        log.I("New domain element %s added to domain %s" % (self.elem_1_path, self.domain_name))
148
149        # Getting elements sequence from selected configuration
150        log.I("Getting elements sequence from configuration %s" % (self.configuration))
151        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
152        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
153        log.I("Listing elements sequence for configuration %s correctly executed :\n%s" % (self.configuration, out))
154
155        # Elements sequence backup
156        f_ConfigElementsOrder_Backup = open("f_ConfigElementsOrder_Backup", "w")
157        f_ConfigElementsOrder_Backup.write(out)
158        f_ConfigElementsOrder_Backup.close()
159
160        # Setting an element not belonging to configuration in sequence order
161        log.I("Setting an element not belonging to configuration %s in sequence order" % (self.configuration))
162        out, err = self.pfw.sendCmd("setElementSequence", self.domain_name, self.configuration, self.elem_2_path, self.elem_0_path, self.elem_1_path, expectSuccess=False)
163        assert err == None, "ERROR : command [setElementSequence] - Error while setting elements sequence for configuration %s" % (self.configuration)
164        assert out != "Done", "ERROR : command [setElementSequence] - Error not detected when setting an element not belonging to configuration"
165
166        # Setting undefined element in sequence order for selected configuration
167        log.I("Setting undefined element in sequence order for configuration %s" % (self.configuration))
168        out, err = self.pfw.sendCmd("setElementSequence", self.domain_name, self.configuration, "Wrong_Element_Name", self.elem_0_path, self.elem_1_path, expectSuccess=False)
169        assert err == None, "ERROR : command [setElementSequence] - Error while setting elements sequence for configuration %s" % (self.configuration)
170        assert out != "Done", "ERROR : command [getElementSequence] - Error not detected when setting an undefined element to configuration"
171
172        # Getting elements sequence from selected configuration for checking purpose
173        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
174        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
175        # Elements sequence backup
176        f_ConfigElementsOrder = open("f_ConfigElementsOrder", "w")
177        f_ConfigElementsOrder.write(out)
178        f_ConfigElementsOrder.close()
179
180        # Checking new elements sequence order conformity for selected configuration
181        log.I("Checking new elements sequence order for configuration")
182        f_ConfigElementsOrder = open("f_ConfigElementsOrder", "r")
183        f_ConfigElementsOrder_Backup = open("f_ConfigElementsOrder_Backup", "r")
184        new_element_name = f_ConfigElementsOrder.read().splitlines()
185        element_name = f_ConfigElementsOrder_Backup.read().splitlines()
186        assert element_name==new_element_name, "ERROR : setElementSequence errors have affected elements order on domain %s" % (self.configuration)
187        log.I("Elements sequence order not affected by setElementSequence errors")
188
189        # Closing and removing temp file
190        f_ConfigElementsOrder.close()
191        f_ConfigElementsOrder_Backup.close()
192        os.remove("f_ConfigElementsOrder")
193        os.remove("f_ConfigElementsOrder_Backup")
194        # Removing created domain element
195        out, err = self.pfw.sendCmd("removeElement", str(self.domain_name), str(self.elem_1_path))
196        assert err == None, "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
197        assert out == "Done", "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
198
199    def test_getElementSequence_errors(self):
200        """
201        Testing getElementSequence_errors
202        ---------------------------------
203            Test case description :
204            ~~~~~~~~~~~~~~~~~~~~~~~
205                - Getting an element sequence on a wrong domain name
206                - Getting an element sequence on a wrong configuration name
207            Tested commands :
208           ~~~~~~~~~~~~~~~~~
209                - [getElementSequence] function
210            Expected result :
211            ~~~~~~~~~~~~~~~~~
212                - all errors correctly detected
213                - no impact on initial sequences order
214        """
215        log.D(self.test_getElementSequence_errors.__doc__)
216
217        # Adding new domain elements
218        log.I("Adding a new domain element to domain %s" % (self.domain_name))
219        out, err = self.pfw.sendCmd("addElement", str(self.domain_name), str(self.elem_1_path))
220        assert err == None, "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_1_path)
221        assert out == "Done", "ERROR : command [addElement] - Error while adding new domain element %s: %s" % (self.elem_1_path, out)
222        log.I("Adding a new domain element to domain %s" % (self.domain_name))
223        out, err = self.pfw.sendCmd("addElement", str(self.domain_name), str(self.elem_2_path))
224        assert err == None, "ERROR : command [addElement] - Error while adding new domain element %s" % (self.elem_2_path)
225        assert out == "Done", "ERROR : command [addElement] - Error while adding new domain element %s: %s" % (self.elem_2_path, out)
226        log.I("New domain elements %s and %s added to domain %s" % (self.elem_1_path, self.elem_2_path, self.domain_name))
227
228        # Getting elements sequence from selected configuration
229        log.I("Getting elements sequence from configuration %s" % (self.configuration))
230        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
231        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
232        log.I("Listing elements sequence for configuration %s correctly executed :\n%s" % (self.configuration, out))
233
234        # Elements sequence backup
235        f_ConfigElementsOrder_Backup = open("f_ConfigElementsOrder_Backup", "w")
236        f_ConfigElementsOrder_Backup.write(out)
237        f_ConfigElementsOrder_Backup.close()
238
239        # Getting an element sequence on a wrong domain name
240        log.I("Getting an element sequence on a wrong domain name")
241        out, err = self.pfw.sendCmd("getElementSequence", "Wrong_Domain_Name", self.configuration, expectSuccess=False)
242        assert err == None, "ERROR : command [getElementSequence] - Error when getting elements sequence for configuration %s" % (self.configuration)
243        assert out != "Done", "ERROR : command [getElementSequence] - Error not detected when getting elements sequence for a wrong domain name"
244
245        # Getting an element sequence on a wrong configuration name
246        log.I("Getting an element sequence on a wrong configuration name")
247        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, "Wrong_Configuration_Name", expectSuccess=False)
248        assert err == None, "ERROR : command [getElementSequence] - Error when getting elements sequence on a wrong configuration name"
249        assert out != "Done", "ERROR : command [getElementSequence] - Error not detected when getting elements sequence on a wrong configuration name"
250
251        # Getting elements sequence from selected configuration for checking purpose
252        out, err = self.pfw.sendCmd("getElementSequence", self.domain_name, self.configuration)
253        assert err == None, "ERROR : command [getElementSequence] - Error while listing elements sequence for configuration %s" % (self.configuration)
254        # Elements sequence backup
255        f_ConfigElementsOrder = open("f_ConfigElementsOrder", "w")
256        f_ConfigElementsOrder.write(out)
257        f_ConfigElementsOrder.close()
258
259        # Checking new elements sequence order conformity for selected configuration
260        log.I("Checking new elements sequence order for configuration")
261        f_ConfigElementsOrder = open("f_ConfigElementsOrder", "r")
262        f_ConfigElementsOrder_Backup = open("f_ConfigElementsOrder_Backup", "r")
263        new_element_names = f_ConfigElementsOrder.read().splitlines()
264        element_name = f_ConfigElementsOrder_Backup.read().splitlines()
265        assert element_name==new_element_names, "ERROR : getElementSequence errors have affected elements order on domain %s" % (self.configuration)
266        log.I("Elements sequence order not affected by getElementSequence errors")
267
268        # Closing and removing temp file
269        f_ConfigElementsOrder.close()
270        f_ConfigElementsOrder_Backup.close()
271        os.remove("f_ConfigElementsOrder")
272        os.remove("f_ConfigElementsOrder_Backup")
273        # Removing created domain element
274        out, err = self.pfw.sendCmd("removeElement", str(self.domain_name), str(self.elem_1_path))
275        assert err == None, "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
276        assert out == "Done", "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_1_path)
277        out, err = self.pfw.sendCmd("removeElement", str(self.domain_name), str(self.elem_2_path))
278        assert err == None, "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_2_path)
279        assert out == "Done", "ERROR : command [removeElement] - Error while removing domain element %s" % (self.elem_2_path)
280