Пример #1
0
    def test_check_untagged_intersection_failed(self, mocked_db):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True}
            ]
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])

        ng1 = NetworkGroup()
        ng1.name = consts.NETWORKS.storage
        ng2 = NetworkGroup()
        ng2.name = consts.NETWORKS.management
        self.env.db().add_all([ng1, ng2])
        self.env.db().flush()

        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.networks = [{'id': ng1.id,
                             'cidr': '192.168.0.0/24',
                             'name': ng1.name,
                             'vlan_start': None,
                             'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                             },
                            {'id': ng2.id,
                             'cidr': '192.168.0.0/26',
                             'name': ng2.name,
                             'vlan_start': None,
                             'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                             }]
        checker.cluster.nodes[0].interfaces[0].assigned_networks_list = \
            [ng1, ng2]
        checker.cluster.nodes[0].interfaces[1].assigned_networks_list = \
            [ng1, ng2]
        self.env.db.flush()
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_untagged_intersection)
Пример #2
0
    def test_check_untagged_intersection_failed(self, mocked_db):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True}
            ]
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])

        ng1 = NetworkGroup()
        ng1.name = consts.NETWORKS.storage
        ng2 = NetworkGroup()
        ng2.name = consts.NETWORKS.management
        self.env.db().add_all([ng1, ng2])
        self.env.db().flush()

        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.networks = [{'id': ng1.id,
                             'cidr': '192.168.0.0/24',
                             'name': ng1.name,
                             'vlan_start': None,
                             'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                             },
                            {'id': ng2.id,
                             'cidr': '192.168.0.0/26',
                             'name': ng2.name,
                             'vlan_start': None,
                             'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                             }]
        checker.cluster.nodes[0].interfaces[0].assigned_networks_list = \
            [ng1, ng2]
        checker.cluster.nodes[0].interfaces[1].assigned_networks_list = \
            [ng1, ng2]
        self.env.db.flush()
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_untagged_intersection)
Пример #3
0
    def test_check_bond_slaves_speeds(self):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True}
            ]
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])

        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.check_bond_slaves_speeds()

        self.assertEqual(checker.err_msgs, [])
        bond_if1 = network_db.NodeBondInterface()
        bond_if2 = network_db.NodeBondInterface()

        nic1 = network_db.NodeNICInterface()
        nic2 = network_db.NodeNICInterface()
        nic3 = network_db.NodeNICInterface()
        nic1.current_speed = 100
        nic2.current_speed = 10
        nic3.current_speed = None
        bond_if1.slaves = [nic1, nic2, nic3]
        bond_if2.slaves = [nic3]
        checker.cluster.nodes[0].bond_interfaces = [bond_if1, bond_if2]

        checker.check_bond_slaves_speeds()
        self.assertEqual(len(checker.err_msgs), 2)
Пример #4
0
    def test_check_untagged_intersection(self):
        cluster = self.env.create(nodes_kwargs=[{
            'roles': ['controller'],
            'pending_addition': True
        }])
        cluster_db = self.db.query(Cluster).get(cluster['id'])
        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.networks = [{
            'id': 1,
            'cidr': '192.168.0.0/24',
            'name': 'fake1',
            'vlan_start': None,
            'meta': {
                'notation': 'cidr'
            }
        }]
        ng1 = NetworkGroup()
        ng1.name = 'fake3'
        ng1.id = 3
        ng2 = NetworkGroup()
        ng2.name = 'fake4'
        ng2.id = 4
        checker.cluster.nodes[0].interfaces[0].assigned_networks_list = \
            [ng1, ng2]

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_untagged_intersection)
Пример #5
0
 def test_check_network_classes_exclude_loopback_fail(self, mocked_db):
     checker = NetworkCheck(self.task, {})
     networks = ['224.0.0.0/3', '127.0.0.0/8']
     for network in networks:
         checker.networks = [{'id': 1, 'cidr': network, 'name': 'fake'}]
         self.assertRaises(errors.NetworkCheckError,
                           checker.check_network_classes_exclude_loopback)
     self.assertEqual(mocked_db.call_count, 4)
