tests/functional: ignore errors when caching assets, except for 404

We see periodic errors caching assets due to a combination of transient
networking and server problems. With the previous patch to skip running
a test when it has missing assets, we can now treat most cache download
errors as non-fatal.

Only HTTP 404 is retained as fatal, since it is a strong indicator of
a fully broken test rather than a transient error.

Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20241217155953.3950506-32-berrange@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2024-12-17 15:59:52 +00:00 committed by Thomas Huth
parent 6ff217c2d1
commit 674a750b51

View file

@ -15,6 +15,7 @@ import urllib.request
from time import sleep from time import sleep
from pathlib import Path from pathlib import Path
from shutil import copyfileobj from shutil import copyfileobj
from urllib.error import HTTPError
# Instances of this class must be declared as class level variables # Instances of this class must be declared as class level variables
@ -170,7 +171,18 @@ class Asset:
for name, asset in vars(test.__class__).items(): for name, asset in vars(test.__class__).items():
if name.startswith("ASSET_") and type(asset) == Asset: if name.startswith("ASSET_") and type(asset) == Asset:
log.info("Attempting to cache '%s'" % asset) log.info("Attempting to cache '%s'" % asset)
try:
asset.fetch() asset.fetch()
except HTTPError as e:
# Treat 404 as fatal, since it is highly likely to
# indicate a broken test rather than a transient
# server or networking problem
if e.code == 404:
raise
log.debug(f"HTTP error {e.code} from {asset.url} " +
"skipping asset precache")
log.removeHandler(handler) log.removeHandler(handler)
def precache_suite(suite): def precache_suite(suite):