diff mbox series

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

Message ID 20250325200026.344006-12-thuth@redhat.com (mailing list archive)
State New
Headers show
Series Convert remaining Avocado tests to functional | expand

Commit Message

Thomas Huth March 25, 2025, 8 p.m. UTC
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(-)

Comments

Daniel P. Berrangé March 26, 2025, 9:43 a.m. UTC | #1
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
Thomas Huth March 26, 2025, 9:54 a.m. UTC | #2
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
Daniel P. Berrangé March 26, 2025, 10:02 a.m. UTC | #3
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
diff mbox series

Patch

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__':