예제 #1
0
 def test_parse_etc_os_release(self, path_isfile_mock):
     path_isfile_mock.side_effect = lambda x: x == "/usr/lib/os-release"
     with salt.utils.files.fopen(
             os.path.join(OS_RELEASE_DIR,
                          "ubuntu-17.10")) as os_release_file:
         os_release_content = os_release_file.readlines()
     with patch("salt.utils.files.fopen", mock_open()) as os_release_file:
         os_release_file.return_value.__iter__.return_value = os_release_content
         os_release = core._parse_os_release(
             ["/etc/os-release", "/usr/lib/os-release"])
     self.assertEqual(
         os_release, {
             "NAME": "Ubuntu",
             "VERSION": "17.10 (Artful Aardvark)",
             "ID": "ubuntu",
             "ID_LIKE": "debian",
             "PRETTY_NAME": "Ubuntu 17.10",
             "VERSION_ID": "17.10",
             "HOME_URL": "https://www.ubuntu.com/",
             "SUPPORT_URL": "https://help.ubuntu.com/",
             "BUG_REPORT_URL": "https://bugs.launchpad.net/ubuntu/",
             "PRIVACY_POLICY_URL":
             "https://www.ubuntu.com/legal/terms-and-policies/privacy-policy",
             "VERSION_CODENAME": "artful",
             "UBUNTU_CODENAME": "artful",
         })
예제 #2
0
    def _run_os_grains_tests(self, os_release_filename, os_release_map, expectation):
        path_isfile_mock = MagicMock(side_effect=lambda x: x in os_release_map.get('files', []))
        empty_mock = MagicMock(return_value={})
        osarch_mock = MagicMock(return_value="amd64")
        if os_release_filename:
            os_release_data = core._parse_os_release(
                os.path.join(OS_RELEASE_DIR, os_release_filename)
            )
        else:
            os_release_data = os_release_map.get('os_release_file', {})
        os_release_mock = MagicMock(return_value=os_release_data)

        orig_import = __import__
        if six.PY2:
            built_in = '__builtin__'
        else:
            built_in = 'builtins'

        def _import_mock(name, *args):
            if name == 'lsb_release':
                raise ImportError('No module named lsb_release')
            return orig_import(name, *args)

        suse_release_file = os_release_map.get('suse_release_file')

        file_contents = {'/proc/1/cmdline': ''}
        if suse_release_file:
            file_contents['/etc/SuSE-release'] = suse_release_file

        # - Skip the first if statement
        # - Skip the selinux/systemd stuff (not pertinent)
        # - Skip the init grain compilation (not pertinent)
        # - Ensure that lsb_release fails to import
        # - Skip all the /etc/*-release stuff (not pertinent)
        # - Mock linux_distribution to give us the OS name that we want
        # - Mock the osarch
        distro_mock = MagicMock(return_value=os_release_map['linux_distribution'])
        with patch.object(salt.utils.platform, 'is_proxy', MagicMock(return_value=False)), \
                patch.object(core, '_linux_bin_exists', MagicMock(return_value=False)), \
                patch.object(os.path, 'exists', path_isfile_mock), \
                patch('{0}.__import__'.format(built_in), side_effect=_import_mock), \
                patch.object(os.path, 'isfile', path_isfile_mock), \
                patch.object(core, '_parse_os_release', os_release_mock), \
                patch.object(core, '_parse_lsb_release', empty_mock), \
                patch('salt.utils.files.fopen', mock_open(read_data=file_contents)), \
                patch.object(core, 'linux_distribution', distro_mock), \
                patch.object(core, '_linux_gpu_data', empty_mock), \
                patch.object(core, '_linux_cpudata', empty_mock), \
                patch.object(core, '_virtual', empty_mock), \
                patch.dict(core.__salt__, {'cmd.run': osarch_mock}):
            os_grains = core.os_data()

        grains = {k: v for k, v in os_grains.items()
                  if k in set(["os", "os_family", "osfullname", "oscodename", "osfinger",
                               "osrelease", "osrelease_info", "osmajorrelease"])}
        self.assertEqual(grains, expectation)
예제 #3
0
 def test_missing_os_release(self):
     with patch('salt.utils.files.fopen', mock_open(read_data={})):
         os_release = core._parse_os_release(
             ['/etc/os-release', '/usr/lib/os-release'])
     self.assertEqual(os_release, {})
예제 #4
0
파일: test_core.py 프로젝트: ramccor/salt
 def test_missing_os_release(self, path_isfile_mock):
     path_isfile_mock.return_value = False
     os_release = core._parse_os_release(
         ["/etc/os-release", "/usr/lib/os-release"])
     self.assertEqual(os_release, {})