The `test_osbuild_mount_failure_msg` currently fails on fc40 when run in tmt, see: https://artifacts.dev.testing-farm.io/c6588a82-a2cb-46df-8ca8-85dd809465f2/ This is because the failure output is slightly different between a container and a VM/real-machine. The test ensures that we capture the output of mount and present to the user (for easier debugging). So this commit updates this test once more for the error string (that part of the error comes directly from the kernels fsconfig). If we need another update of the string we should reconsider this test and e.g. just use `testutil.mock_command()` for this. But for now it's easier to just add this one more failure string.
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
import os
|
|
import re
|
|
|
|
import pytest
|
|
|
|
from osbuild.mounts import FileSystemMountService
|
|
from osbuild.util.mnt import MountGuard, mount
|
|
|
|
|
|
@pytest.mark.skipif(os.getuid() != 0, reason="root only")
|
|
def test_mount_failure_msg(tmp_path):
|
|
with pytest.raises(RuntimeError) as e:
|
|
mount("/dev/invalid-src", tmp_path)
|
|
# latest util-linux mount uses fsconfig(2) instead of mount(2) so the
|
|
# error is different
|
|
assert re.search(r"special device /dev/invalid-src does not exist|Can't lookup blockdev.", str(e.value))
|
|
|
|
|
|
@pytest.mark.skipif(os.getuid() != 0, reason="root only")
|
|
def test_mount_guard_failure_msg(tmp_path):
|
|
with pytest.raises(RuntimeError) as e:
|
|
with MountGuard() as mg:
|
|
mg.mount("/dev/invalid-src", tmp_path)
|
|
# latest util-linux mount uses fsconfig(2) instead of mount(2) so the
|
|
# error is different
|
|
assert re.search(r"special device /dev/invalid-src does not exist|Can't lookup blockdev.", str(e.value))
|
|
|
|
|
|
@pytest.mark.skipif(os.getuid() != 0, reason="root only")
|
|
def test_mount_guard_incorrect_permissions_msg(tmp_path):
|
|
with pytest.raises(ValueError) as e:
|
|
with MountGuard() as mg:
|
|
mg.mount("/dev/invalid-src", tmp_path, permissions="abc")
|
|
assert "unknown filesystem permissions" in str(e.value)
|
|
|
|
|
|
# This needs a proper refactor so that FileSystemMountService just uses
|
|
# a common mount helper.
|
|
class FakeFileSystemMountService(FileSystemMountService):
|
|
def __init__(self, args=None): # pylint: disable=super-init-not-called
|
|
# override __init__ to make it testable
|
|
pass
|
|
|
|
def translate_options(self, options):
|
|
return options
|
|
|
|
|
|
@pytest.mark.skipif(os.getuid() != 0, reason="root only")
|
|
def test_osbuild_mount_failure_msg(tmp_path):
|
|
mnt_service = FakeFileSystemMountService()
|
|
# yes, we have a third way of mounting things
|
|
with pytest.raises(RuntimeError) as e:
|
|
args = {
|
|
"source": "/dev/invalid-src",
|
|
"target": os.fspath(tmp_path),
|
|
"root": "/",
|
|
"options": [],
|
|
}
|
|
mnt_service.mount(args)
|
|
assert re.search(
|
|
r"special device /dev/invalid-src does not exist|Can't open blockdev.|Can't lookup blockdev", str(e.value))
|