[PATCH 11/15] tests/functional: Use the tuxrun kernel for the x86 replay test

Thomas Huth posted 15 patches 1 week, 1 day ago
[PATCH 11/15] tests/functional: Use the tuxrun kernel for the x86 replay test
Posted by Thomas Huth 1 week, 1 day ago
From: Thomas Huth <thuth@redhat.com>

This way we can do a full boot in record-replay mode and
should get a similar test coverage compared to the old
replay test from tests/avocado/replay_linux.py. Thus remove
the x86 avocado replay_linux test now.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 tests/avocado/replay_linux.py          | 46 --------------------------
 tests/functional/test_x86_64_replay.py | 43 ++++++++++++++++++------
 2 files changed, 33 insertions(+), 56 deletions(-)

diff --git a/tests/avocado/replay_linux.py b/tests/avocado/replay_linux.py
index 59169224353..6ba283d3bf6 100644
--- a/tests/avocado/replay_linux.py
+++ b/tests/avocado/replay_linux.py
@@ -118,52 +118,6 @@ def run_replay_dump(self, replay_path):
         except subprocess.CalledProcessError:
             self.fail('replay-dump.py failed')
 
-@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
-class ReplayLinuxX8664(ReplayLinux):
-    """
-    :avocado: tags=arch:x86_64
-    :avocado: tags=accel:tcg
-    """
-
-    chksum = 'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0'
-
-    def test_pc_i440fx(self):
-        """
-        :avocado: tags=machine:pc
-        """
-        self.run_rr(shift=1)
-
-    def test_pc_q35(self):
-        """
-        :avocado: tags=machine:q35
-        """
-        self.run_rr(shift=3)
-
-@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
-class ReplayLinuxX8664Virtio(ReplayLinux):
-    """
-    :avocado: tags=arch:x86_64
-    :avocado: tags=virtio
-    :avocado: tags=accel:tcg
-    """
-
-    hdd = 'virtio-blk-pci'
-    cd = 'virtio-blk-pci'
-    bus = None
-
-    chksum = 'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0'
-
-    def test_pc_i440fx(self):
-        """
-        :avocado: tags=machine:pc
-        """
-        self.run_rr(shift=1)
-
-    def test_pc_q35(self):
-        """
-        :avocado: tags=machine:q35
-        """
-        self.run_rr(shift=3)
 
 @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
 class ReplayLinuxAarch64(ReplayLinux):
diff --git a/tests/functional/test_x86_64_replay.py b/tests/functional/test_x86_64_replay.py
index 180f23a60c5..27287d452dc 100755
--- a/tests/functional/test_x86_64_replay.py
+++ b/tests/functional/test_x86_64_replay.py
@@ -5,30 +5,53 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-from qemu_test import Asset, skipFlakyTest
+from subprocess import check_call, DEVNULL
+
+from qemu_test import Asset, skipFlakyTest, get_qemu_img
 from replay_kernel import ReplayKernelBase
 
 
 class X86Replay(ReplayKernelBase):
 
     ASSET_KERNEL = Asset(
-         ('https://archives.fedoraproject.org/pub/archive/fedora/linux'
-          '/releases/29/Everything/x86_64/os/images/pxeboot/vmlinuz'),
-        '8f237d84712b1b411baf3af2aeaaee10b9aae8e345ec265b87ab3a39639eb143')
+        'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
+        'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
+
+    ASSET_ROOTFS = Asset(
+        'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
+        '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
 
-    def do_test_x86(self, machine):
+    def do_test_x86(self, machine, blkdevice, devroot):
+        self.require_netdev('user')
         self.set_machine(machine)
+        self.cpu="Nehalem"
         kernel_path = self.ASSET_KERNEL.fetch()
-        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
-        console_pattern = 'VFS: Cannot open root device'
-        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
+
+        raw_disk = self.uncompress(self.ASSET_ROOTFS)
+        disk = self.scratch_file('scratch.qcow2')
+        qemu_img = get_qemu_img(self)
+        check_call([qemu_img, 'create', '-f', 'qcow2', '-b', raw_disk,
+                    '-F', 'raw', disk], stdout=DEVNULL, stderr=DEVNULL)
+
+        args = ('-drive', 'file=%s,snapshot=on,id=hd0,if=none' % disk,
+                '-drive', 'driver=blkreplay,id=hd0-rr,if=none,image=hd0',
+                '-device', '%s,drive=hd0-rr' % blkdevice,
+                '-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
+                '-device', 'virtio-net,netdev=vnet',
+                '-object', 'filter-replay,id=replay,netdev=vnet')
+
+        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+                               f"console=ttyS0 root=/dev/{devroot}")
+        console_pattern = 'Welcome to TuxTest'
+        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
+                    args=args)
 
     @skipFlakyTest('https://gitlab.com/qemu-project/qemu/-/issues/2094')
     def test_pc(self):