Пример #6
0
 def test_check_network_classes_exclude_loopback_fail(self, mocked_db):
     checker = NetworkCheck(self.task, {})
     networks = ['224.0.0.0/3', '127.0.0.0/8']
     for network in networks:
         checker.networks = [{'id': 1, 'cidr': network, 'name': 'fake'}]
         self.assertRaises(errors.NetworkCheckError,
                           checker.check_network_classes_exclude_loopback)
     self.assertEqual(mocked_db.call_count, 4)
Пример #7
0
    def test_check_calculated_network_cidr(self, mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.99.0/16',
                             'name': 'storage',
                             'gateway': '192.168.0.1',
                             'vlan_start': 1}]

        self.assertRaises(errors.NetworkCheckError,
                          checker.check_calculated_network_cidr)
Пример #8
0
    def test_check_calculated_network_cidr(self, mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.99.0/16',
                             'name': 'storage',
                             'gateway': '192.168.0.1',
                             'vlan_start': 1}]

        self.assertRaises(errors.NetworkCheckError,
                          checker.check_calculated_network_cidr)
Пример #9
0
    def test_check_vlan_ids_range_and_intersection(self, mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fixed',
                             'gateway': '192.168.0.1',
                             'vlan_start': 200}]
        checker.network_config['fixed_networks_vlan_start'] = 2
        checker.network_config['fixed_networks_amount'] = 10

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_vlan_ids_range_and_intersection)
Пример #10
0
    def test_check_vlan_ids_range_and_intersection(self, mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fixed',
                             'gateway': '192.168.0.1',
                             'vlan_start': 200}]
        checker.network_config['fixed_networks_vlan_start'] = 2
        checker.network_config['fixed_networks_amount'] = 10

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_vlan_ids_range_and_intersection)
Пример #11
0
 def test_neutron_check_gateways_gw_outside(self, get_by_cluster_id_mock,
                                            mocked_db):
     checker = NetworkCheck(self.task, {})
     checker.networks = [{'id': 1,
                          'cidr': '192.168.0.0/24',
                          'gateway': '192.168.1.1',
                          'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                          }]
     nodegroup_mock = MagicMock(**{'count.return_value': 2})
     get_by_cluster_id_mock.return_value = nodegroup_mock
     self.assertRaises(errors.NetworkCheckError,
                       checker.neutron_check_gateways)
Пример #12
0
 def test_neutron_check_gateways_gw_outside(self, get_by_cluster_id_mock,
                                            mocked_db):
     checker = NetworkCheck(self.task, {})
     checker.networks = [{'id': 1,
                          'cidr': '192.168.0.0/24',
                          'gateway': '192.168.1.1',
                          'meta': {'notation': consts.NETWORK_NOTATION.cidr}
                          }]
     nodegroup_mock = MagicMock(**{'count.return_value': 2})
     get_by_cluster_id_mock.return_value = nodegroup_mock
     self.assertRaises(errors.NetworkCheckError,
                       checker.neutron_check_gateways)
Пример #13
0
    def test_check_ironic_intersect_with_baremetal(self, mocked_db):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True},
                {'roles': ['compute'], 'pending_addition': True},
            ],
            cluster_kwargs={'editable_attributes': {
                'additional_components': {'ironic': {'value': True}}}}
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])

        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.network_config['baremetal_range'] = ['192.168.3.52',
                                                     '192.168.3.254']
        checker.network_config['baremetal_gateway'] = '192.168.3.51'
        checker.networks = [
            {'id': 1,
             'cidr': '192.168.0.0/24',
             'name': 'public',
             'gateway': '192.168.0.1',
             'ip_ranges': ['192.168.0.1', '192.168.0.100'],
             'meta': {'notation': 'cidr'}},
            {'cidr': '192.168.3.0/24',
             'gateway': None,
             'group_id': 2,
             'id': 11,
             'ip_ranges': [['192.168.3.1', '192.168.3.254']],
             'meta': {
                 'cidr': '192.168.3.0/24',
                 'configurable': True,
                 'ip_range': ['192.168.3.2', '192.168.3.50'],
                 'map_priority': 2,
                 'name': 'baremetal',
                 'notation': 'ip_ranges',
                 'render_type': None,
                 'restrictions': [
                     {'condition':
                      'settings:additional_components.ironic.value == false'}],
                 'use_gateway': False,
                 'vlan_start': 104},
             'name': 'baremetal',
             'vlan_start': 105}]
        self.assertRaises(
            errors.NetworkCheckError,
            checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast)
