diff --git a/osbuild/util/osrelease.py b/osbuild/util/osrelease.py index cc97faf5..c7031a8a 100644 --- a/osbuild/util/osrelease.py +++ b/osbuild/util/osrelease.py @@ -35,8 +35,10 @@ def parse_files(*paths): continue key, value = line.split("=", 1) split_value = shlex.split(value) - if not split_value or len(split_value) > 1: - raise ValueError(f"Key '{key}' has an empty value or more than one token: {value}") + if not split_value: + raise ValueError(f"Key '{key}' has an empty value") + if len(split_value) > 1: + raise ValueError(f"Key '{key}' has more than one token: {value}") osrelease[key] = split_value[0] return osrelease diff --git a/test/mod/test_util_osrelease.py b/test/mod/test_util_osrelease.py index 0b250ebc..d46549ce 100644 --- a/test/mod/test_util_osrelease.py +++ b/test/mod/test_util_osrelease.py @@ -5,6 +5,8 @@ import os import unittest +import pytest + from osbuild.util import osrelease from .. import test @@ -28,3 +30,23 @@ class TestUtilOSRelease(test.TestBase): for entry in os.scandir(os.path.join(self.locate_test_data(), "os-release")): with self.subTest(entry.name): self.assertEqual(osrelease.describe_os(entry.path), entry.name) + + +def test_osreleae_f40_really_coreos_happy(): + here = os.path.dirname(__file__) + res = osrelease.parse_files(os.path.join(here, "../data/os-release/fedora40")) + assert res["NAME"] == 'Fedora Linux' + assert res["ID"] == 'fedora' + assert res["OSTREE_VERSION"] == '40.20241106.dev.0' + + +@pytest.mark.parametrize("content,expected_err", [ + ("OSTREE=", "Key 'OSTREE' has an empty value"), + ("OSTREE='foo' 'bar'", "Key 'OSTREE' has more than one token: 'foo' 'bar'"), +]) +def test_osrelease_bad_split_empty(tmp_path, content, expected_err): + bad_os_release_path = tmp_path / "os-release" + bad_os_release_path.write_text(content + "\n") + with pytest.raises(ValueError) as exc: + osrelease.parse_files(bad_os_release_path) + assert str(exc.value) == expected_err