diff mbox series

[v2] tests/acceptance: add a test for devices on s390x

Message ID 20201126130158.1471985-1-cohuck@redhat.com
State New
Headers show
Series [v2] tests/acceptance: add a test for devices on s390x | expand

Commit Message

Cornelia Huck Nov. 26, 2020, 1:01 p.m. UTC
This adds a very basic test for checking that we present devices
in a way that Linux can consume: boot with both virtio-net-ccw and
virtio-net-pci attached and then verify that Linux is able to see
and detect these devices.

Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
RFC->v2:
 - use a newer kernel that uses the uid in zpci address generation
 - add a zpci device to specify a uid
 - increase timeout
 - tweak naming
 - add a MAINTAINERS entry
---
 MAINTAINERS                                 |  1 +
 tests/acceptance/machine_s390_ccw_virtio.py | 70 +++++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 tests/acceptance/machine_s390_ccw_virtio.py

Comments

Thomas Huth Nov. 26, 2020, 1:16 p.m. UTC | #1
On 26/11/2020 14.01, Cornelia Huck wrote:
> This adds a very basic test for checking that we present devices
> in a way that Linux can consume: boot with both virtio-net-ccw and
> virtio-net-pci attached and then verify that Linux is able to see
> and detect these devices.
> 
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
> RFC->v2:
>  - use a newer kernel that uses the uid in zpci address generation
>  - add a zpci device to specify a uid
>  - increase timeout
>  - tweak naming
>  - add a MAINTAINERS entry
> ---
>  MAINTAINERS                                 |  1 +
>  tests/acceptance/machine_s390_ccw_virtio.py | 70 +++++++++++++++++++++
>  2 files changed, 71 insertions(+)
>  create mode 100644 tests/acceptance/machine_s390_ccw_virtio.py
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 68bc160f41bc..cc1c7c2ffed8 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1426,6 +1426,7 @@ F: include/hw/s390x/
>  F: hw/watchdog/wdt_diag288.c
>  F: include/hw/watchdog/wdt_diag288.h
>  F: default-configs/s390x-softmmu.mak
> +F: tests/acceptance/machine_s390_ccw_virtio.py
>  T: git https://github.com/cohuck/qemu.git s390-next
>  T: git https://github.com/borntraeger/qemu.git s390-next
>  L: qemu-s390x@nongnu.org
> diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py
> new file mode 100644
> index 000000000000..1f56be776c5f
> --- /dev/null
> +++ b/tests/acceptance/machine_s390_ccw_virtio.py
> @@ -0,0 +1,70 @@
> +# Functional test that boots an s390x Linux guest with ccw and PCI devices
> +# attached and checks whether the devices are recognized by Linux
> +#
> +# Copyright (c) 2020 Red Hat, Inc.
> +#
> +# Author:
> +#  Cornelia Huck <cohuck@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later.  See the COPYING file in the top-level directory.
> +
> +
> +import os
> +
> +from avocado_qemu import Test
> +from avocado_qemu import exec_command_and_wait_for_pattern
> +from avocado_qemu import wait_for_console_pattern
> +
> +class S390CCWVirtioMachine(Test):
> +    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
> +
> +    def wait_for_console_pattern(self, success_message, vm=None):
> +        wait_for_console_pattern(self, success_message,
> +                                 failure_message='Kernel panic - not syncing',
> +                                 vm=vm)
> +
> +    timeout = 120
> +
> +    def test_s390x_devices(self):
> +
> +        """
> +        :avocado: tags=arch:s390x
> +        :avocado: tags=machine:s390-ccw-virtio
> +        """
> +
> +        kernel_url = ('https://snapshot.debian.org/archive/debian/'
> +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> +                      '20190702+deb10u6/images/generic/kernel.debian')
> +        kernel_hash = '5821fbee57d6220a067a8b967d24595621aa1eb6'
> +        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
> +
> +        initrd_url = ('https://snapshot.debian.org/archive/debian/'
> +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> +                      '20190702+deb10u6/images/generic/initrd.debian')
> +        initrd_hash = '81ba09c97bef46e8f4660ac25b4ac0a5be3a94d6'
> +        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
> +
> +        self.vm.set_console()
> +        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
> +                              'console=sclp0 root=/dev/ram0 BOOT_DEBUG=3')
> +        self.vm.add_args('-nographic',
> +                         '-kernel', kernel_path,
> +                         '-initrd', initrd_path,
> +                         '-append', kernel_command_line,
> +                         '-device', 'virtio-net-ccw,devno=fe.1.1111',
> +                         '-device', 'zpci,uid=5,target=zzz',
> +                         '-device', 'virtio-net-pci,id=zzz')
> +        self.vm.launch()
> +
> +        shell_ready = "sh: can't access tty; job control turned off"
> +        self.wait_for_console_pattern(shell_ready)
> +        # first debug shell is too early, we need to wait for device detection
> +        exec_command_and_wait_for_pattern(self, 'exit', shell_ready)
> +
> +        ccw_bus_id="0.1.1111"
> +        pci_bus_id="0005:00:00.0"
> +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/',
> +                                          ccw_bus_id)
> +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/pci/devices/',
> +                                          pci_bus_id)
> 

