Handle Slackware OS version strings containing a plus (“+”) (#68142)
A couple of years ago Slackware -current began using a plus (“+”) at the end of the distribution version string to indicate a future version work-in-progress. Rearrange distribution_files unit tests to easily support more tests - add conftest with common fixtures - use parametrize for testing multiple scenarios * Add changelog * Add unit tests for Slackware distribution parsing * Use correct fixtures for Slackware Data comes from /etc/slackware-version Co-authored-by: Sam Doran <sdoran@redhat.com> Co-authored-by: <Eduard Rozenberg <eduardr@pobox.com>>
This commit is contained in:
parent
154efd97f2
commit
566c5e6ce1
10 changed files with 146 additions and 1 deletions
2
changelogs/fragments/38760-slackware-os-dist.yml
Normal file
2
changelogs/fragments/38760-slackware-os-dist.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- facts - account for Slackware OS with ``+`` in the name (https://github.com/ansible/ansible/issues/38760)
|
|
@ -211,7 +211,7 @@ class DistributionFiles:
|
|||
if 'Slackware' not in data:
|
||||
return False, slackware_facts # TODO: remove
|
||||
slackware_facts['distribution'] = name
|
||||
version = re.findall(r'\w+[.]\w+', data)
|
||||
version = re.findall(r'\w+[.]\w+\+?', data)
|
||||
if version:
|
||||
slackware_facts['distribution_version'] = version[0]
|
||||
return True, slackware_facts
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
NAME="Clear Linux OS"
|
||||
VERSION=1
|
||||
ID=clear-linux-os
|
||||
ID_LIKE=clear-linux-os
|
||||
VERSION_ID=28120
|
||||
PRETTY_NAME="Clear Linux OS"
|
||||
ANSI_COLOR="1;35"
|
||||
HOME_URL="https://clearlinux.org"
|
||||
SUPPORT_URL="https://clearlinux.org"
|
||||
BUG_REPORT_URL="mailto:dev@lists.clearlinux.org"',
|
|
@ -0,0 +1,10 @@
|
|||
NAME="Container Linux by CoreOS"
|
||||
ID=coreos
|
||||
VERSION=1911.5.0
|
||||
VERSION_ID=1911.5.0
|
||||
BUILD_ID=2018-12-15-2317
|
||||
PRETTY_NAME="Container Linux by CoreOS 1911.5.0 (Rhyolite)"
|
||||
ANSI_COLOR="38;5;75"
|
||||
HOME_URL="https://coreos.com/"
|
||||
BUG_REPORT_URL="https://issues.coreos.com"
|
||||
COREOS_BOARD="amd64-usr"
|
|
@ -0,0 +1,12 @@
|
|||
NAME="Linux Mint"
|
||||
VERSION="19.1 (Tessa)"
|
||||
ID=linuxmint
|
||||
ID_LIKE=ubuntu
|
||||
PRETTY_NAME="Linux Mint 19.1"
|
||||
VERSION_ID="19.1"
|
||||
HOME_URL="https://www.linuxmint.com/"
|
||||
SUPPORT_URL="https://forums.ubuntu.com/"
|
||||
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
|
||||
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
|
||||
VERSION_CODENAME=tessa
|
||||
UBUNTU_CODENAME=bionic
|
|
@ -0,0 +1 @@
|
|||
Slackware 14.1
|
|
@ -0,0 +1 @@
|
|||
Slackware 14.2+
|
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2020 Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
|
||||
import pytest
|
||||
|
||||
from units.compat.mock import Mock
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_module():
|
||||
mock_module = Mock()
|
||||
mock_module.params = {'gather_subset': ['all'],
|
||||
'gather_timeout': 5,
|
||||
'filter': '*'}
|
||||
mock_module.get_bin_path = Mock(return_value=None)
|
||||
return mock_module
|
|
@ -0,0 +1,51 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019 Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import pytest
|
||||
|
||||
from ansible.module_utils.facts.system.distribution import DistributionFiles
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_input():
|
||||
return {
|
||||
'name': 'Clearlinux',
|
||||
'path': '/usr/lib/os-release',
|
||||
'collected_facts': None,
|
||||
}
|
||||
|
||||
|
||||
def test_parse_distribution_file_clear_linux(mock_module, test_input):
|
||||
test_input['data'] = open(os.path.join(os.path.dirname(__file__), '../../fixtures/distribution_files/ClearLinux')).read()
|
||||
|
||||
result = (
|
||||
True,
|
||||
{
|
||||
'distribution': 'Clear Linux OS',
|
||||
'distribution_major_version': '28120',
|
||||
'distribution_release': 'clear-linux-os',
|
||||
'distribution_version': '28120'
|
||||
}
|
||||
)
|
||||
|
||||
distribution = DistributionFiles(module=mock_module())
|
||||
assert result == distribution.parse_distribution_file_ClearLinux(**test_input)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('distro_file', ('CoreOS', 'LinuxMint'))
|
||||
def test_parse_distribution_file_clear_linux_no_match(mock_module, distro_file, test_input):
|
||||
"""
|
||||
Test against data from Linux Mint and CoreOS to ensure we do not get a reported
|
||||
match from parse_distribution_file_ClearLinux()
|
||||
"""
|
||||
test_input['data'] = open(os.path.join(os.path.dirname(__file__), '../../fixtures/distribution_files', distro_file)).read()
|
||||
|
||||
result = (False, {})
|
||||
|
||||
distribution = DistributionFiles(module=mock_module())
|
||||
assert result == distribution.parse_distribution_file_ClearLinux(**test_input)
|
|
@ -0,0 +1,37 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019 Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import pytest
|
||||
|
||||
from ansible.module_utils.facts.system.distribution import DistributionFiles
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
('distro_file', 'expected_version'),
|
||||
(
|
||||
('Slackware', '14.1'),
|
||||
('SlackwareCurrent', '14.2+'),
|
||||
)
|
||||
)
|
||||
def test_parse_distribution_file_slackware(mock_module, distro_file, expected_version):
|
||||
test_input = {
|
||||
'name': 'Slackware',
|
||||
'data': open(os.path.join(os.path.dirname(__file__), '../../fixtures/distribution_files', distro_file)).read(),
|
||||
'path': '/etc/os-release',
|
||||
'collected_facts': None,
|
||||
}
|
||||
|
||||
result = (
|
||||
True,
|
||||
{
|
||||
'distribution': 'Slackware',
|
||||
'distribution_version': expected_version
|
||||
}
|
||||
)
|
||||
distribution = DistributionFiles(module=mock_module())
|
||||
assert result == distribution.parse_distribution_file_Slackware(**test_input)
|
Loading…
Reference in a new issue