Пример #14
0
    def test_check_dns_equality(self, mocked_db):
        dns_lists = [
            (['2.3.4.5'], True),
            (['2.3.4.5', '2.3.4.5'], False),
            (['2.3.4.5', '2.3.4.99'], True),
            (['2.3.4.5', '2.3.4.99', '2.3.4.99'], False),
            (['2.3.4.5', '2.3.4.99', '2.3.4.199'], True),
        ]
        checker = NetworkCheck(self.task, {})
        for dns_setup, must_pass in dns_lists:
            checker.network_config['dns_nameservers'] = dns_setup

            if must_pass:
                self.assertNotRaises(errors.NetworkCheckError,
                                     checker.check_dns_servers_ips)
            else:
                self.assertRaises(errors.NetworkCheckError,
                                  checker.check_dns_servers_ips)
Пример #15
0
    def test_check_dns_equality(self, mocked_db):
        dns_lists = [
            (['2.3.4.5'], True),
            (['2.3.4.5', '2.3.4.5'], False),
            (['2.3.4.5', '2.3.4.99'], True),
            (['2.3.4.5', '2.3.4.99', '2.3.4.99'], False),
            (['2.3.4.5', '2.3.4.99', '2.3.4.199'], True),
        ]
        checker = NetworkCheck(self.task, {})
        for dns_setup, must_pass in dns_lists:
            checker.network_config['dns_nameservers'] = dns_setup

            if must_pass:
                self.assertNotRaises(errors.NetworkCheckError,
                                     checker.check_dns_servers_ips)
            else:
                self.assertRaises(errors.NetworkCheckError,
                                  checker.check_dns_servers_ips)
Пример #16
0
    def test_check_network_template(self, mocked_db):
        cluster = self.env.create(nodes_kwargs=[
            {
                'roles': ['controller'],
                'pending_addition': True
            },
            {
                'roles': ['compute'],
                'pending_addition': True
            },
        ])

        cluster_db = self.db.query(Cluster).get(cluster['id'])
        fake_template = self.env.read_fixtures(['network_template_80'])[0]
        default_nt = fake_template['adv_net_template']['default']

        # Left only default node group with only controller template
        fake_template['adv_net_template'] = {'default': default_nt}
        default_nt['templates_for_node_role'] = {
            'controller': default_nt['templates_for_node_role']['controller'],
            'compute': default_nt['templates_for_node_role']['compute']
        }
        fake_template.pop('pk')  # PK is not needed

        cluster_db.network_config.configuration_template = fake_template
        self.db.flush()
        checker = NetworkCheck(FakeTask(cluster_db), {})

        # Check valid template. It should not raise NetworkCheckError
        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_network_template)

        # Remove template for 'compute' network role
        default_nt['templates_for_node_role'].pop('compute')

        cluster_db.network_config.configuration_template = fake_template
        self.db.flush()
        checker = NetworkCheck(FakeTask(cluster_db), {})

        # node[1] is assigned to network role 'compute', so
        # fake_template is not valid and check should raise exception
        # NetworkCheckError
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_network_template)
    def test_network_checking_ok_with_template_on_network_vlan_match(self):
        self.find_net_by_name('management')['vlan_start'] = 111
        self.find_net_by_name('storage')['vlan_start'] = 111
        self.update_neutron_networks_success(self.cluster.id, self.nets)

        checker = NetworkCheck(mock.Mock(cluster=self.cluster), {})
        self.cluster.network_config.configuration_template = {}

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_interface_mapping)
    def test_network_checking_fails_on_network_vlan_match(self):
        self.find_net_by_name('management')['vlan_start'] = 111
        self.find_net_by_name('storage')['vlan_start'] = 111
        self.update_neutron_networks_success(self.cluster.id, self.nets)

        checker = NetworkCheck(mock.Mock(cluster=self.cluster), {})
        self.assertRaisesWithMessageIn(
            errors.NetworkCheckError, " networks use the same VLAN tags."
            " Different VLAN tags"
            " should be assigned to the networks on the same"
            " interface.", checker.check_interface_mapping)
