Exemplo n.º 1
0
    def test_os_release_comparison(self):
        self.assertTrue(
            Release('queens') < Release('train') < Release('master'))
        self.assertTrue(
            Release('master') > Release('train') > Release('queens'))

        self.assertTrue(
            Release('Train') == Release('train') == Release('trAin'))
    def test_release_compare(self):
        release = Release('4.0R5')
        current_release = Release('0.0')

        self.assertFalse(current_release == release)
        self.assertFalse(current_release < release)
        self.assertTrue(current_release > release)
        self.assertFalse(current_release <= release)

        self.assertFalse(release == current_release)
        self.assertTrue(release < current_release)
        self.assertFalse(release > current_release)
        self.assertTrue(release <= current_release)
 def test_release_dot_release(self):
     release = Release("4.0R3")
     self.assertEqual(release.openstack_release, "master")
     self.assertEqual(release.major_release, "4.0")
     self.assertEqual(release.major_list[0], 4)
     self.assertEqual(release.major_list[1], 0)
     self.assertEqual(release.sub_release, '3')
 def from_nuage(cls, nuage_release, within_stream=None):
     # e.g use as :
     # from_nuage('6.0.12', within_stream='6.0')
     match = cls.nuage_release >= Release(nuage_release)
     if within_stream:
         match = match and cls.up_to_nuage(within_stream)
     return match
 def test_release_full(self):
     release = Release("kilo 4.0R3")
     self.assertEqual(release.openstack_release, "kilo")
     self.assertEqual(release.major_release, "4.0")
     self.assertEqual(release.major_list[0], 4)
     self.assertEqual(release.major_list[1], 0)
     self.assertEqual(release.sub_release, '3')
Exemplo n.º 6
0
    def test_mixed_comparison(self):
        self.assertTrue(Release('train 6.0.9') == Release('train 6.0.9'))
        self.assertTrue(Release('train 6.0.9') > Release('train 6.0.8'))

        # the nuage release takes precedence
        self.assertTrue(Release('queens 6.0.9') > Release('train 6.0.8'))

        # no openstack version is greater than any openstack version
        self.assertTrue(Release('6.0.9') > Release('train 6.0.9'))
 def at_nuage(cls, nuage_release):
     return cls.nuage_release == Release(nuage_release)
 def up_to_nuage(cls, nuage_release):
     return cls.nuage_release <= Release(nuage_release)
 def up_to_openstack(cls, openstack_version):
     return cls.openstack_version <= Release(openstack_version)
Exemplo n.º 10
0
 def before_nuage(nuage_release):
     return Topology.nuage_release < Release(nuage_release)
Exemplo n.º 11
0
 def before_openstack(cls, openstack_version):
     return cls.openstack_version < Release(openstack_version)
Exemplo n.º 12
0
 def beyond_openstack(cls, openstack_version):
     return cls.openstack_version > Release(openstack_version)
Exemplo n.º 13
0
 def at_openstack(openstack_version):
     return Topology.openstack_version == Release(openstack_version)
 def test_release_branch_release(self):
     release = Release("liberty-PROD-2456-plugin-11")
     self.assertEqual(release.openstack_release, "liberty")
Exemplo n.º 15
0
    def test_nuage_release_comparison(self):
        self.assertTrue(Release('0.0') == Release('20.10'))
        self.assertTrue(Release('0.0') > Release('20.10R1'))
        self.assertTrue(Release('0.0') != Release('20.10R1'))
        self.assertTrue(not Release('0.0') == Release('20.10R1'))
        self.assertTrue(not Release('0.0') < Release('20.10R1'))

        self.assertTrue(Release('20.10') == Release('20.10'))
        self.assertTrue(Release('20.10') > Release('20.10R1'))
        self.assertTrue(Release('20.10R2') > Release('20.10R1'))
        self.assertTrue(Release('20.10R1') < Release('20.10R2'))

        self.assertTrue(Release('20.10.R2') == Release('20.10R2'))

        self.assertTrue(Release('6.0') > Release('6.0.9'))
        self.assertTrue(Release('6.0') < Release('6.0.99'))

        self.assertTrue(Release('5.4') > Release('5.4.1U9'))
        self.assertTrue(Release('5.4') < Release('5.4.1U99'))
        self.assertTrue(Release('5.4.1') > Release('5.4.1U9'))
        self.assertTrue(Release('5.4.1') < Release('5.4.1U99'))

        self.assertTrue(Release('5.4.1.U9') == Release('5.4.1U9'))

        self.assertTrue(Release('5.3') == Release('5.3'))
        self.assertTrue(Release('5.3') > Release('5.3.1'))

        self.assertTrue(Release('5.2') == Release('5.2'))
        self.assertTrue(Release('5.2') > Release('5.2.1'))

        self.assertTrue(Release('5.1') == Release('5.1'))
        self.assertTrue(Release('5.1') > Release('5.1.1'))

        self.assertTrue(Release('20.10') > Release('6.0') > Release('5.4'))
        self.assertTrue(Release('5.4') < Release('6.0') < Release('20.10'))
        self.assertTrue(Release('20.10') > Release('6.0.9'))
        self.assertTrue(Release('20.10R1') > Release('5.4.1.U12'))

        # verify integer comparison, not alphanumerical
        self.assertTrue(Release('20.10R12') > Release('20.10R2'))
        self.assertTrue(Release('6.0.12') > Release('6.0.2'))