-        self.do_test_x86('pc')
+        self.do_test_x86('pc', 'virtio-blk', 'vda')
 
     def test_q35(self):
-        self.do_test_x86('q35')
+        self.do_test_x86('q35', 'ide-hd', 'sda')
 
 
 if __name__ == '__main__':
-- 
2.49.0
Re: [PATCH 11/15] tests/functional: Use the tuxrun kernel for the x86 replay test
Posted by Daniel P. Berrangé 1 week ago
On Tue, Mar 25, 2025 at 09:00:19PM +0100, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
> 
> This way we can do a full boot in record-replay mode and
> should get a similar test coverage compared to the old
> replay test from tests/avocado/replay_linux.py. Thus remove
> the x86 avocado replay_linux test now.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  tests/avocado/replay_linux.py          | 46 --------------------------
>  tests/functional/test_x86_64_replay.py | 43 ++++++++++++++++++------
>  2 files changed, 33 insertions(+), 56 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

> diff --git a/tests/functional/test_x86_64_replay.py b/tests/functional/test_x86_64_replay.py
> index 180f23a60c5..27287d452dc 100755
> --- a/tests/functional/test_x86_64_replay.py
> +++ b/tests/functional/test_x86_64_replay.py
> @@ -5,30 +5,53 @@
>  #
>  # SPDX-License-Identifier: GPL-2.0-or-later
>  
> -from qemu_test import Asset, skipFlakyTest
> +from subprocess import check_call, DEVNULL
> +
> +from qemu_test import Asset, skipFlakyTest, get_qemu_img
>  from replay_kernel import ReplayKernelBase
>  
>  
>  class X86Replay(ReplayKernelBase):
>  
>      ASSET_KERNEL = Asset(
> -         ('https://archives.fedoraproject.org/pub/archive/fedora/linux'
> -          '/releases/29/Everything/x86_64/os/images/pxeboot/vmlinuz'),
> -        '8f237d84712b1b411baf3af2aeaaee10b9aae8e345ec265b87ab3a39639eb143')
> +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
> +        'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
> +
> +    ASSET_ROOTFS = Asset(
> +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
> +        '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')


