Merge "Use convert_version_to_tuple() throughout tree"

This commit is contained in:
Zuul 2023-10-30 11:37:32 +00:00 committed by Gerrit Code Review
commit 0f3cbde095
8 changed files with 83 additions and 9 deletions

View File

@ -13,10 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from packaging import version
from neutron_lib import exceptions
from oslo_log import log as logging
from oslo_utils import versionutils
from neutron.agent.linux import utils as agent_utils
@ -46,7 +45,9 @@ def get_keepalived_version():
return_stderr=True)
# First line is the interesting one here from stderr
version_line = res[1].split('\n')[0]
keepalived_version = version.parse(version_line.split()[1])
# Version string is of form 'v2.0.19', must remove 'v'
keepalived_version = versionutils.convert_version_to_tuple(
version_line.split()[1].lstrip('v'))
return keepalived_version
except exceptions.ProcessExecutionError:
LOG.exception("Failed to get keepalived version")
@ -55,7 +56,7 @@ def get_keepalived_version():
def keepalived_use_no_track_support():
keepalived_with_track = version.parse('2.0.3')
keepalived_with_track = (2, 0, 3)
keepalived_version = get_keepalived_version()
if keepalived_version:
return keepalived_version >= keepalived_with_track

View File

@ -459,7 +459,7 @@ def keepalived_ipv6_supported():
def keepalived_garp_on_sighup_supported():
keepalived_garp_on_sighup = ('1.2.20')
keepalived_garp_on_sighup = (1, 2, 20)
keepalived_version = runtime_checks.get_keepalived_version()
if keepalived_version:
return keepalived_version >= keepalived_garp_on_sighup

View File

@ -42,6 +42,10 @@ import_from_mock = re.compile(r"\bfrom[\s]+mock[\s]+import\b")
import_six = re.compile(r"\bimport[\s]+six\b")
import_from_six = re.compile(r"\bfrom[\s]+six[\s]+import\b")
import_packaging = re.compile(r"\bimport[\s]+packaging\b")
import_version_from_packaging = (
re.compile(r"\bfrom[\s]+packaging[\s]+import[\s]version\b"))
@core.flake8ext
def check_assert_called_once_with(logical_line, filename):
@ -264,3 +268,17 @@ def check_no_import_six(logical_line, filename, noqa):
for regex in import_six, import_from_six:
if re.match(regex, logical_line):
yield(0, msg)
@core.flake8ext
def check_no_import_packaging(logical_line, filename, noqa):
"""N349 - Code must not import packaging library
"""
msg = "N349: Code must not import packaging library"
if noqa:
return
for regex in import_packaging, import_version_from_packaging:
if re.match(regex, logical_line):
yield(0, msg)

View File

@ -23,7 +23,7 @@ from neutron_lib.agent import topics
from neutron_lib import constants
from neutron_lib import context
from oslo_utils import timeutils
from packaging import version
from oslo_utils import versionutils
import neutron
from neutron.agent.common import ovs_lib
@ -223,8 +223,11 @@ def skip_if_ovs_older_than(ovs_version):
@functools.wraps(f)
def check_ovs_and_skip(test):
ovs = ovs_lib.BaseOVS()
current_ovs_version = version.Version(ovs.config['ovs_version'])
if current_ovs_version < version.Version(ovs_version):
current_ovs_version = versionutils.convert_version_to_tuple(
ovs.config['ovs_version'])
min_ovs_version = versionutils.convert_version_to_tuple(
ovs_version)
if current_ovs_version < min_ovs_version:
test.skipTest("This test requires OVS version %s or higher." %
ovs_version)
return f(test)

View File

@ -0,0 +1,39 @@
# Copyright 2023 Canonical
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from unittest import mock
from neutron_lib import exceptions
from neutron.agent.linux import utils as agent_utils
from neutron.cmd import runtime_checks
from neutron.tests import base
class TestRuntimeChecks(base.BaseTestCase):
def test_get_keepalived_version(self):
exec_keepalived_version = ['', 'Keepalived v2.2.8 (04/04,2023)']
with mock.patch.object(agent_utils, 'execute') as mock_exec:
mock_exec.return_value = exec_keepalived_version
keepalived_version = runtime_checks.get_keepalived_version()
self.assertEqual(keepalived_version, (2, 2, 8))
def test_get_keepalived_version_fail(self):
with mock.patch.object(agent_utils, 'execute') as mock_exec:
mock_exec.side_effect = (
exceptions.ProcessExecutionError('', returncode=0))
keepalived_version = runtime_checks.get_keepalived_version()
self.assertFalse(keepalived_version)

View File

@ -238,6 +238,19 @@ class HackingTestCase(base.BaseTestCase):
1, len(list(checks.check_no_import_six(
fail_line, mock.ANY, None))))
def test_check_no_import_packaging(self):
pass_line = 'import other_library import packaging'
fail_lines = ('import packaging',
'from packaging import version')
self.assertEqual(
0,
len(list(checks.check_no_import_packaging(pass_line, mock.ANY,
None))))
for fail_line in fail_lines:
self.assertEqual(
1, len(list(checks.check_no_import_packaging(
fail_line, mock.ANY, None))))
def test_check_oslo_i18n_wrapper(self):
def _pass(line, filename, noqa=False):
self.assertLinePasses(

View File

@ -51,7 +51,6 @@ os-ken>=2.2.0 # Apache-2.0
os-resource-classes>=1.1.0 # Apache-2.0
ovs>=2.10.0 # Apache-2.0
ovsdbapp>=2.2.1 # Apache-2.0
packaging>=20.4 # Apache-2.0
psutil>=5.3.0 # BSD
pyroute2>=0.7.3;sys_platform!='win32' # Apache-2.0 (+ dual licensed GPL2)
pyOpenSSL>=17.1.0 # Apache-2.0

View File

@ -211,6 +211,7 @@ extension =
N346 = neutron.hacking.checks:check_no_sqlalchemy_event_import
N347 = neutron.hacking.checks:check_no_import_mock
N348 = neutron.hacking.checks:check_no_import_six
N349 = neutron.hacking.checks:check_no_import_packaging
# Checks from neutron-lib
N521 = neutron_lib.hacking.checks:use_jsonutils
N524 = neutron_lib.hacking.checks:check_no_contextlib_nested