octavia 12.0.0.0rc2__py3-none-any.whl → 13.0.0.0rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
- octavia/amphorae/backends/agent/api_server/plug.py +21 -7
- octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
- octavia/amphorae/backends/agent/api_server/util.py +21 -0
- octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
- octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
- octavia/amphorae/backends/utils/interface.py +14 -6
- octavia/amphorae/backends/utils/interface_file.py +6 -3
- octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
- octavia/amphorae/drivers/driver_base.py +1 -2
- octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
- octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
- octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
- octavia/amphorae/drivers/noop_driver/driver.py +3 -5
- octavia/api/common/pagination.py +4 -4
- octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
- octavia/api/drivers/driver_agent/driver_get.py +22 -14
- octavia/api/drivers/driver_agent/driver_updater.py +8 -4
- octavia/api/drivers/utils.py +4 -2
- octavia/api/healthcheck/healthcheck_plugins.py +4 -2
- octavia/api/root_controller.py +4 -1
- octavia/api/v2/controllers/amphora.py +35 -38
- octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
- octavia/api/v2/controllers/availability_zones.py +22 -18
- octavia/api/v2/controllers/flavor_profiles.py +37 -28
- octavia/api/v2/controllers/flavors.py +19 -15
- octavia/api/v2/controllers/health_monitor.py +44 -33
- octavia/api/v2/controllers/l7policy.py +52 -40
- octavia/api/v2/controllers/l7rule.py +68 -55
- octavia/api/v2/controllers/listener.py +88 -61
- octavia/api/v2/controllers/load_balancer.py +52 -34
- octavia/api/v2/controllers/member.py +63 -52
- octavia/api/v2/controllers/pool.py +55 -42
- octavia/api/v2/controllers/quotas.py +5 -3
- octavia/api/v2/types/listener.py +15 -0
- octavia/cmd/octavia_worker.py +0 -3
- octavia/cmd/status.py +1 -4
- octavia/common/clients.py +25 -45
- octavia/common/config.py +64 -22
- octavia/common/constants.py +3 -2
- octavia/common/data_models.py +7 -1
- octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
- octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
- octavia/common/jinja/lvs/jinja_cfg.py +4 -2
- octavia/common/keystone.py +58 -5
- octavia/common/validate.py +35 -0
- octavia/compute/drivers/noop_driver/driver.py +6 -0
- octavia/controller/healthmanager/health_manager.py +3 -6
- octavia/controller/housekeeping/house_keeping.py +36 -37
- octavia/controller/worker/amphora_rate_limit.py +5 -4
- octavia/controller/worker/task_utils.py +57 -41
- octavia/controller/worker/v2/controller_worker.py +160 -103
- octavia/controller/worker/v2/flows/listener_flows.py +3 -0
- octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
- octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
- octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
- octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
- octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
- octavia/db/api.py +26 -23
- octavia/db/base_models.py +2 -2
- octavia/db/healthcheck.py +2 -1
- octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
- octavia/db/models.py +12 -2
- octavia/db/prepare.py +2 -0
- octavia/db/repositories.py +462 -482
- octavia/hacking/checks.py +1 -1
- octavia/network/base.py +0 -14
- octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
- octavia/network/drivers/neutron/base.py +65 -77
- octavia/network/drivers/neutron/utils.py +69 -85
- octavia/network/drivers/noop_driver/driver.py +0 -7
- octavia/statistics/drivers/update_db.py +10 -10
- octavia/tests/common/constants.py +91 -84
- octavia/tests/common/sample_data_models.py +13 -1
- octavia/tests/fixtures.py +32 -0
- octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
- octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
- octavia/tests/functional/api/test_root_controller.py +3 -28
- octavia/tests/functional/api/v2/base.py +5 -3
- octavia/tests/functional/api/v2/test_amphora.py +18 -5
- octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
- octavia/tests/functional/api/v2/test_listener.py +51 -19
- octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
- octavia/tests/functional/db/base.py +31 -16
- octavia/tests/functional/db/test_models.py +27 -28
- octavia/tests/functional/db/test_repositories.py +407 -50
- octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
- octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
- octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
- octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
- octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
- octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
- octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
- octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
- octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
- octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
- octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
- octavia/tests/unit/base.py +6 -0
- octavia/tests/unit/cmd/test_interface.py +2 -2
- octavia/tests/unit/cmd/test_status.py +2 -2
- octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
- octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
- octavia/tests/unit/common/test_clients.py +0 -39
- octavia/tests/unit/common/test_keystone.py +54 -0
- octavia/tests/unit/common/test_validate.py +67 -0
- octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
- octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
- octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
- octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
- octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
- octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
- octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
- octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
- octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
- octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
- octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
- octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
- octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
- octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
- octavia/controller/queue/v1/__init__.py +0 -11
- octavia/controller/queue/v1/consumer.py +0 -64
- octavia/controller/queue/v1/endpoints.py +0 -160
- octavia/controller/worker/v1/__init__.py +0 -11
- octavia/controller/worker/v1/controller_worker.py +0 -1157
- octavia/controller/worker/v1/flows/__init__.py +0 -11
- octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
- octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
- octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
- octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
- octavia/controller/worker/v1/flows/listener_flows.py +0 -128
- octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
- octavia/controller/worker/v1/flows/member_flows.py +0 -230
- octavia/controller/worker/v1/flows/pool_flows.py +0 -127
- octavia/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
- octavia/controller/worker/v1/tasks/cert_task.py +0 -51
- octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
- octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
- octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
- octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
- octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
- octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
- octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
- octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
- octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
- octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
- octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
- octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
- octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
- octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
- octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
- octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
- octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
- octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
- octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
- octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
- octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
- octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
- octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
- octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
- octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -13,11 +13,9 @@
|
|
13
13
|
# under the License.
|
14
14
|
from unittest import mock
|
15
15
|
|
16
|
-
from neutronclient.common import exceptions as neutron_client_exceptions
|
17
16
|
from oslo_config import cfg
|
18
17
|
from oslo_config import fixture as oslo_fixture
|
19
18
|
|
20
|
-
from octavia.common import clients
|
21
19
|
from octavia.common import data_models
|
22
20
|
from octavia.network import base as network_base
|
23
21
|
from octavia.network import data_models as network_models
|
@@ -26,6 +24,12 @@ from octavia.network.drivers.neutron import utils
|
|
26
24
|
from octavia.tests.common import constants as t_constants
|
27
25
|
from octavia.tests.common import data_model_helpers as dmh
|
28
26
|
from octavia.tests.unit import base
|
27
|
+
import openstack.exceptions as os_exceptions
|
28
|
+
from openstack.network.v2.network import Network
|
29
|
+
from openstack.network.v2.network_ip_availability import NetworkIPAvailability
|
30
|
+
from openstack.network.v2.port import Port
|
31
|
+
from openstack.network.v2.qos_policy import QoSPolicy
|
32
|
+
from openstack.network.v2.subnet import Subnet
|
29
33
|
|
30
34
|
|
31
35
|
class TestBaseNeutronNetworkDriver(base.TestCase):
|
@@ -42,95 +46,88 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
42
46
|
|
43
47
|
def setUp(self):
|
44
48
|
super().setUp()
|
45
|
-
with mock.patch('octavia.common.clients.
|
46
|
-
autospec=True) as
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
}
|
49
|
+
with mock.patch('octavia.common.clients.openstack.connection.'
|
50
|
+
'Connection', autospec=True) as os_connection:
|
51
|
+
self._original_find_extension = (
|
52
|
+
os_connection.return_value.network.find_extension)
|
53
|
+
os_connection.return_value.network.find_extension = (
|
54
|
+
lambda x: 'alias' if x == neutron_base.SEC_GRP_EXT_ALIAS else
|
55
|
+
None)
|
53
56
|
self.k_session = mock.patch(
|
54
57
|
'keystoneauth1.session.Session').start()
|
55
58
|
self.driver = self._instantiate_partial_abc(
|
56
59
|
neutron_base.BaseNeutronDriver)
|
57
60
|
|
58
61
|
def test__check_extension_enabled(self):
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
[mock.call('TEST1'), mock.call('TEST2')])
|
62
|
+
with mock.patch.object(self.driver.network_proxy, "find_extension",
|
63
|
+
side_effect=[True, False]) as show_extension:
|
64
|
+
self.assertTrue(self.driver._check_extension_enabled('TEST1'))
|
65
|
+
self.assertFalse(self.driver._check_extension_enabled('TEST2'))
|
66
|
+
show_extension.assert_has_calls(
|
67
|
+
[mock.call('TEST1'), mock.call('TEST2')])
|
66
68
|
|
67
69
|
def test__check_extension_enabled_cached(self):
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
with mock.patch.object(self.driver.network_proxy, "find_extension",
|
71
|
+
) as show_extension:
|
72
|
+
self.driver._check_extension_cache = {'TEST1': True,
|
73
|
+
'TEST2': False}
|
74
|
+
self.assertTrue(self.driver._check_extension_enabled('TEST1'))
|
75
|
+
self.assertFalse(self.driver._check_extension_enabled('TEST2'))
|
76
|
+
self.assertNotIn(mock.call('TEST1'), show_extension.mock_calls)
|
77
|
+
self.assertNotIn(mock.call('TEST2'), show_extension.mock_calls)
|
75
78
|
|
76
79
|
def test__add_allowed_address_pair_to_port(self):
|
77
80
|
self.driver._add_allowed_address_pairs_to_port(
|
78
81
|
t_constants.MOCK_PORT_ID, [t_constants.MOCK_IP_ADDRESS])
|
79
82
|
expected_aap_dict = {
|
80
|
-
'
|
81
|
-
'
|
82
|
-
|
83
|
-
|
84
|
-
mock.call(t_constants.MOCK_PORT_ID, expected_aap_dict)])
|
83
|
+
'allowed_address_pairs': [
|
84
|
+
{'ip_address': t_constants.MOCK_IP_ADDRESS}]}
|
85
|
+
self.driver.network_proxy.update_port.assert_has_calls([
|
86
|
+
mock.call(t_constants.MOCK_PORT_ID, **expected_aap_dict)])
|
85
87
|
|
86
88
|
def test__add_security_group_to_port(self):
|
87
89
|
self.driver._add_security_group_to_port(
|
88
90
|
t_constants.MOCK_SECURITY_GROUP_ID, t_constants.MOCK_PORT_ID)
|
89
91
|
expected_sg_dict = {
|
90
|
-
'
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
mock.call(t_constants.MOCK_PORT_ID, expected_sg_dict)])
|
92
|
+
'security_groups': [
|
93
|
+
t_constants.MOCK_SECURITY_GROUP_ID]}
|
94
|
+
self.driver.network_proxy.update_port.assert_has_calls([
|
95
|
+
mock.call(t_constants.MOCK_PORT_ID, **expected_sg_dict)])
|
95
96
|
|
96
97
|
def test__add_security_group_to_port_with_port_not_found(self):
|
97
|
-
self.driver.
|
98
|
-
|
98
|
+
self.driver.network_proxy.update_port.side_effect = (
|
99
|
+
os_exceptions.ResourceNotFound)
|
99
100
|
self.assertRaises(
|
100
101
|
network_base.PortNotFound,
|
101
102
|
self.driver._add_security_group_to_port,
|
102
103
|
t_constants.MOCK_SECURITY_GROUP_ID, t_constants.MOCK_PORT_ID)
|
103
104
|
|
104
105
|
def test__add_security_group_to_port_with_other_exception(self):
|
105
|
-
self.driver.
|
106
|
+
self.driver.network_proxy.update_port.side_effect = IOError
|
106
107
|
self.assertRaises(
|
107
108
|
network_base.NetworkException,
|
108
109
|
self.driver._add_security_group_to_port,
|
109
110
|
t_constants.MOCK_SECURITY_GROUP_ID, t_constants.MOCK_PORT_ID)
|
110
111
|
|
111
112
|
def test__get_ports_by_security_group(self):
|
112
|
-
self.driver.
|
113
|
-
|
114
|
-
|
115
|
-
t_constants.MOCK_NEUTRON_PORT2['port']]
|
116
|
-
}
|
113
|
+
self.driver.network_proxy.ports.return_value = [
|
114
|
+
t_constants.MOCK_NEUTRON_PORT,
|
115
|
+
t_constants.MOCK_NEUTRON_PORT2]
|
117
116
|
ports = self.driver._get_ports_by_security_group(
|
118
117
|
t_constants.MOCK_SECURITY_GROUP_ID)
|
119
118
|
self.assertEqual(1, len(ports))
|
120
|
-
self.assertIn(t_constants.MOCK_NEUTRON_PORT
|
119
|
+
self.assertIn(t_constants.MOCK_NEUTRON_PORT, ports)
|
121
120
|
|
122
121
|
def test__create_security_group(self):
|
123
122
|
sg_return = self.driver._create_security_group(
|
124
123
|
t_constants.MOCK_SECURITY_GROUP_NAME)
|
125
124
|
expected_sec_grp_dict = {
|
126
|
-
'
|
127
|
-
|
128
|
-
|
129
|
-
mock.call(expected_sec_grp_dict)])
|
125
|
+
'name': t_constants.MOCK_SECURITY_GROUP_NAME}
|
126
|
+
self.driver.network_proxy.create_security_group.assert_has_calls([
|
127
|
+
mock.call(**expected_sec_grp_dict)])
|
130
128
|
self.assertEqual(
|
131
129
|
sg_return,
|
132
|
-
self.driver.
|
133
|
-
'security_group'])
|
130
|
+
self.driver.network_proxy.create_security_group())
|
134
131
|
|
135
132
|
def test__create_security_group_rule(self):
|
136
133
|
self.driver._create_security_group_rule(
|
@@ -142,22 +139,21 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
142
139
|
ethertype=5,
|
143
140
|
cidr="10.0.0.0/24")
|
144
141
|
expected_sec_grp_rule_dict = {
|
145
|
-
'
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
[mock.call(expected_sec_grp_rule_dict)])
|
142
|
+
'security_group_id': t_constants.MOCK_SECURITY_GROUP_ID,
|
143
|
+
'direction': 1,
|
144
|
+
'protocol': 2,
|
145
|
+
'port_range_min': 3,
|
146
|
+
'port_range_max': 4,
|
147
|
+
'ethertype': 5,
|
148
|
+
'remote_ip_prefix': '10.0.0.0/24'}
|
149
|
+
self.driver.network_proxy.create_security_group_rule.assert_has_calls(
|
150
|
+
[mock.call(**expected_sec_grp_rule_dict)])
|
155
151
|
|
156
152
|
def test__port_to_vip(self):
|
157
153
|
lb = dmh.generate_load_balancer_tree()
|
158
154
|
lb.vip.subnet_id = t_constants.MOCK_SUBNET_ID
|
159
155
|
lb.vip.ip_address = t_constants.MOCK_IP_ADDRESS
|
160
|
-
port = utils.
|
156
|
+
port = utils.convert_port_to_model(t_constants.MOCK_NEUTRON_PORT)
|
161
157
|
vip, additional_vips = self.driver._port_to_vip(port, lb)
|
162
158
|
self.assertIsInstance(vip, data_models.Vip)
|
163
159
|
self.assertIsInstance(additional_vips, list)
|
@@ -179,19 +175,19 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
179
175
|
self.assertIn('10.0.0.1', ips)
|
180
176
|
|
181
177
|
def test_get_plugged_networks(self):
|
182
|
-
list_ports = self.driver.
|
178
|
+
list_ports = self.driver.network_proxy.ports
|
183
179
|
list_ports.side_effect = TypeError
|
184
180
|
o_ifaces = self.driver.get_plugged_networks(
|
185
181
|
t_constants.MOCK_DEVICE_ID)
|
186
182
|
self.assertEqual(0, len(o_ifaces))
|
187
183
|
list_ports.side_effect = None
|
188
184
|
list_ports.reset_mock()
|
189
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
185
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
190
186
|
port2 = {
|
191
187
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
192
|
-
|
188
|
+
[{'ip_address': '10.0.0.2'}]
|
193
189
|
}
|
194
|
-
list_ports.return_value =
|
190
|
+
list_ports.return_value = [port1, port2]
|
195
191
|
plugged_networks = self.driver.get_plugged_networks(
|
196
192
|
t_constants.MOCK_DEVICE_ID)
|
197
193
|
for pn in plugged_networks:
|
@@ -207,10 +203,10 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
207
203
|
config = self.useFixture(oslo_fixture.Config(cfg.CONF))
|
208
204
|
config.config(group="networking", allow_invisible_resource_usage=True)
|
209
205
|
|
210
|
-
show_network = self.driver.
|
211
|
-
show_network.return_value = {
|
206
|
+
show_network = self.driver.network_proxy.get_network
|
207
|
+
show_network.return_value = Network(**{
|
212
208
|
'id': t_constants.MOCK_NETWORK_ID,
|
213
|
-
'subnets': [t_constants.MOCK_SUBNET_ID]}
|
209
|
+
'subnets': [t_constants.MOCK_SUBNET_ID]})
|
214
210
|
network = self.driver.get_network(t_constants.MOCK_NETWORK_ID)
|
215
211
|
self.assertIsInstance(network, network_models.Network)
|
216
212
|
self.assertEqual(t_constants.MOCK_NETWORK_ID, network.id)
|
@@ -219,10 +215,10 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
219
215
|
|
220
216
|
@mock.patch("octavia.common.clients.NeutronAuth.get_user_neutron_client")
|
221
217
|
def test_get_user_network(self, neutron_client_mock):
|
222
|
-
show_network = neutron_client_mock.return_value.
|
223
|
-
show_network.return_value = {
|
218
|
+
show_network = neutron_client_mock.return_value.get_network
|
219
|
+
show_network.return_value = Network(**{
|
224
220
|
'id': t_constants.MOCK_NETWORK_ID,
|
225
|
-
'subnets': [t_constants.MOCK_SUBNET_ID]}
|
221
|
+
'subnets': [t_constants.MOCK_SUBNET_ID]})
|
226
222
|
|
227
223
|
network = self.driver.get_network(t_constants.MOCK_NETWORK_ID,
|
228
224
|
context=mock.ANY)
|
@@ -236,11 +232,11 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
236
232
|
config = self.useFixture(oslo_fixture.Config(cfg.CONF))
|
237
233
|
config.config(group="networking", allow_invisible_resource_usage=True)
|
238
234
|
|
239
|
-
show_subnet = self.driver.
|
240
|
-
show_subnet.return_value = {
|
235
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
236
|
+
show_subnet.return_value = Subnet(**{
|
241
237
|
'id': t_constants.MOCK_SUBNET_ID,
|
242
238
|
'gateway_ip': t_constants.MOCK_IP_ADDRESS,
|
243
|
-
'cidr': t_constants.MOCK_CIDR}
|
239
|
+
'cidr': t_constants.MOCK_CIDR})
|
244
240
|
subnet = self.driver.get_subnet(t_constants.MOCK_SUBNET_ID)
|
245
241
|
self.assertIsInstance(subnet, network_models.Subnet)
|
246
242
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, subnet.id)
|
@@ -249,11 +245,11 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
249
245
|
|
250
246
|
@mock.patch("octavia.common.clients.NeutronAuth.get_user_neutron_client")
|
251
247
|
def test_get_user_subnet(self, neutron_client_mock):
|
252
|
-
show_subnet = neutron_client_mock.return_value.
|
253
|
-
show_subnet.return_value = {
|
248
|
+
show_subnet = neutron_client_mock.return_value.get_subnet
|
249
|
+
show_subnet.return_value = Subnet(**{
|
254
250
|
'id': t_constants.MOCK_SUBNET_ID,
|
255
251
|
'gateway_ip': t_constants.MOCK_IP_ADDRESS,
|
256
|
-
'cidr': t_constants.MOCK_CIDR}
|
252
|
+
'cidr': t_constants.MOCK_CIDR})
|
257
253
|
|
258
254
|
subnet = self.driver.get_subnet(t_constants.MOCK_SUBNET_ID,
|
259
255
|
context=mock.ANY)
|
@@ -267,15 +263,15 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
267
263
|
config = self.useFixture(oslo_fixture.Config(cfg.CONF))
|
268
264
|
config.config(group="networking", allow_invisible_resource_usage=True)
|
269
265
|
|
270
|
-
show_port = self.driver.
|
271
|
-
show_port.return_value = {
|
266
|
+
show_port = self.driver.network_proxy.get_port
|
267
|
+
show_port.return_value = Port(**{
|
272
268
|
'id': t_constants.MOCK_PORT_ID,
|
273
269
|
'mac_address': t_constants.MOCK_MAC_ADDR,
|
274
270
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
275
271
|
'fixed_ips': [{
|
276
272
|
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
277
273
|
'ip_address': t_constants.MOCK_IP_ADDRESS
|
278
|
-
}]}
|
274
|
+
}]})
|
279
275
|
port = self.driver.get_port(t_constants.MOCK_PORT_ID)
|
280
276
|
self.assertIsInstance(port, network_models.Port)
|
281
277
|
self.assertEqual(t_constants.MOCK_PORT_ID, port.id)
|
@@ -290,15 +286,15 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
290
286
|
|
291
287
|
@mock.patch("octavia.common.clients.NeutronAuth.get_user_neutron_client")
|
292
288
|
def test_get_user_port(self, neutron_client_mock):
|
293
|
-
show_port = neutron_client_mock.return_value.
|
294
|
-
show_port.return_value = {
|
289
|
+
show_port = neutron_client_mock.return_value.get_port
|
290
|
+
show_port.return_value = Port(**{
|
295
291
|
'id': t_constants.MOCK_PORT_ID,
|
296
292
|
'mac_address': t_constants.MOCK_MAC_ADDR,
|
297
293
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
298
294
|
'fixed_ips': [{
|
299
295
|
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
300
296
|
'ip_address': t_constants.MOCK_IP_ADDRESS
|
301
|
-
}]}
|
297
|
+
}]})
|
302
298
|
|
303
299
|
port = self.driver.get_port(t_constants.MOCK_PORT_ID, context=mock.ANY)
|
304
300
|
|
@@ -314,11 +310,11 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
314
310
|
port.fixed_ips[0].ip_address)
|
315
311
|
|
316
312
|
def test_get_network_by_name(self):
|
317
|
-
list_network = self.driver.
|
318
|
-
list_network.return_value =
|
313
|
+
list_network = self.driver.network_proxy.networks
|
314
|
+
list_network.return_value = iter([Network(**{
|
319
315
|
'id': t_constants.MOCK_NETWORK_ID,
|
320
316
|
'name': t_constants.MOCK_NETWORK_NAME,
|
321
|
-
'subnets': [t_constants.MOCK_SUBNET_ID]}
|
317
|
+
'subnets': [t_constants.MOCK_SUBNET_ID]})])
|
322
318
|
network = self.driver.get_network_by_name(
|
323
319
|
t_constants.MOCK_NETWORK_NAME)
|
324
320
|
self.assertIsInstance(network, network_models.Network)
|
@@ -327,7 +323,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
327
323
|
self.assertEqual(1, len(network.subnets))
|
328
324
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, network.subnets[0])
|
329
325
|
# Negative
|
330
|
-
list_network.side_effect =
|
326
|
+
list_network.side_effect = os_exceptions.ResourceNotFound
|
331
327
|
self.assertRaises(network_base.NetworkNotFound,
|
332
328
|
self.driver.get_network_by_name,
|
333
329
|
t_constants.MOCK_NETWORK_NAME)
|
@@ -337,12 +333,12 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
337
333
|
t_constants.MOCK_NETWORK_NAME)
|
338
334
|
|
339
335
|
def test_get_subnet_by_name(self):
|
340
|
-
list_subnet = self.driver.
|
341
|
-
list_subnet.return_value =
|
336
|
+
list_subnet = self.driver.network_proxy.subnets
|
337
|
+
list_subnet.return_value = iter([Subnet(**{
|
342
338
|
'id': t_constants.MOCK_SUBNET_ID,
|
343
339
|
'name': t_constants.MOCK_SUBNET_NAME,
|
344
340
|
'gateway_ip': t_constants.MOCK_IP_ADDRESS,
|
345
|
-
'cidr': t_constants.MOCK_CIDR}
|
341
|
+
'cidr': t_constants.MOCK_CIDR})])
|
346
342
|
subnet = self.driver.get_subnet_by_name(t_constants.MOCK_SUBNET_NAME)
|
347
343
|
self.assertIsInstance(subnet, network_models.Subnet)
|
348
344
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, subnet.id)
|
@@ -350,7 +346,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
350
346
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, subnet.gateway_ip)
|
351
347
|
self.assertEqual(t_constants.MOCK_CIDR, subnet.cidr)
|
352
348
|
# Negative
|
353
|
-
list_subnet.side_effect =
|
349
|
+
list_subnet.side_effect = os_exceptions.ResourceNotFound
|
354
350
|
self.assertRaises(network_base.SubnetNotFound,
|
355
351
|
self.driver.get_subnet_by_name,
|
356
352
|
t_constants.MOCK_SUBNET_NAME)
|
@@ -360,8 +356,8 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
360
356
|
t_constants.MOCK_SUBNET_NAME)
|
361
357
|
|
362
358
|
def test_get_port_by_name(self):
|
363
|
-
list_port = self.driver.
|
364
|
-
list_port.return_value =
|
359
|
+
list_port = self.driver.network_proxy.ports
|
360
|
+
list_port.return_value = iter([Port(**{
|
365
361
|
'id': t_constants.MOCK_PORT_ID,
|
366
362
|
'name': t_constants.MOCK_PORT_NAME,
|
367
363
|
'mac_address': t_constants.MOCK_MAC_ADDR,
|
@@ -369,7 +365,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
369
365
|
'fixed_ips': [{
|
370
366
|
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
371
367
|
'ip_address': t_constants.MOCK_IP_ADDRESS
|
372
|
-
}]}
|
368
|
+
}]})])
|
373
369
|
port = self.driver.get_port_by_name(t_constants.MOCK_PORT_NAME)
|
374
370
|
self.assertIsInstance(port, network_models.Port)
|
375
371
|
self.assertEqual(t_constants.MOCK_PORT_ID, port.id)
|
@@ -383,7 +379,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
383
379
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS,
|
384
380
|
port.fixed_ips[0].ip_address)
|
385
381
|
# Negative
|
386
|
-
list_port.side_effect =
|
382
|
+
list_port.side_effect = os_exceptions.ResourceNotFound
|
387
383
|
self.assertRaises(network_base.PortNotFound,
|
388
384
|
self.driver.get_port_by_name,
|
389
385
|
t_constants.MOCK_PORT_NAME)
|
@@ -393,8 +389,8 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
393
389
|
t_constants.MOCK_PORT_NAME)
|
394
390
|
|
395
391
|
def test_get_port_by_net_id_device_id(self):
|
396
|
-
list_port = self.driver.
|
397
|
-
list_port.return_value =
|
392
|
+
list_port = self.driver.network_proxy.ports
|
393
|
+
list_port.return_value = iter([Port(**{
|
398
394
|
'id': t_constants.MOCK_PORT_ID,
|
399
395
|
'name': t_constants.MOCK_PORT_NAME,
|
400
396
|
'mac_address': t_constants.MOCK_MAC_ADDR,
|
@@ -403,7 +399,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
403
399
|
'fixed_ips': [{
|
404
400
|
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
405
401
|
'ip_address': t_constants.MOCK_IP_ADDRESS
|
406
|
-
}]}
|
402
|
+
}]})])
|
407
403
|
port = self.driver.get_port_by_net_id_device_id(
|
408
404
|
t_constants.MOCK_NETWORK_ID, t_constants.MOCK_DEVICE_ID)
|
409
405
|
self.assertIsInstance(port, network_models.Port)
|
@@ -419,7 +415,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
419
415
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS,
|
420
416
|
port.fixed_ips[0].ip_address)
|
421
417
|
# Negative
|
422
|
-
list_port.side_effect =
|
418
|
+
list_port.side_effect = os_exceptions.ResourceNotFound
|
423
419
|
self.assertRaises(network_base.PortNotFound,
|
424
420
|
self.driver.get_port_by_net_id_device_id,
|
425
421
|
t_constants.MOCK_PORT_NAME,
|
@@ -436,12 +432,10 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
436
432
|
The expected result is: only the first port is returned.
|
437
433
|
"""
|
438
434
|
|
439
|
-
list_port = self.driver.
|
440
|
-
list_port.return_value =
|
441
|
-
|
442
|
-
|
443
|
-
],
|
444
|
-
}
|
435
|
+
list_port = self.driver.network_proxy.ports
|
436
|
+
list_port.return_value = iter([t_constants.MOCK_NEUTRON_PORT,
|
437
|
+
t_constants.MOCK_NEUTRON_PORT2,
|
438
|
+
])
|
445
439
|
|
446
440
|
port = self.driver.get_port_by_net_id_device_id(
|
447
441
|
t_constants.MOCK_NETWORK_ID, t_constants.MOCK_DEVICE_ID)
|
@@ -458,7 +452,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
458
452
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS,
|
459
453
|
port.fixed_ips[0].ip_address)
|
460
454
|
# Negative
|
461
|
-
list_port.side_effect =
|
455
|
+
list_port.side_effect = os_exceptions.ResourceNotFound
|
462
456
|
self.assertRaises(network_base.PortNotFound,
|
463
457
|
self.driver.get_port_by_net_id_device_id,
|
464
458
|
t_constants.MOCK_PORT_NAME,
|
@@ -471,12 +465,10 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
471
465
|
|
472
466
|
def test_get_multiple_ports_by_net_id_device_id(self):
|
473
467
|
"""Test _get_resources_by_filters, when result is not unique"""
|
474
|
-
list_port = self.driver.
|
475
|
-
list_port.return_value =
|
476
|
-
|
477
|
-
|
478
|
-
],
|
479
|
-
}
|
468
|
+
list_port = self.driver.network_proxy.ports
|
469
|
+
list_port.return_value = iter([t_constants.MOCK_NEUTRON_PORT,
|
470
|
+
t_constants.MOCK_NEUTRON_PORT2,
|
471
|
+
])
|
480
472
|
|
481
473
|
ports = self.driver._get_resources_by_filters(
|
482
474
|
'port',
|
@@ -495,10 +487,8 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
495
487
|
|
496
488
|
def test_get_unique_port_by_name(self):
|
497
489
|
"""Test _get_resources_by_filters, when result is unique"""
|
498
|
-
list_port = self.driver.
|
499
|
-
list_port.return_value =
|
500
|
-
'ports': [t_constants.MOCK_NEUTRON_PORT]
|
501
|
-
}
|
490
|
+
list_port = self.driver.network_proxy.ports
|
491
|
+
list_port.return_value = iter([t_constants.MOCK_NEUTRON_PORT])
|
502
492
|
|
503
493
|
port = self.driver._get_resources_by_filters(
|
504
494
|
'port', unique_item=True, name=t_constants.MOCK_PORT_NAME)
|
@@ -508,44 +498,54 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
508
498
|
|
509
499
|
def test_get_non_existing_port_by_name(self):
|
510
500
|
"""Test _get_resources_by_filters, when result is empty"""
|
511
|
-
list_port = self.driver.
|
512
|
-
list_port.return_value =
|
501
|
+
list_port = self.driver.network_proxy.ports
|
502
|
+
list_port.return_value = iter([])
|
513
503
|
|
514
504
|
self.assertRaises(network_base.PortNotFound,
|
515
505
|
self.driver._get_resources_by_filters,
|
516
506
|
'port', unique_item=True, name='port1')
|
517
507
|
|
518
508
|
def test_get_qos_policy(self):
|
519
|
-
get_qos = self.driver.
|
520
|
-
get_qos.return_value = {
|
521
|
-
'id': t_constants.MOCK_NEUTRON_QOS_POLICY_ID}
|
509
|
+
get_qos = self.driver.network_proxy.get_qos_policy
|
510
|
+
get_qos.return_value = QoSPolicy(**{
|
511
|
+
'id': t_constants.MOCK_NEUTRON_QOS_POLICY_ID})
|
522
512
|
qos = self.driver.get_qos_policy(
|
523
513
|
t_constants.MOCK_NEUTRON_QOS_POLICY_ID)
|
524
514
|
self.assertIsInstance(qos, network_models.QosPolicy)
|
525
515
|
self.assertEqual(t_constants.MOCK_NEUTRON_QOS_POLICY_ID,
|
526
516
|
qos.id)
|
527
517
|
|
528
|
-
get_qos.side_effect =
|
518
|
+
get_qos.side_effect = os_exceptions.ResourceNotFound
|
529
519
|
self.assertRaises(network_base.QosPolicyNotFound,
|
530
520
|
self.driver.get_qos_policy,
|
531
521
|
t_constants.MOCK_NEUTRON_QOS_POLICY_ID)
|
532
522
|
|
533
|
-
get_qos.side_effect =
|
523
|
+
get_qos.side_effect = os_exceptions.SDKException
|
534
524
|
self.assertRaises(network_base.NetworkException,
|
535
525
|
self.driver.get_qos_policy,
|
536
526
|
t_constants.MOCK_NEUTRON_QOS_POLICY_ID)
|
537
527
|
|
528
|
+
def test_apply_qos_on_port(self):
|
529
|
+
update_port = self.driver.network_proxy.update_port
|
530
|
+
self.driver.apply_qos_on_port(
|
531
|
+
t_constants.MOCK_NEUTRON_QOS_POLICY_ID,
|
532
|
+
t_constants.MOCK_PORT_ID
|
533
|
+
)
|
534
|
+
update_port.assert_called_once_with(
|
535
|
+
t_constants.MOCK_PORT_ID,
|
536
|
+
qos_policy_id=t_constants.MOCK_NEUTRON_QOS_POLICY_ID)
|
537
|
+
|
538
538
|
def test_apply_or_undo_qos_on_port(self):
|
539
539
|
# The apply and undo qos function use the same "update_port" with
|
540
540
|
# neutron client. So testing them in one Uts.
|
541
|
-
update_port = self.driver.
|
542
|
-
update_port.side_effect =
|
541
|
+
update_port = self.driver.network_proxy.update_port
|
542
|
+
update_port.side_effect = os_exceptions.ResourceNotFound
|
543
543
|
self.assertRaises(network_base.PortNotFound,
|
544
544
|
self.driver.apply_qos_on_port,
|
545
545
|
t_constants.MOCK_PORT_ID,
|
546
546
|
t_constants.MOCK_NEUTRON_QOS_POLICY_ID)
|
547
547
|
|
548
|
-
update_port.side_effect =
|
548
|
+
update_port.side_effect = os_exceptions.SDKException
|
549
549
|
self.assertRaises(network_base.NetworkException,
|
550
550
|
self.driver.apply_qos_on_port,
|
551
551
|
t_constants.MOCK_PORT_ID,
|
@@ -553,12 +553,13 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
553
553
|
|
554
554
|
def test_get_network_ip_availability(self):
|
555
555
|
show_network_ip_availability = (
|
556
|
-
self.driver.
|
556
|
+
self.driver.network_proxy.get_network_ip_availability)
|
557
557
|
show_network_ip_availability.return_value = (
|
558
|
-
{
|
559
|
-
|
560
|
-
|
561
|
-
|
558
|
+
NetworkIPAvailability(**{
|
559
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
560
|
+
'subnet_ip_availability':
|
561
|
+
t_constants.MOCK_SUBNET_IP_AVAILABILITY
|
562
|
+
}))
|
562
563
|
ip_avail = self.driver.get_network_ip_availability(
|
563
564
|
network_models.Network(t_constants.MOCK_NETWORK_ID))
|
564
565
|
self.assertIsInstance(ip_avail, network_models.Network_IP_Availability)
|
@@ -567,8 +568,8 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
567
568
|
ip_avail.subnet_ip_availability)
|
568
569
|
|
569
570
|
def test_plug_fixed_ip(self):
|
570
|
-
show_port = self.driver.
|
571
|
-
show_port.return_value = {
|
571
|
+
show_port = self.driver.network_proxy.get_port
|
572
|
+
show_port.return_value = Port(**{
|
572
573
|
'id': t_constants.MOCK_PORT_ID,
|
573
574
|
'fixed_ips': [
|
574
575
|
{
|
@@ -576,34 +577,31 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
576
577
|
'ip_address': t_constants.MOCK_IP_ADDRESS,
|
577
578
|
'subnet': None
|
578
579
|
}]
|
579
|
-
}
|
580
|
+
})
|
580
581
|
|
581
582
|
self.driver.plug_fixed_ip(t_constants.MOCK_PORT_ID,
|
582
583
|
t_constants.MOCK_SUBNET_ID2,
|
583
584
|
t_constants.MOCK_IP_ADDRESS2)
|
584
585
|
|
585
586
|
expected_body = {
|
586
|
-
'
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
]
|
597
|
-
}
|
598
|
-
|
587
|
+
'fixed_ips': [
|
588
|
+
{
|
589
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
590
|
+
'ip_address': t_constants.MOCK_IP_ADDRESS,
|
591
|
+
'subnet': None
|
592
|
+
}, {
|
593
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID2,
|
594
|
+
'ip_address': t_constants.MOCK_IP_ADDRESS2
|
595
|
+
}
|
596
|
+
]
|
599
597
|
}
|
600
|
-
self.driver.
|
598
|
+
self.driver.network_proxy.update_port.assert_called_once_with(
|
601
599
|
t_constants.MOCK_PORT_ID,
|
602
|
-
expected_body)
|
600
|
+
**expected_body)
|
603
601
|
|
604
602
|
def test_plug_fixed_ip_no_ip_address(self):
|
605
|
-
show_port = self.driver.
|
606
|
-
show_port.return_value = {
|
603
|
+
show_port = self.driver.network_proxy.get_port
|
604
|
+
show_port.return_value = Port(**{
|
607
605
|
'id': t_constants.MOCK_PORT_ID,
|
608
606
|
'fixed_ips': [
|
609
607
|
{
|
@@ -611,31 +609,27 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
611
609
|
'ip_address': t_constants.MOCK_IP_ADDRESS,
|
612
610
|
'subnet': None
|
613
611
|
}]
|
614
|
-
}
|
612
|
+
})
|
615
613
|
|
616
614
|
self.driver.plug_fixed_ip(t_constants.MOCK_PORT_ID,
|
617
615
|
t_constants.MOCK_SUBNET_ID2)
|
618
616
|
|
619
617
|
expected_body = {
|
620
|
-
'
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
]
|
630
|
-
}
|
631
|
-
|
618
|
+
'fixed_ips': [
|
619
|
+
{
|
620
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID,
|
621
|
+
'ip_address': t_constants.MOCK_IP_ADDRESS,
|
622
|
+
'subnet': None
|
623
|
+
}, {
|
624
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID2,
|
625
|
+
}
|
626
|
+
]
|
632
627
|
}
|
633
|
-
self.driver.
|
634
|
-
t_constants.MOCK_PORT_ID,
|
635
|
-
expected_body)
|
628
|
+
self.driver.network_proxy.update_port.assert_called_once_with(
|
629
|
+
t_constants.MOCK_PORT_ID, **expected_body)
|
636
630
|
|
637
631
|
def test_plug_fixed_ip_exception(self):
|
638
|
-
show_port = self.driver.
|
632
|
+
show_port = self.driver.network_proxy.get_port
|
639
633
|
show_port.return_value = {
|
640
634
|
'id': t_constants.MOCK_PORT_ID,
|
641
635
|
'fixed_ips': [
|
@@ -646,7 +640,7 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
646
640
|
}]
|
647
641
|
}
|
648
642
|
|
649
|
-
self.driver.
|
643
|
+
self.driver.network_proxy.update_port.side_effect = Exception
|
650
644
|
|
651
645
|
self.assertRaises(network_base.NetworkException,
|
652
646
|
self.driver.plug_fixed_ip,
|
@@ -654,8 +648,8 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
654
648
|
t_constants.MOCK_SUBNET_ID2)
|
655
649
|
|
656
650
|
def test_unplug_fixed_ip(self):
|
657
|
-
show_port = self.driver.
|
658
|
-
show_port.return_value = {
|
651
|
+
show_port = self.driver.network_proxy.get_port
|
652
|
+
show_port.return_value = Port(**{
|
659
653
|
'id': t_constants.MOCK_PORT_ID,
|
660
654
|
'fixed_ips': [
|
661
655
|
{
|
@@ -667,40 +661,33 @@ class TestBaseNeutronNetworkDriver(base.TestCase):
|
|
667
661
|
'ip_address': t_constants.MOCK_IP_ADDRESS2,
|
668
662
|
'subnet': None
|
669
663
|
}]
|
670
|
-
}
|
664
|
+
})
|
671
665
|
|
672
666
|
self.driver.unplug_fixed_ip(t_constants.MOCK_PORT_ID,
|
673
667
|
t_constants.MOCK_SUBNET_ID)
|
674
668
|
|
675
669
|
expected_body = {
|
676
|
-
'port': {
|
677
|
-
'fixed_ips': [
|
678
|
-
{
|
679
|
-
'subnet_id': t_constants.MOCK_SUBNET_ID2,
|
680
|
-
'ip_address': t_constants.MOCK_IP_ADDRESS2,
|
681
|
-
'subnet': None
|
682
|
-
}
|
683
|
-
]
|
684
|
-
}
|
685
|
-
|
686
|
-
}
|
687
|
-
self.driver.neutron_client.update_port.assert_called_once_with(
|
688
|
-
t_constants.MOCK_PORT_ID,
|
689
|
-
expected_body)
|
690
|
-
|
691
|
-
def test_unplug_fixed_ip_exception(self):
|
692
|
-
show_port = self.driver.neutron_client.show_port
|
693
|
-
show_port.return_value = {
|
694
|
-
'id': t_constants.MOCK_PORT_ID,
|
695
670
|
'fixed_ips': [
|
696
671
|
{
|
697
|
-
'subnet_id': t_constants.
|
698
|
-
'ip_address': t_constants.
|
672
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID2,
|
673
|
+
'ip_address': t_constants.MOCK_IP_ADDRESS2,
|
699
674
|
'subnet': None
|
700
|
-
}
|
675
|
+
}
|
676
|
+
]
|
701
677
|
}
|
678
|
+
self.driver.network_proxy.update_port.assert_called_once_with(
|
679
|
+
t_constants.MOCK_PORT_ID,
|
680
|
+
**expected_body)
|
681
|
+
|
682
|
+
def test_unplug_fixed_ip_exception(self):
|
683
|
+
show_port = self.driver.network_proxy.get_port
|
684
|
+
show_port.return_value = Port(
|
685
|
+
device_id=t_constants.MOCK_PORT_ID,
|
686
|
+
fixed_ips=[(t_constants.MOCK_IP_ADDRESS,
|
687
|
+
t_constants.MOCK_SUBNET_ID)],
|
688
|
+
)
|
702
689
|
|
703
|
-
self.driver.
|
690
|
+
self.driver.network_proxy.update_port.side_effect = Exception
|
704
691
|
|
705
692
|
self.assertRaises(network_base.NetworkException,
|
706
693
|
self.driver.unplug_fixed_ip,
|