As a general question, I wonder if we want to add some logic to the
pre-cache job to clean up old cached files. 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Re: [PATCH 11/15] tests/functional: Use the tuxrun kernel for the x86 replay test
Posted by Thomas Huth 1 week ago
On 26/03/2025 10.43, Daniel P. Berrangé wrote:
> On Tue, Mar 25, 2025 at 09:00:19PM +0100, Thomas Huth wrote:
>> From: Thomas Huth <thuth@redhat.com>
>>
>> This way we can do a full boot in record-replay mode and
>> should get a similar test coverage compared to the old
>> replay test from tests/avocado/replay_linux.py. Thus remove
>> the x86 avocado replay_linux test now.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   tests/avocado/replay_linux.py          | 46 --------------------------
>>   tests/functional/test_x86_64_replay.py | 43 ++++++++++++++++++------
>>   2 files changed, 33 insertions(+), 56 deletions(-)
> 
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> 
>> diff --git a/tests/functional/test_x86_64_replay.py b/tests/functional/test_x86_64_replay.py
>> index 180f23a60c5..27287d452dc 100755
>> --- a/tests/functional/test_x86_64_replay.py
>> +++ b/tests/functional/test_x86_64_replay.py
>> @@ -5,30 +5,53 @@
>>   #
>>   # SPDX-License-Identifier: GPL-2.0-or-later
>>   
>> -from qemu_test import Asset, skipFlakyTest
>> +from subprocess import check_call, DEVNULL
>> +
>> +from qemu_test import Asset, skipFlakyTest, get_qemu_img
>>   from replay_kernel import ReplayKernelBase
>>   
>>   
>>   class X86Replay(ReplayKernelBase):
>>   
>>       ASSET_KERNEL = Asset(
>> -         ('https://archives.fedoraproject.org/pub/archive/fedora/linux'
>> -          '/releases/29/Everything/x86_64/os/images/pxeboot/vmlinuz'),
>> -        '8f237d84712b1b411baf3af2aeaaee10b9aae8e345ec265b87ab3a39639eb143')
>> +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
>> +        'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
>> +
>> +    ASSET_ROOTFS = Asset(
>> +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
>> +        '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
> 
> 
> As a general question, I wonder if we want to add some logic to the
> pre-cache job to clean up old cached files.

Yes, I also asked myself that question already. Being a "cache", there 
should also be a way to evict old files that are not used anymore.
Maybe we could update the timestamp of the assets each time they are used, 
and when doing "make clean", we also check the cache and delete the assets 
with timestamps older than 6 months or so?

  Thomas


Re: [PATCH 11/15] tests/functional: Use the tuxrun kernel for the x86 replay test
Posted by Daniel P. Berrangé 1 week ago
On Wed, Mar 26, 2025 at 10:54:53AM +0100, Thomas Huth wrote:
> On 26/03/2025 10.43, Daniel P. Berrangé wrote:
> > On Tue, Mar 25, 2025 at 09:00:19PM +0100, Thomas Huth wrote:
> > > From: Thomas Huth <thuth@redhat.com>
> > > 
> > > This way we can do a full boot in record-replay mode and
> > > should get a similar test coverage compared to the old
> > > replay test from tests/avocado/replay_linux.py. Thus remove
> > > the x86 avocado replay_linux test now.
> > > 
> > > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > > ---
> > >   tests/avocado/replay_linux.py          | 46 --------------------------
> > >   tests/functional/test_x86_64_replay.py | 43 ++++++++++++++++++------
> > >   2 files changed, 33 insertions(+), 56 deletions(-)
> > 
> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> > 
> > > diff --git a/tests/functional/test_x86_64_replay.py b/tests/functional/test_x86_64_replay.py
> > > index 180f23a60c5..27287d452dc 100755
> > > --- a/tests/functional/test_x86_64_replay.py
> > > +++ b/tests/functional/test_x86_64_replay.py
> > > @@ -5,30 +5,53 @@
> > >   #
> > >   # SPDX-License-Identifier: GPL-2.0-or-later
> > > -from qemu_test import Asset, skipFlakyTest
> > > +from subprocess import check_call, DEVNULL
> > > +
> > > +from qemu_test import Asset, skipFlakyTest, get_qemu_img
> > >   from replay_kernel import ReplayKernelBase
> > >   class X86Replay(ReplayKernelBase):
> > >       ASSET_KERNEL = Asset(
> > > -         ('https://archives.fedoraproject.org/pub/archive/fedora/linux'
> > > -          '/releases/29/Everything/x86_64/os/images/pxeboot/vmlinuz'),
> > > -        '8f237d84712b1b411baf3af2aeaaee10b9aae8e345ec265b87ab3a39639eb143')
> > > +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
> > > +        'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
> > > +
> > > +    ASSET_ROOTFS = Asset(
> > > +        'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
> > > +        '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
> > 
> > 
> > As a general question, I wonder if we want to add some logic to the
> > pre-cache job to clean up old cached files.
> 
> Yes, I also asked myself that question already. Being a "cache", there
> should also be a way to evict old files that are not used anymore.
> Maybe we could update the timestamp of the assets each time they are used,
> and when doing "make clean", we also check the cache and delete the assets
> with timestamps older than 6 months or so?

Yeah, some time based check + "touch" would be needed, so we don't
aggressively purge files cached by a dev's use a different branch
that happens to not be checked out currently.


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|