debian-forge/test/mod/test_util_mnt.py
Michael Vogt ad13333f36 test: tweak test_osbuild_mount_failure_msg() for tmt/fc40
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.
2024-05-23 14:56:41 +02:00

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))