Exemplo n.º 16
0
 def from_nuage(nuage_release):
     return Topology.nuage_release >= Release(nuage_release)
Exemplo n.º 17
0
 def beyond_openstack(openstack_version):
     return Topology.openstack_version > Release(openstack_version)
Exemplo n.º 18
0
 def up_to_openstack(openstack_version):
     return Topology.openstack_version <= Release(openstack_version)
Exemplo n.º 19
0
 def up_to_nuage(nuage_release):
     return Topology.nuage_release <= Release(nuage_release)
Exemplo n.º 20
0
 def before_openstack(openstack_version):
     return Topology.openstack_version < Release(openstack_version)
Exemplo n.º 21
0
 def at_openstack(cls, openstack_version):
     return cls.openstack_version == Release(openstack_version)
Exemplo n.º 22
0
 def at_nuage(nuage_release):
     return Topology.nuage_release == Release(nuage_release)
Exemplo n.º 23
0
 def beyond_nuage(cls, nuage_release):
     return cls.nuage_release > Release(nuage_release)
Exemplo n.º 24
0
 def before_nuage(cls, nuage_release):
     return cls.nuage_release < Release(nuage_release)
Exemplo n.º 25
0
 def beyond_nuage(nuage_release):
     return Topology.nuage_release > Release(nuage_release)
