From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: qemu-devel@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [PATCH 18/22] tests/functional: add 'archive_extract' to QemuBaseTest
Date: Mon, 2 Dec 2024 13:28:44 +0000 [thread overview]
Message-ID: <Z022DImyDM5PP2nn@redhat.com> (raw)
In-Reply-To: <808c81b0-c64a-4a32-9683-c96b51145da3@redhat.com>
On Mon, Dec 02, 2024 at 01:52:46PM +0100, Thomas Huth wrote:
> On 02/12/2024 13.13, Daniel P. Berrangé wrote:
> > On Mon, Dec 02, 2024 at 11:30:28AM +0100, Thomas Huth wrote:
> > > On 29/11/2024 18.31, Daniel P. Berrangé wrote:
> > > > This helper wrappers utils.archive_extract, forcing the use of the
> > > > scratch directory, to ensure any extracted files are cleaned at test
> > > > termination. If a specific member is requested, then the path to the
> > > > extracted file is also returned.
> > > >
> > > > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > > > ---
> > > > tests/functional/qemu_test/testcase.py | 36 ++++++++++++++++++++++++++
> > > > 1 file changed, 36 insertions(+)
> > > >
> > > > diff --git a/tests/functional/qemu_test/testcase.py b/tests/functional/qemu_test/testcase.py
> > > > index 2f32742387..31d06f0172 100644
> > > > --- a/tests/functional/qemu_test/testcase.py
> > > > +++ b/tests/functional/qemu_test/testcase.py
> > > > @@ -28,6 +28,8 @@
> > > > from .asset import Asset
> > > > from .cmd import run_cmd
> > > > from .config import BUILD_DIR
> > > > +from .utils import (archive_extract as utils_archive_extract,
> > > > + guess_archive_format)
> > > > class QemuBaseTest(unittest.TestCase):
> > > > @@ -39,6 +41,40 @@ class QemuBaseTest(unittest.TestCase):
> > > > log = None
> > > > logdir = None
> > > > + '''
> > > > + @params archive: filename, Asset, or file-like object to extract
> > > > + @params sub_dir: optional sub-directory to extract into
> > > > + @params member: optional member file to limit extraction to
> > > > +
> > > > + Extracts @archive into the scratch directory, or a
> > > > + directory beneath named by @sub_dir. All files are
> > > > + extracted unless @member specifies a limit.
> > > > +
> > > > + If @member is non-None, returns the fully qualified
> > > > + path to @member
> > > > + '''
> > > > + def archive_extract(self, archive, format=None, sub_dir=None, member=None):
> > > > + if type(archive) == Asset:
> > > > + if format is None:
> > > > + format = guess_archive_format(archive.url)
> > > > + archive = archive.fetch()
> > > > + elif format is None:
> > > > + format = guess_archive_format(archive)
> > > > +
> > > > + if member is not None:
> > > > + if os.path.isabs(member):
> > > > + member = os.path.relpath(member, '/')
> > > > +
> > > > + if sub_dir is None:
> > > > + utils_archive_extract(archive, self.scratch_file(), format, member)
> > > > + else:
> > > > + utils_archive_extract(archive, self.scratch_file(sub_dir),
> > > > + format, member)
> > > > +
> > > > + if member is not None:
> > > > + return self.scratch_file(member)
> > > > + return None
> > >
> > > Ah, ok, so the guessing is done here ...
> > >
> > > But somehow it feels wrong to have a "archive_extract" function in the
> > > QemuBaseTest class that also does asset fetching under the hood.
> > >
> > > Could you maybe rather move this into the asset.py file and rename the
> > > function to "fetch_and_extract()" to make it clearer what it does?
> >
> > We can't move it into asset.py because not all callers are passing in an
> > Asset object - there are some cases where we've just got a local file.
> > eg when the asset we extracted contains other archives that need to be
> > extracted.
>
> Couldn't those spots rather use the function from utils.py directly for the
> second extraction?
>
> Anyway, I guess now it's likely better to keep it here since you want to
> have access to self.scratch_file() in this function, too.
> But maybe you could still at least rename it to fetch_and_extract() to make
> it more obvious what it all about?
I wanted to de-emphasize the 'fetch' concept, to make use of assets look
and work no different from local files.
In practice they are all local files, with no fetching taking place, as
the test suite arranges for everything to be pre-fetched into the local
cache. THe only time a "fetch" would ever happen during execution is if
you had directly invoked a python file, with an empt ycache.
IOW, from the POV of the executing test case, an Asset object is no more
than a wrapper around a local filename.
Hmm, in fact I wonder if we shouldn't implement the 'str' method to
directly return the local filename, so we can pass Asset object instances
to any method that expects a filename.
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 :|
next prev parent reply other threads:[~2024-12-02 13:41 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-29 17:30 [PATCH 00/22 for 10.0] tests/functional: various improvements wrt assets/scratch files Daniel P. Berrangé
2024-11-29 17:30 ` [PATCH 01/22] tests/functional: increase timeouts for arm sx1 test Daniel P. Berrangé
2024-11-30 9:55 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 02/22] tests/functional: remove unused system imports Daniel P. Berrangé
2024-11-30 9:59 ` Thomas Huth
2024-12-02 9:22 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 03/22] tests/functional: remove duplicated 'qemu_test' import statements Daniel P. Berrangé
2024-11-30 10:09 ` Thomas Huth
2024-12-02 11:40 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 04/22] tests/functional: remove pointless with statement Daniel P. Berrangé
2024-11-30 10:10 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 05/22] tests/functional: remove duplicated 'which' function impl Daniel P. Berrangé
2024-11-30 10:16 ` Thomas Huth
2024-12-02 11:44 ` Daniel P. Berrangé
2024-12-02 12:45 ` Thomas Huth
2024-11-30 15:08 ` Richard Henderson
2024-12-02 11:45 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 06/22] tests/functional: introduce some helpful decorators Daniel P. Berrangé
2024-12-02 8:27 ` Thomas Huth
2024-12-02 11:49 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 07/22] tests/functional: switch to new test skip decorators Daniel P. Berrangé
2024-12-02 8:57 ` Thomas Huth
2024-12-02 11:51 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 08/22] tests/functional: add helpers for building file paths Daniel P. Berrangé
2024-12-02 9:19 ` Thomas Huth
2024-12-03 13:53 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 09/22] tests/functional: switch over to using self.log_file(...) Daniel P. Berrangé
2024-12-02 9:22 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 10/22] tests/functional: switch over to using self.build_file(...) Daniel P. Berrangé
2024-12-02 9:26 ` Thomas Huth
2024-12-02 12:00 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 11/22] tests/functional: switch over to using self.data_file(...) Daniel P. Berrangé
2024-12-02 9:32 ` Thomas Huth
2024-12-03 5:39 ` Ani Sinha
2024-12-03 8:11 ` Daniel P. Berrangé
2024-12-03 8:50 ` Thomas Huth
2024-12-03 9:05 ` Ani Sinha
2024-11-29 17:31 ` [PATCH 12/22] tests/functional: switch over to using self.scratch_file() Daniel P. Berrangé
2024-12-02 9:56 ` Thomas Huth
2024-12-02 12:03 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 13/22] tests/functional: switch over to using self.socket_dir(...) Daniel P. Berrangé
2024-12-02 9:59 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 14/22] tests/functional: remove redundant 'rmtree' call Daniel P. Berrangé
2024-11-30 10:32 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 15/22] tests/functional: add common zip_extract helper Daniel P. Berrangé
2024-12-02 10:04 ` Thomas Huth
2024-12-02 12:04 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 16/22] tests/functional: add common deb_extract helper Daniel P. Berrangé
2024-12-02 10:14 ` Thomas Huth
2024-12-02 12:08 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 17/22] tests/functional: generalize archive_extract Daniel P. Berrangé
2024-12-02 10:20 ` Thomas Huth
2024-12-02 12:11 ` Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 18/22] tests/functional: add 'archive_extract' to QemuBaseTest Daniel P. Berrangé
2024-12-02 10:30 ` Thomas Huth
2024-12-02 12:13 ` Daniel P. Berrangé
2024-12-02 12:52 ` Thomas Huth
2024-12-02 13:28 ` Daniel P. Berrangé [this message]
2024-12-06 13:10 ` Thomas Huth
2024-11-29 17:31 ` [PATCH 19/22] tests/functional: convert tests to new archive_extract helper Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 20/22] tests/functional: generalize uncompress Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 21/22] tests/functional: add 'uncompress' to QemuBaseTest Daniel P. Berrangé
2024-11-29 17:31 ` [PATCH 22/22] tests/functional: convert tests to new uncompress helper Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z022DImyDM5PP2nn@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).