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
@@ -11,16 +11,17 @@
|
|
11
11
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
12
|
# License for the specific language governing permissions and limitations
|
13
13
|
# under the License.
|
14
|
-
import copy
|
15
14
|
from unittest import mock
|
16
15
|
|
17
|
-
from neutronclient.common import exceptions as neutron_exceptions
|
18
16
|
from novaclient.client import exceptions as nova_exceptions
|
17
|
+
import openstack.exceptions as os_exceptions
|
18
|
+
from openstack.network.v2.port import Port
|
19
|
+
from openstack.network.v2.security_group import SecurityGroup
|
20
|
+
from openstack.network.v2.subnet import Subnet
|
19
21
|
from oslo_config import cfg
|
20
22
|
from oslo_config import fixture as oslo_fixture
|
21
23
|
from oslo_utils import uuidutils
|
22
24
|
|
23
|
-
from octavia.common import clients
|
24
25
|
from octavia.common import constants
|
25
26
|
from octavia.common import data_models
|
26
27
|
from octavia.common import exceptions
|
@@ -59,17 +60,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
59
60
|
|
60
61
|
def setUp(self):
|
61
62
|
super().setUp()
|
62
|
-
with mock.patch('octavia.common.clients.
|
63
|
-
autospec=True) as
|
63
|
+
with mock.patch('octavia.common.clients.openstack.connection'
|
64
|
+
'.Connection', autospec=True) as os_connection:
|
64
65
|
with mock.patch('stevedore.driver.DriverManager.driver',
|
65
66
|
autospec=True):
|
66
|
-
|
67
|
-
|
68
|
-
'
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
}
|
67
|
+
network_proxy = os_connection().network
|
68
|
+
network_proxy.find_extension = (
|
69
|
+
lambda x: 'alias' if x in (
|
70
|
+
allowed_address_pairs.AAP_EXT_ALIAS,
|
71
|
+
neutron_base.SEC_GRP_EXT_ALIAS)
|
72
|
+
else None)
|
73
73
|
self.k_session = mock.patch(
|
74
74
|
'keystoneauth1.session.Session').start()
|
75
75
|
self.driver = allowed_address_pairs.AllowedAddressPairsDriver()
|
@@ -108,18 +108,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
108
108
|
lb.vip.load_balancer = lb
|
109
109
|
vip = lb.vip
|
110
110
|
sec_grp_id = 'lb-sec-grp1'
|
111
|
-
show_port = self.driver.
|
112
|
-
show_port.return_value =
|
113
|
-
|
114
|
-
delete_port = self.driver.
|
115
|
-
delete_sec_grp = self.driver.
|
116
|
-
list_security_groups = self.driver.
|
117
|
-
|
118
|
-
'security_groups': [
|
119
|
-
{'id': sec_grp_id}
|
120
|
-
]
|
121
|
-
}
|
122
|
-
list_security_groups.return_value = security_groups
|
111
|
+
show_port = self.driver.network_proxy.get_port
|
112
|
+
show_port.return_value = Port(
|
113
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
114
|
+
delete_port = self.driver.network_proxy.delete_port
|
115
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
116
|
+
list_security_groups = self.driver.network_proxy.find_security_group
|
117
|
+
list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
|
123
118
|
self.driver.deallocate_vip(vip)
|
124
119
|
calls = [mock.call(vip.port_id)]
|
125
120
|
for amp in lb.amphorae:
|
@@ -132,38 +127,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
132
127
|
lb.vip.load_balancer = lb
|
133
128
|
vip = lb.vip
|
134
129
|
sec_grp_id = 'lb-sec-grp1'
|
135
|
-
show_port = self.driver.
|
136
|
-
port =
|
137
|
-
'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
|
130
|
+
show_port = self.driver.network_proxy.get_port
|
131
|
+
port = Port(device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
138
132
|
show_port.side_effect = [port, Exception]
|
139
|
-
list_security_groups = self.driver.
|
140
|
-
|
141
|
-
'security_groups': [
|
142
|
-
{'id': sec_grp_id}
|
143
|
-
]
|
144
|
-
}
|
145
|
-
list_security_groups.return_value = security_groups
|
133
|
+
list_security_groups = self.driver.network_proxy.find_security_group
|
134
|
+
list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
|
146
135
|
self.driver.deallocate_vip(vip)
|
147
|
-
self.driver.
|
136
|
+
self.driver.network_proxy.update_port.assert_not_called()
|
148
137
|
|
149
138
|
def test_deallocate_vip_port_deleted(self):
|
150
139
|
lb = dmh.generate_load_balancer_tree()
|
151
140
|
lb.vip.load_balancer = lb
|
152
141
|
vip = lb.vip
|
153
142
|
sec_grp_id = 'lb-sec-grp1'
|
154
|
-
show_port = self.driver.
|
155
|
-
show_port.return_value =
|
156
|
-
|
157
|
-
delete_port = self.driver.
|
158
|
-
delete_port.side_effect =
|
159
|
-
delete_sec_grp = self.driver.
|
160
|
-
|
161
|
-
|
162
|
-
'security_groups': [
|
163
|
-
{'id': sec_grp_id}
|
164
|
-
]
|
165
|
-
}
|
166
|
-
list_security_groups.return_value = security_groups
|
143
|
+
show_port = self.driver.network_proxy.get_port
|
144
|
+
show_port.return_value = Port(
|
145
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
146
|
+
delete_port = self.driver.network_proxy.delete_port
|
147
|
+
delete_port.side_effect = os_exceptions.ResourceNotFound
|
148
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
149
|
+
find_security_group = self.driver.network_proxy.find_security_group
|
150
|
+
find_security_group.return_value = SecurityGroup(id=sec_grp_id)
|
167
151
|
self.driver.deallocate_vip(vip)
|
168
152
|
calls = [mock.call(vip.port_id)]
|
169
153
|
for amp in lb.amphorae:
|
@@ -175,16 +159,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
175
159
|
lb = dmh.generate_load_balancer_tree()
|
176
160
|
lb.vip.load_balancer = lb
|
177
161
|
vip = lb.vip
|
178
|
-
show_port = self.driver.
|
179
|
-
show_port.return_value =
|
180
|
-
|
181
|
-
delete_port = self.driver.
|
182
|
-
delete_sec_grp = self.driver.
|
183
|
-
list_security_groups = self.driver.
|
184
|
-
|
185
|
-
'security_groups': []
|
186
|
-
}
|
187
|
-
list_security_groups.return_value = security_groups
|
162
|
+
show_port = self.driver.network_proxy.get_port
|
163
|
+
show_port.return_value = Port(
|
164
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
165
|
+
delete_port = self.driver.network_proxy.delete_port
|
166
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
167
|
+
list_security_groups = self.driver.network_proxy.find_security_group
|
168
|
+
list_security_groups.return_value = None
|
188
169
|
self.driver.deallocate_vip(vip)
|
189
170
|
delete_port.assert_called_with(vip.port_id)
|
190
171
|
delete_sec_grp.assert_not_called()
|
@@ -193,10 +174,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
193
174
|
lb = dmh.generate_load_balancer_tree()
|
194
175
|
vip = data_models.Vip(port_id='1')
|
195
176
|
vip.load_balancer = lb
|
196
|
-
show_port = self.driver.
|
197
|
-
show_port.return_value =
|
198
|
-
|
199
|
-
delete_port = self.driver.
|
177
|
+
show_port = self.driver.network_proxy.get_port
|
178
|
+
show_port.return_value = Port(
|
179
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
180
|
+
delete_port = self.driver.network_proxy.delete_port
|
200
181
|
delete_port.side_effect = [None, None, TypeError]
|
201
182
|
self.assertRaises(network_base.DeallocateVIPException,
|
202
183
|
self.driver.deallocate_vip, vip)
|
@@ -209,27 +190,22 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
209
190
|
lb = dmh.generate_load_balancer_tree()
|
210
191
|
lb.vip.load_balancer = lb
|
211
192
|
vip = lb.vip
|
212
|
-
show_port = self.driver.
|
213
|
-
show_port.return_value =
|
214
|
-
|
215
|
-
delete_port = self.driver.
|
216
|
-
list_ports = self.driver.
|
217
|
-
|
218
|
-
delete_sec_grp = self.driver.
|
219
|
-
|
220
|
-
|
221
|
-
{'id': t_constants.MOCK_SECURITY_GROUP_ID}
|
222
|
-
]
|
223
|
-
}
|
224
|
-
list_security_groups.return_value = security_groups
|
193
|
+
show_port = self.driver.network_proxy.get_port
|
194
|
+
show_port.return_value = Port(
|
195
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
196
|
+
delete_port = self.driver.network_proxy.delete_port
|
197
|
+
list_ports = self.driver.network_proxy.ports
|
198
|
+
find_security_group = self.driver.network_proxy.find_security_group
|
199
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
200
|
+
security_group = SecurityGroup(id=t_constants.MOCK_SECURITY_GROUP_ID)
|
201
|
+
find_security_group.return_value = security_group
|
225
202
|
delete_grp_results = [
|
226
203
|
network_base.DeallocateVIPException
|
227
204
|
for _ in range(max_retries + 1)] # Total tries = max_retries + 1
|
228
205
|
delete_grp_results.append(None)
|
229
206
|
delete_sec_grp.side_effect = delete_grp_results
|
230
|
-
list_ports.
|
231
|
-
|
232
|
-
t_constants.MOCK_NEUTRON_PORT2['port']]}]
|
207
|
+
list_ports.return_value = iter([t_constants.MOCK_NEUTRON_PORT,
|
208
|
+
t_constants.MOCK_NEUTRON_PORT2])
|
233
209
|
self.driver.deallocate_vip(vip)
|
234
210
|
# First we expect the amp's ports to be deleted
|
235
211
|
dp_calls = [mock.call(amp.vrrp_port_id) for amp in lb.amphorae]
|
@@ -248,19 +224,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
248
224
|
lb = dmh.generate_load_balancer_tree()
|
249
225
|
vip = data_models.Vip(port_id='1')
|
250
226
|
vip.load_balancer = lb
|
251
|
-
show_port = self.driver.
|
252
|
-
show_port.side_effect =
|
227
|
+
show_port = self.driver.network_proxy.get_port
|
228
|
+
show_port.side_effect = os_exceptions.ResourceNotFound
|
253
229
|
self.driver.deallocate_vip(vip)
|
254
230
|
|
255
231
|
def test_deallocate_vip_when_port_not_found_for_update(self):
|
256
232
|
lb = dmh.generate_load_balancer_tree()
|
257
233
|
vip = data_models.Vip(port_id='1')
|
258
234
|
vip.load_balancer = lb
|
259
|
-
show_port = self.driver.
|
260
|
-
show_port.return_value =
|
261
|
-
|
262
|
-
update_port = self.driver.
|
263
|
-
update_port.side_effect =
|
235
|
+
show_port = self.driver.network_proxy.get_port
|
236
|
+
show_port.return_value = Port(
|
237
|
+
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
238
|
+
update_port = self.driver.network_proxy.update_port
|
239
|
+
update_port.side_effect = os_exceptions.ResourceNotFound
|
264
240
|
self.driver.deallocate_vip(vip)
|
265
241
|
|
266
242
|
def test_deallocate_vip_when_port_not_owned_by_octavia(self):
|
@@ -268,23 +244,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
268
244
|
lb.vip.load_balancer = lb
|
269
245
|
vip = lb.vip
|
270
246
|
sec_grp_id = 'lb-sec-grp1'
|
271
|
-
show_port = self.driver.
|
272
|
-
show_port.return_value = {
|
247
|
+
show_port = self.driver.network_proxy.get_port
|
248
|
+
show_port.return_value = Port(**{
|
273
249
|
'id': vip.port_id,
|
274
250
|
'device_owner': 'neutron:LOADBALANCERV2',
|
275
|
-
'security_groups': [sec_grp_id]}
|
276
|
-
update_port = self.driver.
|
277
|
-
delete_sec_grp = self.driver.
|
278
|
-
list_security_groups = self.driver.
|
279
|
-
|
280
|
-
'security_groups': [
|
281
|
-
{'id': sec_grp_id}
|
282
|
-
]
|
283
|
-
}
|
284
|
-
list_security_groups.return_value = security_groups
|
251
|
+
'security_groups': [sec_grp_id]})
|
252
|
+
update_port = self.driver.network_proxy.update_port
|
253
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
254
|
+
list_security_groups = self.driver.network_proxy.find_security_group
|
255
|
+
list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
|
285
256
|
self.driver.deallocate_vip(vip)
|
286
|
-
expected_port_update = {'
|
287
|
-
update_port.assert_called_once_with(vip.port_id,
|
257
|
+
expected_port_update = {'security_group_ids': []}
|
258
|
+
update_port.assert_called_once_with(vip.port_id,
|
259
|
+
**expected_port_update)
|
288
260
|
delete_sec_grp.assert_called_once_with(sec_grp_id)
|
289
261
|
|
290
262
|
def test_deallocate_vip_when_vip_port_not_found(self):
|
@@ -295,8 +267,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
295
267
|
session_mock = mock.MagicMock()
|
296
268
|
session_mock.get_project_id.return_value = admin_project_id
|
297
269
|
self.k_session.return_value = session_mock
|
298
|
-
show_port = self.driver.
|
299
|
-
show_port.side_effect =
|
270
|
+
show_port = self.driver.network_proxy.get_port
|
271
|
+
show_port.side_effect = os_exceptions.ResourceNotFound
|
300
272
|
self.driver.deallocate_vip(vip)
|
301
273
|
|
302
274
|
def test_plug_aap_errors_when_nova_cant_find_network_to_attach(self):
|
@@ -317,8 +289,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
317
289
|
network_attach = self.driver.compute.attach_network_or_port
|
318
290
|
network_attach.return_value = t_constants.MOCK_NOVA_INTERFACE
|
319
291
|
|
320
|
-
update_port = self.driver.
|
321
|
-
update_port.side_effect =
|
292
|
+
update_port = self.driver.network_proxy.update_port
|
293
|
+
update_port.side_effect = os_exceptions.ResourceNotFound
|
322
294
|
self.assertRaises(network_base.PortNotFound,
|
323
295
|
self.driver.plug_aap_port, lb, lb.vip,
|
324
296
|
lb.amphorae[0], subnet)
|
@@ -408,40 +380,40 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
408
380
|
subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
|
409
381
|
network_id=t_constants.MOCK_VIP_NET_ID)
|
410
382
|
|
411
|
-
list_ports = self.driver.
|
412
|
-
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
413
|
-
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
414
|
-
list_ports.
|
383
|
+
list_ports = self.driver.network_proxy.ports
|
384
|
+
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
385
|
+
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
386
|
+
list_ports.return_value = iter([port1, port2])
|
415
387
|
network_attach = self.driver.compute.attach_network_or_port
|
416
388
|
network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
|
417
|
-
update_port = self.driver.
|
418
|
-
expected_aap = {
|
419
|
-
|
389
|
+
update_port = self.driver.network_proxy.update_port
|
390
|
+
expected_aap = {
|
391
|
+
'allowed_address_pairs': [{'ip_address': lb.vip.ip_address}]}
|
420
392
|
amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
|
421
|
-
update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
|
393
|
+
update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
|
422
394
|
self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
|
423
395
|
t_constants.MOCK_VRRP_IP2])
|
424
396
|
self.assertEqual(lb.vip.ip_address, amp.ha_ip)
|
425
397
|
|
426
398
|
@mock.patch('octavia.network.drivers.neutron.utils.'
|
427
|
-
'
|
399
|
+
'convert_port_to_model')
|
428
400
|
def test_plug_aap_port_create_fails(self, mock_convert):
|
429
401
|
lb = dmh.generate_load_balancer_tree()
|
430
402
|
|
431
403
|
subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
|
432
404
|
network_id=t_constants.MOCK_VIP_NET_ID)
|
433
405
|
|
434
|
-
list_ports = self.driver.
|
435
|
-
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
436
|
-
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
437
|
-
list_ports.
|
438
|
-
port_create = self.driver.
|
406
|
+
list_ports = self.driver.network_proxy.ports
|
407
|
+
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
408
|
+
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
409
|
+
list_ports.return_value = iter([port1, port2])
|
410
|
+
port_create = self.driver.network_proxy.create_port
|
439
411
|
port_create.side_effect = [Exception('Create failure')]
|
440
412
|
self.assertRaises(network_base.PlugVIPException,
|
441
413
|
self.driver.plug_aap_port,
|
442
414
|
lb, lb.vip, lb.amphorae[0], subnet)
|
443
415
|
mock_convert.assert_not_called()
|
444
|
-
self.driver.
|
416
|
+
self.driver.network_proxy.delete_port.assert_not_called()
|
445
417
|
|
446
418
|
def test_plug_aap_port_attach_fails(self):
|
447
419
|
lb = dmh.generate_load_balancer_tree()
|
@@ -449,16 +421,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
449
421
|
subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
|
450
422
|
network_id=t_constants.MOCK_VIP_NET_ID)
|
451
423
|
|
452
|
-
list_ports = self.driver.
|
453
|
-
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
454
|
-
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
455
|
-
list_ports.
|
424
|
+
list_ports = self.driver.network_proxy.ports
|
425
|
+
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
426
|
+
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
427
|
+
list_ports.return_value = iter([port1, port2])
|
456
428
|
network_attach = self.driver.compute.attach_network_or_port
|
457
429
|
network_attach.side_effect = [Exception('Attach failure')]
|
458
430
|
self.assertRaises(network_base.PlugVIPException,
|
459
431
|
self.driver.plug_aap_port,
|
460
432
|
lb, lb.vip, lb.amphorae[0], subnet)
|
461
|
-
self.driver.
|
433
|
+
self.driver.network_proxy.delete_port.assert_called_once()
|
462
434
|
|
463
435
|
def test_plug_aap_port_with_add_vips(self):
|
464
436
|
additional_vips = [
|
@@ -470,21 +442,20 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
470
442
|
subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
|
471
443
|
network_id=t_constants.MOCK_VIP_NET_ID)
|
472
444
|
|
473
|
-
list_ports = self.driver.
|
474
|
-
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
475
|
-
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
476
|
-
list_ports.
|
445
|
+
list_ports = self.driver.network_proxy.ports
|
446
|
+
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
447
|
+
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
448
|
+
list_ports.return_value = iter([port1, port2])
|
477
449
|
network_attach = self.driver.compute.attach_network_or_port
|
478
450
|
network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
|
479
|
-
update_port = self.driver.
|
451
|
+
update_port = self.driver.network_proxy.update_port
|
480
452
|
amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
|
481
453
|
expected_aap = {
|
482
|
-
'
|
483
|
-
'
|
484
|
-
|
485
|
-
{'ip_address': lb.additional_vips[0].ip_address}]}}
|
454
|
+
'allowed_address_pairs':
|
455
|
+
[{'ip_address': lb.vip.ip_address},
|
456
|
+
{'ip_address': lb.additional_vips[0].ip_address}]}
|
486
457
|
|
487
|
-
update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
|
458
|
+
update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
|
488
459
|
self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
|
489
460
|
t_constants.MOCK_VRRP_IP2])
|
490
461
|
self.assertEqual(lb.vip.ip_address, amp.ha_ip)
|
@@ -505,14 +476,14 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
505
476
|
subnet = network_models.Subnet(
|
506
477
|
id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
|
507
478
|
network_id=t_constants.MOCK_MANAGEMENT_NET_ID)
|
508
|
-
list_ports = self.driver.
|
509
|
-
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
510
|
-
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
479
|
+
list_ports = self.driver.network_proxy.ports
|
480
|
+
port1 = t_constants.MOCK_MANAGEMENT_PORT1
|
481
|
+
port2 = t_constants.MOCK_MANAGEMENT_PORT2
|
511
482
|
self._set_safely(t_constants.MOCK_MANAGEMENT_FIXED_IPS1[0],
|
512
483
|
'ip_address', lb.amphorae[0].lb_network_ip)
|
513
484
|
self._set_safely(t_constants.MOCK_MANAGEMENT_FIXED_IPS2[0],
|
514
485
|
'ip_address', lb.amphorae[1].lb_network_ip)
|
515
|
-
list_ports.side_effect = [
|
486
|
+
list_ports.side_effect = [iter([port1]), iter([port2])]
|
516
487
|
network_attach = self.driver.compute.attach_network_or_port
|
517
488
|
self._set_safely(t_constants.MOCK_VRRP_INTERFACE1,
|
518
489
|
'net_id', t_constants.MOCK_MANAGEMENT_NET_ID)
|
@@ -523,11 +494,11 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
523
494
|
self._set_safely(t_constants.MOCK_VRRP_FIXED_IPS2[0],
|
524
495
|
'subnet_id', t_constants.MOCK_MANAGEMENT_SUBNET_ID)
|
525
496
|
network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
|
526
|
-
update_port = self.driver.
|
527
|
-
expected_aap = {
|
528
|
-
|
497
|
+
update_port = self.driver.network_proxy.update_port
|
498
|
+
expected_aap = {
|
499
|
+
'allowed_address_pairs': [{'ip_address': lb.vip.ip_address}]}
|
529
500
|
amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
|
530
|
-
update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
|
501
|
+
update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
|
531
502
|
self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
|
532
503
|
t_constants.MOCK_VRRP_IP2])
|
533
504
|
self.assertEqual(lb.vip.ip_address, amp.ha_ip)
|
@@ -557,7 +528,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
557
528
|
self.assertFalse(result)
|
558
529
|
|
559
530
|
def test_allocate_vip_when_port_already_provided(self):
|
560
|
-
show_port = self.driver.
|
531
|
+
show_port = self.driver.network_proxy.get_port
|
561
532
|
show_port.return_value = t_constants.MOCK_NEUTRON_PORT
|
562
533
|
fake_lb_vip = data_models.Vip(
|
563
534
|
port_id=t_constants.MOCK_PORT_ID,
|
@@ -580,15 +551,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
580
551
|
bad_existing_port.port_id = uuidutils.generate_uuid()
|
581
552
|
bad_existing_port.network_id = uuidutils.generate_uuid()
|
582
553
|
bad_existing_port.subnet_id = uuidutils.generate_uuid()
|
583
|
-
show_port = self.driver.
|
554
|
+
show_port = self.driver.network_proxy.get_port
|
584
555
|
show_port.return_value = bad_existing_port
|
585
|
-
port_create_dict =
|
586
|
-
port_create_dict['
|
556
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
557
|
+
port_create_dict['device_owner'] = (
|
587
558
|
allowed_address_pairs.OCTAVIA_OWNER)
|
588
|
-
port_create_dict['
|
589
|
-
create_port = self.driver.
|
559
|
+
port_create_dict['device_id'] = 'lb-1'
|
560
|
+
create_port = self.driver.network_proxy.create_port
|
590
561
|
create_port.return_value = port_create_dict
|
591
|
-
show_subnet = self.driver.
|
562
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
592
563
|
show_subnet.return_value = {'subnet': {
|
593
564
|
'id': t_constants.MOCK_SUBNET_ID,
|
594
565
|
'network_id': t_constants.MOCK_NETWORK_ID
|
@@ -601,19 +572,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
601
572
|
project_id='test-project')
|
602
573
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
603
574
|
exp_create_port_call = {
|
604
|
-
'
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
612
|
-
}
|
575
|
+
'name': 'octavia-lb-1',
|
576
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
577
|
+
'device_id': 'lb-1',
|
578
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
579
|
+
'admin_state_up': False,
|
580
|
+
'project_id': 'test-project',
|
581
|
+
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
613
582
|
}
|
614
|
-
self.driver.
|
583
|
+
self.driver.network_proxy.delete_port.assert_called_once_with(
|
615
584
|
t_constants.MOCK_PORT_ID)
|
616
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
585
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
617
586
|
self.assertIsInstance(vip, data_models.Vip)
|
618
587
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
619
588
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -627,13 +596,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
627
596
|
'_check_extension_enabled', return_value=True)
|
628
597
|
def test_allocate_vip_when_port_not_found(self, mock_check_ext,
|
629
598
|
mock_get_port):
|
630
|
-
port_create_dict =
|
631
|
-
port_create_dict['
|
599
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
600
|
+
port_create_dict['device_owner'] = (
|
632
601
|
allowed_address_pairs.OCTAVIA_OWNER)
|
633
|
-
port_create_dict['
|
634
|
-
create_port = self.driver.
|
602
|
+
port_create_dict['device_id'] = 'lb-1'
|
603
|
+
create_port = self.driver.network_proxy.create_port
|
635
604
|
create_port.return_value = port_create_dict
|
636
|
-
show_subnet = self.driver.
|
605
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
637
606
|
show_subnet.return_value = {'subnet': {
|
638
607
|
'id': t_constants.MOCK_SUBNET_ID,
|
639
608
|
'network_id': t_constants.MOCK_NETWORK_ID
|
@@ -645,17 +614,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
645
614
|
project_id='test-project')
|
646
615
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
647
616
|
exp_create_port_call = {
|
648
|
-
'
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
656
|
-
}
|
617
|
+
'name': 'octavia-lb-1',
|
618
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
619
|
+
'device_id': 'lb-1',
|
620
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
621
|
+
'admin_state_up': False,
|
622
|
+
'project_id': 'test-project',
|
623
|
+
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
657
624
|
}
|
658
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
625
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
659
626
|
self.assertIsInstance(vip, data_models.Vip)
|
660
627
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
661
628
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -681,7 +648,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
681
648
|
fake_lb_vip = data_models.Vip(
|
682
649
|
subnet_id=t_constants.MOCK_SUBNET_ID)
|
683
650
|
fake_lb = data_models.LoadBalancer(id='1', vip=fake_lb_vip)
|
684
|
-
create_port = self.driver.
|
651
|
+
create_port = self.driver.network_proxy.create_port
|
685
652
|
create_port.side_effect = Exception
|
686
653
|
self.assertRaises(network_base.AllocateVIPException,
|
687
654
|
self.driver.allocate_vip, fake_lb)
|
@@ -689,17 +656,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
689
656
|
@mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
|
690
657
|
'_check_extension_enabled', return_value=True)
|
691
658
|
def test_allocate_vip_when_no_port_provided(self, mock_check_ext):
|
692
|
-
port_create_dict =
|
693
|
-
port_create_dict['
|
659
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
660
|
+
port_create_dict['device_owner'] = (
|
694
661
|
allowed_address_pairs.OCTAVIA_OWNER)
|
695
|
-
port_create_dict['
|
696
|
-
create_port = self.driver.
|
662
|
+
port_create_dict['device_id'] = 'lb-1'
|
663
|
+
create_port = self.driver.network_proxy.create_port
|
697
664
|
create_port.return_value = port_create_dict
|
698
|
-
show_subnet = self.driver.
|
699
|
-
show_subnet.return_value = {
|
665
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
666
|
+
show_subnet.return_value = {
|
700
667
|
'id': t_constants.MOCK_SUBNET_ID,
|
701
668
|
'network_id': t_constants.MOCK_NETWORK_ID
|
702
|
-
}
|
669
|
+
}
|
703
670
|
fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
|
704
671
|
network_id=t_constants.MOCK_NETWORK_ID,
|
705
672
|
ip_address=t_constants.MOCK_IP_ADDRESS)
|
@@ -707,18 +674,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
707
674
|
project_id='test-project')
|
708
675
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
709
676
|
exp_create_port_call = {
|
710
|
-
'
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
719
|
-
}
|
677
|
+
'name': 'octavia-lb-1',
|
678
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
679
|
+
'device_id': 'lb-1',
|
680
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
681
|
+
'admin_state_up': False,
|
682
|
+
'project_id': 'test-project',
|
683
|
+
'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
|
684
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
720
685
|
}
|
721
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
686
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
722
687
|
self.assertIsInstance(vip, data_models.Vip)
|
723
688
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
724
689
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -729,17 +694,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
729
694
|
@mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
|
730
695
|
'_check_extension_enabled', return_value=True)
|
731
696
|
def test_allocate_vip_when_no_port_fixed_ip(self, mock_check_ext):
|
732
|
-
port_create_dict =
|
733
|
-
port_create_dict['
|
697
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
698
|
+
port_create_dict['device_owner'] = (
|
734
699
|
allowed_address_pairs.OCTAVIA_OWNER)
|
735
|
-
port_create_dict['
|
736
|
-
create_port = self.driver.
|
700
|
+
port_create_dict['device_id'] = 'lb-1'
|
701
|
+
create_port = self.driver.network_proxy.create_port
|
737
702
|
create_port.return_value = port_create_dict
|
738
|
-
show_subnet = self.driver.
|
739
|
-
show_subnet.return_value = {
|
703
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
704
|
+
show_subnet.return_value = Subnet(**{
|
740
705
|
'id': t_constants.MOCK_SUBNET_ID,
|
741
706
|
'network_id': t_constants.MOCK_NETWORK_ID
|
742
|
-
}
|
707
|
+
})
|
743
708
|
fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
|
744
709
|
network_id=t_constants.MOCK_NETWORK_ID,
|
745
710
|
ip_address=t_constants.MOCK_IP_ADDRESS)
|
@@ -747,18 +712,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
747
712
|
project_id='test-project')
|
748
713
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
749
714
|
exp_create_port_call = {
|
750
|
-
'
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
'ip_address': t_constants.MOCK_IP_ADDRESS}]
|
759
|
-
}
|
715
|
+
'name': 'octavia-lb-1',
|
716
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
717
|
+
'device_id': 'lb-1',
|
718
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
719
|
+
'admin_state_up': False,
|
720
|
+
'project_id': 'test-project',
|
721
|
+
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID,
|
722
|
+
'ip_address': t_constants.MOCK_IP_ADDRESS}]
|
760
723
|
}
|
761
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
724
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
762
725
|
self.assertIsInstance(vip, data_models.Vip)
|
763
726
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
764
727
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -769,31 +732,29 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
769
732
|
@mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
|
770
733
|
'_check_extension_enabled', return_value=True)
|
771
734
|
def test_allocate_vip_when_no_port_no_fixed_ip(self, mock_check_ext):
|
772
|
-
port_create_dict =
|
773
|
-
port_create_dict['
|
735
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
736
|
+
port_create_dict['device_owner'] = (
|
774
737
|
allowed_address_pairs.OCTAVIA_OWNER)
|
775
|
-
port_create_dict['
|
776
|
-
create_port = self.driver.
|
738
|
+
port_create_dict['device_id'] = 'lb-1'
|
739
|
+
create_port = self.driver.network_proxy.create_port
|
777
740
|
create_port.return_value = port_create_dict
|
778
|
-
show_subnet = self.driver.
|
779
|
-
show_subnet.return_value = {
|
741
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
742
|
+
show_subnet.return_value = {
|
780
743
|
'id': t_constants.MOCK_SUBNET_ID,
|
781
744
|
'network_id': t_constants.MOCK_NETWORK_ID
|
782
|
-
}
|
745
|
+
}
|
783
746
|
fake_lb_vip = data_models.Vip(network_id=t_constants.MOCK_NETWORK_ID)
|
784
747
|
fake_lb = data_models.LoadBalancer(id='1', vip=fake_lb_vip,
|
785
748
|
project_id='test-project')
|
786
749
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
787
750
|
exp_create_port_call = {
|
788
|
-
'
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
}
|
796
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
751
|
+
'name': 'octavia-lb-1',
|
752
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
753
|
+
'device_id': 'lb-1',
|
754
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
755
|
+
'admin_state_up': False,
|
756
|
+
'project_id': 'test-project'}
|
757
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
797
758
|
self.assertIsInstance(vip, data_models.Vip)
|
798
759
|
self.assertEqual(t_constants.MOCK_PORT_ID, vip.port_id)
|
799
760
|
self.assertEqual(fake_lb.id, vip.load_balancer_id)
|
@@ -802,17 +763,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
802
763
|
@mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
|
803
764
|
'_check_extension_enabled', return_value=False)
|
804
765
|
def test_allocate_vip_when_no_port_provided_tenant(self, mock_check_ext):
|
805
|
-
port_create_dict =
|
806
|
-
port_create_dict['
|
766
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
767
|
+
port_create_dict['device_owner'] = (
|
807
768
|
allowed_address_pairs.OCTAVIA_OWNER)
|
808
|
-
port_create_dict['
|
809
|
-
create_port = self.driver.
|
769
|
+
port_create_dict['device_id'] = 'lb-1'
|
770
|
+
create_port = self.driver.network_proxy.create_port
|
810
771
|
create_port.return_value = port_create_dict
|
811
|
-
show_subnet = self.driver.
|
812
|
-
show_subnet.return_value = {
|
772
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
773
|
+
show_subnet.return_value = {
|
813
774
|
'id': t_constants.MOCK_SUBNET_ID,
|
814
775
|
'network_id': t_constants.MOCK_NETWORK_ID
|
815
|
-
}
|
776
|
+
}
|
816
777
|
fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
|
817
778
|
network_id=t_constants.MOCK_NETWORK_ID,
|
818
779
|
ip_address=t_constants.MOCK_IP_ADDRESS)
|
@@ -820,18 +781,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
820
781
|
project_id='test-project')
|
821
782
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
822
783
|
exp_create_port_call = {
|
823
|
-
'
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
832
|
-
}
|
784
|
+
'name': 'octavia-lb-1',
|
785
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
786
|
+
'device_id': 'lb-1',
|
787
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
788
|
+
'admin_state_up': False,
|
789
|
+
'tenant_id': 'test-project',
|
790
|
+
'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
|
791
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
833
792
|
}
|
834
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
793
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
835
794
|
self.assertIsInstance(vip, data_models.Vip)
|
836
795
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
837
796
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -842,17 +801,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
842
801
|
@mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
|
843
802
|
'_check_extension_enabled', return_value=False)
|
844
803
|
def test_allocate_vip_with_additional_vips(self, mock_check_ext):
|
845
|
-
port_create_dict =
|
846
|
-
port_create_dict['
|
804
|
+
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
805
|
+
port_create_dict['device_owner'] = (
|
847
806
|
allowed_address_pairs.OCTAVIA_OWNER)
|
848
|
-
port_create_dict['
|
849
|
-
create_port = self.driver.
|
807
|
+
port_create_dict['device_id'] = 'lb-1'
|
808
|
+
create_port = self.driver.network_proxy.create_port
|
850
809
|
create_port.return_value = port_create_dict
|
851
|
-
show_subnet = self.driver.
|
852
|
-
show_subnet.return_value = {
|
810
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
811
|
+
show_subnet.return_value = {
|
853
812
|
'id': t_constants.MOCK_SUBNET_ID,
|
854
813
|
'network_id': t_constants.MOCK_NETWORK_ID
|
855
|
-
}
|
814
|
+
}
|
856
815
|
fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
|
857
816
|
network_id=t_constants.MOCK_NETWORK_ID,
|
858
817
|
ip_address=t_constants.MOCK_IP_ADDRESS)
|
@@ -865,21 +824,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
865
824
|
project_id='test-project')
|
866
825
|
vip, additional_vips = self.driver.allocate_vip(fake_lb)
|
867
826
|
exp_create_port_call = {
|
868
|
-
'
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
'
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
{'subnet_id': t_constants.MOCK_SUBNET_ID3}]
|
880
|
-
}
|
827
|
+
'name': 'octavia-lb-1',
|
828
|
+
'network_id': t_constants.MOCK_NETWORK_ID,
|
829
|
+
'device_id': 'lb-1',
|
830
|
+
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
831
|
+
'admin_state_up': False,
|
832
|
+
'tenant_id': 'test-project',
|
833
|
+
'fixed_ips': [
|
834
|
+
{'ip_address': t_constants.MOCK_IP_ADDRESS,
|
835
|
+
'subnet_id': t_constants.MOCK_SUBNET_ID},
|
836
|
+
{'ip_address': t_constants.MOCK_IP_ADDRESS2},
|
837
|
+
{'subnet_id': t_constants.MOCK_SUBNET_ID3}]
|
881
838
|
}
|
882
|
-
create_port.assert_called_once_with(exp_create_port_call)
|
839
|
+
create_port.assert_called_once_with(**exp_create_port_call)
|
883
840
|
self.assertIsInstance(vip, data_models.Vip)
|
884
841
|
self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
|
885
842
|
self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
|
@@ -892,23 +849,22 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
892
849
|
def test_unplug_aap_port_errors_when_update_port_cant_find_port(
|
893
850
|
self, mock_time_sleep, mock_time_time):
|
894
851
|
lb = dmh.generate_load_balancer_tree()
|
895
|
-
list_ports = self.driver.
|
896
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
852
|
+
list_ports = self.driver.network_proxy.ports
|
853
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
897
854
|
port2 = {
|
898
855
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
899
|
-
|
856
|
+
[{'ip_address': '10.0.0.2'}]
|
900
857
|
}
|
901
858
|
subnet = network_models.Subnet(
|
902
859
|
id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
|
903
860
|
network_id='3')
|
904
861
|
list_ports.side_effect = [
|
905
|
-
|
906
|
-
|
907
|
-
|
862
|
+
iter([port1, port2]),
|
863
|
+
iter([port1, port2]),
|
864
|
+
iter([port1]),
|
908
865
|
]
|
909
|
-
|
910
|
-
update_port =
|
911
|
-
update_port.side_effect = neutron_exceptions.PortNotFoundClient
|
866
|
+
update_port = self.driver.network_proxy.update_port
|
867
|
+
update_port.side_effect = os_exceptions.ResourceNotFound
|
912
868
|
self.assertRaises(network_base.UnplugVIPException,
|
913
869
|
self.driver.unplug_aap_port, lb.vip, lb.amphorae[0],
|
914
870
|
subnet)
|
@@ -918,25 +874,25 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
918
874
|
def test_unplug_aap_errors_when_update_port_fails(
|
919
875
|
self, mock_time_sleep, mock_time_time):
|
920
876
|
lb = dmh.generate_load_balancer_tree()
|
921
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
877
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
922
878
|
port2 = {
|
923
879
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
924
|
-
|
880
|
+
[{'ip_address': '10.0.0.2'}]
|
925
881
|
}
|
926
882
|
|
927
883
|
subnet = network_models.Subnet(
|
928
884
|
id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
|
929
885
|
network_id='3')
|
930
886
|
|
931
|
-
list_ports = self.driver.
|
887
|
+
list_ports = self.driver.network_proxy.ports
|
932
888
|
list_ports.side_effect = [
|
933
|
-
|
934
|
-
|
935
|
-
|
889
|
+
iter([port1, port2]),
|
890
|
+
iter([port1, port2]),
|
891
|
+
iter([port1]),
|
936
892
|
]
|
937
893
|
mock_time_time.side_effect = [1, 1, 2]
|
938
894
|
|
939
|
-
update_port = self.driver.
|
895
|
+
update_port = self.driver.network_proxy.update_port
|
940
896
|
update_port.side_effect = TypeError
|
941
897
|
self.assertRaises(network_base.UnplugVIPException,
|
942
898
|
self.driver.unplug_aap_port, lb.vip,
|
@@ -944,8 +900,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
944
900
|
|
945
901
|
def test_unplug_vip_errors_when_vip_subnet_not_found(self):
|
946
902
|
lb = dmh.generate_load_balancer_tree()
|
947
|
-
show_subnet = self.driver.
|
948
|
-
show_subnet.side_effect =
|
903
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
904
|
+
show_subnet.side_effect = os_exceptions.ResourceNotFound
|
949
905
|
self.assertRaises(network_base.PluggedVIPNotFound,
|
950
906
|
self.driver.unplug_vip, lb, lb.vip)
|
951
907
|
|
@@ -953,7 +909,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
953
909
|
'AllowedAddressPairsDriver.unplug_aap_port')
|
954
910
|
def test_unplug_vip(self, mock):
|
955
911
|
lb = dmh.generate_load_balancer_tree()
|
956
|
-
show_subnet = self.driver.
|
912
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
957
913
|
show_subnet.return_value = t_constants.MOCK_SUBNET
|
958
914
|
self.driver.unplug_vip(lb, lb.vip)
|
959
915
|
self.assertEqual(len(lb.amphorae), mock.call_count)
|
@@ -965,27 +921,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
965
921
|
def test_unplug_aap_port(self, mock_unplug_network,
|
966
922
|
mock_time_sleep, mock_time_time):
|
967
923
|
lb = dmh.generate_load_balancer_tree()
|
968
|
-
update_port = self.driver.
|
969
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
924
|
+
update_port = self.driver.network_proxy.update_port
|
925
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
970
926
|
port2 = {
|
971
927
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
972
|
-
|
928
|
+
[{'ip_address': '10.0.0.2'}]
|
973
929
|
}
|
974
930
|
subnet = network_models.Subnet(
|
975
931
|
id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
|
976
932
|
network_id='3')
|
977
|
-
list_ports = self.driver.
|
933
|
+
list_ports = self.driver.network_proxy.ports
|
978
934
|
list_ports.side_effect = [
|
979
|
-
|
980
|
-
|
981
|
-
|
935
|
+
iter([port1, port2]),
|
936
|
+
iter([port1, port2]),
|
937
|
+
iter([port1]),
|
982
938
|
]
|
983
939
|
mock_time_time.side_effect = [1, 1, 2]
|
984
|
-
get_port = self.driver.
|
985
|
-
get_port.side_effect =
|
940
|
+
get_port = self.driver.network_proxy.get_port
|
941
|
+
get_port.side_effect = os_exceptions.ResourceNotFound
|
986
942
|
self.driver.unplug_aap_port(lb.vip, lb.amphorae[0], subnet)
|
987
|
-
clear_aap = {'
|
988
|
-
update_port.assert_called_once_with(port2.get('id'), clear_aap)
|
943
|
+
clear_aap = {'allowed_address_pairs': []}
|
944
|
+
update_port.assert_called_once_with(port2.get('id'), **clear_aap)
|
989
945
|
mock_unplug_network.assert_called_once_with(
|
990
946
|
lb.amphorae[0].compute_id, subnet.network_id)
|
991
947
|
|
@@ -1032,15 +988,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1032
988
|
|
1033
989
|
def test_unplug_network_when_compute_port_cant_be_found(self):
|
1034
990
|
net_id = t_constants.MOCK_NOVA_INTERFACE.net_id
|
1035
|
-
list_ports = self.driver.
|
1036
|
-
list_ports.return_value =
|
991
|
+
list_ports = self.driver.network_proxy.ports
|
992
|
+
list_ports.return_value = iter([])
|
1037
993
|
self.assertRaises(network_base.NetworkNotFound,
|
1038
994
|
self.driver.unplug_network,
|
1039
995
|
t_constants.MOCK_COMPUTE_ID, net_id)
|
1040
996
|
|
1041
997
|
def test_unplug_network_when_list_ports_fails(self):
|
1042
998
|
net_id = t_constants.MOCK_NOVA_INTERFACE.net_id
|
1043
|
-
list_ports = self.driver.
|
999
|
+
list_ports = self.driver.network_proxy.ports
|
1044
1000
|
list_ports.side_effect = Exception
|
1045
1001
|
self.assertRaises(network_base.NetworkException,
|
1046
1002
|
self.driver.unplug_network,
|
@@ -1049,16 +1005,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1049
1005
|
@mock.patch("time.time")
|
1050
1006
|
@mock.patch("time.sleep")
|
1051
1007
|
def test_unplug_network(self, mock_time_sleep, mock_time_time):
|
1052
|
-
list_ports = self.driver.
|
1053
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
1008
|
+
list_ports = self.driver.network_proxy.ports
|
1009
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
1054
1010
|
port2 = {
|
1055
1011
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
1056
|
-
|
1012
|
+
[{'ip_address': '10.0.0.2'}]
|
1057
1013
|
}
|
1058
1014
|
list_ports.side_effect = [
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1015
|
+
iter([port1, port2]),
|
1016
|
+
iter([port1, port2]),
|
1017
|
+
iter([port1]),
|
1062
1018
|
]
|
1063
1019
|
port_detach = self.driver.compute.detach_port
|
1064
1020
|
|
@@ -1076,13 +1032,14 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1076
1032
|
@mock.patch("octavia.network.drivers.neutron.allowed_address_pairs.LOG")
|
1077
1033
|
def test_unplug_network_timeout(self, mock_log,
|
1078
1034
|
mock_time_sleep, mock_time_time):
|
1079
|
-
list_ports = self.driver.
|
1080
|
-
port1 = t_constants.MOCK_NEUTRON_PORT
|
1081
|
-
port2 = {
|
1035
|
+
list_ports = self.driver.network_proxy.ports
|
1036
|
+
port1 = t_constants.MOCK_NEUTRON_PORT
|
1037
|
+
port2 = Port(**{
|
1082
1038
|
'id': '4', 'network_id': '3', 'fixed_ips':
|
1083
|
-
|
1084
|
-
}
|
1085
|
-
|
1039
|
+
[{'ip_address': '10.0.0.2'}]
|
1040
|
+
})
|
1041
|
+
|
1042
|
+
list_ports.side_effect = [iter([port1, port2]) for _ in range(7)]
|
1086
1043
|
port_detach = self.driver.compute.detach_port
|
1087
1044
|
|
1088
1045
|
mock_time_time.side_effect = [0, 0, 1, 2, 10, 20, 100, 300]
|
@@ -1099,12 +1056,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1099
1056
|
lc_1 = data_models.ListenerCidr('l1', '10.0.101.0/24')
|
1100
1057
|
lc_2 = data_models.ListenerCidr('l2', '10.0.102.0/24')
|
1101
1058
|
lc_3 = data_models.ListenerCidr('l2', '10.0.103.0/24')
|
1059
|
+
lc_4 = data_models.ListenerCidr('l2', '2001:0DB8::/32')
|
1102
1060
|
listeners = [data_models.Listener(protocol_port=80, peer_port=1024,
|
1103
1061
|
protocol=constants.PROTOCOL_TCP,
|
1104
1062
|
allowed_cidrs=[lc_1]),
|
1105
1063
|
data_models.Listener(protocol_port=443, peer_port=1025,
|
1106
1064
|
protocol=constants.PROTOCOL_TCP,
|
1107
|
-
allowed_cidrs=[lc_2, lc_3]),
|
1065
|
+
allowed_cidrs=[lc_2, lc_3, lc_4]),
|
1108
1066
|
data_models.Listener(protocol_port=50, peer_port=1026,
|
1109
1067
|
protocol=constants.PROTOCOL_UDP)]
|
1110
1068
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
@@ -1113,94 +1071,101 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1113
1071
|
ip_address=self.IPV6_ADDRESS_1)
|
1114
1072
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip,
|
1115
1073
|
additional_vips=[additional_vip])
|
1116
|
-
list_sec_grps = self.driver.
|
1117
|
-
list_sec_grps.return_value = {'
|
1118
|
-
fake_rules =
|
1119
|
-
'
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
}
|
1125
|
-
list_rules = self.driver.neutron_client.list_security_group_rules
|
1074
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1075
|
+
list_sec_grps.return_value = {'id': 'secgrp-1'}
|
1076
|
+
fake_rules = [
|
1077
|
+
{'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp',
|
1078
|
+
'remote_ip_prefix': '10.0.101.0/24'},
|
1079
|
+
{'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
|
1080
|
+
]
|
1081
|
+
list_rules = self.driver.network_proxy.security_group_rules
|
1126
1082
|
list_rules.return_value = fake_rules
|
1127
|
-
delete_rule = self.driver.
|
1128
|
-
create_rule = self.driver.
|
1083
|
+
delete_rule = self.driver.network_proxy.delete_security_group_rule
|
1084
|
+
create_rule = self.driver.network_proxy.create_security_group_rule
|
1129
1085
|
self.driver.update_vip(lb)
|
1130
1086
|
delete_rule.assert_called_once_with('rule-22')
|
1131
1087
|
expected_create_rule_1 = {
|
1132
|
-
'
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
'remote_ip_prefix': None
|
1140
|
-
}
|
1088
|
+
'security_group_id': 'secgrp-1',
|
1089
|
+
'direction': 'ingress',
|
1090
|
+
'protocol': 'tcp',
|
1091
|
+
'port_range_min': 1024,
|
1092
|
+
'port_range_max': 1024,
|
1093
|
+
'ethertype': 'IPv4',
|
1094
|
+
'remote_ip_prefix': None
|
1141
1095
|
}
|
1142
1096
|
expected_create_rule_udp_peer = {
|
1143
|
-
'
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
'remote_ip_prefix': None
|
1151
|
-
}
|
1097
|
+
'security_group_id': 'secgrp-1',
|
1098
|
+
'direction': 'ingress',
|
1099
|
+
'protocol': 'tcp',
|
1100
|
+
'port_range_min': 1026,
|
1101
|
+
'port_range_max': 1026,
|
1102
|
+
'ethertype': 'IPv4',
|
1103
|
+
'remote_ip_prefix': None
|
1152
1104
|
}
|
1153
1105
|
expected_create_rule_2 = {
|
1154
|
-
'
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
'remote_ip_prefix': None
|
1162
|
-
}
|
1106
|
+
'security_group_id': 'secgrp-1',
|
1107
|
+
'direction': 'ingress',
|
1108
|
+
'protocol': 'tcp',
|
1109
|
+
'port_range_min': 1025,
|
1110
|
+
'port_range_max': 1025,
|
1111
|
+
'ethertype': 'IPv4',
|
1112
|
+
'remote_ip_prefix': None
|
1163
1113
|
}
|
1164
1114
|
expected_create_rule_3 = {
|
1165
|
-
'
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
'remote_ip_prefix': '10.0.102.0/24'
|
1173
|
-
}
|
1115
|
+
'security_group_id': 'secgrp-1',
|
1116
|
+
'direction': 'ingress',
|
1117
|
+
'protocol': 'tcp',
|
1118
|
+
'port_range_min': 443,
|
1119
|
+
'port_range_max': 443,
|
1120
|
+
'ethertype': 'IPv4',
|
1121
|
+
'remote_ip_prefix': '10.0.102.0/24'
|
1174
1122
|
}
|
1175
1123
|
expected_create_rule_4 = {
|
1176
|
-
'
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1124
|
+
'security_group_id': 'secgrp-1',
|
1125
|
+
'direction': 'ingress',
|
1126
|
+
'protocol': 'tcp',
|
1127
|
+
'port_range_min': 443,
|
1128
|
+
'port_range_max': 443,
|
1129
|
+
'ethertype': 'IPv4',
|
1130
|
+
'remote_ip_prefix': '10.0.103.0/24'
|
1131
|
+
}
|
1132
|
+
expected_create_rule_5 = {
|
1133
|
+
'security_group_id': 'secgrp-1',
|
1134
|
+
'direction': 'ingress',
|
1135
|
+
'protocol': 'tcp',
|
1136
|
+
'port_range_min': 443,
|
1137
|
+
'port_range_max': 443,
|
1138
|
+
'ethertype': 'IPv6',
|
1139
|
+
'remote_ip_prefix': '2001:0DB8::/32'
|
1185
1140
|
}
|
1186
|
-
|
1187
|
-
'
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1141
|
+
expected_create_rule_udp_1 = {
|
1142
|
+
'security_group_id': 'secgrp-1',
|
1143
|
+
'direction': 'ingress',
|
1144
|
+
'protocol': 'udp',
|
1145
|
+
'port_range_min': 50,
|
1146
|
+
'port_range_max': 50,
|
1147
|
+
'ethertype': 'IPv4',
|
1148
|
+
'remote_ip_prefix': None
|
1149
|
+
}
|
1150
|
+
expected_create_rule_udp_2 = {
|
1151
|
+
'security_group_id': 'secgrp-1',
|
1152
|
+
'direction': 'ingress',
|
1153
|
+
'protocol': 'udp',
|
1154
|
+
'port_range_min': 50,
|
1155
|
+
'port_range_max': 50,
|
1156
|
+
'ethertype': 'IPv6',
|
1157
|
+
'remote_ip_prefix': None
|
1196
1158
|
}
|
1197
1159
|
|
1198
|
-
create_rule.assert_has_calls([mock.call(expected_create_rule_1),
|
1199
|
-
mock.call(
|
1200
|
-
|
1201
|
-
mock.call(
|
1202
|
-
mock.call(
|
1203
|
-
mock.call(
|
1160
|
+
create_rule.assert_has_calls([mock.call(**expected_create_rule_1),
|
1161
|
+
mock.call(
|
1162
|
+
**expected_create_rule_udp_peer),
|
1163
|
+
mock.call(**expected_create_rule_2),
|
1164
|
+
mock.call(**expected_create_rule_3),
|
1165
|
+
mock.call(**expected_create_rule_4),
|
1166
|
+
mock.call(**expected_create_rule_5),
|
1167
|
+
mock.call(**expected_create_rule_udp_1),
|
1168
|
+
mock.call(**expected_create_rule_udp_2)],
|
1204
1169
|
any_order=True)
|
1205
1170
|
|
1206
1171
|
def test_update_vip_when_protocol_and_peer_ports_overlap(self):
|
@@ -1214,18 +1179,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1214
1179
|
allowed_cidrs=[lc_1])]
|
1215
1180
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1216
1181
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1217
|
-
list_sec_grps = self.driver.
|
1218
|
-
list_sec_grps.return_value = {'
|
1219
|
-
fake_rules =
|
1220
|
-
'
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
}
|
1225
|
-
list_rules = self.driver.neutron_client.list_security_group_rules
|
1182
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1183
|
+
list_sec_grps.return_value = {'id': 'secgrp-1'}
|
1184
|
+
fake_rules = [
|
1185
|
+
{'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
|
1186
|
+
{'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
|
1187
|
+
]
|
1188
|
+
list_rules = self.driver.network_proxy.security_group_rules
|
1226
1189
|
list_rules.return_value = fake_rules
|
1227
|
-
delete_rule = self.driver.
|
1228
|
-
create_rule = self.driver.
|
1190
|
+
delete_rule = self.driver.network_proxy.delete_security_group_rule
|
1191
|
+
create_rule = self.driver.network_proxy.create_security_group_rule
|
1229
1192
|
self.driver.update_vip(lb)
|
1230
1193
|
delete_rule.assert_called_once_with('rule-22')
|
1231
1194
|
|
@@ -1245,19 +1208,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1245
1208
|
provisioning_status=constants.PENDING_DELETE)]
|
1246
1209
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1247
1210
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1248
|
-
list_sec_grps = self.driver.
|
1249
|
-
list_sec_grps.return_value = {'
|
1250
|
-
fake_rules =
|
1251
|
-
'
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
}
|
1257
|
-
list_rules = self.driver.neutron_client.list_security_group_rules
|
1211
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1212
|
+
list_sec_grps.return_value = {'id': 'secgrp-1'}
|
1213
|
+
fake_rules = [
|
1214
|
+
{'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
|
1215
|
+
{'id': 'rule-22', 'port_range_max': 443, 'protocol': 'tcp'},
|
1216
|
+
{'id': 'rule-udp-50', 'port_range_max': 50, 'protocol': 'tcp'}
|
1217
|
+
]
|
1218
|
+
list_rules = self.driver.network_proxy.security_group_rules
|
1258
1219
|
list_rules.return_value = fake_rules
|
1259
|
-
delete_rule = self.driver.
|
1260
|
-
create_rule = self.driver.
|
1220
|
+
delete_rule = self.driver.network_proxy.delete_security_group_rule
|
1221
|
+
create_rule = self.driver.network_proxy.create_security_group_rule
|
1261
1222
|
self.driver.update_vip(lb)
|
1262
1223
|
delete_rule.assert_has_calls(
|
1263
1224
|
[mock.call('rule-22'), mock.call('rule-udp-50')])
|
@@ -1267,17 +1228,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1267
1228
|
listeners = []
|
1268
1229
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1269
1230
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1270
|
-
list_sec_grps = self.driver.
|
1271
|
-
list_sec_grps.return_value = {'
|
1272
|
-
fake_rules =
|
1273
|
-
'
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
}
|
1278
|
-
list_rules = self.driver.neutron_client.list_security_group_rules
|
1231
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1232
|
+
list_sec_grps.return_value = {'id': 'secgrp-1'}
|
1233
|
+
fake_rules = [
|
1234
|
+
{'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
|
1235
|
+
{'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
|
1236
|
+
]
|
1237
|
+
list_rules = self.driver.network_proxy.security_group_rules
|
1279
1238
|
list_rules.return_value = fake_rules
|
1280
|
-
delete_rule = self.driver.
|
1239
|
+
delete_rule = self.driver.network_proxy.delete_security_group_rule
|
1281
1240
|
self.driver.update_vip(lb)
|
1282
1241
|
delete_rule.assert_called_once_with('ssh-rule')
|
1283
1242
|
|
@@ -1285,18 +1244,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1285
1244
|
listeners = []
|
1286
1245
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1287
1246
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1288
|
-
list_sec_grps = self.driver.
|
1289
|
-
list_sec_grps.return_value = {'
|
1290
|
-
fake_rules =
|
1291
|
-
'
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
}
|
1296
|
-
list_rules = self.driver.neutron_client.list_security_group_rules
|
1247
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1248
|
+
list_sec_grps.return_value = {'id': 'secgrp-1'}
|
1249
|
+
fake_rules = [
|
1250
|
+
{'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
|
1251
|
+
{'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
|
1252
|
+
]
|
1253
|
+
list_rules = self.driver.network_proxy.security_group_rules
|
1297
1254
|
list_rules.return_value = fake_rules
|
1298
|
-
delete_rule = self.driver.
|
1299
|
-
delete_rule.side_effect =
|
1255
|
+
delete_rule = self.driver.network_proxy.delete_security_group_rule
|
1256
|
+
delete_rule.side_effect = os_exceptions.ResourceNotFound
|
1300
1257
|
self.driver.update_vip(lb)
|
1301
1258
|
delete_rule.assert_called_once_with('ssh-rule')
|
1302
1259
|
|
@@ -1304,8 +1261,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1304
1261
|
listeners = []
|
1305
1262
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1306
1263
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1307
|
-
list_sec_grps = self.driver.
|
1308
|
-
list_sec_grps.return_value =
|
1264
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1265
|
+
list_sec_grps.return_value = None
|
1309
1266
|
self.assertRaises(exceptions.MissingVIPSecurityGroup,
|
1310
1267
|
self.driver.update_vip,
|
1311
1268
|
lb)
|
@@ -1317,25 +1274,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1317
1274
|
listeners = []
|
1318
1275
|
vip = data_models.Vip(ip_address='10.0.0.2')
|
1319
1276
|
lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
|
1320
|
-
list_sec_grps = self.driver.
|
1321
|
-
list_sec_grps.return_value =
|
1277
|
+
list_sec_grps = self.driver.network_proxy.find_security_group
|
1278
|
+
list_sec_grps.return_value = None
|
1322
1279
|
self.driver.update_vip(lb, for_delete=True)
|
1323
1280
|
update_rules.assert_not_called()
|
1324
1281
|
|
1325
1282
|
def test_failover_preparation(self):
|
1326
1283
|
original_dns_integration_state = self.driver.dns_integration_enabled
|
1327
1284
|
self.driver.dns_integration_enabled = False
|
1328
|
-
ports =
|
1329
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1285
|
+
ports = [
|
1286
|
+
Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1287
|
+
"ip_address": self.IP_ADDRESS_1}],
|
1288
|
+
"id": self.FIXED_IP_ID_1,
|
1289
|
+
"network_id": self.NETWORK_ID_1}),
|
1290
|
+
Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1291
|
+
"ip_address": self.IP_ADDRESS_2}],
|
1292
|
+
"id": self.FIXED_IP_ID_2,
|
1293
|
+
"network_id": self.NETWORK_ID_2})]
|
1294
|
+
self.driver.network_proxy.ports.return_value = ports
|
1295
|
+
self.driver.network_proxy.get_port = mock.Mock(
|
1337
1296
|
side_effect=self._failover_show_port_side_effect)
|
1338
|
-
port_update = self.driver.
|
1297
|
+
port_update = self.driver.network_proxy.update_port
|
1339
1298
|
amphora = data_models.Amphora(
|
1340
1299
|
id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
|
1341
1300
|
compute_id=self.COMPUTE_ID, status=self.ACTIVE,
|
@@ -1346,38 +1305,42 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1346
1305
|
self.driver.dns_integration_enabled = original_dns_integration_state
|
1347
1306
|
|
1348
1307
|
def test_failover_preparation_dns_integration(self):
|
1349
|
-
ports =
|
1350
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
1355
|
-
|
1308
|
+
ports = [
|
1309
|
+
Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1310
|
+
"ip_address": self.IP_ADDRESS_1}],
|
1311
|
+
"id": self.FIXED_IP_ID_1,
|
1312
|
+
"network_id": self.NETWORK_ID_1}),
|
1313
|
+
Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1314
|
+
"ip_address": self.IP_ADDRESS_2}],
|
1315
|
+
"id": self.FIXED_IP_ID_2,
|
1316
|
+
"network_id": self.NETWORK_ID_2})]
|
1356
1317
|
original_dns_integration_state = self.driver.dns_integration_enabled
|
1357
1318
|
self.driver.dns_integration_enabled = True
|
1358
|
-
self.driver.
|
1359
|
-
self.driver.
|
1319
|
+
self.driver.network_proxy.ports.return_value = ports
|
1320
|
+
self.driver.network_proxy.get_port = mock.Mock(
|
1360
1321
|
side_effect=self._failover_show_port_side_effect)
|
1361
|
-
port_update = self.driver.
|
1322
|
+
port_update = self.driver.network_proxy.update_port
|
1362
1323
|
amphora = data_models.Amphora(
|
1363
1324
|
id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
|
1364
1325
|
compute_id=self.COMPUTE_ID, status=self.ACTIVE,
|
1365
1326
|
lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
|
1366
1327
|
ha_ip=self.HA_IP)
|
1367
1328
|
self.driver.failover_preparation(amphora)
|
1368
|
-
port_update.assert_called_once_with(ports[
|
1369
|
-
|
1329
|
+
port_update.assert_called_once_with(ports[1].get('id'),
|
1330
|
+
dns_name='')
|
1370
1331
|
self.driver.dns_integration_enabled = original_dns_integration_state
|
1371
1332
|
|
1372
1333
|
def _failover_show_port_side_effect(self, port_id):
|
1373
1334
|
if port_id == self.LB_NET_PORT_ID:
|
1374
|
-
return {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1375
|
-
|
1376
|
-
|
1335
|
+
return Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1336
|
+
"ip_address": self.IP_ADDRESS_1}],
|
1337
|
+
"id": self.FIXED_IP_ID_1,
|
1338
|
+
"network_id": self.NETWORK_ID_1})
|
1377
1339
|
if port_id == self.HA_PORT_ID:
|
1378
|
-
return {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1379
|
-
|
1380
|
-
|
1340
|
+
return Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1341
|
+
"ip_address": self.IP_ADDRESS_2}],
|
1342
|
+
"id": self.FIXED_IP_ID_2,
|
1343
|
+
"network_id": self.NETWORK_ID_2})
|
1381
1344
|
|
1382
1345
|
def test_plug_port(self):
|
1383
1346
|
port = mock.MagicMock()
|
@@ -1434,7 +1397,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1434
1397
|
vip_mock = mock.MagicMock()
|
1435
1398
|
amphora_mock.status = constants.DELETED
|
1436
1399
|
load_balancer_mock.amphorae = [amphora_mock]
|
1437
|
-
show_port = self.driver.
|
1400
|
+
show_port = self.driver.network_proxy.get_port
|
1438
1401
|
show_port.side_effect = [
|
1439
1402
|
t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
|
1440
1403
|
t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
|
@@ -1444,15 +1407,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1444
1407
|
t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
|
1445
1408
|
t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
|
1446
1409
|
Exception('boom')]
|
1447
|
-
fake_subnet = {
|
1410
|
+
fake_subnet = Subnet(**{
|
1448
1411
|
'id': t_constants.MOCK_SUBNET_ID,
|
1449
1412
|
'gateway_ip': t_constants.MOCK_IP_ADDRESS,
|
1450
|
-
'cidr': t_constants.MOCK_CIDR}
|
1451
|
-
fake_subnet2 = {
|
1413
|
+
'cidr': t_constants.MOCK_CIDR})
|
1414
|
+
fake_subnet2 = Subnet(**{
|
1452
1415
|
'id': t_constants.MOCK_SUBNET_ID2,
|
1453
1416
|
'gateway_ip': t_constants.MOCK_IP_ADDRESS2,
|
1454
|
-
'cidr': t_constants.MOCK_CIDR}
|
1455
|
-
show_subnet = self.driver.
|
1417
|
+
'cidr': t_constants.MOCK_CIDR})
|
1418
|
+
show_subnet = self.driver.network_proxy.get_subnet
|
1456
1419
|
show_subnet.return_value = fake_subnet
|
1457
1420
|
configs = self.driver.get_network_configs(load_balancer_mock)
|
1458
1421
|
self.assertEqual({}, configs)
|
@@ -1479,10 +1442,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1479
1442
|
# will return the same values if a method happens to call it
|
1480
1443
|
# multiple times for different subnets. We should be able to verify
|
1481
1444
|
# different requests get different expected data.
|
1482
|
-
expected_port_id = t_constants.MOCK_NEUTRON_PORT['
|
1445
|
+
expected_port_id = t_constants.MOCK_NEUTRON_PORT['id']
|
1483
1446
|
self.assertEqual(expected_port_id, config.ha_port.id)
|
1484
1447
|
self.assertEqual(expected_port_id, config.vrrp_port.id)
|
1485
|
-
expected_subnet_id = fake_subnet['
|
1448
|
+
expected_subnet_id = fake_subnet['id']
|
1486
1449
|
self.assertEqual(expected_subnet_id, config.ha_subnet.id)
|
1487
1450
|
self.assertEqual(expected_subnet_id, config.vrrp_subnet.id)
|
1488
1451
|
|
@@ -1520,10 +1483,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1520
1483
|
# will return the same values if a method happens to call it
|
1521
1484
|
# multiple times for different subnets. We should be able to verify
|
1522
1485
|
# different requests get different expected data.
|
1523
|
-
expected_port_id = t_constants.MOCK_NEUTRON_PORT['
|
1486
|
+
expected_port_id = t_constants.MOCK_NEUTRON_PORT['id']
|
1524
1487
|
self.assertEqual(expected_port_id, config.ha_port.id)
|
1525
1488
|
self.assertEqual(expected_port_id, config.vrrp_port.id)
|
1526
|
-
expected_subnet_id = fake_subnet['
|
1489
|
+
expected_subnet_id = fake_subnet['id']
|
1527
1490
|
self.assertEqual(expected_subnet_id, config.ha_subnet.id)
|
1528
1491
|
self.assertEqual(expected_subnet_id, config.vrrp_subnet.id)
|
1529
1492
|
|
@@ -1533,84 +1496,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1533
1496
|
configs = self.driver.get_network_configs(load_balancer_mock)
|
1534
1497
|
self.assertEqual(1, len(configs))
|
1535
1498
|
|
1536
|
-
@mock.patch('time.sleep')
|
1537
|
-
def test_wait_for_port_detach(self, mock_sleep):
|
1538
|
-
amphora = data_models.Amphora(
|
1539
|
-
id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
|
1540
|
-
compute_id=self.COMPUTE_ID, status=self.ACTIVE,
|
1541
|
-
lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
|
1542
|
-
ha_ip=self.HA_IP)
|
1543
|
-
ports = {"ports": [
|
1544
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1545
|
-
"ip_address": self.IP_ADDRESS_1}],
|
1546
|
-
"id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
|
1547
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1548
|
-
"ip_address": self.IP_ADDRESS_2}],
|
1549
|
-
"id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
|
1550
|
-
show_port_1_without_device_id = {"fixed_ips": [
|
1551
|
-
{"subnet_id": self.SUBNET_ID_1, "ip_address": self.IP_ADDRESS_1}],
|
1552
|
-
"id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1,
|
1553
|
-
"device_id": ''}
|
1554
|
-
show_port_2_with_device_id = {"fixed_ips": [
|
1555
|
-
{"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
|
1556
|
-
"id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
|
1557
|
-
"device_id": self.DEVICE_ID}
|
1558
|
-
show_port_2_without_device_id = {"fixed_ips": [
|
1559
|
-
{"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
|
1560
|
-
"id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
|
1561
|
-
"device_id": None}
|
1562
|
-
self.driver.neutron_client.list_ports.return_value = ports
|
1563
|
-
port_mock = mock.MagicMock()
|
1564
|
-
port_mock.get = mock.Mock(
|
1565
|
-
side_effect=[show_port_1_without_device_id,
|
1566
|
-
show_port_2_with_device_id,
|
1567
|
-
show_port_2_with_device_id,
|
1568
|
-
show_port_2_without_device_id])
|
1569
|
-
self.driver.neutron_client.show_port.return_value = port_mock
|
1570
|
-
self.driver.wait_for_port_detach(amphora)
|
1571
|
-
self.assertEqual(1, mock_sleep.call_count)
|
1572
|
-
|
1573
|
-
@mock.patch('time.time')
|
1574
|
-
@mock.patch('time.sleep')
|
1575
|
-
def test_wait_for_port_detach_timeout(self, mock_sleep, mock_time):
|
1576
|
-
mock_time.side_effect = [1, 2, 6]
|
1577
|
-
conf = oslo_fixture.Config(cfg.CONF)
|
1578
|
-
conf.config(group="networking", port_detach_timeout=5)
|
1579
|
-
amphora = data_models.Amphora(
|
1580
|
-
id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
|
1581
|
-
compute_id=self.COMPUTE_ID, status=self.ACTIVE,
|
1582
|
-
lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
|
1583
|
-
ha_ip=self.HA_IP)
|
1584
|
-
ports = {"ports": [
|
1585
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
|
1586
|
-
"ip_address": self.IP_ADDRESS_1}],
|
1587
|
-
"id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
|
1588
|
-
{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
|
1589
|
-
"ip_address": self.IP_ADDRESS_2}],
|
1590
|
-
"id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
|
1591
|
-
show_port_1_with_device_id = {"fixed_ips": [
|
1592
|
-
{"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
|
1593
|
-
"id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
|
1594
|
-
"device_id": self.DEVICE_ID}
|
1595
|
-
self.driver.neutron_client.list_ports.return_value = ports
|
1596
|
-
port_mock = mock.MagicMock()
|
1597
|
-
port_mock.get = mock.Mock(
|
1598
|
-
return_value=show_port_1_with_device_id)
|
1599
|
-
self.driver.neutron_client.show_port.return_value = port_mock
|
1600
|
-
self.assertRaises(network_base.TimeoutException,
|
1601
|
-
self.driver.wait_for_port_detach,
|
1602
|
-
amphora)
|
1603
|
-
|
1604
1499
|
def test_delete_port(self):
|
1605
1500
|
PORT_ID = uuidutils.generate_uuid()
|
1606
1501
|
|
1607
|
-
self.driver.
|
1608
|
-
mock.DEFAULT,
|
1502
|
+
self.driver.network_proxy.delete_port.side_effect = [
|
1503
|
+
mock.DEFAULT, os_exceptions.ResourceNotFound,
|
1504
|
+
Exception('boom')]
|
1609
1505
|
|
1610
1506
|
# Test successful delete
|
1611
1507
|
self.driver.delete_port(PORT_ID)
|
1612
1508
|
|
1613
|
-
self.driver.
|
1509
|
+
self.driver.network_proxy.delete_port.assert_called_once_with(PORT_ID)
|
1614
1510
|
|
1615
1511
|
# Test port NotFound (does not raise)
|
1616
1512
|
self.driver.delete_port(PORT_ID)
|
@@ -1623,24 +1519,24 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1623
1519
|
PORT_ID = uuidutils.generate_uuid()
|
1624
1520
|
TEST_STATE = 'test state'
|
1625
1521
|
|
1626
|
-
self.driver.
|
1627
|
-
mock.DEFAULT,
|
1522
|
+
self.driver.network_proxy.update_port.side_effect = [
|
1523
|
+
mock.DEFAULT, os_exceptions.ResourceNotFound, Exception('boom')]
|
1628
1524
|
|
1629
1525
|
# Test successful state set
|
1630
1526
|
self.driver.set_port_admin_state_up(PORT_ID, TEST_STATE)
|
1631
1527
|
|
1632
|
-
self.driver.
|
1633
|
-
PORT_ID,
|
1528
|
+
self.driver.network_proxy.update_port.assert_called_once_with(
|
1529
|
+
PORT_ID, admin_state_up=TEST_STATE)
|
1634
1530
|
|
1635
1531
|
# Test port NotFound
|
1636
1532
|
self.assertRaises(network_base.PortNotFound,
|
1637
1533
|
self.driver.set_port_admin_state_up,
|
1638
|
-
PORT_ID,
|
1534
|
+
PORT_ID, TEST_STATE)
|
1639
1535
|
|
1640
1536
|
# Test unknown exception
|
1641
1537
|
self.assertRaises(exceptions.NetworkServiceError,
|
1642
1538
|
self.driver.set_port_admin_state_up, PORT_ID,
|
1643
|
-
|
1539
|
+
TEST_STATE)
|
1644
1540
|
|
1645
1541
|
def test_create_port(self):
|
1646
1542
|
ADMIN_STATE_UP = False
|
@@ -1655,7 +1551,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1655
1551
|
SUBNET1_ID = uuidutils.generate_uuid()
|
1656
1552
|
FIXED_IPS = [{'subnet_id': SUBNET1_ID, 'ip_address': IP_ADDRESS1}]
|
1657
1553
|
|
1658
|
-
MOCK_NEUTRON_PORT = {
|
1554
|
+
MOCK_NEUTRON_PORT = Port(**{
|
1659
1555
|
'network_id': NETWORK_ID, 'device_id': t_constants.MOCK_DEVICE_ID,
|
1660
1556
|
'device_owner': t_constants.MOCK_DEVICE_OWNER,
|
1661
1557
|
'id': t_constants.MOCK_PORT_ID, 'name': FAKE_NAME,
|
@@ -1666,7 +1562,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1666
1562
|
'fixed_ips': [{'ip_address': IP_ADDRESS1,
|
1667
1563
|
'subnet_id': SUBNET1_ID}],
|
1668
1564
|
'security_groups': [],
|
1669
|
-
'qos_policy_id': QOS_POLICY_ID}
|
1565
|
+
'qos_policy_id': QOS_POLICY_ID})
|
1670
1566
|
|
1671
1567
|
reference_port_dict = {'admin_state_up': ADMIN_STATE_UP,
|
1672
1568
|
'device_id': t_constants.MOCK_DEVICE_ID,
|
@@ -1682,7 +1578,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1682
1578
|
'security_group_ids': [],
|
1683
1579
|
'status': t_constants.MOCK_STATUS}
|
1684
1580
|
|
1685
|
-
self.driver.
|
1581
|
+
self.driver.network_proxy.create_port.side_effect = [
|
1686
1582
|
MOCK_NEUTRON_PORT, MOCK_NEUTRON_PORT, Exception('boom')]
|
1687
1583
|
|
1688
1584
|
# Test successful path
|
@@ -1693,8 +1589,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1693
1589
|
qos_policy_id=QOS_POLICY_ID)
|
1694
1590
|
|
1695
1591
|
self.assertEqual(reference_port_dict, result.to_dict())
|
1696
|
-
self.driver.
|
1697
|
-
{
|
1592
|
+
self.driver.network_proxy.create_port.assert_called_once_with(
|
1593
|
+
**{
|
1698
1594
|
'network_id': NETWORK_ID, 'admin_state_up': ADMIN_STATE_UP,
|
1699
1595
|
'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
|
1700
1596
|
'allowed_address_pairs': [
|
@@ -1702,7 +1598,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1702
1598
|
'fixed_ips': [{
|
1703
1599
|
'subnet_id': SUBNET1_ID, 'ip_address': IP_ADDRESS1}],
|
1704
1600
|
'name': FAKE_NAME, 'qos_policy_id': QOS_POLICY_ID,
|
1705
|
-
'security_groups': [SECURITY_GROUP_ID]}
|
1601
|
+
'security_groups': [SECURITY_GROUP_ID]})
|
1706
1602
|
|
1707
1603
|
# Test minimal successful path
|
1708
1604
|
result = self.driver.create_port(NETWORK_ID)
|
@@ -1720,8 +1616,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1720
1616
|
|
1721
1617
|
# Test the case of security groups disabled in neutron
|
1722
1618
|
FAKE_SG_NAME = 'Fake_SG_name'
|
1723
|
-
FAKE_NEUTRON_SECURITY_GROUPS =
|
1724
|
-
t_constants.MOCK_SECURITY_GROUP]}
|
1619
|
+
FAKE_NEUTRON_SECURITY_GROUPS = iter([t_constants.MOCK_SECURITY_GROUP])
|
1725
1620
|
reference_sg_dict = {'id': t_constants.MOCK_SECURITY_GROUP_ID,
|
1726
1621
|
'name': t_constants.MOCK_SECURITY_GROUP_NAME,
|
1727
1622
|
'description': '', 'tags': [],
|
@@ -1729,15 +1624,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1729
1624
|
'stateful': None,
|
1730
1625
|
'project_id': t_constants.MOCK_PROJECT_ID}
|
1731
1626
|
|
1732
|
-
|
1733
|
-
|
1734
|
-
FAKE_NEUTRON_SECURITY_GROUPS,
|
1627
|
+
network_proxy = self.driver.network_proxy
|
1628
|
+
network_proxy.security_groups.side_effect = [
|
1629
|
+
FAKE_NEUTRON_SECURITY_GROUPS, iter([]), Exception('boom')]
|
1735
1630
|
|
1736
1631
|
self.driver.sec_grp_enabled = False
|
1737
1632
|
result = self.driver.get_security_group(FAKE_SG_NAME)
|
1738
1633
|
|
1739
1634
|
self.assertIsNone(result)
|
1740
|
-
|
1635
|
+
network_proxy.security_groups.assert_not_called()
|
1741
1636
|
|
1742
1637
|
# Test successful get of the security group
|
1743
1638
|
self.driver.sec_grp_enabled = True
|
@@ -1745,7 +1640,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1745
1640
|
result = self.driver.get_security_group(FAKE_SG_NAME)
|
1746
1641
|
|
1747
1642
|
self.assertEqual(reference_sg_dict, result.to_dict())
|
1748
|
-
|
1643
|
+
network_proxy.security_groups.assert_called_once_with(
|
1749
1644
|
name=FAKE_SG_NAME)
|
1750
1645
|
|
1751
1646
|
# Test no security groups returned
|