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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)