Reviewed-by: Thomas Huth <thuth@redhat.com>
Cornelia Huck Nov. 27, 2020, 4:50 p.m. UTC | #2
On Thu, 26 Nov 2020 14:01:58 +0100
Cornelia Huck <cohuck@redhat.com> wrote:

> This adds a very basic test for checking that we present devices
> in a way that Linux can consume: boot with both virtio-net-ccw and
> virtio-net-pci attached and then verify that Linux is able to see
> and detect these devices.
> 
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
> RFC->v2:
>  - use a newer kernel that uses the uid in zpci address generation
>  - add a zpci device to specify a uid
>  - increase timeout
>  - tweak naming
>  - add a MAINTAINERS entry
> ---
>  MAINTAINERS                                 |  1 +
>  tests/acceptance/machine_s390_ccw_virtio.py | 70 +++++++++++++++++++++
>  2 files changed, 71 insertions(+)
>  create mode 100644 tests/acceptance/machine_s390_ccw_virtio.py

Queued to s390-next.

I plan to add some more stuff on top (like checking the mac address, or
adding more devices), but that will have to wait until next week.
Wainer dos Santos Moschetta Nov. 27, 2020, 5 p.m. UTC | #3
Hi,

On 11/26/20 10:01 AM, Cornelia Huck wrote:
> This adds a very basic test for checking that we present devices
> in a way that Linux can consume: boot with both virtio-net-ccw and
> virtio-net-pci attached and then verify that Linux is able to see
> and detect these devices.
>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
> RFC->v2:
>   - use a newer kernel that uses the uid in zpci address generation
>   - add a zpci device to specify a uid
>   - increase timeout
>   - tweak naming
>   - add a MAINTAINERS entry
> ---
>   MAINTAINERS                                 |  1 +
>   tests/acceptance/machine_s390_ccw_virtio.py | 70 +++++++++++++++++++++
>   2 files changed, 71 insertions(+)
>   create mode 100644 tests/acceptance/machine_s390_ccw_virtio.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 68bc160f41bc..cc1c7c2ffed8 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1426,6 +1426,7 @@ F: include/hw/s390x/
>   F: hw/watchdog/wdt_diag288.c
>   F: include/hw/watchdog/wdt_diag288.h
>   F: default-configs/s390x-softmmu.mak
> +F: tests/acceptance/machine_s390_ccw_virtio.py
>   T: git https://github.com/cohuck/qemu.git s390-next
>   T: git https://github.com/borntraeger/qemu.git s390-next
>   L: qemu-s390x@nongnu.org
> diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py
> new file mode 100644
> index 000000000000..1f56be776c5f
> --- /dev/null
> +++ b/tests/acceptance/machine_s390_ccw_virtio.py
> @@ -0,0 +1,70 @@
> +# Functional test that boots an s390x Linux guest with ccw and PCI devices
> +# attached and checks whether the devices are recognized by Linux
> +#
> +# Copyright (c) 2020 Red Hat, Inc.
> +#
> +# Author:
> +#  Cornelia Huck <cohuck@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later.  See the COPYING file in the top-level directory.
> +
> +
> +import os
> +