Пример #19
0
    def test_check_network_address_spaces_intersection(self, _):
        cluster = self.env.create(
            cluster_kwargs={
                'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
            nodes_kwargs=[
                {"api": True,
                 "pending_addition": True},
            ]
        )
        self.task = FakeTask(self.db.query(Cluster).get(cluster['id']))

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '192.168.0.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]

        self.assertRaises(errors.NetworkCheckError,
                          checker.check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})

        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '192.168.1.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['fixed_networks_cidr'] = '10.20.0.0/24'
        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})

        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '10.20.0.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['fixed_networks_cidr'] = '10.20.0.0/24'
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_network_address_spaces_intersection)
Пример #20
0
    def test_check_bond_slaves_speeds(self):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True}
            ]
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])

        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.check_bond_slaves_speeds()

        self.assertEqual(checker.err_msgs, [])
        bond_if1 = network_db.NodeBondInterface()
        bond_if2 = network_db.NodeBondInterface()

        nic1 = network_db.NodeNICInterface()
        nic2 = network_db.NodeNICInterface()
        nic3 = network_db.NodeNICInterface()
        nic1.current_speed = 100
        nic2.current_speed = 10
        nic3.current_speed = None
        bond_if1.slaves = [nic1, nic2, nic3]
        bond_if2.slaves = [nic3]
        checker.cluster.nodes[0].bond_interfaces = [bond_if1, bond_if2]

        checker.check_bond_slaves_speeds()
        self.assertEqual(len(checker.err_msgs), 2)
Пример #21
0
    def test_check_untagged_intersection(self):
        cluster = self.env.create(
            nodes_kwargs=[
                {'roles': ['controller'], 'pending_addition': True}
            ]
        )
        cluster_db = self.db.query(Cluster).get(cluster['id'])
        checker = NetworkCheck(FakeTask(cluster_db), {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'vlan_start': None,
                             'meta': {'notation': 'cidr'}}]
        ng1 = NetworkGroup()
        ng1.name = 'fake3'
        ng1.id = 3
        ng2 = NetworkGroup()
        ng2.name = 'fake4'
        ng2.id = 4
        checker.cluster.nodes[0].interfaces[0].assigned_networks_list = \
            [ng1, ng2]

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_untagged_intersection)
Пример #22
0
    def test_check_network_addresses_not_match_subnet_and_broadcast(self,
                                                                    mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'gateway': '192.168.0.1',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'gateway': '192.168.0.0',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'ip_ranges': ['192.168.0.1', '192.168.0.100'],
                             'gateway': '192.168.0.0',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'ip_ranges': ['192.168.1.1', '192.168.1.100'],
                             'gateway': '192.168.0.1',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)
Пример #23
0
    def test_neutron_check_l3_addresses_not_match_subnet_and_broadcast(
            self, mocked_db, is_component_enabled):
        checker = NetworkCheck(self.task, {})
        checker.network_config['floating_ranges'] = [('192.168.0.1',
                                                      '192.168.0.255')]
        checker.network_config['internal_cidr'] = '192.168.0.0/24'
        checker.network_config['internal_gateway'] = '192.168.0.0'
        checker.network_config['baremetal_range'] = ['192.168.3.52',
                                                     '192.168.3.254']
        checker.network_config['baremetal_gateway'] = '192.168.3.53'
        checker.networks = [
            {'id': 1,
             'cidr': '192.168.0.0/24',
             'gateway': '192.168.0.1',
             'name': 'public'},
            {'cidr': '192.168.3.0/24',
             'gateway': None,
             'group_id': 2,
             'id': 11,
             'ip_ranges': [['192.168.3.1', '192.168.3.50']],
             'meta': {
                 'cidr': '192.168.3.0/24',
                 'configurable': True,
                 'ip_range': ['192.168.3.2', '192.168.3.50'],
                 'map_priority': 2,
                 'name': 'baremetal',
                 'notation': 'ip_ranges',
                 'render_type': None,
                 'restrictions': [
                     {'condition':
                      'settings:additional_components.ironic.value == false'}],
                 'use_gateway': False,
                 'vlan_start': 104},
             'name': 'baremetal',
             'vlan_start': 105}]

        is_component_enabled.return_value = True

        self.assertRaises(
            errors.NetworkCheckError,
            checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast)
        self.assertEqual(len(checker.err_msgs), 3)
