summaryrefslogtreecommitdiffstats
path: root/tests/unit/post/test_neutron.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/post/test_neutron.py')
-rw-r--r--tests/unit/post/test_neutron.py371
1 files changed, 371 insertions, 0 deletions
diff --git a/tests/unit/post/test_neutron.py b/tests/unit/post/test_neutron.py
new file mode 100644
index 00000000..94ec3a75
--- /dev/null
+++ b/tests/unit/post/test_neutron.py
@@ -0,0 +1,371 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corp and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import os
+
+import pytest
+import mock
+
+from deploy.post import neutron
+from deploy.post.neutron import Neutron
+
+
+@pytest.fixture(scope="module")
+def openrc_conf_file_dir(data_root):
+ return os.path.join(data_root, 'openrc_conf')
+
+
+def test_create_Neutron_instance(openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ neutron = Neutron(openrc=openrc_file)
+ assert neutron.openrc == openrc_file
+
+
+@pytest.mark.parametrize('ret_get_network_by_name', [
+ (None),
+ ({'name': 'network_test2'})])
+@mock.patch.object(neutron.Neutron, 'get_network_by_name')
+@mock.patch.object(neutron.Neutron, '_create_network')
+def test_create_network_in_Neutron(mock__create_network, mock_get_network_by_name,
+ ret_get_network_by_name, openrc_conf_file_dir):
+ net_name = 'network_test1'
+ net_body = {'name': 'network_test1'}
+ net_id = 0xabcd
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ mock_get_network_by_name.return_value = ret_get_network_by_name
+ mock__create_network.return_value = net_id
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.create_network(net_name, net_body)
+ if ret_get_network_by_name is None:
+ assert ret == net_id
+ mock__create_network.asset_called_once_with(net_body)
+ else:
+ assert ret is None
+ mock__create_network.assert_not_called()
+
+
+@pytest.mark.parametrize('ret_get_subnet_by_name', [
+ (None),
+ ({'name': 'subnet_test2'})])
+@mock.patch.object(neutron.Neutron, 'get_subnet_by_name')
+@mock.patch.object(neutron.Neutron, '_create_subnet')
+def test_create_subnet_in_Neutron_no_exist(mock__create_subnet, mock_get_subnet_by_name,
+ ret_get_subnet_by_name, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ subnet_body = {'name': 'subnet_test1'}
+ subnet_id = 0xabcd
+ mock_get_subnet_by_name.return_value = ret_get_subnet_by_name
+ mock__create_subnet.return_value = subnet_id
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.create_subnet(subnet_body)
+ if ret_get_subnet_by_name is None:
+ assert ret == subnet_id
+ mock__create_subnet.asset_called_once_with(subnet_body)
+ else:
+ assert ret is None
+ mock__create_subnet.assert_not_called()
+
+
+@mock.patch('neutronclient.v2_0.client.Client.list_networks')
+def test_list_networks_in_Neutron(mock_list_networks, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ network_list = [{'name': 'network_test1'}]
+ mock_list_networks.return_value = {'networks': network_list}
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.list_networks()
+ assert ret == network_list
+ mock_list_networks.assert_called_once()
+
+
+@mock.patch('neutronclient.v2_0.client.Client.list_subnets')
+def test_list_subnets_in_Neutron(mock_list_subnets, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ subnet_list = [{'name': 'subnet_test1'}]
+ mock_list_subnets.return_value = {'subnets': subnet_list}
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.list_subnets()
+ assert ret == subnet_list
+ mock_list_subnets.assert_called_once()
+
+
+@mock.patch.object(neutron.Neutron, 'list_networks')
+def test_get_network_by_name_in_Neutron(mock_list_networks, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ network_list = [{'name': 'network_test1'}, {'name': 'network_test2'}]
+ network_name = 'network_test1'
+ mock_list_networks.return_value = network_list
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.get_network_by_name(network_name)
+ assert ret == {'name': 'network_test1'}
+ mock_list_networks.assert_called_once()
+
+
+@pytest.mark.parametrize('body, ret_list_subnets, expeced', [
+ (
+ {
+ 'subnets': [
+ {
+ 'name': 'ext_subnet',
+ 'ip_version': 4,
+ 'network_id': 0x1234
+ }
+ ]
+ },
+ [
+ {'name': 'ext_subnet', 'network_id': 0x1234},
+ {'name': 'inter_subnet', 'network_id': 0x2345}
+ ],
+ {'name': 'ext_subnet', 'network_id': 0x1234}
+ ),
+ (
+ {
+ 'subnets': [
+ {
+ 'name': 'ext_subnet',
+ 'ip_version': 4,
+ 'network_id': 0x1234
+ }
+ ]
+ },
+ [
+ {'name': 'admin_subnet', 'network_id': 0x1234},
+ {'name': 'inter_subnet', 'network_id': 0x2345}
+ ], None
+ )])
+@mock.patch.object(neutron.Neutron, 'list_subnets')
+def test_get_subnet_by_name_in_Neutron(mock_list_subnets, body,
+ ret_list_subnets, expeced,
+ openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ mock_list_subnets.return_value = ret_list_subnets
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.get_subnet_by_name(body)
+ assert ret == expeced
+ mock_list_subnets.assert_called_once()
+
+
+@mock.patch('neutronclient.v2_0.client.Client.create_network')
+def test__create_network_in_Neutron_no_exist(mock_create_network, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ nid = 0x1234
+ name = 'ext'
+ body = {
+ 'network': {
+ 'name': 'ext',
+ 'admin_state_up': True,
+ 'shared': False,
+ 'provider:network_type': 'flat',
+ 'provider:physical_network': 'physnet1',
+ 'router:external': True
+ }
+ }
+ ret_net_info = {
+ 'network':
+ {
+ 'id': 0x1234
+ }
+ }
+ mock_create_network.return_value = ret_net_info
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron._create_network(name, body)
+ assert ret == nid
+ mock_create_network.assert_called_once_with(body=body)
+
+
+@mock.patch('neutronclient.v2_0.client.Client.create_subnet')
+def test__create_subnet_in_Neutron_no_exist(mock_create_subnet, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ snid = 0xabcd
+ body = {
+ 'subnets': {
+ 'name': 'admin_external_subnet',
+ 'cidr': '172.70.0.0/24',
+ 'gateway_ip': '172.70.0.1',
+ 'allocation_pools': [{'start': '172.70.0.2', 'end': '172.70.0.100'}],
+ 'enable_dhcp': False
+ }
+ }
+ ret_subnet_info = {
+ 'subnets': [
+ {
+ 'name': 'admin_external_subnet',
+ 'cidr': '172.70.0.0/24',
+ 'ip_version': 4,
+ 'network_id': 0x1234,
+ 'gateway_ip': '172.70.0.1',
+ 'allocation_pools': [{'start': '172.70.0.2', 'end': '172.70.0.100'}],
+ 'enable_dhcp': False,
+ 'id': 0xabcd
+ }
+ ]
+ }
+ mock_create_subnet.return_value = ret_subnet_info
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron._create_subnet(body)
+ assert ret == snid
+ mock_create_subnet.assert_called_once_with(body)
+
+
+@mock.patch('neutronclient.v2_0.client.Client.list_security_groups')
+def test__list_security_groups_in_Neutron(mock_list_security_groups, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ ret_security_groups = {
+ 'security_groups':
+ [
+ {
+ 'name': 'default'
+ }
+ ]
+ }
+ security_groups_list = [
+ {
+ 'name': 'default'
+ }
+ ]
+ mock_list_security_groups.return_value = ret_security_groups
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron._list_security_groups()
+ assert ret == security_groups_list
+ mock_list_security_groups.assert_called_once_with()
+
+
+@mock.patch.object(neutron.Neutron, '_list_security_groups')
+def test_get_security_group_by_name_in_Neutron(mock__list_security_groups, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ security_group_1 = {'name': 'default', 'security_group_id': 0x1234}
+ security_group_2 = {'name': 'security_1', 'security_group_id': 0x2345}
+ security_group_list = [security_group_1, security_group_2]
+ mock__list_security_groups.return_value = security_group_list
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron.get_security_group_by_name(security_group_1['name'])
+ assert ret == security_group_1
+ mock__list_security_groups.assert_called_once_with()
+
+
+@pytest.mark.parametrize('security_group, body, expected', [
+ (
+ {
+ 'security_group_rules':
+ [
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'tcp',
+ 'port_range_min': 22,
+ 'port_range_max': 22,
+ 'remote_ip_prefix': '0.0.0.0/0',
+ },
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'icmp',
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ ],
+ 'id': 0x1234
+ },
+ {
+ 'security_group_rule':
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'tcp',
+ 'port_range_min': 22,
+ 'port_range_max': 22,
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ }, True
+ ),
+ (
+ {
+ 'security_group_rules':
+ [
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'icmp',
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ ],
+ 'id': 0x1234
+ },
+ {
+ 'security_group_rule':
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'tcp',
+ 'port_range_min': 22,
+ 'port_range_max': 22,
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ }, False
+ )])
+def test__check_security_group_rule_conflict(security_group, body,
+ expected, openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ neutron = Neutron(openrc=openrc_file)
+ ret = neutron._check_security_group_rule_conflict(security_group, body)
+ assert ret == expected
+
+
+@pytest.mark.parametrize('ret__check_security_group_rule_conflict', [
+ (True),
+ (False)])
+@mock.patch('neutronclient.v2_0.client.Client.create_security_group_rule')
+@mock.patch.object(neutron.Neutron, '_check_security_group_rule_conflict')
+def test_create_security_group_rule_in_Neutron(mock__check_security_group_rule_conflict,
+ mock_create_security_group_rule,
+ ret__check_security_group_rule_conflict,
+ openrc_conf_file_dir):
+ openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh')
+ security_group = {
+ 'security_group_rules':
+ [
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'tcp',
+ 'port_range_min': 22,
+ 'port_range_max': 22,
+ 'remote_ip_prefix': '0.0.0.0/0',
+ },
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'icmp',
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ ],
+ 'id': 0x1234
+ }
+ body = {
+ 'security_group_rule':
+ {
+ 'direction': 'ingress',
+ 'ethertype': 'IPv4',
+ 'protocol': 'tcp',
+ 'port_range_min': 22,
+ 'port_range_max': 22,
+ 'remote_ip_prefix': '0.0.0.0/0',
+ }
+ }
+ rule = {
+ 'security_group_rule':
+ {
+ 'id': 0x1234
+ }
+ }
+ mock__check_security_group_rule_conflict.return_value = ret__check_security_group_rule_conflict
+ mock_create_security_group_rule.return_value = rule
+ neutron = Neutron(openrc=openrc_file)
+ neutron.create_security_group_rule(security_group, body)
+ if ret__check_security_group_rule_conflict is False:
+ mock_create_security_group_rule.assert_called_once_with(body=body)
+ else:
+ mock_create_security_group_rule.assert_not_called()