Exemplo n.º 26
0
class Topology(object):

    nuage_release_qualifier = CONF.nuage_sut.release
    nuage_release = Release(nuage_release_qualifier)
    openstack_version_qualifier = CONF.nuage_sut.openstack_version
    openstack_version = Release(openstack_version_qualifier)
    python_version = sys.version_info

    is_ml2 = True
    tempest_concurrency = int(CONF.nuage_sut.tempest_concurrency)
    console_logging = CONF.nuage_sut.console_logging

    vsd_server = CONF.nuage.nuage_vsd_server
    vsd_org = CONF.nuage.nuage_vsd_org
    base_uri = CONF.nuage.nuage_base_uri
    auth_resource = CONF.nuage.nuage_auth_resource
    server_auth = (CONF.nuage.nuage_vsd_user + ":" +
                   CONF.nuage.nuage_vsd_password)
    def_netpartition = CONF.nuage.nuage_default_netpartition
    cms_id = CONF.nuage.nuage_cms_id

    is_v5 = nuage_release < Release('6.0.0')

    consume_cnt = 0

    # - - - - - -

    def __init__(self):
        assert False  # you don't need to instantiate a topology

    # - - - - - -

    @classmethod
    def get_logger(cls, name, console_logging=None):
        if console_logging is None:
            console_logging = Topology.console_logging
        logger = (ConsoleLogging(name) if console_logging
                  else logging.getLogger(name))
        if cls.consume_cnt == 1:  # skip count 0 as that is the interpreter
            cls.log_platform_versions(logger)
        cls.consume_cnt += 1
        return logger

    @classmethod
    def get_conf(cls):
        return CONF

    # - - - - - -

    @classmethod
    def log_platform_versions(cls, log):
        log.info('')
        log.info('(C) NOKIA Nuage Tempest plugin')
        log.info('')
        log.info('RELEASES:')
        log.info('Nuage version                    : {}'.
                 format(cls.nuage_release_qualifier))
        log.info('OpenStack version                : {}'.
                 format(cls.openstack_version_qualifier))
        log.info('Python version                   : {}.{}.{}'.
                 format(cls.python_version.major,
                        cls.python_version.minor,
                        cls.python_version.micro))

    # - - - - - -

    @classmethod
    def at_nuage(cls, nuage_release):
        return cls.nuage_release == Release(nuage_release)

    @classmethod
    def at_openstack(cls, openstack_version):
        return cls.openstack_version == Release(openstack_version)

    @classmethod
    def beyond_nuage(cls, nuage_release):
        return cls.nuage_release > Release(nuage_release)

    @classmethod
    def beyond_openstack(cls, openstack_version):
        return cls.openstack_version > Release(openstack_version)

    @classmethod
    def from_nuage(cls, nuage_release, within_stream=None):
        # e.g use as :
        # from_nuage('6.0.12', within_stream='6.0')
        match = cls.nuage_release >= Release(nuage_release)
        if within_stream:
            match = match and cls.up_to_nuage(within_stream)
        return match

    @classmethod
    def from_openstack(cls, openstack_version):
        return cls.openstack_version >= Release(openstack_version)

    @classmethod
    def before_nuage(cls, nuage_release):
        return cls.nuage_release < Release(nuage_release)

    @classmethod
    def before_openstack(cls, openstack_version):
        return cls.openstack_version < Release(openstack_version)

    @classmethod
    def up_to_nuage(cls, nuage_release):
        return cls.nuage_release <= Release(nuage_release)

    @classmethod
    def up_to_openstack(cls, openstack_version):
        return cls.openstack_version <= Release(openstack_version)

    # - - - - - -

    nbr_retries_for_test_robustness = 5  # same as plugin

    @classmethod
    def neutron_restart_supported(cls):
        return False  # assumed as non-applicable capability, which is correct
        #               for the standard jobs that run in CI

    @classmethod
    def nuage_fip_rate_limit_configs(cls):
        return None, None  # egress & ingress rate limit configured in neutron
        #                    Defaulting to None, None, according CI settings

    @classmethod
    def is_existing_flat_vlan_allowed(cls):
        """Whether nuage sriov option allow_existing_flat_vlan is set to True

        See neutron setting [nuage_sriov] allow_existing_flat_vlan
        """
        return bool(CONF.nuage_sut.nuage_sriov_allow_existing_flat_vlan)

    @classmethod
    def has_default_switchdev_port_profile(cls):
        """This condition is True for OVRS setups"""
        return (CONF.network.port_vnic_type in ['direct', 'virtio-forwarder']
                and 'switchdev' in CONF.network.port_profile.get(
                    'capabilities', []))

    @classmethod
    def has_single_stack_v6_support(cls):
        return not cls.is_v5

    @classmethod
    def has_full_dhcp_control_in_vsd(cls):
        return not cls.is_v5

    @classmethod
    def has_dhcp_v6_support(cls):
        return not cls.is_v5

    @classmethod
    def has_fwaas_v6_support(cls):
        return not cls.is_v5

    @classmethod
    def has_full_dhcp_options_support(cls):
        return not cls.is_v5

    @classmethod
    def has_domain_template_description_configured_support(cls):
        return not cls.is_v5

    @classmethod
    def has_utf8_netpartition_names_support(cls):
        return not cls.is_v5

    @classmethod
    def has_unified_pg_for_all_support(cls):
        return not cls.is_v5

    @classmethod
    def has_aggregate_flows_support(cls):
        return not cls.is_v5

    @classmethod
    def has_switchdev_offload_support(cls):
        return not cls.is_v5

    @classmethod
    def has_switchdev_virtio_forwarder_support(cls):
        return cls.from_nuage('20.10R3') and cls.from_openstack('train')

    @classmethod
    def has_secured_netpartitions_support(cls):
        return cls.from_openstack('queens')

    @classmethod
    def has_vlan_transparency_support(cls):
        return ('vlan-transparent' in
                CONF.network_feature_enabled.api_extensions and
                CONF.nuage_sut.image_is_advanced)

    @classmethod
    def has_avrs_with_ovs_fp_deployed(cls):
        # Indicates whether AVRS is deployed with the ovs-fp mech driver
        # One can tell by the OpenStack version (Rocky+ -> True)
        return cls.from_openstack('Rocky')

    @classmethod
    def has_srl_support(cls):
        return cls.from_nuage('20.10R4')
Exemplo n.º 27
0
 def from_openstack(cls, openstack_version):
     return cls.openstack_version >= Release(openstack_version)
Exemplo n.º 28
0
 def from_openstack(openstack_version):
     return Topology.openstack_version >= Release(openstack_version)
Exemplo n.º 29
0
import testtools

from nuage_tempest_plugin.lib.release import Release

# run me as :
# $ python -m testtools.run nuage_tempest_plugin/unit/release_unittest.py

r_5_4 = Release('5.4')
r_6_0 = Release('6.0')
r_0_0 = Release('0.0')

kilo = Release('kilo')
ocata = Release('ocata')
queens = Release('queens')
master = Release('master')


class ReleaseUnitTest(testtools.TestCase):
    @staticmethod
    def test_release_comparison():
        assert r_6_0 == r_6_0
        assert r_5_4 < r_6_0 < r_0_0
        assert r_0_0 > r_6_0 > r_5_4
        assert not r_6_0 > r_6_0
        assert not r_6_0 < r_6_0

    @staticmethod
    def test_os_flavor_comparison():
        assert kilo < ocata < queens < master
        assert master > queens > ocata > kilo