Пример #24
0
    def test_neutron_check_l3_addresses_not_match_subnet_and_broadcast(
            self, mocked_db, is_component_enabled):
        checker = NetworkCheck(self.task, {})
        checker.network_config['floating_ranges'] = [('192.168.0.1',
                                                      '192.168.0.255')]
        checker.network_config['internal_cidr'] = '192.168.0.0/24'
        checker.network_config['internal_gateway'] = '192.168.0.0'
        checker.network_config['baremetal_range'] = [
            '192.168.3.52', '192.168.3.254'
        ]
        checker.network_config['baremetal_gateway'] = '192.168.3.53'
        checker.networks = [{
            'id': 1,
            'cidr': '192.168.0.0/24',
            'gateway': '192.168.0.1',
            'name': 'public'
        }]
        is_component_enabled.return_value = True

        self.assertRaises(
            errors.NetworkCheckError,
            checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast)
        self.assertEqual(len(checker.err_msgs), 3)
Пример #25
0
    def test_neutron_check_l3_addresses_not_match_subnet_and_broadcast(
            self, mocked_db, is_component_enabled):
        checker = NetworkCheck(self.task, {})
        checker.network_config['floating_ranges'] = [('192.168.0.1',
                                                      '192.168.0.255')]
        checker.network_config['internal_cidr'] = '192.168.0.0/24'
        checker.network_config['internal_gateway'] = '192.168.0.0'
        checker.network_config['baremetal_range'] = ['192.168.3.52',
                                                     '192.168.3.254']
        checker.network_config['baremetal_gateway'] = '192.168.3.53'
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'gateway': '192.168.0.1',
                             'name': 'public'}]
        is_component_enabled.return_value = True

        self.assertRaises(
            errors.NetworkCheckError,
            checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast)
        self.assertEqual(len(checker.err_msgs), 3)
Пример #26
0
    def test_check_network_address_spaces_intersection(self, _):
        cluster = self.env.create(
            cluster_kwargs={
                'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
            nodes_kwargs=[
                {"api": True,
                 "pending_addition": True},
            ]
        )
        self.task = FakeTask(self.db.query(Cluster).get(cluster['id']))

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '192.168.0.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]

        self.assertRaises(errors.NetworkCheckError,
                          checker.check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})

        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '192.168.1.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['fixed_networks_cidr'] = '10.20.0.0/24'
        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})

        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'fake1',
                             'meta': {'notation': 'cidr'}},
                            {'id': 2,
                             'cidr': '10.20.0.0/26',
                             'name': 'fake2',
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['fixed_networks_cidr'] = '10.20.0.0/24'
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_network_address_spaces_intersection)
Пример #27
0
    def test_check_configuration_nova_network(self):
        checker = NetworkCheck(self.task, {})
        checker.net_provider = 'nova-network'
        checker.neutron_check_network_address_spaces_intersection = MagicMock()
        checker.neutron_check_segmentation_ids = MagicMock()
        checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast = \
            MagicMock()

        checker.check_public_floating_ranges_intersection = MagicMock()
        checker.check_network_address_spaces_intersection = MagicMock()
        checker.check_networks_amount = MagicMock()
        checker.check_vlan_ids_range_and_intersection = MagicMock()

        checker.check_network_classes_exclude_loopback = MagicMock()
        checker.check_network_addresses_not_match_subnet_and_broadcast = \
            MagicMock()

        checker.check_configuration()

        not_called = [
            'neutron_check_network_address_spaces_intersection',
            'neutron_check_segmentation_ids',
            'neutron_check_l3_addresses_not_match_subnet_and_broadcast'
        ]
        for method in not_called:
            mocked = getattr(checker, method)
            self.assertFalse(mocked.called)

        called = [
            'check_public_floating_ranges_intersection',
            'check_network_address_spaces_intersection',
            'check_networks_amount',
            'check_vlan_ids_range_and_intersection',
            'check_network_classes_exclude_loopback',
            'check_network_addresses_not_match_subnet_and_broadcast'
        ]
        for method in called:
            mocked = getattr(checker, method)
            mocked.assert_any_call()