Unused import.


> +from avocado_qemu import Test
> +from avocado_qemu import exec_command_and_wait_for_pattern
> +from avocado_qemu import wait_for_console_pattern
> +
> +class S390CCWVirtioMachine(Test):
> +    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
> +
> +    def wait_for_console_pattern(self, success_message, vm=None):
> +        wait_for_console_pattern(self, success_message,
> +                                 failure_message='Kernel panic - not syncing',
> +                                 vm=vm)
> +
> +    timeout = 120
> +
> +    def test_s390x_devices(self):
> +
> +        """
> +        :avocado: tags=arch:s390x
> +        :avocado: tags=machine:s390-ccw-virtio
> +        """
> +
> +        kernel_url = ('https://snapshot.debian.org/archive/debian/'
> +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> +                      '20190702+deb10u6/images/generic/kernel.debian')
> +        kernel_hash = '5821fbee57d6220a067a8b967d24595621aa1eb6'
> +        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
> +
> +        initrd_url = ('https://snapshot.debian.org/archive/debian/'
> +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> +                      '20190702+deb10u6/images/generic/initrd.debian')
> +        initrd_hash = '81ba09c97bef46e8f4660ac25b4ac0a5be3a94d6'
> +        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
> +
> +        self.vm.set_console()
> +        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
> +                              'console=sclp0 root=/dev/ram0 BOOT_DEBUG=3')
> +        self.vm.add_args('-nographic',
> +                         '-kernel', kernel_path,
> +                         '-initrd', initrd_path,
> +                         '-append', kernel_command_line,
> +                         '-device', 'virtio-net-ccw,devno=fe.1.1111',
> +                         '-device', 'zpci,uid=5,target=zzz',
> +                         '-device', 'virtio-net-pci,id=zzz')
> +        self.vm.launch()
> +
> +        shell_ready = "sh: can't access tty; job control turned off"
> +        self.wait_for_console_pattern(shell_ready)
> +        # first debug shell is too early, we need to wait for device detection
> +        exec_command_and_wait_for_pattern(self, 'exit', shell_ready)
> +
> +        ccw_bus_id="0.1.1111"
> +        pci_bus_id="0005:00:00.0"
> +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/',
> +                                          ccw_bus_id)
> +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/pci/devices/',
> +                                          pci_bus_id)