Exemplo n.º 30
0
class Topology(object):

    nuage_release_qualifier = CONF.nuage_sut.release
    nuage_release = Release(nuage_release_qualifier)
    openstack_version_qualifier = CONF.nuage_sut.openstack_version
    openstack_version = Release(openstack_version_qualifier)
    python_version = sys.version_info

    is_ml2 = True
    api_workers = int(CONF.nuage_sut.api_workers)
    console_logging = CONF.nuage_sut.console_logging

    vsd_server = CONF.nuage.nuage_vsd_server
    vsd_org = CONF.nuage.nuage_vsd_org
    base_uri = CONF.nuage.nuage_base_uri
    auth_resource = CONF.nuage.nuage_auth_resource
    server_auth = (CONF.nuage.nuage_vsd_user + ":" +
                   CONF.nuage.nuage_vsd_password)
    def_netpartition = CONF.nuage.nuage_default_netpartition
    cms_id = CONF.nuage.nuage_cms_id

    is_v5 = nuage_release < Release('6.0')

    # - - - - - -

    def __init__(self):
        assert False  # you don't need to instantiate a topology

    # - - - - - -

    @staticmethod
    def get_logger(name, console_logging=None):
        if console_logging is None:
            console_logging = Topology.console_logging
        return (ConsoleLogging(name)
                if console_logging else logging.getLogger(name))

    @staticmethod
    def get_conf():
        return CONF

    # - - - - - -

    @staticmethod
    def at_nuage(nuage_release):
        return Topology.nuage_release == Release(nuage_release)

    @staticmethod
    def at_openstack(openstack_version):
        return Topology.openstack_version == Release(openstack_version)

    @staticmethod
    def beyond_nuage(nuage_release):
        return Topology.nuage_release > Release(nuage_release)

    @staticmethod
    def beyond_openstack(openstack_version):
        return Topology.openstack_version > Release(openstack_version)

    @staticmethod
    def from_nuage(nuage_release):
        return Topology.nuage_release >= Release(nuage_release)

    @staticmethod
    def from_openstack(openstack_version):
        return Topology.openstack_version >= Release(openstack_version)

    @staticmethod
    def before_nuage(nuage_release):
        return Topology.nuage_release < Release(nuage_release)

    @staticmethod
    def before_openstack(openstack_version):
        return Topology.openstack_version < Release(openstack_version)

    @staticmethod
    def up_to_nuage(nuage_release):
        return Topology.nuage_release <= Release(nuage_release)

    @staticmethod
    def up_to_openstack(openstack_version):
        return Topology.openstack_version <= Release(openstack_version)

    # - - - - - -

    nbr_retries_for_test_robustness = 5  # same as plugin

    @staticmethod
    def single_worker_run():
        return Topology.api_workers == 1

    @staticmethod
    def neutron_restart_supported():
        return False  # assumed as non-applicable capability, which is correct
        #               for the standard jobs that run in CI

    @staticmethod
    def nuage_fip_rate_limit_configs():
        return None, None  # egress & ingress rate limit configured in neutron
        #                    Defaulting to None, None, according CI settings

    @staticmethod
    def is_existing_flat_vlan_allowed():
        """Whether nuage sriov option allow_existing_flat_vlan is set to True

        See neutron setting [nuage_sriov] allow_existing_flat_vlan
        """
        return bool(CONF.nuage_sut.nuage_sriov_allow_existing_flat_vlan)

    @staticmethod
    def has_default_switchdev_port_profile():
        """This condition is True for OVRS setups"""
        return (CONF.network.port_vnic_type == 'direct'
                and 'switchdev' in CONF.network.port_profile.get(
                    'capabilities', []))

    @staticmethod
    def has_single_stack_v6_support():
        return not Topology.is_v5

    @staticmethod
    def has_full_dhcp_control_in_vsd():
        return not Topology.is_v5

    @staticmethod
    def has_dhcp_v6_support():
        return not Topology.is_v5

    @staticmethod
    def has_fwaas_v6_support():
        return not Topology.is_v5

    @staticmethod
    def has_full_dhcp_options_support():
        return not Topology.is_v5

    @staticmethod
    def has_domain_template_description_configured_support():
        return not Topology.is_v5

    @staticmethod
    def has_utf8_netpartition_names_support():
        return not Topology.is_v5

    @staticmethod
    def has_unified_pg_for_all_support():
        return not Topology.is_v5

    @staticmethod
    def has_aggregate_flows_support():
        return not Topology.is_v5

    @staticmethod
    def has_secured_netpartitions_support():
        return Topology.from_openstack('queens')