Пример #28
0
 def test_check_interface_mapping(self, mock_untagged, mock_bond):
     checker = NetworkCheck(self.task, {})
     checker.check_interface_mapping()
     mock_untagged.assert_called_with()
     mock_bond.assert_called_with()
Пример #29
0
    def test_check_non_shared_networks_intersection(self, _):
        checker = NetworkCheck(self.task, {})
        networks = [
            {'id': 1,
             'cidr': '192.168.0.0/25',
             'name': consts.NETWORKS.public,
             'gateway': '192.168.0.1',
             'ip_ranges': [['192.168.0.10', '192.168.0.40']],
             'meta': {'notation': consts.NETWORK_NOTATION.ip_ranges},
             'vlan_start': 111,
             'group_id': 1,
             },
            {'id': 2,
             'cidr': '192.168.0.0/25',
             'name': consts.NETWORKS.management,
             'gateway': '192.168.0.2',
             'ip_ranges': [['192.168.0.50', '192.168.0.110']],
             'meta': {'notation': consts.NETWORK_NOTATION.ip_ranges},
             'vlan_start': 222,
             'group_id': 1,
             }
        ]
        # different networks from one node group, different gateways
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, management (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # different networks from different node groups, different gateways
        networks[1]['group_id'] = 2
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, management (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, different gateways
        networks[1]['name'] = consts.NETWORKS.public
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, public (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, same gateway
        networks[1]['gateway'] = '192.168.0.1'
        checker.networks = networks
        checker.network_config['floating_ranges'] = [
            ['192.168.0.111', '192.168.0.126']
        ]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_configuration)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, same gateway,
        # intersection in ip_ranges
        networks[1]['ip_ranges'] = [['192.168.0.30', '192.168.0.60']]
        checker.networks = networks
        checker.network_config['floating_ranges'] = [
            ['192.168.0.111', '192.168.0.126']
        ]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_configuration)
Пример #30
0
    def test_check_public_floating_ranges_intersection(self, _):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': ['192.168.0.1', '192.168.0.100'],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.0.100',
                                                     '192.168.0.199']
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_public_floating_ranges_intersection)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': [('192.168.0.1', '192.168.0.254')],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.2.0/24']
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_public_floating_ranges_intersection)
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': [('192.168.0.2', '192.168.0.254')],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.2.0/24']

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_public_floating_ranges_intersection)

        checker = NetworkCheck(self.task, {})

        # 'floating_ranges' and 'ip_ranges' have to be in the same 'cidr'
        # but don't intersect.
        checker.networks = [
            {'id': 1,
             'cidr': '192.168.0.0/25',
             'name': 'public',
             'gateway': '192.168.0.1',
             'ip_ranges': [['192.168.0.10', '192.168.0.40']],
             'meta': {'notation': 'cidr'},
             'group_id': 1,
             },
            {'id': 2,
             'cidr': '192.168.0.128/25',
             'name': 'public',
             'gateway': '192.168.0.129',
             'ip_ranges': [['192.168.0.130', '192.168.0.150']],
             'meta': {'notation': 'cidr'},
             'group_id': 2,
             }
        ]

        checker.network_config['floating_ranges'] = [
            ['192.168.0.50', '192.168.0.100'],
            ['192.168.0.160', '192.168.0.200']
        ]

        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Floating address ranges 192.168.0.50-192.168.0.100, "
            "192.168.0.160-192.168.0.200 are not in the same public CIDR.",
            checker.neutron_check_network_address_spaces_intersection)
