On Thu, Apr 08, 2021 at 04:52:30PM -0300, Wainer dos Santos Moschetta wrote:
> Currently the acceptance tests tagged with "machine" have the "-M TYPE"
> automatically added to the list of arguments of the QEMUMachine object.
> In other words, that option is passed to the launched QEMU. On this
> series it is implemented the same feature but instead for tests marked
> with "cpu".
>
> There is a caveat, however, in case the test needs additional arguments to
> the CPU type they cannot be passed via tag, because the tags parser split
> values by comma. For example, in tests/acceptance/x86_cpu_model_versions.py,
> there are cases where:
Hi Wainer,
I've created an Avocado issue to hopefully get rid of this limitation:
https://github.com/avocado-framework/avocado/issues/4541
>
> * -cpu is set to "Cascadelake-Server,x-force-features=on,check=off,enforce=off"
> * if it was tagged like "cpu:Cascadelake-Server,x-force-features=on,check=off,enforce=off"
> then the parser would break it into 4 tags ("cpu:Cascadelake-Server",
> "x-force-features=on", "check=off", "enforce=off")
> * resulting on "-cpu Cascadelake-Server" and the remaining arguments are ignored.
>
> It was introduced the avocado_qemu.Test.set_vm_arg() method to deal with
> cases like the example above, so that one can tag it as "cpu:Cascadelake-Server"
> AND call self.set_vm_args('-cpu', "Cascadelake-Server,x-force-features=on,check=off,enforce=off"),
> and that results on the reset of the initial value of -cpu.
>
So for now this seems reasonable enough.
> This series was tested on CI (https://gitlab.com/wainersm/qemu/-/pipelines/277376246)
> and with the following code:
>
> from avocado_qemu import Test
>
> class CPUTest(Test):
> def test_cpu(self):
> """
> :avocado: tags=cpu:host
> """
> # The cpu property is set to the tag value, or None on its absence
> self.assertEqual(self.cpu, "host")
> # The created VM has the '-cpu host' option
> self.assertIn("-cpu host", " ".join(self.vm._args))
> self.vm.launch()
>
> def test_cpu_none(self):
> self.assertEqual(self.cpu, None)
> self.assertNotIn('-cpu', self.vm._args)
>
> def test_cpu_reset(self):
> """
> :avocado: tags=cpu:host
> """
> self.assertIn("-cpu host", " ".join(self.vm._args))
> self.set_vm_arg("-cpu", "Cascadelake-Server,x-force-features=on")
> self.assertNotIn("-cpu host", " ".join(self.vm._args))
> self.assertIn("-cpu Cascadelake-Server,x-force-features=on", " ".join(self.vm._args))
>
We should not let this type of testing go to waste, so it's about time
to set aside a directory for tests that are about the framework,
rather than end user functionality. I'll take a look at that.
Cheers,
- Cleber.