[PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64

Kautuk Consul posted 1 patch 1 year ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230419092219.426230-1-kconsul@linux.vnet.ibm.com
Maintainers: "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Thomas Huth <thuth@redhat.com>, Wainer dos Santos Moschetta <wainersm@redhat.com>, Beraldo Leal <bleal@redhat.com>, Cleber Rosa <crosa@redhat.com>
There is a newer version of this series
tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
1 file changed, 122 insertions(+), 2 deletions(-)
[PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64
Posted by Kautuk Consul 1 year ago
Commit c0c8687ef0fd990db8db1655a8a6c5a5e35dd4bb disabled the
boot_linux.py test-case due to which the code coverage for ppc
decreased by around 2%. As per the discussion on
https://lore.kernel.org/qemu-devel/87sfdpqcy4.fsf@linaro.org/ it
was mentioned that the baseline test for ppc64 could be modified
to make up this 2% code coverage. This patch attempts to achieve
this 2% code coverage by adding various device command line
arguments (to ./qemu-system-ppc64) in the tuxrun_baselines.py
test-case.

The code coverage report with boot_linux.py, without it and finally
with these tuxrun_baselines.py changes is as follows:

With boot_linux.py
------------------
  lines......: 13.8% (58006 of 420997 lines)
  functions..: 20.7% (7675 of 36993 functions)
  branches...: 9.2% (22146 of 240611 branches)
Without boot_linux.py (without this patch changes)
--------------------------------------------------
  lines......: 11.9% (50174 of 420997 lines)
  functions..: 18.8% (6947 of 36993 functions)
  branches...: 7.4% (17580 of 239017 branches)
Without boot_linux.py (with this patch changes)
-----------------------------------------------
  lines......: 13.8% (58287 of 420997 lines)
  functions..: 20.7% (7640 of 36993 functions)
  branches...: 8.4% (20223 of 240611 branches)

Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Reported-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
 1 file changed, 122 insertions(+), 2 deletions(-)

diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
index d343376faa..f763ee5d50 100644
--- a/tests/avocado/tuxrun_baselines.py
+++ b/tests/avocado/tuxrun_baselines.py
@@ -11,6 +11,8 @@
 
 import os
 import time
+import string
+import random
 
 from avocado import skip, skipIf
 from avocado_qemu import QemuSystemTest
@@ -308,7 +310,7 @@ def test_ppc64(self):
         """
         :avocado: tags=arch:ppc64
         :avocado: tags=machine:pseries
-        :avocado: tags=cpu:POWER8
+        :avocado: tags=cpu:POWER10
         :avocado: tags=endian:big
         :avocado: tags=console:hvc0
         :avocado: tags=tuxboot:ppc64
@@ -316,21 +318,139 @@ def test_ppc64(self):
         :avocado: tags=extradev:driver=spapr-vscsi
         :avocado: tags=root:sda
         """
+        # Generate a random string
+        res = ''.join(random.choices(string.ascii_lowercase +
+                                     string.digits, k=8))
+
+        # create qcow2 image to be used later.
+        process.run('./qemu-img create -f qcow2 '
+                    '/tmp/tuxrun_baselines_ppc64_' + str(res) +
+                    '.qcow2 1G')
+
+        # add device args to command line.
+        self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
+                         '-device', 'virtio-net,netdev=vnet')
+        self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
+                         '-device', '{"driver":"virtio-net-pci","netdev":'
+                         '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
+                         '"bus":"pci.0","addr":"0x9"}')
+        self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
+                         '"id":"usb","bus":"pci.0","addr":"0x2"}')
+        self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
+                         ',"bus":"pci.0","addr":"0x3"}')
+        self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
+                         '"virtio-serial0","bus":"pci.0","addr":"0x4"}')
+        self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
+                         ',"channel":0,"scsi-id":0,"lun":0,"device_id":'
+                         '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
+        self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
+                         '"id":"balloon0","bus":"pci.0","addr":"0x6"}')
+        self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
+        self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
+                         ',"bus":"usb.0","port":"1"}')
+        self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
+                         ',"bus":"usb.0","port":"2"}')
+        self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
+                         '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
+        self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
+                         ',"filename":"/dev/urandom"}',
+                         '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
+                         ',"id":"rng0","bus":"pci.0","addr":"0x8"}')
+        self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
+                         '"id":"objcrypto0","queues":1}',
+                         '-device', '{"driver":"virtio-crypto-pci",'
+                         '"cryptodev":"objcrypto0","id":"crypto0","bus"'
+                         ':"pci.0","addr":"0xa"}')
+        self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
+                         ',"index":1,"id":"pci.1"}')
+        self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
+                         ',"reg":12288}')
+        self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
+                         '-object', 'memory-backend-ram,id=ram1,size=1G',
+                         '-device', 'pc-dimm,id=dimm1,memdev=ram1')
+        self.vm.add_args('-drive', 'file=/tmp/tuxrun_baselines_ppc64_' +
+                         str(res) + '.qcow2,format=qcow2,if=none,id='
+                         'drive-virtio-disk1',
+                         '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
+                         'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
+                         ',bootindex=2')
         self.common_tuxrun(drive="scsi-hd")
 