I tested this test case on GitLab. It passed on the 
acceptance-system-centos job 
(https://gitlab.com/wainersm/qemu/-/jobs/877308808) and the pipeline as 
a whole passed (https://gitlab.com/wainersm/qemu/-/pipelines/222277683).

So once the unused import is removed:

Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Cornelia Huck Nov. 27, 2020, 5:02 p.m. UTC | #4
On Fri, 27 Nov 2020 14:00:16 -0300
Wainer dos Santos Moschetta <wainersm@redhat.com> wrote:

> Hi,
> 
> On 11/26/20 10:01 AM, Cornelia Huck wrote:
> > This adds a very basic test for checking that we present devices
> > in a way that Linux can consume: boot with both virtio-net-ccw and
> > virtio-net-pci attached and then verify that Linux is able to see
> > and detect these devices.
> >
> > Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> > ---
> > RFC->v2:
> >   - use a newer kernel that uses the uid in zpci address generation
> >   - add a zpci device to specify a uid
> >   - increase timeout
> >   - tweak naming
> >   - add a MAINTAINERS entry
> > ---
> >   MAINTAINERS                                 |  1 +
> >   tests/acceptance/machine_s390_ccw_virtio.py | 70 +++++++++++++++++++++
> >   2 files changed, 71 insertions(+)
> >   create mode 100644 tests/acceptance/machine_s390_ccw_virtio.py
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 68bc160f41bc..cc1c7c2ffed8 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -1426,6 +1426,7 @@ F: include/hw/s390x/
> >   F: hw/watchdog/wdt_diag288.c
> >   F: include/hw/watchdog/wdt_diag288.h
> >   F: default-configs/s390x-softmmu.mak
> > +F: tests/acceptance/machine_s390_ccw_virtio.py
> >   T: git https://github.com/cohuck/qemu.git s390-next
> >   T: git https://github.com/borntraeger/qemu.git s390-next
> >   L: qemu-s390x@nongnu.org
> > diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py
> > new file mode 100644
> > index 000000000000..1f56be776c5f
> > --- /dev/null
> > +++ b/tests/acceptance/machine_s390_ccw_virtio.py
> > @@ -0,0 +1,70 @@
> > +# Functional test that boots an s390x Linux guest with ccw and PCI devices
> > +# attached and checks whether the devices are recognized by Linux
> > +#
> > +# Copyright (c) 2020 Red Hat, Inc.
> > +#
> > +# Author:
> > +#  Cornelia Huck <cohuck@redhat.com>
> > +#
> > +# This work is licensed under the terms of the GNU GPL, version 2 or
> > +# later.  See the COPYING file in the top-level directory.
> > +
> > +
> > +import os
> > +  
> 
> 
> Unused import.

Will remove.

> 
> 
> > +from avocado_qemu import Test
> > +from avocado_qemu import exec_command_and_wait_for_pattern
> > +from avocado_qemu import wait_for_console_pattern
> > +
> > +class S390CCWVirtioMachine(Test):
> > +    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
> > +
> > +    def wait_for_console_pattern(self, success_message, vm=None):
> > +        wait_for_console_pattern(self, success_message,
> > +                                 failure_message='Kernel panic - not syncing',
> > +                                 vm=vm)
> > +
> > +    timeout = 120
> > +
> > +    def test_s390x_devices(self):
> > +
> > +        """
> > +        :avocado: tags=arch:s390x
> > +        :avocado: tags=machine:s390-ccw-virtio
> > +        """
> > +
> > +        kernel_url = ('https://snapshot.debian.org/archive/debian/'
> > +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> > +                      '20190702+deb10u6/images/generic/kernel.debian')
> > +        kernel_hash = '5821fbee57d6220a067a8b967d24595621aa1eb6'
> > +        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
> > +
> > +        initrd_url = ('https://snapshot.debian.org/archive/debian/'
> > +                      '20201126T092837Z/dists/buster/main/installer-s390x/'
> > +                      '20190702+deb10u6/images/generic/initrd.debian')
> > +        initrd_hash = '81ba09c97bef46e8f4660ac25b4ac0a5be3a94d6'
> > +        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
> > +
> > +        self.vm.set_console()
> > +        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
> > +                              'console=sclp0 root=/dev/ram0 BOOT_DEBUG=3')
> > +        self.vm.add_args('-nographic',
> > +                         '-kernel', kernel_path,
> > +                         '-initrd', initrd_path,
> > +                         '-append', kernel_command_line,
> > +                         '-device', 'virtio-net-ccw,devno=fe.1.1111',
> > +                         '-device', 'zpci,uid=5,target=zzz',
> > +                         '-device', 'virtio-net-pci,id=zzz')
> > +        self.vm.launch()
> > +
> > +        shell_ready = "sh: can't access tty; job control turned off"
> > +        self.wait_for_console_pattern(shell_ready)
> > +        # first debug shell is too early, we need to wait for device detection
> > +        exec_command_and_wait_for_pattern(self, 'exit', shell_ready)
> > +
> > +        ccw_bus_id="0.1.1111"
> > +        pci_bus_id="0005:00:00.0"
> > +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/',
> > +                                          ccw_bus_id)
> > +        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/pci/devices/',
> > +                                          pci_bus_id)  
> 
> 
> I tested this test case on GitLab. It passed on the 
> acceptance-system-centos job 
> (https://gitlab.com/wainersm/qemu/-/jobs/877308808) and the pipeline as 
> a whole passed (https://gitlab.com/wainersm/qemu/-/pipelines/222277683).

Oh, I should have mentioned that I ran it on gitlab as well :)

> 
> So once the unused import is removed:
> 
> Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

Thanks!

> 
>
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 68bc160f41bc..cc1c7c2ffed8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1426,6 +1426,7 @@  F: include/hw/s390x/
 F: hw/watchdog/wdt_diag288.c
 F: include/hw/watchdog/wdt_diag288.h
 F: default-configs/s390x-softmmu.mak
+F: tests/acceptance/machine_s390_ccw_virtio.py
 T: git https://github.com/cohuck/qemu.git s390-next
 T: git https://github.com/borntraeger/qemu.git s390-next
 L: qemu-s390x@nongnu.org
diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py
new file mode 100644
index 000000000000..1f56be776c5f
--- /dev/null
+++ b/tests/acceptance/machine_s390_ccw_virtio.py
@@ -0,0 +1,70 @@ 
+# Functional test that boots an s390x Linux guest with ccw and PCI devices
+# attached and checks whether the devices are recognized by Linux
+#
+# Copyright (c) 2020 Red Hat, Inc.
+#
+# Author:
+#  Cornelia Huck <cohuck@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later.  See the COPYING file in the top-level directory.
+
+
+import os
+
+from avocado_qemu import Test
+from avocado_qemu import exec_command_and_wait_for_pattern
+from avocado_qemu import wait_for_console_pattern
+
+class S390CCWVirtioMachine(Test):
+    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+
+    def wait_for_console_pattern(self, success_message, vm=None):
+        wait_for_console_pattern(self, success_message,
+                                 failure_message='Kernel panic - not syncing',
+                                 vm=vm)
+
+    timeout = 120
+
+    def test_s390x_devices(self):
+
+        """
+        :avocado: tags=arch:s390x
+        :avocado: tags=machine:s390-ccw-virtio
+        """
+
+        kernel_url = ('https://snapshot.debian.org/archive/debian/'
+                      '20201126T092837Z/dists/buster/main/installer-s390x/'
+                      '20190702+deb10u6/images/generic/kernel.debian')
+        kernel_hash = '5821fbee57d6220a067a8b967d24595621aa1eb6'
+        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+        initrd_url = ('https://snapshot.debian.org/archive/debian/'
+                      '20201126T092837Z/dists/buster/main/installer-s390x/'
+                      '20190702+deb10u6/images/generic/initrd.debian')
+        initrd_hash = '81ba09c97bef46e8f4660ac25b4ac0a5be3a94d6'
+        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
+
+        self.vm.set_console()
+        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+                              'console=sclp0 root=/dev/ram0 BOOT_DEBUG=3')
+        self.vm.add_args('-nographic',
+                         '-kernel', kernel_path,
+                         '-initrd', initrd_path,
+                         '-append', kernel_command_line,
+                         '-device', 'virtio-net-ccw,devno=fe.1.1111',
+                         '-device', 'zpci,uid=5,target=zzz',
+                         '-device', 'virtio-net-pci,id=zzz')
+        self.vm.launch()
+
+        shell_ready = "sh: can't access tty; job control turned off"
+        self.wait_for_console_pattern(shell_ready)
+        # first debug shell is too early, we need to wait for device detection
+        exec_command_and_wait_for_pattern(self, 'exit', shell_ready)
+
+        ccw_bus_id="0.1.1111"
+        pci_bus_id="0005:00:00.0"
+        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/',
+                                          ccw_bus_id)
+        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/pci/devices/',
+                                          pci_bus_id)