Browse Source

tests/functional/asset: Verify downloaded size

If the server provides a Content-Length header, use that to verify the
size of the downloaded file. This catches cases where the connection
terminates early, and gives the opportunity to retry. Without this, the
checksum will likely mismatch and fail without retry.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Message-ID: <20250312130002.945508-3-npiggin@gmail.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
pull/291/head
Nicholas Piggin 1 year ago
committed by Thomas Huth
parent
commit
7524e1b336
  1. 14
      tests/functional/qemu_test/asset.py

14
tests/functional/qemu_test/asset.py

@ -121,6 +121,20 @@ class Asset:
with tmp_cache_file.open("xb") as dst:
with urllib.request.urlopen(self.url) as resp:
copyfileobj(resp, dst)
length_hdr = resp.getheader("Content-Length")
# Verify downloaded file size against length metadata, if
# available.
if length_hdr is not None:
length = int(length_hdr)
fsize = tmp_cache_file.stat().st_size
if fsize != length:
self.log.error("Unable to download %s: "
"connection closed before "
"transfer complete (%d/%d)",
self.url, fsize, length)
tmp_cache_file.unlink()
continue
break
except FileExistsError:
self.log.debug("%s already exists, "

Loading…
Cancel
Save