126 lines
3.8 KiB
Python
126 lines
3.8 KiB
Python
"""Unit tests for osbuild.util.parsing"""
|
|
|
|
import pytest
|
|
|
|
from osbuild.util import parsing
|
|
|
|
|
|
def test_parse_size():
|
|
cases = [
|
|
("123", True, 123),
|
|
("123 kB", True, 123000),
|
|
("123 KiB", True, 123 * 1024),
|
|
("123 MB", True, 123 * 1000 * 1000),
|
|
("123 MiB", True, 123 * 1024 * 1024),
|
|
("123 GB", True, 123 * 1000 * 1000 * 1000),
|
|
("123 GiB", True, 123 * 1024 * 1024 * 1024),
|
|
("123 TB", True, 123 * 1000 * 1000 * 1000 * 1000),
|
|
("123 TiB", True, 123 * 1024 * 1024 * 1024 * 1024),
|
|
("123kB", True, 123000),
|
|
("123KiB", True, 123 * 1024),
|
|
(" 123", True, 123),
|
|
(" 123kB", True, 123000),
|
|
(" 123KiB", True, 123 * 1024),
|
|
("unlimited", True, "unlimited"),
|
|
("string", False, 0),
|
|
("123 KB", False, 0),
|
|
("123 mb", False, 0),
|
|
("123 PB", False, 0),
|
|
("123 PiB", False, 0),
|
|
|
|
]
|
|
|
|
for s, success, num in cases:
|
|
if not success:
|
|
with pytest.raises(TypeError):
|
|
parsing.parse_size(s)
|
|
else:
|
|
res = parsing.parse_size(s)
|
|
assert res == num, f"{s} parsed as {res} (wanted {num})"
|
|
|
|
|
|
def test_parse_location_mounts():
|
|
args = {
|
|
"paths": {
|
|
"mounts": "/run/osbuild/mounts",
|
|
},
|
|
"mounts": {
|
|
"root": {
|
|
"path": "/run/osbuild/mounts/.",
|
|
},
|
|
"boot": {
|
|
"path": "/run/osbuild/mounts/boot"
|
|
}
|
|
},
|
|
}
|
|
location = "mount://root/"
|
|
root, path = parsing.parse_location_into_parts(location, args)
|
|
assert [root, path] == ["/run/osbuild/mounts/.", "/"]
|
|
path = parsing.parse_location(location, args)
|
|
assert path == "/run/osbuild/mounts/."
|
|
|
|
location = "mount://boot/efi/EFI/Linux"
|
|
root, path = parsing.parse_location_into_parts(location, args)
|
|
assert [root, path] == ["/run/osbuild/mounts/boot", "/efi/EFI/Linux"]
|
|
path = parsing.parse_location(location, args)
|
|
assert path == "/run/osbuild/mounts/boot/efi/EFI/Linux"
|
|
|
|
|
|
def test_parse_location_tree():
|
|
args = {
|
|
"tree": "/run/osbuild/tree",
|
|
}
|
|
location = "tree:///disk.img"
|
|
root, path = parsing.parse_location_into_parts(location, args)
|
|
assert [root, path] == ["/run/osbuild/tree", "/disk.img"]
|
|
path = parsing.parse_location(location, args)
|
|
assert path == "/run/osbuild/tree/disk.img"
|
|
|
|
|
|
def test_parse_location_inputs():
|
|
args = {
|
|
"inputs": {
|
|
"tree": {
|
|
"path": "/run/osbuild/inputs/tree",
|
|
},
|
|
},
|
|
}
|
|
location = "input://tree/"
|
|
root, path = parsing.parse_location_into_parts(location, args)
|
|
assert [root, path] == ["/run/osbuild/inputs/tree", "/"]
|
|
path = parsing.parse_location(location, args)
|
|
assert path == "/run/osbuild/inputs/tree/."
|
|
|
|
|
|
def test_parse_location_abspath():
|
|
args = {
|
|
"tree": "/run/osbuild/tree",
|
|
}
|
|
location = "/path/to/file"
|
|
root, path = parsing.parse_location_into_parts(location, args)
|
|
assert [root, path] == ["/run/osbuild/tree", "/path/to/file"]
|
|
path = parsing.parse_location(location, args)
|
|
assert path == "/run/osbuild/tree/path/to/file"
|
|
|
|
|
|
def test_parse_location_badpath():
|
|
args = {
|
|
"tree": "/run/osbuild/tree",
|
|
"paths": {
|
|
"mounts": "/run/osbuild/mounts",
|
|
},
|
|
"mounts": {
|
|
"root": {
|
|
"path": "/run/osbuild/mounts/."
|
|
}
|
|
},
|
|
}
|
|
location = "file"
|
|
with pytest.raises(ValueError) as ex:
|
|
parsing.parse_location_into_parts(location, args)
|
|
assert "url.path from location must start with '/'" in str(ex.value)
|
|
|
|
location = "mount://disk/file"
|
|
with pytest.raises(ValueError) as ex:
|
|
parsing.parse_location_into_parts(location, args)
|
|
assert "Unknown mount" in str(ex.value)
|