cephadm: add tests for Packager validate function

With the validate function split from the add_repo function we can
independently test the behavior of the validate function.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
John Mulligan 2022-01-20 16:28:52 -05:00
parent ee71ff79a3
commit c0b1a910f1

View File

@ -1374,6 +1374,240 @@ class TestRmRepo:
cd.command_rm_repo(ctx)
class TestValidateRepo:
@pytest.mark.parametrize('values',
[
# Apt - no checks
dict(
version="",
release="pacific",
err_text="",
os_release=dedent("""
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
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=focal
UBUNTU_CODENAME=focal
""")),
# YumDnf on Centos8 - OK
dict(
version="",
release="pacific",
err_text="",
os_release=dedent("""
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
""")),
# YumDnf on Fedora - Fedora not supported
dict(
version="",
release="pacific",
err_text="does not build Fedora",
os_release=dedent("""
NAME="Fedora Linux"
VERSION="35 (Cloud Edition)"
ID=fedora
VERSION_ID=35
VERSION_CODENAME=""
PLATFORM_ID="platform:f35"
PRETTY_NAME="Fedora Linux 35 (Cloud Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:35"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f35/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=35
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=35
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
VARIANT="Cloud Edition"
VARIANT_ID=cloud
""")),
# YumDnf on Centos 7 - no pacific
dict(
version="",
release="pacific",
err_text="does not support pacific",
os_release=dedent("""
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
""")),
# YumDnf on Centos 7 - nothing after pacific
dict(
version="",
release="zillions",
err_text="does not support pacific",
os_release=dedent("""
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
""")),
# YumDnf on Centos 7 - nothing v16 or higher
dict(
version="v16.1.3",
release="",
err_text="does not support",
os_release=dedent("""
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
""")),
])
@mock.patch('cephadm.find_executable', return_value='foo')
def test_distro_validation(self, find_executable, values, cephadm_fs):
os_release = values['os_release']
release = values['release']
version = values['version']
err_text = values['err_text']
cephadm_fs.create_file('/etc/os-release', contents=os_release)
ctx = cd.CephadmContext()
ctx.repo_url = 'http://localhost'
pkg = cd.create_packager(ctx, stable=release, version=version)
if err_text:
with pytest.raises(cd.Error, match=err_text):
pkg.validate()
else:
with mock.patch('cephadm.urlopen', return_value=None):
pkg.validate()
@pytest.mark.parametrize('values',
[
# Apt - not checked
dict(
version="",
release="pacific",
err_text="",
os_release=dedent("""
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
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=focal
UBUNTU_CODENAME=focal
""")),
# YumDnf on Centos8 - force failure
dict(
version="",
release="foobar",
err_text="failed to fetch repository metadata",
os_release=dedent("""
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
""")),
])
@mock.patch('cephadm.find_executable', return_value='foo')
def test_http_validation(self, find_executable, values, cephadm_fs):
from urllib.error import HTTPError
os_release = values['os_release']
release = values['release']
version = values['version']
err_text = values['err_text']
cephadm_fs.create_file('/etc/os-release', contents=os_release)
ctx = cd.CephadmContext()
ctx.repo_url = 'http://localhost'
pkg = cd.create_packager(ctx, stable=release, version=version)
with mock.patch('cephadm.urlopen') as _urlopen:
_urlopen.side_effect = HTTPError(ctx.repo_url, 404, "not found", None, fp=None)
if err_text:
with pytest.raises(cd.Error, match=err_text):
pkg.validate()
else:
pkg.validate()
class TestPull:
@mock.patch('time.sleep')