Пример #31
0
    def test_check_networks_amount(self, mocked_db):
        cluster = self.env.create(
            cluster_kwargs={
                'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
            nodes_kwargs=[
                {"api": True,
                 "pending_addition": True},
            ])
        self.task = FakeTask(self.db.query(Cluster).get(cluster['id']))

        checker = NetworkCheck(self.task, {})
        checker.network_config['net_manager'] = 'FlatDHCPManager'
        checker.network_config['fixed_networks_amount'] = 2

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['net_manager'] = 'FlatDHCPManager'
        checker.network_config['fixed_networks_amount'] = 1

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['fixed_network_size'] = 100
        checker.network_config['fixed_networks_amount'] = 3
        checker.network_config['fixed_networks_cidr'] = '192.168.10.1/24'

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['fixed_network_size'] = 10
        checker.network_config['fixed_networks_amount'] = 1
        checker.network_config['fixed_networks_cidr'] = '192.168.10.1/24'

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)
Пример #32
0
    def test_check_public_floating_ranges_intersection(self, _):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': ['192.168.0.1', '192.168.0.100'],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.0.100',
                                                     '192.168.0.199']
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_public_floating_ranges_intersection)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': [('192.168.0.1', '192.168.0.254')],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.2.0/24']
        self.assertRaises(errors.NetworkCheckError,
                          checker.check_public_floating_ranges_intersection)
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'name': 'public',
                             'gateway': '192.168.0.1',
                             'ip_ranges': [('192.168.0.2', '192.168.0.254')],
                             'meta': {'notation': 'cidr'}}]
        checker.network_config['floating_ranges'] = ['192.168.2.0/24']

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_public_floating_ranges_intersection)

        checker = NetworkCheck(self.task, {})

        # 'floating_ranges' and 'ip_ranges' have to be in the same 'cidr'
        # but don't intersect.
        checker.networks = [
            {'id': 1,
             'cidr': '192.168.0.0/25',
             'name': 'public',
             'gateway': '192.168.0.1',
             'ip_ranges': [['192.168.0.10', '192.168.0.40']],
             'meta': {'notation': 'cidr'},
             'group_id': 1,
             },
            {'id': 2,
             'cidr': '192.168.0.128/25',
             'name': 'public',
             'gateway': '192.168.0.129',
             'ip_ranges': [['192.168.0.130', '192.168.0.150']],
             'meta': {'notation': 'cidr'},
             'group_id': 2,
             }
        ]

        checker.network_config['floating_ranges'] = [
            ['192.168.0.50', '192.168.0.100'],
            ['192.168.0.160', '192.168.0.200']
        ]

        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Floating address ranges 192.168.0.50-192.168.0.100, "
            "192.168.0.160-192.168.0.200 are not in the same public CIDR.",
            checker.neutron_check_network_address_spaces_intersection)
Пример #33
0
    def test_check_configuration_nova_network(self):
        checker = NetworkCheck(self.task, {})
        checker.net_provider = 'nova-network'
        checker.neutron_check_network_address_spaces_intersection = MagicMock()
        checker.neutron_check_segmentation_ids = MagicMock()
        checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast = \
            MagicMock()

        checker.check_public_floating_ranges_intersection = MagicMock()
        checker.check_network_address_spaces_intersection = MagicMock()
        checker.check_networks_amount = MagicMock()
        checker.check_vlan_ids_range_and_intersection = MagicMock()

        checker.check_network_classes_exclude_loopback = MagicMock()
        checker.check_network_addresses_not_match_subnet_and_broadcast = \
            MagicMock()

        checker.check_configuration()

        not_called = [
            'neutron_check_network_address_spaces_intersection',
            'neutron_check_segmentation_ids',
            'neutron_check_l3_addresses_not_match_subnet_and_broadcast'
        ]
        for method in not_called:
            mocked = getattr(checker, method)
            self.assertFalse(mocked.called)

        called = [
            'check_public_floating_ranges_intersection',
            'check_network_address_spaces_intersection',
            'check_networks_amount',
            'check_vlan_ids_range_and_intersection',
            'check_network_classes_exclude_loopback',
            'check_network_addresses_not_match_subnet_and_broadcast'
        ]
        for method in called:
            mocked = getattr(checker, method)
            mocked.assert_any_call()
