1bbbd9b6eSWillian Rampazzo#
2bbbd9b6eSWillian Rampazzo# Basic validation of x86 versioned CPU models and CPU model aliases
3bbbd9b6eSWillian Rampazzo#
4bbbd9b6eSWillian Rampazzo#  Copyright (c) 2019 Red Hat Inc
5bbbd9b6eSWillian Rampazzo#
6bbbd9b6eSWillian Rampazzo# Author:
7bbbd9b6eSWillian Rampazzo#  Eduardo Habkost <ehabkost@redhat.com>
8bbbd9b6eSWillian Rampazzo#
9bbbd9b6eSWillian Rampazzo# This library is free software; you can redistribute it and/or
10bbbd9b6eSWillian Rampazzo# modify it under the terms of the GNU Lesser General Public
11bbbd9b6eSWillian Rampazzo# License as published by the Free Software Foundation; either
12bbbd9b6eSWillian Rampazzo# version 2.1 of the License, or (at your option) any later version.
13bbbd9b6eSWillian Rampazzo#
14bbbd9b6eSWillian Rampazzo# This library is distributed in the hope that it will be useful,
15bbbd9b6eSWillian Rampazzo# but WITHOUT ANY WARRANTY; without even the implied warranty of
16bbbd9b6eSWillian Rampazzo# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17bbbd9b6eSWillian Rampazzo# Lesser General Public License for more details.
18bbbd9b6eSWillian Rampazzo#
19bbbd9b6eSWillian Rampazzo# You should have received a copy of the GNU Lesser General Public
20bbbd9b6eSWillian Rampazzo# License along with this library; if not, see <http://www.gnu.org/licenses/>.
21bbbd9b6eSWillian Rampazzo#
22bbbd9b6eSWillian Rampazzo
23bbbd9b6eSWillian Rampazzo
24bbbd9b6eSWillian Rampazzoimport avocado_qemu
25bbbd9b6eSWillian Rampazzoimport re
26bbbd9b6eSWillian Rampazzo
272283b627SPhilippe Mathieu-Daudéclass X86CPUModelAliases(avocado_qemu.QemuSystemTest):
28bbbd9b6eSWillian Rampazzo    """
29bbbd9b6eSWillian Rampazzo    Validation of PC CPU model versions and CPU model aliases
30bbbd9b6eSWillian Rampazzo
31bbbd9b6eSWillian Rampazzo    :avocado: tags=arch:x86_64
32bbbd9b6eSWillian Rampazzo    """
33bbbd9b6eSWillian Rampazzo    def validate_aliases(self, cpus):
34bbbd9b6eSWillian Rampazzo        for c in cpus.values():
35bbbd9b6eSWillian Rampazzo            if 'alias-of' in c:
36bbbd9b6eSWillian Rampazzo                # all aliases must point to a valid CPU model name:
37bbbd9b6eSWillian Rampazzo                self.assertIn(c['alias-of'], cpus,
38bbbd9b6eSWillian Rampazzo                              '%s.alias-of (%s) is not a valid CPU model name' % (c['name'], c['alias-of']))
39bbbd9b6eSWillian Rampazzo                # aliases must not point to aliases
40bbbd9b6eSWillian Rampazzo                self.assertNotIn('alias-of', cpus[c['alias-of']],
41bbbd9b6eSWillian Rampazzo                                 '%s.alias-of (%s) points to another alias' % (c['name'], c['alias-of']))
42bbbd9b6eSWillian Rampazzo
43bbbd9b6eSWillian Rampazzo                # aliases must not be static
44bbbd9b6eSWillian Rampazzo                self.assertFalse(c['static'])
45bbbd9b6eSWillian Rampazzo
46bbbd9b6eSWillian Rampazzo    def validate_variant_aliases(self, cpus):
47bbbd9b6eSWillian Rampazzo        # -noTSX, -IBRS and -IBPB variants of CPU models are special:
48bbbd9b6eSWillian Rampazzo        # they shouldn't have their own versions:
49bbbd9b6eSWillian Rampazzo        self.assertNotIn("Haswell-noTSX-v1", cpus,
50bbbd9b6eSWillian Rampazzo                         "Haswell-noTSX shouldn't be versioned")
51bbbd9b6eSWillian Rampazzo        self.assertNotIn("Broadwell-noTSX-v1", cpus,
52bbbd9b6eSWillian Rampazzo                         "Broadwell-noTSX shouldn't be versioned")
53bbbd9b6eSWillian Rampazzo        self.assertNotIn("Nehalem-IBRS-v1", cpus,
54bbbd9b6eSWillian Rampazzo                         "Nehalem-IBRS shouldn't be versioned")
55bbbd9b6eSWillian Rampazzo        self.assertNotIn("Westmere-IBRS-v1", cpus,
56bbbd9b6eSWillian Rampazzo                         "Westmere-IBRS shouldn't be versioned")
57bbbd9b6eSWillian Rampazzo        self.assertNotIn("SandyBridge-IBRS-v1", cpus,
58bbbd9b6eSWillian Rampazzo                         "SandyBridge-IBRS shouldn't be versioned")
59bbbd9b6eSWillian Rampazzo        self.assertNotIn("IvyBridge-IBRS-v1", cpus,
60bbbd9b6eSWillian Rampazzo                         "IvyBridge-IBRS shouldn't be versioned")
61bbbd9b6eSWillian Rampazzo        self.assertNotIn("Haswell-noTSX-IBRS-v1", cpus,
62bbbd9b6eSWillian Rampazzo                         "Haswell-noTSX-IBRS shouldn't be versioned")
63bbbd9b6eSWillian Rampazzo        self.assertNotIn("Haswell-IBRS-v1", cpus,
64bbbd9b6eSWillian Rampazzo                         "Haswell-IBRS shouldn't be versioned")
65bbbd9b6eSWillian Rampazzo        self.assertNotIn("Broadwell-noTSX-IBRS-v1", cpus,
66bbbd9b6eSWillian Rampazzo                         "Broadwell-noTSX-IBRS shouldn't be versioned")
67bbbd9b6eSWillian Rampazzo        self.assertNotIn("Broadwell-IBRS-v1", cpus,
68bbbd9b6eSWillian Rampazzo                         "Broadwell-IBRS shouldn't be versioned")
69bbbd9b6eSWillian Rampazzo        self.assertNotIn("Skylake-Client-IBRS-v1", cpus,
70bbbd9b6eSWillian Rampazzo                         "Skylake-Client-IBRS shouldn't be versioned")
71bbbd9b6eSWillian Rampazzo        self.assertNotIn("Skylake-Server-IBRS-v1", cpus,
72bbbd9b6eSWillian Rampazzo                         "Skylake-Server-IBRS shouldn't be versioned")
73bbbd9b6eSWillian Rampazzo        self.assertNotIn("EPYC-IBPB-v1", cpus,
74bbbd9b6eSWillian Rampazzo                         "EPYC-IBPB shouldn't be versioned")
75bbbd9b6eSWillian Rampazzo
76bbbd9b6eSWillian Rampazzo    def test_4_0_alias_compatibility(self):
77bbbd9b6eSWillian Rampazzo        """
78bbbd9b6eSWillian Rampazzo        Check if pc-*-4.0 unversioned CPU model won't be reported as aliases
79bbbd9b6eSWillian Rampazzo
80bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
81bbbd9b6eSWillian Rampazzo        """
82bbbd9b6eSWillian Rampazzo        # pc-*-4.0 won't expose non-versioned CPU models as aliases
83bbbd9b6eSWillian Rampazzo        # We do this to help management software to keep compatibility
84bbbd9b6eSWillian Rampazzo        # with older QEMU versions that didn't have the versioned CPU model
85bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
86bbbd9b6eSWillian Rampazzo        self.vm.launch()
87684750abSVladimir Sementsov-Ogievskiy        cpus = dict((m['name'], m) for m in
88684750abSVladimir Sementsov-Ogievskiy                    self.vm.cmd('query-cpu-definitions'))
89bbbd9b6eSWillian Rampazzo
90bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['Cascadelake-Server']['static'],
91bbbd9b6eSWillian Rampazzo                         'unversioned Cascadelake-Server CPU model must not be static')
92bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['Cascadelake-Server'],
93bbbd9b6eSWillian Rampazzo                         'Cascadelake-Server must not be an alias')
94bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'],
95bbbd9b6eSWillian Rampazzo                         'Cascadelake-Server-v1 must not be an alias')
96bbbd9b6eSWillian Rampazzo
97bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['qemu64']['static'],
98bbbd9b6eSWillian Rampazzo                         'unversioned qemu64 CPU model must not be static')
99bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['qemu64'],
100bbbd9b6eSWillian Rampazzo                         'qemu64 must not be an alias')
101bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['qemu64-v1'],
102bbbd9b6eSWillian Rampazzo                         'qemu64-v1 must not be an alias')
103bbbd9b6eSWillian Rampazzo
104bbbd9b6eSWillian Rampazzo        self.validate_variant_aliases(cpus)
105bbbd9b6eSWillian Rampazzo
106bbbd9b6eSWillian Rampazzo        # On pc-*-4.0, no CPU model should be reported as an alias:
107bbbd9b6eSWillian Rampazzo        for name,c in cpus.items():
108bbbd9b6eSWillian Rampazzo            self.assertNotIn('alias-of', c, "%s shouldn't be an alias" % (name))
109bbbd9b6eSWillian Rampazzo
110bbbd9b6eSWillian Rampazzo    def test_4_1_alias(self):
111bbbd9b6eSWillian Rampazzo        """
112bbbd9b6eSWillian Rampazzo        Check if unversioned CPU model is an alias pointing to right version
113bbbd9b6eSWillian Rampazzo
114bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.1
115bbbd9b6eSWillian Rampazzo        """
116bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
117bbbd9b6eSWillian Rampazzo        self.vm.launch()
118bbbd9b6eSWillian Rampazzo
119684750abSVladimir Sementsov-Ogievskiy        cpus = dict((m['name'], m) for m in
120684750abSVladimir Sementsov-Ogievskiy                    self.vm.cmd('query-cpu-definitions'))
121bbbd9b6eSWillian Rampazzo
122bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['Cascadelake-Server']['static'],
123bbbd9b6eSWillian Rampazzo                         'unversioned Cascadelake-Server CPU model must not be static')
124861f724dSThomas Huth        self.assertEqual(cpus['Cascadelake-Server'].get('alias-of'),
125861f724dSThomas Huth                         'Cascadelake-Server-v1',
126bbbd9b6eSWillian Rampazzo                         'Cascadelake-Server must be an alias of Cascadelake-Server-v1')
127bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'],
128bbbd9b6eSWillian Rampazzo                         'Cascadelake-Server-v1 must not be an alias')
129bbbd9b6eSWillian Rampazzo
130bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['qemu64']['static'],
131bbbd9b6eSWillian Rampazzo                         'unversioned qemu64 CPU model must not be static')
132861f724dSThomas Huth        self.assertEqual(cpus['qemu64'].get('alias-of'), 'qemu64-v1',
133bbbd9b6eSWillian Rampazzo                         'qemu64 must be an alias of qemu64-v1')
134bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['qemu64-v1'],
135bbbd9b6eSWillian Rampazzo                         'qemu64-v1 must not be an alias')
136bbbd9b6eSWillian Rampazzo
137bbbd9b6eSWillian Rampazzo        self.validate_variant_aliases(cpus)
138bbbd9b6eSWillian Rampazzo
139bbbd9b6eSWillian Rampazzo        # On pc-*-4.1, -noTSX and -IBRS models should be aliases:
140861f724dSThomas Huth        self.assertEqual(cpus["Haswell"].get('alias-of'),
141bbbd9b6eSWillian Rampazzo                         "Haswell-v1",
142bbbd9b6eSWillian Rampazzo                         "Haswell must be an alias")
143861f724dSThomas Huth        self.assertEqual(cpus["Haswell-noTSX"].get('alias-of'),
144bbbd9b6eSWillian Rampazzo                         "Haswell-v2",
145bbbd9b6eSWillian Rampazzo                         "Haswell-noTSX must be an alias")
146861f724dSThomas Huth        self.assertEqual(cpus["Haswell-IBRS"].get('alias-of'),
147bbbd9b6eSWillian Rampazzo                         "Haswell-v3",
148bbbd9b6eSWillian Rampazzo                         "Haswell-IBRS must be an alias")
149861f724dSThomas Huth        self.assertEqual(cpus["Haswell-noTSX-IBRS"].get('alias-of'),
150bbbd9b6eSWillian Rampazzo                         "Haswell-v4",
151bbbd9b6eSWillian Rampazzo                         "Haswell-noTSX-IBRS must be an alias")
152bbbd9b6eSWillian Rampazzo
153861f724dSThomas Huth        self.assertEqual(cpus["Broadwell"].get('alias-of'),
154bbbd9b6eSWillian Rampazzo                         "Broadwell-v1",
155bbbd9b6eSWillian Rampazzo                         "Broadwell must be an alias")
156861f724dSThomas Huth        self.assertEqual(cpus["Broadwell-noTSX"].get('alias-of'),
157bbbd9b6eSWillian Rampazzo                         "Broadwell-v2",
158bbbd9b6eSWillian Rampazzo                         "Broadwell-noTSX must be an alias")
159861f724dSThomas Huth        self.assertEqual(cpus["Broadwell-IBRS"].get('alias-of'),
160bbbd9b6eSWillian Rampazzo                         "Broadwell-v3",
161bbbd9b6eSWillian Rampazzo                         "Broadwell-IBRS must be an alias")
162861f724dSThomas Huth        self.assertEqual(cpus["Broadwell-noTSX-IBRS"].get('alias-of'),
163bbbd9b6eSWillian Rampazzo                         "Broadwell-v4",
164bbbd9b6eSWillian Rampazzo                         "Broadwell-noTSX-IBRS must be an alias")
165bbbd9b6eSWillian Rampazzo
166861f724dSThomas Huth        self.assertEqual(cpus["Nehalem"].get('alias-of'),
167bbbd9b6eSWillian Rampazzo                         "Nehalem-v1",
168bbbd9b6eSWillian Rampazzo                         "Nehalem must be an alias")
169861f724dSThomas Huth        self.assertEqual(cpus["Nehalem-IBRS"].get('alias-of'),
170bbbd9b6eSWillian Rampazzo                         "Nehalem-v2",
171bbbd9b6eSWillian Rampazzo                         "Nehalem-IBRS must be an alias")
172bbbd9b6eSWillian Rampazzo
173861f724dSThomas Huth        self.assertEqual(cpus["Westmere"].get('alias-of'),
174bbbd9b6eSWillian Rampazzo                         "Westmere-v1",
175bbbd9b6eSWillian Rampazzo                         "Westmere must be an alias")
176861f724dSThomas Huth        self.assertEqual(cpus["Westmere-IBRS"].get('alias-of'),
177bbbd9b6eSWillian Rampazzo                         "Westmere-v2",
178bbbd9b6eSWillian Rampazzo                         "Westmere-IBRS must be an alias")
179bbbd9b6eSWillian Rampazzo
180861f724dSThomas Huth        self.assertEqual(cpus["SandyBridge"].get('alias-of'),
181bbbd9b6eSWillian Rampazzo                         "SandyBridge-v1",
182bbbd9b6eSWillian Rampazzo                         "SandyBridge must be an alias")
183861f724dSThomas Huth        self.assertEqual(cpus["SandyBridge-IBRS"].get('alias-of'),
184bbbd9b6eSWillian Rampazzo                         "SandyBridge-v2",
185bbbd9b6eSWillian Rampazzo                         "SandyBridge-IBRS must be an alias")
186bbbd9b6eSWillian Rampazzo
187861f724dSThomas Huth        self.assertEqual(cpus["IvyBridge"].get('alias-of'),
188bbbd9b6eSWillian Rampazzo                         "IvyBridge-v1",
189bbbd9b6eSWillian Rampazzo                         "IvyBridge must be an alias")
190861f724dSThomas Huth        self.assertEqual(cpus["IvyBridge-IBRS"].get('alias-of'),
191bbbd9b6eSWillian Rampazzo                         "IvyBridge-v2",
192bbbd9b6eSWillian Rampazzo                         "IvyBridge-IBRS must be an alias")
193bbbd9b6eSWillian Rampazzo
194861f724dSThomas Huth        self.assertEqual(cpus["Skylake-Client"].get('alias-of'),
195bbbd9b6eSWillian Rampazzo                         "Skylake-Client-v1",
196bbbd9b6eSWillian Rampazzo                         "Skylake-Client must be an alias")
197861f724dSThomas Huth        self.assertEqual(cpus["Skylake-Client-IBRS"].get('alias-of'),
198bbbd9b6eSWillian Rampazzo                         "Skylake-Client-v2",
199bbbd9b6eSWillian Rampazzo                         "Skylake-Client-IBRS must be an alias")
200bbbd9b6eSWillian Rampazzo
201861f724dSThomas Huth        self.assertEqual(cpus["Skylake-Server"].get('alias-of'),
202bbbd9b6eSWillian Rampazzo                         "Skylake-Server-v1",
203bbbd9b6eSWillian Rampazzo                         "Skylake-Server must be an alias")
204861f724dSThomas Huth        self.assertEqual(cpus["Skylake-Server-IBRS"].get('alias-of'),
205bbbd9b6eSWillian Rampazzo                         "Skylake-Server-v2",
206bbbd9b6eSWillian Rampazzo                         "Skylake-Server-IBRS must be an alias")
207bbbd9b6eSWillian Rampazzo
208861f724dSThomas Huth        self.assertEqual(cpus["EPYC"].get('alias-of'),
209bbbd9b6eSWillian Rampazzo                         "EPYC-v1",
210bbbd9b6eSWillian Rampazzo                         "EPYC must be an alias")
211861f724dSThomas Huth        self.assertEqual(cpus["EPYC-IBPB"].get('alias-of'),
212bbbd9b6eSWillian Rampazzo                         "EPYC-v2",
213bbbd9b6eSWillian Rampazzo                         "EPYC-IBPB must be an alias")
214bbbd9b6eSWillian Rampazzo
215bbbd9b6eSWillian Rampazzo        self.validate_aliases(cpus)
216bbbd9b6eSWillian Rampazzo
217bbbd9b6eSWillian Rampazzo    def test_none_alias(self):
218bbbd9b6eSWillian Rampazzo        """
219bbbd9b6eSWillian Rampazzo        Check if unversioned CPU model is an alias pointing to some version
220bbbd9b6eSWillian Rampazzo
221bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:none
222bbbd9b6eSWillian Rampazzo        """
223bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
224bbbd9b6eSWillian Rampazzo        self.vm.launch()
225bbbd9b6eSWillian Rampazzo
226684750abSVladimir Sementsov-Ogievskiy        cpus = dict((m['name'], m) for m in
227684750abSVladimir Sementsov-Ogievskiy                    self.vm.cmd('query-cpu-definitions'))
228bbbd9b6eSWillian Rampazzo
229bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['Cascadelake-Server']['static'],
230bbbd9b6eSWillian Rampazzo                         'unversioned Cascadelake-Server CPU model must not be static')
231bbbd9b6eSWillian Rampazzo        self.assertTrue(re.match('Cascadelake-Server-v[0-9]+', cpus['Cascadelake-Server']['alias-of']),
232bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server must be an alias of versioned CPU model')
233bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'],
234bbbd9b6eSWillian Rampazzo                         'Cascadelake-Server-v1 must not be an alias')
235bbbd9b6eSWillian Rampazzo
236bbbd9b6eSWillian Rampazzo        self.assertFalse(cpus['qemu64']['static'],
237bbbd9b6eSWillian Rampazzo                         'unversioned qemu64 CPU model must not be static')
238bbbd9b6eSWillian Rampazzo        self.assertTrue(re.match('qemu64-v[0-9]+', cpus['qemu64']['alias-of']),
239bbbd9b6eSWillian Rampazzo                        'qemu64 must be an alias of versioned CPU model')
240bbbd9b6eSWillian Rampazzo        self.assertNotIn('alias-of', cpus['qemu64-v1'],
241bbbd9b6eSWillian Rampazzo                         'qemu64-v1 must not be an alias')
242bbbd9b6eSWillian Rampazzo
243bbbd9b6eSWillian Rampazzo        self.validate_aliases(cpus)
244bbbd9b6eSWillian Rampazzo
245bbbd9b6eSWillian Rampazzo
2462283b627SPhilippe Mathieu-Daudéclass CascadelakeArchCapabilities(avocado_qemu.QemuSystemTest):
247bbbd9b6eSWillian Rampazzo    """
248bbbd9b6eSWillian Rampazzo    Validation of Cascadelake arch-capabilities
249bbbd9b6eSWillian Rampazzo
250bbbd9b6eSWillian Rampazzo    :avocado: tags=arch:x86_64
251bbbd9b6eSWillian Rampazzo    """
252bbbd9b6eSWillian Rampazzo    def get_cpu_prop(self, prop):
253684750abSVladimir Sementsov-Ogievskiy        cpu_path = self.vm.cmd('query-cpus-fast')[0].get('qom-path')
254684750abSVladimir Sementsov-Ogievskiy        return self.vm.cmd('qom-get', path=cpu_path, property=prop)
255bbbd9b6eSWillian Rampazzo
256bbbd9b6eSWillian Rampazzo    def test_4_1(self):
257bbbd9b6eSWillian Rampazzo        """
258bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.1
259bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
260bbbd9b6eSWillian Rampazzo        """
261bbbd9b6eSWillian Rampazzo        # machine-type only:
262bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
263bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
264bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server,x-force-features=on,check=off,'
265bbbd9b6eSWillian Rampazzo                        'enforce=off')
266bbbd9b6eSWillian Rampazzo        self.vm.launch()
267bbbd9b6eSWillian Rampazzo        self.assertFalse(self.get_cpu_prop('arch-capabilities'),
268bbbd9b6eSWillian Rampazzo                         'pc-i440fx-4.1 + Cascadelake-Server should not have arch-capabilities')
269bbbd9b6eSWillian Rampazzo
270bbbd9b6eSWillian Rampazzo    def test_4_0(self):
271bbbd9b6eSWillian Rampazzo        """
272bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
273bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
274bbbd9b6eSWillian Rampazzo        """
275bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
276bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
277bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server,x-force-features=on,check=off,'
278bbbd9b6eSWillian Rampazzo                        'enforce=off')
279bbbd9b6eSWillian Rampazzo        self.vm.launch()
280bbbd9b6eSWillian Rampazzo        self.assertFalse(self.get_cpu_prop('arch-capabilities'),
281bbbd9b6eSWillian Rampazzo                         'pc-i440fx-4.0 + Cascadelake-Server should not have arch-capabilities')
282bbbd9b6eSWillian Rampazzo
283bbbd9b6eSWillian Rampazzo    def test_set_4_0(self):
284bbbd9b6eSWillian Rampazzo        """
285bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
286bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
287bbbd9b6eSWillian Rampazzo        """
288bbbd9b6eSWillian Rampazzo        # command line must override machine-type if CPU model is not versioned:
289bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
290bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
291bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server,x-force-features=on,check=off,'
292bbbd9b6eSWillian Rampazzo                        'enforce=off,+arch-capabilities')
293bbbd9b6eSWillian Rampazzo        self.vm.launch()
294bbbd9b6eSWillian Rampazzo        self.assertTrue(self.get_cpu_prop('arch-capabilities'),
295bbbd9b6eSWillian Rampazzo                        'pc-i440fx-4.0 + Cascadelake-Server,+arch-capabilities should have arch-capabilities')
296bbbd9b6eSWillian Rampazzo
297bbbd9b6eSWillian Rampazzo    def test_unset_4_1(self):
298bbbd9b6eSWillian Rampazzo        """
299bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.1
300bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
301bbbd9b6eSWillian Rampazzo        """
302bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
303bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
304bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server,x-force-features=on,check=off,'
305bbbd9b6eSWillian Rampazzo                        'enforce=off,-arch-capabilities')
306bbbd9b6eSWillian Rampazzo        self.vm.launch()
307bbbd9b6eSWillian Rampazzo        self.assertFalse(self.get_cpu_prop('arch-capabilities'),
308bbbd9b6eSWillian Rampazzo                         'pc-i440fx-4.1 + Cascadelake-Server,-arch-capabilities should not have arch-capabilities')
309bbbd9b6eSWillian Rampazzo
310bbbd9b6eSWillian Rampazzo    def test_v1_4_0(self):
311bbbd9b6eSWillian Rampazzo        """
312bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
313bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
314bbbd9b6eSWillian Rampazzo        """
315bbbd9b6eSWillian Rampazzo        # versioned CPU model overrides machine-type:
316bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
317bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
318bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server-v1,x-force-features=on,check=off,'
319bbbd9b6eSWillian Rampazzo                        'enforce=off')
320bbbd9b6eSWillian Rampazzo        self.vm.launch()
321bbbd9b6eSWillian Rampazzo        self.assertFalse(self.get_cpu_prop('arch-capabilities'),
322bbbd9b6eSWillian Rampazzo                         'pc-i440fx-4.0 + Cascadelake-Server-v1 should not have arch-capabilities')
323bbbd9b6eSWillian Rampazzo
324bbbd9b6eSWillian Rampazzo    def test_v2_4_0(self):
325bbbd9b6eSWillian Rampazzo        """
326bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
327bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
328bbbd9b6eSWillian Rampazzo        """
329bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
330bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
331bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server-v2,x-force-features=on,check=off,'
332bbbd9b6eSWillian Rampazzo                        'enforce=off')
333bbbd9b6eSWillian Rampazzo        self.vm.launch()
334bbbd9b6eSWillian Rampazzo        self.assertTrue(self.get_cpu_prop('arch-capabilities'),
335bbbd9b6eSWillian Rampazzo                        'pc-i440fx-4.0 + Cascadelake-Server-v2 should have arch-capabilities')
336bbbd9b6eSWillian Rampazzo
337bbbd9b6eSWillian Rampazzo    def test_v1_set_4_0(self):
338bbbd9b6eSWillian Rampazzo        """
339bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.0
340bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
341bbbd9b6eSWillian Rampazzo        """
342bbbd9b6eSWillian Rampazzo        # command line must override machine-type and versioned CPU model:
343bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
344bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
345bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server-v1,x-force-features=on,check=off,'
346bbbd9b6eSWillian Rampazzo                        'enforce=off,+arch-capabilities')
347bbbd9b6eSWillian Rampazzo        self.vm.launch()
348bbbd9b6eSWillian Rampazzo        self.assertTrue(self.get_cpu_prop('arch-capabilities'),
349bbbd9b6eSWillian Rampazzo                        'pc-i440fx-4.0 + Cascadelake-Server-v1,+arch-capabilities should have arch-capabilities')
350bbbd9b6eSWillian Rampazzo
351bbbd9b6eSWillian Rampazzo    def test_v2_unset_4_1(self):
352bbbd9b6eSWillian Rampazzo        """
353bbbd9b6eSWillian Rampazzo        :avocado: tags=machine:pc-i440fx-4.1
354bbbd9b6eSWillian Rampazzo        :avocado: tags=cpu:Cascadelake-Server
355bbbd9b6eSWillian Rampazzo        """
356bbbd9b6eSWillian Rampazzo        self.vm.add_args('-S')
357bbbd9b6eSWillian Rampazzo        self.set_vm_arg('-cpu',
358bbbd9b6eSWillian Rampazzo                        'Cascadelake-Server-v2,x-force-features=on,check=off,'
359bbbd9b6eSWillian Rampazzo                        'enforce=off,-arch-capabilities')
360bbbd9b6eSWillian Rampazzo        self.vm.launch()
361bbbd9b6eSWillian Rampazzo        self.assertFalse(self.get_cpu_prop('arch-capabilities'),
362bbbd9b6eSWillian Rampazzo                         'pc-i440fx-4.1 + Cascadelake-Server-v2,-arch-capabilities should not have arch-capabilities')
363