+        # remove qcow2 image
+        process.run('rm /tmp/tuxrun_baselines_ppc64_' + str(res) + '.qcow2')
+
     def test_ppc64le(self):
         """
         :avocado: tags=arch:ppc64
         :avocado: tags=machine:pseries
-        :avocado: tags=cpu:POWER8
+        :avocado: tags=cpu:POWER10
         :avocado: tags=console:hvc0
         :avocado: tags=tuxboot:ppc64le
         :avocado: tags=image:vmlinux
         :avocado: tags=extradev:driver=spapr-vscsi
         :avocado: tags=root:sda
         """
+        # Generate a random string
+        res = ''.join(random.choices(string.ascii_lowercase +
+                                     string.digits, k=8))
+
+        # create qcow2 image to be used later.
+        process.run('./qemu-img create -f qcow2 '
+                    '/tmp/tuxrun_baselines_ppc64le_' + str(res) +
+                    '.qcow2 1G')
+
+        # add device args to command line.
+        self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
+                         '-device', 'virtio-net,netdev=vnet')
+        self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
+                         '-device', '{"driver":"virtio-net-pci","netdev":'
+                         '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
+                         '"bus":"pci.0","addr":"0x9"}')
+        self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
+                         '"id":"usb","bus":"pci.0","addr":"0x2"}')
+        self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
+                         ',"bus":"pci.0","addr":"0x3"}')
+        self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
+                         '"virtio-serial0","bus":"pci.0","addr":"0x4"}')
+        self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
+                         ',"channel":0,"scsi-id":0,"lun":0,"device_id":'
+                         '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
+        self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
+                         '"id":"balloon0","bus":"pci.0","addr":"0x6"}')
+        self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
+        self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
+                         ',"bus":"usb.0","port":"1"}')
+        self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
+                         ',"bus":"usb.0","port":"2"}')
+        self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
+                         '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
+        self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
+                         ',"filename":"/dev/urandom"}',
+                         '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
+                         ',"id":"rng0","bus":"pci.0","addr":"0x8"}')
+        self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
+                         '"id":"objcrypto0","queues":1}',
+                         '-device', '{"driver":"virtio-crypto-pci",'
+                         '"cryptodev":"objcrypto0","id":"crypto0","bus"'
+                         ':"pci.0","addr":"0xa"}')
+        self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
+                         ',"index":1,"id":"pci.1"}')
+        self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
+                         ',"reg":12288}')
+        self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
+                         '-object', 'memory-backend-ram,id=ram1,size=1G',
+                         '-device', 'pc-dimm,id=dimm1,memdev=ram1')
+        self.vm.add_args('-drive', 'file=/tmp/tuxrun_baselines_ppc64le_' +
+                         str(res) + '.qcow2,format=qcow2,if=none,'
+                         'id=drive-virtio-disk1',
+                         '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
+                         'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
+                         ',bootindex=2')
         self.common_tuxrun(drive="scsi-hd")
 
