Message ID | 20250108121054.1126164-20-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | testing/next: functional tests, qtest clocks, vm and keymaps (pre-PR-FINAL) | expand |
On Wed, Jan 08, 2025 at 12:10:41PM +0000, Alex Bennée wrote: > Rather than using the python library (which has a different API > anyway) lets just call the binary. zstdtools is already in out > qemu.yml so all test containers should have it around. Tests should > still use @skipIfMissingCommands('zstd') to gracefully handle when > only minimal dependencies have been installed. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > > --- > v4 > - add chmod step to helper > - also handle .zst extension > --- > tests/functional/qemu_test/uncompress.py | 26 ++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> > > diff --git a/tests/functional/qemu_test/uncompress.py b/tests/functional/qemu_test/uncompress.py > index 6d02ded066..911d74ec23 100644 > --- a/tests/functional/qemu_test/uncompress.py > +++ b/tests/functional/qemu_test/uncompress.py > @@ -79,5 +101,9 @@ def guess_uncompress_format(compressed): > return "xz" > elif ext == ".gz": > return "gz" > + elif ext == ".zstd": > + return "zstd" > + elif ext == ".zst": > + return "zstd" Or elif ext in [".zstd", ".zst"]: return 'zstd' Either way, by R-b stands. With regards, Daniel
On 08/01/2025 13.10, Alex Bennée wrote: > Rather than using the python library (which has a different API > anyway) lets just call the binary. zstdtools is already in out > qemu.yml so all test containers should have it around. Tests should > still use @skipIfMissingCommands('zstd') to gracefully handle when > only minimal dependencies have been installed. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/tests/functional/qemu_test/uncompress.py b/tests/functional/qemu_test/uncompress.py index 6d02ded066..911d74ec23 100644 --- a/tests/functional/qemu_test/uncompress.py +++ b/tests/functional/qemu_test/uncompress.py @@ -10,8 +10,10 @@ import gzip import lzma import os +import stat import shutil from urllib.parse import urlparse +from subprocess import check_call, CalledProcessError from .asset import Asset @@ -38,6 +40,24 @@ def lzma_uncompress(xz_path, output_path): os.remove(output_path) raise + +def zstd_uncompress(zstd_path, output_path): + if os.path.exists(output_path): + return + + try: + check_call(['zstd', "-f", "-d", zstd_path, + "-o", output_path]) + except CalledProcessError as e: + os.remove(output_path) + raise Exception( + f"Unable to decompress zstd file {zstd_path} with {e}") from e + + # zstd copies source archive permissions for the output + # file, so must make this writable for QEMU + os.chmod(output_path, stat.S_IRUSR | stat.S_IWUSR) + + ''' @params compressed: filename, Asset, or file-like object to uncompress @params uncompressed: filename to uncompress into @@ -59,6 +79,8 @@ def uncompress(compressed, uncompressed, format=None): lzma_uncompress(str(compressed), uncompressed) elif format == "gz": gzip_uncompress(str(compressed), uncompressed) + elif format == "zstd": + zstd_uncompress(str(compressed), uncompressed) else: raise Exception(f"Unknown compression format {format}") @@ -79,5 +101,9 @@ def guess_uncompress_format(compressed): return "xz" elif ext == ".gz": return "gz" + elif ext == ".zstd": + return "zstd" + elif ext == ".zst": + return "zstd" else: raise Exception(f"Unknown compression format for {compressed}")
Rather than using the python library (which has a different API anyway) lets just call the binary. zstdtools is already in out qemu.yml so all test containers should have it around. Tests should still use @skipIfMissingCommands('zstd') to gracefully handle when only minimal dependencies have been installed. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- v4 - add chmod step to helper - also handle .zst extension --- tests/functional/qemu_test/uncompress.py | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+)