File: runtime_config_test.py

package info (click to toggle)
kiwi 10.2.33-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 7,528 kB
  • sloc: python: 67,299; sh: 3,980; xml: 3,379; ansic: 391; makefile: 354
file content (136 lines) | stat: -rw-r--r-- 5,942 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import logging
from unittest.mock import patch
from pytest import (
    raises, fixture
)

from kiwi.runtime_config import RuntimeConfig
from kiwi.defaults import Defaults

from kiwi.exceptions import (
    KiwiRuntimeConfigFormatError,
    KiwiRuntimeConfigFileError
)


class TestRuntimeConfig:
    def setup(self):
        Defaults.set_custom_runtime_config_file(None)

    def setup_method(self, cls):
        self.setup()

    @fixture(autouse=True)
    def inject_fixtures(self, caplog):
        self._caplog = caplog

    def test__get_attribute_raises_on_invalid_structure(self):
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/broken'}):
            runtime_config = RuntimeConfig(reread=True)
            with raises(KiwiRuntimeConfigFormatError):
                runtime_config._get_attribute('foo', 'bar')

    @patch('kiwi.defaults.CUSTOM_RUNTIME_CONFIG_FILE', 'some-config-file')
    def test_init_raises_custom_config_file_not_found(self):
        with patch('os.path.isfile', return_value=False):
            with raises(KiwiRuntimeConfigFileError):
                RuntimeConfig(reread=True)

    @patch('os.path.exists')
    @patch('yaml.safe_load')
    def test_reading_system_wide_config_file(
        self, mock_yaml, mock_exists
    ):
        exists_call_results = [True, False]

        def os_path_exists(config):
            return exists_call_results.pop()

        mock_exists.side_effect = os_path_exists
        with patch('builtins.open') as m_open:
            RuntimeConfig(reread=True)
            m_open.assert_called_once_with('/etc/kiwi.yml', 'r')

    @patch('kiwi.runtime_checker.Defaults.is_buildservice_worker')
    def test_config_sections_from_home_base_config(self, mock_is_buildservice_worker):
        mock_is_buildservice_worker.return_value = False
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/ok'}):
            runtime_config = RuntimeConfig(reread=True)

        assert runtime_config.get_xz_options() == ['-a', '-b', 'xxx']
        assert runtime_config.is_obs_public() is True
        assert runtime_config.get_bundle_compression() is True
        assert runtime_config.get_obs_download_server_url() == \
            'http://example.com'
        assert runtime_config.get_obs_api_server_url() == \
            'https://api.example.com'
        assert runtime_config.get_container_compression() is False
        assert runtime_config.get_iso_tool_category() == 'xorriso'
        assert runtime_config.get_iso_media_tag_tool() == 'isomd5sum'
        assert runtime_config.get_oci_archive_tool() == 'umoci'
        assert runtime_config.get_mapper_tool() == 'partx'
        assert runtime_config.get_package_changes() is True
        assert runtime_config.get_disabled_runtime_checks() == [
            'check_dracut_module_for_oem_install_in_package_list',
            'check_container_tool_chain_installed'
        ]
        assert runtime_config.get_obs_api_credentials() == [
            {'user_name': 'user_credentials'}
        ]

    @patch('kiwi.runtime_checker.Defaults.is_buildservice_worker')
    @patch('kiwi.runtime_checker.Defaults.get_platform_name')
    def test_config_sections_defaults(
        self, mock_get_platform_name, mock_is_buildservice_worker
    ):
        mock_get_platform_name.return_value = 's390x'
        mock_is_buildservice_worker.return_value = True
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/defaults'}):
            runtime_config = RuntimeConfig(reread=True)

        assert runtime_config.get_bundle_compression(default=True) is True
        assert runtime_config.get_bundle_compression(default=False) is False
        assert runtime_config.is_obs_public() is True
        assert runtime_config.get_obs_download_server_url() == \
            Defaults.get_obs_download_server_url()
        assert runtime_config.get_obs_api_server_url() == \
            Defaults.get_obs_api_server_url()
        assert runtime_config.get_container_compression() is True
        assert runtime_config.get_iso_tool_category() == 'xorriso'
        assert runtime_config.get_iso_media_tag_tool() == 'checkmedia'
        assert runtime_config.get_oci_archive_tool() == 'umoci'
        assert runtime_config.get_mapper_tool() == 'kpartx'
        assert runtime_config.get_package_changes() is False
        assert runtime_config.\
            get_credentials_verification_metadata_signing_key_file() == ''

        mock_get_platform_name.return_value = 'x86_64'
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/defaults'}):
            runtime_config = RuntimeConfig(reread=True)
        assert runtime_config.get_mapper_tool() == 'partx'

    def test_config_sections_invalid(self):
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/invalid'}):
            runtime_config = RuntimeConfig(reread=True)

        with self._caplog.at_level(logging.WARNING):
            assert runtime_config.get_container_compression() is True
            assert 'Skipping invalid container compression: foo' in \
                self._caplog.text
        with self._caplog.at_level(logging.WARNING):
            assert runtime_config.get_iso_tool_category() == 'xorriso'
            assert 'Skipping invalid iso tool category: foo' in \
                self._caplog.text

        with self._caplog.at_level(logging.WARNING):
            assert runtime_config.get_iso_media_tag_tool() == "checkmedia"
            assert 'Skipping invalid iso media tag tool: foo' in \
                self._caplog.text

    def test_config_sections_other_settings(self):
        with patch.dict('os.environ', {'HOME': '../data/kiwi_config/other'}):
            runtime_config = RuntimeConfig(reread=True)

        assert runtime_config.get_container_compression() is True
        assert runtime_config.get_package_changes() is True
        assert runtime_config.get_iso_media_tag_tool() == "checkmedia"