+        # remove qcow2 image
+        process.run('rm /tmp/tuxrun_baselines_ppc64le_' + str(res) + '.qcow2')
+
     def test_riscv32(self):
         """
         :avocado: tags=arch:riscv32
-- 
2.25.1


Re: [PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64
Posted by Philippe Mathieu-Daudé 1 year ago
Hi Kautuk,

On 19/4/23 11:22, Kautuk Consul wrote:
> Commit c0c8687ef0fd990db8db1655a8a6c5a5e35dd4bb disabled the
> boot_linux.py test-case due to which the code coverage for ppc
> decreased by around 2%. As per the discussion on
> https://lore.kernel.org/qemu-devel/87sfdpqcy4.fsf@linaro.org/ it
> was mentioned that the baseline test for ppc64 could be modified
> to make up this 2% code coverage. This patch attempts to achieve
> this 2% code coverage by adding various device command line
> arguments (to ./qemu-system-ppc64) in the tuxrun_baselines.py
> test-case.
> 
> The code coverage report with boot_linux.py, without it and finally
> with these tuxrun_baselines.py changes is as follows:
> 
> With boot_linux.py
> ------------------
>    lines......: 13.8% (58006 of 420997 lines)
>    functions..: 20.7% (7675 of 36993 functions)
>    branches...: 9.2% (22146 of 240611 branches)
> Without boot_linux.py (without this patch changes)
> --------------------------------------------------
>    lines......: 11.9% (50174 of 420997 lines)
>    functions..: 18.8% (6947 of 36993 functions)
>    branches...: 7.4% (17580 of 239017 branches)
> Without boot_linux.py (with this patch changes)
> -----------------------------------------------
>    lines......: 13.8% (58287 of 420997 lines)
>    functions..: 20.7% (7640 of 36993 functions)
>    branches...: 8.4% (20223 of 240611 branches)
> 
> Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
> Reported-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
>   1 file changed, 122 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
> index d343376faa..f763ee5d50 100644
> --- a/tests/avocado/tuxrun_baselines.py
> +++ b/tests/avocado/tuxrun_baselines.py
> @@ -11,6 +11,8 @@
>   
>   import os
>   import time
> +import string
> +import random
>   
>   from avocado import skip, skipIf
>   from avocado_qemu import QemuSystemTest
> @@ -308,7 +310,7 @@ def test_ppc64(self):
>           """
>           :avocado: tags=arch:ppc64
>           :avocado: tags=machine:pseries
> -        :avocado: tags=cpu:POWER8
> +        :avocado: tags=cpu:POWER10
>           :avocado: tags=endian:big
>           :avocado: tags=console:hvc0
>           :avocado: tags=tuxboot:ppc64
> @@ -316,21 +318,139 @@ def test_ppc64(self):
>           :avocado: tags=extradev:driver=spapr-vscsi
>           :avocado: tags=root:sda
>           """
> +        # Generate a random string
> +        res = ''.join(random.choices(string.ascii_lowercase +
> +                                     string.digits, k=8))
> +
> +        # create qcow2 image to be used later.
> +        process.run('./qemu-img create -f qcow2 '

Please take qemu-img from $PATH.

> +                    '/tmp/tuxrun_baselines_ppc64_' + str(res) +
> +                    '.qcow2 1G')

Do not use /tmp directly (i.e. Windows OS doesn't have it).
You can use:
- self.workdir
- with tempfile.NamedTemporaryFile() as qcow2:
- with tempfile.TemporaryDirectory(prefix='tuxrun_') as tmpdir:

Also, better to define the path once in a variable:

            qcow_img_path = f'{tmpdir}/tuxrun_baselines.qcow2'

> +        # add device args to command line.
> +        self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
> +                         '-device', 'virtio-net,netdev=vnet')
> +        self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
> +                         '-device', '{"driver":"virtio-net-pci","netdev":'
> +                         '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
> +                         '"bus":"pci.0","addr":"0x9"}')
> +        self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
> +                         '"id":"usb","bus":"pci.0","addr":"0x2"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
> +                         ',"bus":"pci.0","addr":"0x3"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
> +                         '"virtio-serial0","bus":"pci.0","addr":"0x4"}')
> +        self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
> +                         ',"channel":0,"scsi-id":0,"lun":0,"device_id":'
> +                         '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
> +                         '"id":"balloon0","bus":"pci.0","addr":"0x6"}')
> +        self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
> +        self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
> +                         ',"bus":"usb.0","port":"1"}')
> +        self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
> +                         ',"bus":"usb.0","port":"2"}')
> +        self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
> +                         '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
> +        self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
> +                         ',"filename":"/dev/urandom"}',
> +                         '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
> +                         ',"id":"rng0","bus":"pci.0","addr":"0x8"}')
> +        self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
> +                         '"id":"objcrypto0","queues":1}',
> +                         '-device', '{"driver":"virtio-crypto-pci",'
> +                         '"cryptodev":"objcrypto0","id":"crypto0","bus"'
> +                         ':"pci.0","addr":"0xa"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
> +                         ',"index":1,"id":"pci.1"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
> +                         ',"reg":12288}')
> +        self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
> +                         '-object', 'memory-backend-ram,id=ram1,size=1G',
> +                         '-device', 'pc-dimm,id=dimm1,memdev=ram1')
> +        self.vm.add_args('-drive', 'file=/tmp/tuxrun_baselines_ppc64_' +
> +                         str(res) + '.qcow2,format=qcow2,if=none,id='

Using it here:

            self.vm.add_args('-drive', f'file={qcow_img_path},...

> +                         'drive-virtio-disk1',
> +                         '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
> +                         'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
> +                         ',bootindex=2')
>           self.common_tuxrun(drive="scsi-hd")
>   
> +        # remove qcow2 image
> +        process.run('rm /tmp/tuxrun_baselines_ppc64_' + str(res) + '.qcow2')

No need if using the 'with ...' syntax, automatically cleaned up.

Re: [PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64
Posted by Thomas Huth 1 year ago
On 20/04/2023 09.57, Philippe Mathieu-Daudé wrote:
> Hi Kautuk,
> 
> On 19/4/23 11:22, Kautuk Consul wrote:
>> Commit c0c8687ef0fd990db8db1655a8a6c5a5e35dd4bb disabled the
>> boot_linux.py test-case due to which the code coverage for ppc
>> decreased by around 2%. As per the discussion on
>> https://lore.kernel.org/qemu-devel/87sfdpqcy4.fsf@linaro.org/ it
>> was mentioned that the baseline test for ppc64 could be modified
>> to make up this 2% code coverage. This patch attempts to achieve
>> this 2% code coverage by adding various device command line
>> arguments (to ./qemu-system-ppc64) in the tuxrun_baselines.py
>> test-case.
>>
>> The code coverage report with boot_linux.py, without it and finally
>> with these tuxrun_baselines.py changes is as follows:
>>
>> With boot_linux.py
>> ------------------
>>    lines......: 13.8% (58006 of 420997 lines)
>>    functions..: 20.7% (7675 of 36993 functions)
>>    branches...: 9.2% (22146 of 240611 branches)
>> Without boot_linux.py (without this patch changes)
>> --------------------------------------------------
>>    lines......: 11.9% (50174 of 420997 lines)
>>    functions..: 18.8% (6947 of 36993 functions)
>>    branches...: 7.4% (17580 of 239017 branches)
>> Without boot_linux.py (with this patch changes)
>> -----------------------------------------------
>>    lines......: 13.8% (58287 of 420997 lines)
>>    functions..: 20.7% (7640 of 36993 functions)
>>    branches...: 8.4% (20223 of 240611 branches)
>>
>> Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
>> Reported-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>>   tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
>>   1 file changed, 122 insertions(+), 2 deletions(-)
>>
>> diff --git a/tests/avocado/tuxrun_baselines.py 
>> b/tests/avocado/tuxrun_baselines.py
>> index d343376faa..f763ee5d50 100644
>> --- a/tests/avocado/tuxrun_baselines.py
>> +++ b/tests/avocado/tuxrun_baselines.py
>> @@ -11,6 +11,8 @@
>>   import os
>>   import time
>> +import string
>> +import random
>>   from avocado import skip, skipIf
>>   from avocado_qemu import QemuSystemTest
>> @@ -308,7 +310,7 @@ def test_ppc64(self):
>>           """
>>           :avocado: tags=arch:ppc64
>>           :avocado: tags=machine:pseries
>> -        :avocado: tags=cpu:POWER8
>> +        :avocado: tags=cpu:POWER10
>>           :avocado: tags=endian:big
>>           :avocado: tags=console:hvc0
>>           :avocado: tags=tuxboot:ppc64
>> @@ -316,21 +318,139 @@ def test_ppc64(self):
>>           :avocado: tags=extradev:driver=spapr-vscsi
>>           :avocado: tags=root:sda
>>           """
>> +        # Generate a random string
>> +        res = ''.join(random.choices(string.ascii_lowercase +
>> +                                     string.digits, k=8))
>> +
>> +        # create qcow2 image to be used later.
>> +        process.run('./qemu-img create -f qcow2 '
> 
> Please take qemu-img from $PATH.

I think it would even be better to provide a function in the base class to 
call qemu-img ... we already have some code in 
tests/avocado/avocado_qemu/__init__.py to find a usable qemu-img binary, I 
think that could be extended?

  Thomas


Re: [PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64
Posted by Kautuk Consul 1 year ago
On 2023-04-20 10:12:37, Thomas Huth wrote:
> On 20/04/2023 09.57, Philippe Mathieu-Daud޸ wrote:
> > Hi Kautuk,
> > 
> > On 19/4/23 11:22, Kautuk Consul wrote:
> > > Commit c0c8687ef0fd990db8db1655a8a6c5a5e35dd4bb disabled the
> > > boot_linux.py test-case due to which the code coverage for ppc
> > > decreased by around 2%. As per the discussion on
> > > https://lore.kernel.org/qemu-devel/87sfdpqcy4.fsf@linaro.org/ it
> > > was mentioned that the baseline test for ppc64 could be modified
> > > to make up this 2% code coverage. This patch attempts to achieve
> > > this 2% code coverage by adding various device command line
> > > arguments (to ./qemu-system-ppc64) in the tuxrun_baselines.py
> > > test-case.
> > > 
> > > The code coverage report with boot_linux.py, without it and finally
> > > with these tuxrun_baselines.py changes is as follows:
> > > 
> > > With boot_linux.py
> > > ------------------
> > > ߦߦ lines......: 13.8% (58006 of 420997 lines)
> > > ߦߦ functions..: 20.7% (7675 of 36993 functions)
> > > ߦߦ branches...: 9.2% (22146 of 240611 branches)
> > > Without boot_linux.py (without this patch changes)
> > > --------------------------------------------------
> > > ߦߦ lines......: 11.9% (50174 of 420997 lines)
> > > ߦߦ functions..: 18.8% (6947 of 36993 functions)
> > > ߦߦ branches...: 7.4% (17580 of 239017 branches)
> > > Without boot_linux.py (with this patch changes)
> > > -----------------------------------------------
> > > ߦߦ lines......: 13.8% (58287 of 420997 lines)
> > > ߦߦ functions..: 20.7% (7640 of 36993 functions)
> > > ߦߦ branches...: 8.4% (20223 of 240611 branches)
> > > 
> > > Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
> > > Reported-by: Alex Benn޸e <alex.bennee@linaro.org>
> > > ---
> > > ߦ tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
> > > ߦ 1 file changed, 122 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/tests/avocado/tuxrun_baselines.py
> > > b/tests/avocado/tuxrun_baselines.py
> > > index d343376faa..f763ee5d50 100644
> > > --- a/tests/avocado/tuxrun_baselines.py
> > > +++ b/tests/avocado/tuxrun_baselines.py
> > > @@ -11,6 +11,8 @@
> > > ߦ import os
> > > ߦ import time
> > > +import string
> > > +import random
> > > ߦ from avocado import skip, skipIf
> > > ߦ from avocado_qemu import QemuSystemTest
> > > @@ -308,7 +310,7 @@ def test_ppc64(self):
> > > ߦߦߦߦߦߦߦߦߦ """
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=arch:ppc64
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=machine:pseries
> > > -ߦߦߦߦߦߦߦ :avocado: tags=cpu:POWER8
> > > +ߦߦߦߦߦߦߦ :avocado: tags=cpu:POWER10
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=endian:big
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=console:hvc0
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=tuxboot:ppc64
> > > @@ -316,21 +318,139 @@ def test_ppc64(self):
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=extradev:driver=spapr-vscsi
> > > ߦߦߦߦߦߦߦߦߦ :avocado: tags=root:sda
> > > ߦߦߦߦߦߦߦߦߦ """
> > > +ߦߦߦߦߦߦߦ # Generate a random string
> > > +ߦߦߦߦߦߦߦ res = ''.join(random.choices(string.ascii_lowercase +
> > > +ߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦߦ string.digits, k=8))
> > > +
> > > +ߦߦߦߦߦߦߦ # create qcow2 image to be used later.
> > > +ߦߦߦߦߦߦߦ process.run('./qemu-img create -f qcow2 '
> > 
> > Please take qemu-img from $PATH.
> 
> I think it would even be better to provide a function in the base class to
> call qemu-img ... we already have some code in
> tests/avocado/avocado_qemu/__init__.py to find a usable qemu-img binary, I
> think that could be extended?

Thanks everybody for the comments.
I have extended the __init__.py source code to introduce a new function
that finds the qemu-img binary. This function is now getting called from
tuxrun_baselines.py in the v3 patchset I just sent.
I haven't created a function that actually executes qemu-img as there
didn't seem adequate reason to do so.
> 
>  Thomas
> 

Re: [PATCH v2] tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64
Posted by Harsh Prateek Bora 1 year ago
One minor comment below:

On 4/19/23 14:52, Kautuk Consul wrote:
> Commit c0c8687ef0fd990db8db1655a8a6c5a5e35dd4bb disabled the
> boot_linux.py test-case due to which the code coverage for ppc
> decreased by around 2%. As per the discussion on
> https://lore.kernel.org/qemu-devel/87sfdpqcy4.fsf@linaro.org/ it
> was mentioned that the baseline test for ppc64 could be modified
> to make up this 2% code coverage. This patch attempts to achieve
> this 2% code coverage by adding various device command line
> arguments (to ./qemu-system-ppc64) in the tuxrun_baselines.py
> test-case.
> 
> The code coverage report with boot_linux.py, without it and finally
> with these tuxrun_baselines.py changes is as follows:
> 
> With boot_linux.py
> ------------------
>    lines......: 13.8% (58006 of 420997 lines)
>    functions..: 20.7% (7675 of 36993 functions)
>    branches...: 9.2% (22146 of 240611 branches)
> Without boot_linux.py (without this patch changes)
> --------------------------------------------------
>    lines......: 11.9% (50174 of 420997 lines)
>    functions..: 18.8% (6947 of 36993 functions)
>    branches...: 7.4% (17580 of 239017 branches)
> Without boot_linux.py (with this patch changes)
> -----------------------------------------------
>    lines......: 13.8% (58287 of 420997 lines)
>    functions..: 20.7% (7640 of 36993 functions)
>    branches...: 8.4% (20223 of 240611 branches)
> 
> Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
> Reported-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/avocado/tuxrun_baselines.py | 124 +++++++++++++++++++++++++++++-
>   1 file changed, 122 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
> index d343376faa..f763ee5d50 100644
> --- a/tests/avocado/tuxrun_baselines.py
> +++ b/tests/avocado/tuxrun_baselines.py
> @@ -11,6 +11,8 @@
>   
>   import os
>   import time
> +import string
> +import random
>   
>   from avocado import skip, skipIf
>   from avocado_qemu import QemuSystemTest
> @@ -308,7 +310,7 @@ def test_ppc64(self):
>           """
>           :avocado: tags=arch:ppc64
>           :avocado: tags=machine:pseries
> -        :avocado: tags=cpu:POWER8
> +        :avocado: tags=cpu:POWER10
>           :avocado: tags=endian:big
>           :avocado: tags=console:hvc0
>           :avocado: tags=tuxboot:ppc64
> @@ -316,21 +318,139 @@ def test_ppc64(self):
>           :avocado: tags=extradev:driver=spapr-vscsi
>           :avocado: tags=root:sda
>           """
> +        # Generate a random string
> +        res = ''.join(random.choices(string.ascii_lowercase +
> +                                     string.digits, k=8))
> +
We can have a tmpres = '/tmp/tuxrun_baselines_ppc64_' + str(res) + 
'.qcow2 which can later be used at all 3 instances below. Same for 
ppc64le as well. Also, prefix could be shortened to tuxrun_ppc64[le]. 
Otherwise, looks good to me.

Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>

> +        # create qcow2 image to be used later.
> +        process.run('./qemu-img create -f qcow2 '
> +                    '/tmp/tuxrun_baselines_ppc64_' + str(res) +
> +                    '.qcow2 1G')
> +
> +        # add device args to command line.
> +        self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
> +                         '-device', 'virtio-net,netdev=vnet')
> +        self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
> +                         '-device', '{"driver":"virtio-net-pci","netdev":'
> +                         '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
> +                         '"bus":"pci.0","addr":"0x9"}')
> +        self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
> +                         '"id":"usb","bus":"pci.0","addr":"0x2"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
> +                         ',"bus":"pci.0","addr":"0x3"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
> +                         '"virtio-serial0","bus":"pci.0","addr":"0x4"}')
> +        self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
> +                         ',"channel":0,"scsi-id":0,"lun":0,"device_id":'
> +                         '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
> +                         '"id":"balloon0","bus":"pci.0","addr":"0x6"}')
> +        self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
> +        self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
> +                         ',"bus":"usb.0","port":"1"}')
> +        self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
> +                         ',"bus":"usb.0","port":"2"}')
> +        self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
> +                         '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
> +        self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
> +                         ',"filename":"/dev/urandom"}',
> +                         '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
> +                         ',"id":"rng0","bus":"pci.0","addr":"0x8"}')
> +        self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
> +                         '"id":"objcrypto0","queues":1}',
> +                         '-device', '{"driver":"virtio-crypto-pci",'
> +                         '"cryptodev":"objcrypto0","id":"crypto0","bus"'
> +                         ':"pci.0","addr":"0xa"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
> +                         ',"index":1,"id":"pci.1"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
> +                         ',"reg":12288}')
> +        self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
> +                         '-object', 'memory-backend-ram,id=ram1,size=1G',
> +                         '-device', 'pc-dimm,id=dimm1,memdev=ram1')
> +        self.vm.add_args('-drive', 'file=/tmp/tuxrun_baselines_ppc64_' +
> +                         str(res) + '.qcow2,format=qcow2,if=none,id='
> +                         'drive-virtio-disk1',
> +                         '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
> +                         'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
> +                         ',bootindex=2')
>           self.common_tuxrun(drive="scsi-hd")
>   
> +        # remove qcow2 image
> +        process.run('rm /tmp/tuxrun_baselines_ppc64_' + str(res) + '.qcow2')
> +
>       def test_ppc64le(self):
>           """
>           :avocado: tags=arch:ppc64
>           :avocado: tags=machine:pseries
> -        :avocado: tags=cpu:POWER8
> +        :avocado: tags=cpu:POWER10
>           :avocado: tags=console:hvc0
>           :avocado: tags=tuxboot:ppc64le
>           :avocado: tags=image:vmlinux
>           :avocado: tags=extradev:driver=spapr-vscsi
>           :avocado: tags=root:sda
>           """
> +        # Generate a random string
> +        res = ''.join(random.choices(string.ascii_lowercase +
> +                                     string.digits, k=8))
> +
> +        # create qcow2 image to be used later.
> +        process.run('./qemu-img create -f qcow2 '
> +                    '/tmp/tuxrun_baselines_ppc64le_' + str(res) +
> +                    '.qcow2 1G')
> +
> +        # add device args to command line.
> +        self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
> +                         '-device', 'virtio-net,netdev=vnet')
> +        self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
> +                         '-device', '{"driver":"virtio-net-pci","netdev":'
> +                         '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
> +                         '"bus":"pci.0","addr":"0x9"}')
> +        self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
> +                         '"id":"usb","bus":"pci.0","addr":"0x2"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
> +                         ',"bus":"pci.0","addr":"0x3"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
> +                         '"virtio-serial0","bus":"pci.0","addr":"0x4"}')
> +        self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
> +                         ',"channel":0,"scsi-id":0,"lun":0,"device_id":'
> +                         '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
> +        self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
> +                         '"id":"balloon0","bus":"pci.0","addr":"0x6"}')
> +        self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
> +        self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
> +                         ',"bus":"usb.0","port":"1"}')
> +        self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
> +                         ',"bus":"usb.0","port":"2"}')
> +        self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
> +                         '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
> +        self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
> +                         ',"filename":"/dev/urandom"}',
> +                         '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
> +                         ',"id":"rng0","bus":"pci.0","addr":"0x8"}')
> +        self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
> +                         '"id":"objcrypto0","queues":1}',
> +                         '-device', '{"driver":"virtio-crypto-pci",'
> +                         '"cryptodev":"objcrypto0","id":"crypto0","bus"'
> +                         ':"pci.0","addr":"0xa"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
> +                         ',"index":1,"id":"pci.1"}')
> +        self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
> +                         ',"reg":12288}')
> +        self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
> +                         '-object', 'memory-backend-ram,id=ram1,size=1G',
> +                         '-device', 'pc-dimm,id=dimm1,memdev=ram1')
> +        self.vm.add_args('-drive', 'file=/tmp/tuxrun_baselines_ppc64le_' +
> +                         str(res) + '.qcow2,format=qcow2,if=none,'
> +                         'id=drive-virtio-disk1',
> +                         '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
> +                         'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
> +                         ',bootindex=2')
>           self.common_tuxrun(drive="scsi-hd")
>   
> +        # remove qcow2 image
> +        process.run('rm /tmp/tuxrun_baselines_ppc64le_' + str(res) + '.qcow2')
> +
>       def test_riscv32(self):
>           """
>           :avocado: tags=arch:riscv32