xref: /openbmc/openbmc/poky/meta/lib/oeqa/core/decorator/data.py (revision 169d7bccc02da43f8574d030502cfcf9308f505f)
1 #
2 # Copyright (C) 2016 Intel Corporation
3 #
4 # SPDX-License-Identifier: MIT
5 #
6 
7 from oeqa.core.exception import OEQAMissingVariable
8 
9 from . import OETestDecorator, registerDecorator
10 
11 def has_feature(td, feature):
12     """
13         Checks for feature in DISTRO_FEATURES or IMAGE_FEATURES.
14     """
15 
16     if (feature in td.get('DISTRO_FEATURES', '').split() or
17         feature in td.get('IMAGE_FEATURES', '').split()):
18         return True
19     return False
20 
21 def has_machine(td, machine):
22     """
23         Checks for MACHINE.
24     """
25 
26     if (machine == td.get('MACHINE', '')):
27         return True
28     return False
29 
30 @registerDecorator
31 class skipIfDataVar(OETestDecorator):
32     """
33         Skip test based on value of a data store's variable.
34 
35         It will get the info of var from the data store and will
36         check it against value; if are equal it will skip the test
37         with msg as the reason.
38     """
39 
40     attrs = ('var', 'value', 'msg')
41 
42     def setUpDecorator(self):
43         msg = ('Checking if %r value is %r to skip test' %
44                (self.var, self.value))
45         self.logger.debug(msg)
46         if self.case.td.get(self.var) == self.value:
47             self.case.skipTest(self.msg)
48 
49 @registerDecorator
50 class skipIfNotDataVar(OETestDecorator):
51     """
52         Skip test based on value of a data store's variable.
53 
54         It will get the info of var from the data store and will
55         check it against value; if are not equal it will skip the
56         test with msg as the reason.
57     """
58 
59     attrs = ('var', 'value', 'msg')
60 
61     def setUpDecorator(self):
62         msg = ('Checking if %r value is not %r to skip test' %
63                (self.var, self.value))
64         self.logger.debug(msg)
65         if not self.case.td.get(self.var) == self.value:
66             self.case.skipTest(self.msg)
67 
68 @registerDecorator
69 class skipIfInDataVar(OETestDecorator):
70     """
71         Skip test if value is in data store's variable.
72     """
73 
74     attrs = ('var', 'value', 'msg')
75     def setUpDecorator(self):
76         msg = ('Checking if %r value contains %r to skip '
77               'the test' % (self.var, self.value))
78         self.logger.debug(msg)
79         if self.value in (self.case.td.get(self.var)):
80             self.case.skipTest(self.msg)
81 
82 @registerDecorator
83 class skipIfNotInDataVar(OETestDecorator):
84     """
85         Skip test if value is not in data store's variable.
86     """
87 
88     attrs = ('var', 'value', 'msg')
89     def setUpDecorator(self):
90         msg = ('Checking if %r value contains %r to run '
91               'the test' % (self.var, self.value))
92         self.logger.debug(msg)
93         if not self.value in (self.case.td.get(self.var) or ""):
94             self.case.skipTest(self.msg)
95 
96 @registerDecorator
97 class OETestDataDepends(OETestDecorator):
98     attrs = ('td_depends',)
99 
100     def setUpDecorator(self):
101         for v in self.td_depends:
102             try:
103                 value = self.case.td[v]
104             except KeyError:
105                 raise OEQAMissingVariable("Test case need %s variable but"\
106                         " isn't into td" % v)
107 
108 @registerDecorator
109 class skipIfNotFeature(OETestDecorator):
110     """
111         Skip test based on DISTRO_FEATURES.
112 
113         value must be in distro features or it will skip the test
114         with msg as the reason.
115     """
116 
117     attrs = ('value', 'msg')
118 
119     def setUpDecorator(self):
120         msg = ('Checking if %s is in DISTRO_FEATURES '
121                'or IMAGE_FEATURES' % (self.value))
122         self.logger.debug(msg)
123         if not has_feature(self.case.td, self.value):
124             self.case.skipTest(self.msg)
125 
126 @registerDecorator
127 class skipIfFeature(OETestDecorator):
128     """
129         Skip test based on DISTRO_FEATURES.
130 
131         value must not be in distro features or it will skip the test
132         with msg as the reason.
133     """
134 
135     attrs = ('value', 'msg')
136 
137     def setUpDecorator(self):
138         msg = ('Checking if %s is not in DISTRO_FEATURES '
139                'or IMAGE_FEATURES' % (self.value))
140         self.logger.debug(msg)
141         if has_feature(self.case.td, self.value):
142             self.case.skipTest(self.msg)
143 
144 @registerDecorator
145 class skipIfNotMachine(OETestDecorator):
146     """
147         Skip test based on MACHINE.
148 
149         value must be match MACHINE or it will skip the test
150         with msg as the reason.
151     """
152 
153     attrs = ('value', 'msg')
154 
155     def setUpDecorator(self):
156         msg = ('Checking if %s is not this MACHINE' % self.value)
157         self.logger.debug(msg)
158         if not has_machine(self.case.td, self.value):
159             self.case.skipTest(self.msg)
160 
161 @registerDecorator
162 class skipIfMachine(OETestDecorator):
163     """
164         Skip test based on Machine.
165 
166         value must not be this machine or it will skip the test
167         with msg as the reason.
168     """
169 
170     attrs = ('value', 'msg')
171 
172     def setUpDecorator(self):
173         msg = ('Checking if %s is this MACHINE' % self.value)
174         self.logger.debug(msg)
175         if has_machine(self.case.td, self.value):
176             self.case.skipTest(self.msg)
177 
178 @registerDecorator
179 class skipIfNotQemu(OETestDecorator):
180     """
181     Skip test if MACHINE is not qemu*
182     """
183     def setUpDecorator(self):
184         self.logger.debug("Checking if not qemu MACHINE")
185         if not self.case.td.get('MACHINE', '').startswith('qemu'):
186             self.case.skipTest('Test only runs on qemu machines')
187 
188 @registerDecorator
189 class skipIfNotQemuUsermode(OETestDecorator):
190     """
191     Skip test if MACHINE_FEATURES does not contain qemu-usermode
192     """
193     def setUpDecorator(self):
194         self.logger.debug("Checking if MACHINE_FEATURES does not contain qemu-usermode")
195         if 'qemu-usermode' not in self.case.td.get('MACHINE_FEATURES', '').split():
196             self.case.skipTest('Test requires qemu-usermode in MACHINE_FEATURES')
197 
198 @registerDecorator
199 class skipIfQemu(OETestDecorator):
200     """
201     Skip test if MACHINE is qemu*
202     """
203     def setUpDecorator(self):
204         self.logger.debug("Checking if qemu MACHINE")
205         if self.case.td.get('MACHINE', '').startswith('qemu'):
206              self.case.skipTest('Test only runs on real hardware')
207 
208 @registerDecorator
209 class skipIfArch(OETestDecorator):
210     """
211     Skip test if HOST_ARCH is present in the tuple specified.
212     """
213 
214     attrs = ('archs',)
215     def setUpDecorator(self):
216         arch = self.case.td['HOST_ARCH']
217         if arch in self.archs:
218              self.case.skipTest('Test skipped on %s' % arch)
219 
220 @registerDecorator
221 class skipIfNotArch(OETestDecorator):
222     """
223     Skip test if HOST_ARCH is not present in the tuple specified.
224     """
225 
226     attrs = ('archs',)
227     def setUpDecorator(self):
228         arch = self.case.td['HOST_ARCH']
229         if arch not in self.archs:
230              self.case.skipTest('Test skipped on %s' % arch)
231