Пример #34
0
    def test_check_non_shared_networks_intersection(self, _):
        checker = NetworkCheck(self.task, {})
        networks = [
            {'id': 1,
             'cidr': '192.168.0.0/25',
             'name': consts.NETWORKS.public,
             'gateway': '192.168.0.1',
             'ip_ranges': [['192.168.0.10', '192.168.0.40']],
             'meta': {'notation': consts.NETWORK_NOTATION.ip_ranges},
             'vlan_start': 111,
             'group_id': 1,
             },
            {'id': 2,
             'cidr': '192.168.0.0/25',
             'name': consts.NETWORKS.management,
             'gateway': '192.168.0.2',
             'ip_ranges': [['192.168.0.50', '192.168.0.110']],
             'meta': {'notation': consts.NETWORK_NOTATION.ip_ranges},
             'vlan_start': 222,
             'group_id': 1,
             }
        ]
        # different networks from one node group, different gateways
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, management (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # different networks from different node groups, different gateways
        networks[1]['group_id'] = 2
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, management (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, different gateways
        networks[1]['name'] = consts.NETWORKS.public
        checker.networks = networks
        self.assertRaisesWithMessage(
            errors.NetworkCheckError,
            "Address space intersection between networks:\n"
            "public, public (Network IDs: 1, 2)",
            checker.neutron_check_network_address_spaces_intersection)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, same gateway
        networks[1]['gateway'] = '192.168.0.1'
        checker.networks = networks
        checker.network_config['floating_ranges'] = [
            ['192.168.0.111', '192.168.0.126']
        ]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_configuration)

        checker = NetworkCheck(self.task, {})
        # same networks from different node groups, same gateway,
        # intersection in ip_ranges
        networks[1]['ip_ranges'] = [['192.168.0.30', '192.168.0.60']]
        checker.networks = networks
        checker.network_config['floating_ranges'] = [
            ['192.168.0.111', '192.168.0.126']
        ]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_configuration)
Пример #35
0
    def test_check_networks_amount(self, mocked_db):
        cluster = self.env.create(
            cluster_kwargs={
                'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
            nodes_kwargs=[
                {"api": True,
                 "pending_addition": True},
            ])
        self.task = FakeTask(self.db.query(Cluster).get(cluster['id']))

        checker = NetworkCheck(self.task, {})
        checker.network_config['net_manager'] = 'FlatDHCPManager'
        checker.network_config['fixed_networks_amount'] = 2

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['net_manager'] = 'FlatDHCPManager'
        checker.network_config['fixed_networks_amount'] = 1

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['fixed_network_size'] = 100
        checker.network_config['fixed_networks_amount'] = 3
        checker.network_config['fixed_networks_cidr'] = '192.168.10.1/24'

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)

        checker = NetworkCheck(self.task, {})
        checker.network_config['fixed_network_size'] = 10
        checker.network_config['fixed_networks_amount'] = 1
        checker.network_config['fixed_networks_cidr'] = '192.168.10.1/24'

        self.assertNotRaises(errors.NetworkCheckError,
                             checker.check_networks_amount)
Пример #36
0
    def test_check_network_addresses_not_match_subnet_and_broadcast(self,
                                                                    mocked_db):
        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'gateway': '192.168.0.1',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'gateway': '192.168.0.0',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'ip_ranges': ['192.168.0.1', '192.168.0.100'],
                             'gateway': '192.168.0.0',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)

        checker = NetworkCheck(self.task, {})
        checker.networks = [{'id': 1,
                             'cidr': '192.168.0.0/24',
                             'ip_ranges': ['192.168.1.1', '192.168.1.100'],
                             'gateway': '192.168.0.1',
                             'name': 'fake1',
                             'meta': {'notation': 'ip_ranges'}}]
        self.assertNotRaises(
            errors.NetworkCheckError,
            checker.check_network_addresses_not_match_subnet_and_broadcast)
Пример #37
0
 def test_check_network_classes_exclude_loopback(self):
     checker = NetworkCheck(self.task, {})
     checker.networks = [{'cidr': '192.168.0.0/24'}]
     self.assertNotRaises(errors.NetworkCheckError,
                          checker.check_network_classes_exclude_loopback)
Пример #38
0
 def test_check_network_classes_exclude_loopback(self):
     checker = NetworkCheck(self.task, {})
     checker.networks = [{'cidr': '192.168.0.0/24'}]
     self.assertNotRaises(errors.NetworkCheckError,
                          checker.check_network_classes_exclude_loopback)
Пример #39
0
 def test_check_interface_mapping(self, mock_untagged, mock_bond):
     checker = NetworkCheck(self.task, {})
     checker.check_interface_mapping()
     mock_untagged.assert_called_with()
     mock_bond.assert_called_with()