tests/functional: make cached asset files read-only

This ensures that if a functional test runs QEMU with a writable
disk pointing to a cached asset, an error will be reported, rather
than silently modifying the cache file.

As an example, tweaking test_sbsaref.py to set snapshot=off,
results in a clear error:

  Command: ./build/qemu-system-aarch64 ...snip... -drive file=/var/home/berrange/.cache/qemu/download/44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461,format=raw,snapshot=off -cpu max,pauth=off
  Output: qemu-system-aarch64: Could not open '/var/home/berrange/.cache/qemu/download/44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461': Permission denied

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20241025092659.2312118-3-berrange@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2024-10-25 10:26:59 +01:00 committed by Thomas Huth
parent c9daf680d1
commit 786bc22552

View File

@ -8,6 +8,7 @@
import hashlib import hashlib
import logging import logging
import os import os
import stat
import subprocess import subprocess
import sys import sys
import unittest import unittest
@ -143,6 +144,8 @@ class Asset:
raise Exception("Hash of %s does not match %s" % raise Exception("Hash of %s does not match %s" %
(self.url, self.hash)) (self.url, self.hash))
tmp_cache_file.replace(self.cache_file) tmp_cache_file.replace(self.cache_file)
# Remove write perms to stop tests accidentally modifying them
os.chmod(self.cache_file, stat.S_IRUSR | stat.S_IRGRP)
self.log.info("Cached %s at %s" % (self.url, self.cache_file)) self.log.info("Cached %s at %s" % (self.url, self.cache_file))
return str(self.cache_file) return str(self.cache_file)