iotests: fortify compare_images() against crashes
Fortify compare_images() to be more discerning about the status codes it receives. If qemu_img() returns an exit code that implies it didn't actually perform the comparison, treat that as an exceptional circumstance and force the caller to be aware of the peril. If a negative test is desired (perhaps to test how qemu_img compare behaves on malformed images, for instance), it is still possible to catch the exception in the test and deal with that circumstance manually. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Hanna Reitz <hreitz@redhat.com> Message-Id: <20220321201618.903471-6-jsnow@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
parent
2882ccf86a
commit
569131d585
@ -507,11 +507,22 @@ def qemu_nbd_popen(*args):
|
||||
p.kill()
|
||||
p.wait()
|
||||
|
||||
def compare_images(img1, img2, fmt1=imgfmt, fmt2=imgfmt):
|
||||
'''Return True if two image files are identical'''
|
||||
res = qemu_img('compare', '-f', fmt1,
|
||||
'-F', fmt2, img1, img2, check=False)
|
||||
return res.returncode == 0
|
||||
def compare_images(img1: str, img2: str,
|
||||
fmt1: str = imgfmt, fmt2: str = imgfmt) -> bool:
|
||||
"""
|
||||
Compare two images with QEMU_IMG; return True if they are identical.
|
||||
|
||||
:raise CalledProcessError:
|
||||
when qemu-img crashes or returns a status code of anything other
|
||||
than 0 (identical) or 1 (different).
|
||||
"""
|
||||
try:
|
||||
qemu_img('compare', '-f', fmt1, '-F', fmt2, img1, img2)
|
||||
return True
|
||||
except subprocess.CalledProcessError as exc:
|
||||
if exc.returncode == 1:
|
||||
return False
|
||||
raise
|
||||
|
||||
def create_image(name, size):
|
||||
'''Create a fully-allocated raw image with sector markers'''
|
||||
|
Loading…
Reference in New Issue
Block a user