From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
qemu-devel@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Ani Sinha" <anisinha@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"John Snow" <jsnow@redhat.com>
Subject: Re: [RFC PATCH 5/8] tests_pytest: Implement fetch_asset() method for downloading assets
Date: Fri, 12 Jul 2024 10:09:31 +0100 [thread overview]
Message-ID: <ZpDyy6JAqhvPgx5M@redhat.com> (raw)
In-Reply-To: <20240711115546.40859-6-thuth@redhat.com>
On Thu, Jul 11, 2024 at 01:55:43PM +0200, Thomas Huth wrote:
> In the pytests, we cannot use the fetch_asset() function from Avocado
> anymore, so we have to provide our own implementation now instead.
> Thus add such a function based on the _download_with_cache() function
> from tests/vm/basevm.py for this purpose.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> tests/pytest/qemu_pytest/__init__.py | 40 ++++++++++++++++++++--------
> 1 file changed, 29 insertions(+), 11 deletions(-)
>
> diff --git a/tests/pytest/qemu_pytest/__init__.py b/tests/pytest/qemu_pytest/__init__.py
> index e3ed32e3de..73d80b3828 100644
> --- a/tests/pytest/qemu_pytest/__init__.py
> +++ b/tests/pytest/qemu_pytest/__init__.py
> @@ -11,6 +11,7 @@
> # 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 hashlib
> import logging
> import os
> import shutil
> @@ -201,17 +202,34 @@ def setUp(self, bin_prefix):
> self.assertIsNotNone(SOURCE_DIR,'PYTEST_SOURCE_ROOT must be set')
> self.assertIsNotNone(self.qemu_bin, 'PYTEST_QEMU_BINARY must be set')
>
> - def fetch_asset(self, name,
> - asset_hash, algorithm=None,
> - locations=None, expire=None,
> - find_only=False, cancel_on_missing=True):
> - return super().fetch_asset(name,
> - asset_hash=asset_hash,
> - algorithm=algorithm,
> - locations=locations,
> - expire=expire,
> - find_only=find_only,
> - cancel_on_missing=cancel_on_missing)
> + def check_hash(self, file_name, expected_hash):
> + if not expected_hash:
> + return True
> + if len(expected_hash) == 32:
> + sum_prog = 'md5sum'
> + elif len(expected_hash) == 40:
> + sum_prog = 'sha1sum'
> + elif len(expected_hash) == 64:
> + sum_prog = 'sha256sum'
> + elif len(expected_hash) == 128:
> + sum_prog = 'sha512sum'
> + else:
> + raise Exception("unknown hash type")
Why shouldn't we just standardize on sha256 as we convert each test
to pytest ? sha512 is overkill, and md5/sha1 shouldn't really be used
anymore.
> + checksum = subprocess.check_output([sum_prog, file_name]).split()[0]
> + return expected_hash == checksum.decode("utf-8")
> +
> + def fetch_asset(self, url, asset_hash):
> + cache_dir = os.path.expanduser("~/.cache/qemu/download")
> + if not os.path.exists(cache_dir):
> + os.makedirs(cache_dir)
> + fname = os.path.join(cache_dir,
> + hashlib.sha1(url.encode("utf-8")).hexdigest())
> + if os.path.exists(fname) and self.check_hash(fname, asset_hash):
> + return fname
> + logging.debug("Downloading %s to %s...", url, fname)
> + subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"])
> + os.rename(fname + ".download", fname)
> + return fname
To avoid a dep on an external command that may not be installed,
I think we could replace wget with native python code:
import urllib
from shutil import copyfileobj
with urllib.request.urlopen(url) as src:
with open(fname + ".download", "w+") as dst
copyfileobj(src, dst)
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-07-12 9:10 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-11 11:55 [RFC PATCH 0/8] Convert avocado tests to normal Python unittests Thomas Huth
2024-07-11 11:55 ` [RFC PATCH 1/8] tests/pytest: Add base classes for the upcoming pytest-based tests Thomas Huth
2024-07-12 8:50 ` Daniel P. Berrangé
2024-07-11 11:55 ` [RFC PATCH 2/8] tests/pytest: Convert some simple avocado tests into pytests Thomas Huth
2024-07-12 8:51 ` Daniel P. Berrangé
2024-07-11 11:55 ` [RFC PATCH 3/8] tests/pytest: Convert info_usernet and version test with small adjustments Thomas Huth
2024-07-12 8:55 ` Daniel P. Berrangé
2024-07-11 11:55 ` [RFC PATCH 4/8] tests/pytest: add pytest to the meson build system Thomas Huth
2024-07-12 9:01 ` Daniel P. Berrangé
2024-07-12 10:14 ` Thomas Huth
2024-07-12 10:26 ` Daniel P. Berrangé
2024-07-12 11:54 ` Thomas Huth
2024-07-12 11:47 ` Daniel P. Berrangé
2024-07-12 11:59 ` Thomas Huth
2024-07-11 11:55 ` [RFC PATCH 5/8] tests_pytest: Implement fetch_asset() method for downloading assets Thomas Huth
2024-07-11 16:45 ` Richard Henderson
2024-07-11 18:49 ` Richard Henderson
2024-07-11 19:23 ` Alex Bennée
2024-07-11 21:35 ` Richard Henderson
2024-07-12 4:24 ` Thomas Huth
2024-07-12 4:21 ` Thomas Huth
2024-07-12 4:18 ` Thomas Huth
2024-07-12 9:09 ` Daniel P. Berrangé [this message]
2024-07-12 9:26 ` Thomas Huth
2024-07-11 11:55 ` [RFC PATCH 6/8] tests/pytest: Convert some tests that download files via fetch_asset() Thomas Huth
2024-07-12 9:11 ` Daniel P. Berrangé
2024-07-11 11:55 ` [RFC PATCH 7/8] tests/pytest: Add a function for extracting files from an archive Thomas Huth
2024-07-12 9:14 ` Daniel P. Berrangé
2024-07-12 11:52 ` Thomas Huth
2024-07-12 11:56 ` Daniel P. Berrangé
2024-07-11 11:55 ` [RFC PATCH 8/8] tests/pytest: Convert avocado test that needed avocado.utils.archive Thomas Huth
2024-07-11 12:45 ` [RFC PATCH 0/8] Convert avocado tests to normal Python unittests Daniel P. Berrangé
2024-07-11 14:39 ` Fabiano Rosas
2024-07-11 17:44 ` Thomas Huth
2024-07-12 7:07 ` Daniel P. Berrangé
2024-07-12 14:25 ` Alex Bennée
2024-07-12 14:28 ` Daniel P. Berrangé
2024-07-16 16:45 ` John Snow
2024-07-16 18:03 ` Paolo Bonzini
2024-07-16 18:10 ` Daniel P. Berrangé
2024-07-16 19:34 ` Paolo Bonzini
2024-07-16 19:46 ` Daniel P. Berrangé
2024-07-17 7:32 ` Thomas Huth
2024-07-17 7:41 ` Paolo Bonzini
2024-07-17 6:21 ` Thomas Huth
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=ZpDyy6JAqhvPgx5M@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=anisinha@redhat.com \
--cc=jsnow@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.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).