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.
Files changed (193) hide show
  1. octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
  2. octavia/amphorae/backends/agent/api_server/plug.py +21 -7
  3. octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
  4. octavia/amphorae/backends/agent/api_server/util.py +21 -0
  5. octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
  6. octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
  7. octavia/amphorae/backends/utils/interface.py +14 -6
  8. octavia/amphorae/backends/utils/interface_file.py +6 -3
  9. octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
  10. octavia/amphorae/drivers/driver_base.py +1 -2
  11. octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
  12. octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
  13. octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
  14. octavia/amphorae/drivers/noop_driver/driver.py +3 -5
  15. octavia/api/common/pagination.py +4 -4
  16. octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
  17. octavia/api/drivers/driver_agent/driver_get.py +22 -14
  18. octavia/api/drivers/driver_agent/driver_updater.py +8 -4
  19. octavia/api/drivers/utils.py +4 -2
  20. octavia/api/healthcheck/healthcheck_plugins.py +4 -2
  21. octavia/api/root_controller.py +4 -1
  22. octavia/api/v2/controllers/amphora.py +35 -38
  23. octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
  24. octavia/api/v2/controllers/availability_zones.py +22 -18
  25. octavia/api/v2/controllers/flavor_profiles.py +37 -28
  26. octavia/api/v2/controllers/flavors.py +19 -15
  27. octavia/api/v2/controllers/health_monitor.py +44 -33
  28. octavia/api/v2/controllers/l7policy.py +52 -40
  29. octavia/api/v2/controllers/l7rule.py +68 -55
  30. octavia/api/v2/controllers/listener.py +88 -61
  31. octavia/api/v2/controllers/load_balancer.py +52 -34
  32. octavia/api/v2/controllers/member.py +63 -52
  33. octavia/api/v2/controllers/pool.py +55 -42
  34. octavia/api/v2/controllers/quotas.py +5 -3
  35. octavia/api/v2/types/listener.py +15 -0
  36. octavia/cmd/octavia_worker.py +0 -3
  37. octavia/cmd/status.py +1 -4
  38. octavia/common/clients.py +25 -45
  39. octavia/common/config.py +64 -22
  40. octavia/common/constants.py +3 -2
  41. octavia/common/data_models.py +7 -1
  42. octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
  43. octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
  44. octavia/common/jinja/lvs/jinja_cfg.py +4 -2
  45. octavia/common/keystone.py +58 -5
  46. octavia/common/validate.py +35 -0
  47. octavia/compute/drivers/noop_driver/driver.py +6 -0
  48. octavia/controller/healthmanager/health_manager.py +3 -6
  49. octavia/controller/housekeeping/house_keeping.py +36 -37
  50. octavia/controller/worker/amphora_rate_limit.py +5 -4
  51. octavia/controller/worker/task_utils.py +57 -41
  52. octavia/controller/worker/v2/controller_worker.py +160 -103
  53. octavia/controller/worker/v2/flows/listener_flows.py +3 -0
  54. octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
  55. octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
  56. octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
  57. octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
  58. octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
  59. octavia/db/api.py +26 -23
  60. octavia/db/base_models.py +2 -2
  61. octavia/db/healthcheck.py +2 -1
  62. octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
  63. octavia/db/models.py +12 -2
  64. octavia/db/prepare.py +2 -0
  65. octavia/db/repositories.py +462 -482
  66. octavia/hacking/checks.py +1 -1
  67. octavia/network/base.py +0 -14
  68. octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
  69. octavia/network/drivers/neutron/base.py +65 -77
  70. octavia/network/drivers/neutron/utils.py +69 -85
  71. octavia/network/drivers/noop_driver/driver.py +0 -7
  72. octavia/statistics/drivers/update_db.py +10 -10
  73. octavia/tests/common/constants.py +91 -84
  74. octavia/tests/common/sample_data_models.py +13 -1
  75. octavia/tests/fixtures.py +32 -0
  76. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
  77. octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
  78. octavia/tests/functional/api/test_root_controller.py +3 -28
  79. octavia/tests/functional/api/v2/base.py +5 -3
  80. octavia/tests/functional/api/v2/test_amphora.py +18 -5
  81. octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
  82. octavia/tests/functional/api/v2/test_listener.py +51 -19
  83. octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
  84. octavia/tests/functional/db/base.py +31 -16
  85. octavia/tests/functional/db/test_models.py +27 -28
  86. octavia/tests/functional/db/test_repositories.py +407 -50
  87. octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
  88. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
  89. octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
  90. octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
  91. octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
  92. octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
  93. octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
  94. octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
  95. octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
  96. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
  97. octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
  98. octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
  99. octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
  100. octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
  101. octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
  102. octavia/tests/unit/base.py +6 -0
  103. octavia/tests/unit/cmd/test_interface.py +2 -2
  104. octavia/tests/unit/cmd/test_status.py +2 -2
  105. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
  106. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
  107. octavia/tests/unit/common/test_clients.py +0 -39
  108. octavia/tests/unit/common/test_keystone.py +54 -0
  109. octavia/tests/unit/common/test_validate.py +67 -0
  110. octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
  111. octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
  112. octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
  113. octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
  114. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
  115. octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
  116. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
  117. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
  118. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
  119. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
  120. octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
  121. octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
  122. octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
  123. octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
  124. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
  125. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
  126. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
  127. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
  128. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
  129. octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
  130. octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
  131. octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
  132. octavia/controller/queue/v1/__init__.py +0 -11
  133. octavia/controller/queue/v1/consumer.py +0 -64
  134. octavia/controller/queue/v1/endpoints.py +0 -160
  135. octavia/controller/worker/v1/__init__.py +0 -11
  136. octavia/controller/worker/v1/controller_worker.py +0 -1157
  137. octavia/controller/worker/v1/flows/__init__.py +0 -11
  138. octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
  139. octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
  140. octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
  141. octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
  142. octavia/controller/worker/v1/flows/listener_flows.py +0 -128
  143. octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
  144. octavia/controller/worker/v1/flows/member_flows.py +0 -230
  145. octavia/controller/worker/v1/flows/pool_flows.py +0 -127
  146. octavia/controller/worker/v1/tasks/__init__.py +0 -11
  147. octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
  148. octavia/controller/worker/v1/tasks/cert_task.py +0 -51
  149. octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
  150. octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
  151. octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
  152. octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
  153. octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
  154. octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
  155. octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
  156. octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
  157. octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
  158. octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
  159. octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
  160. octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
  161. octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
  162. octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
  163. octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
  164. octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
  165. octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
  166. octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
  167. octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
  168. octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
  169. octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
  170. octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
  171. octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
  172. octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
  173. octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
  174. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
  175. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
  176. octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
  177. octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
  178. octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
  179. octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
  180. octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
  181. octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
  182. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
  183. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  184. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  185. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  186. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  187. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  188. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  189. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  190. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
  191. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
  192. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
  193. {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.neutron_client.Client',
46
- autospec=True) as neutron_client:
47
- client = neutron_client(clients.NEUTRON_VERSION)
48
- client.list_extensions.return_value = {
49
- 'extensions': [
50
- {'alias': neutron_base.SEC_GRP_EXT_ALIAS}
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
- show_extension = self.driver.neutron_client.show_extension
60
- show_extension.side_effect = [None, neutron_client_exceptions.NotFound]
61
-
62
- self.assertTrue(self.driver._check_extension_enabled('TEST1'))
63
- self.assertFalse(self.driver._check_extension_enabled('TEST2'))
64
- show_extension.assert_has_calls(
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
- show_extension = self.driver.neutron_client.show_extension
69
-
70
- self.driver._check_extension_cache = {'TEST1': True, 'TEST2': False}
71
- self.assertTrue(self.driver._check_extension_enabled('TEST1'))
72
- self.assertFalse(self.driver._check_extension_enabled('TEST2'))
73
- self.assertNotIn(mock.call('TEST1'), show_extension.mock_calls)
74
- self.assertNotIn(mock.call('TEST2'), show_extension.mock_calls)
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
- 'port': {
81
- 'allowed_address_pairs': [
82
- {'ip_address': t_constants.MOCK_IP_ADDRESS}]}}
83
- self.driver.neutron_client.update_port.assert_has_calls([
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
- 'port': {
91
- 'security_groups': [
92
- t_constants.MOCK_SECURITY_GROUP_ID]}}
93
- self.driver.neutron_client.update_port.assert_has_calls([
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.neutron_client.update_port.side_effect = (
98
- neutron_client_exceptions.PortNotFoundClient)
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.neutron_client.update_port.side_effect = IOError
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.neutron_client.list_ports.return_value = {
113
- "ports": [
114
- t_constants.MOCK_NEUTRON_PORT['port'],
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['port'], ports)
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
- 'security_group': {
127
- 'name': t_constants.MOCK_SECURITY_GROUP_NAME}}
128
- self.driver.neutron_client.create_security_group.assert_has_calls([
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.neutron_client.create_security_group()[
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
- 'security_group_rule': {
146
- 'security_group_id': t_constants.MOCK_SECURITY_GROUP_ID,
147
- 'direction': 1,
148
- 'protocol': 2,
149
- 'port_range_min': 3,
150
- 'port_range_max': 4,
151
- 'ethertype': 5,
152
- 'remote_ip_prefix': '10.0.0.0/24'}}
153
- self.driver.neutron_client.create_security_group_rule.assert_has_calls(
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.convert_port_dict_to_model(t_constants.MOCK_NEUTRON_PORT)
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.neutron_client.list_ports
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['port']
185
+ port1 = t_constants.MOCK_NEUTRON_PORT
190
186
  port2 = {
191
187
  'id': '4', 'network_id': '3', 'fixed_ips':
192
- [{'ip_address': '10.0.0.2'}]
188
+ [{'ip_address': '10.0.0.2'}]
193
189
  }
194
- list_ports.return_value = {'ports': [port1, port2]}
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.neutron_client.show_network
211
- show_network.return_value = {'network': {
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.show_network
223
- show_network.return_value = {'network': {
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.neutron_client.show_subnet
240
- show_subnet.return_value = {'subnet': {
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.show_subnet
253
- show_subnet.return_value = {'subnet': {
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.neutron_client.show_port
271
- show_port.return_value = {'port': {
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.show_port
294
- show_port.return_value = {'port': {
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.neutron_client.list_networks
318
- list_network.return_value = {'networks': [{'network': {
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 = neutron_client_exceptions.NotFound
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.neutron_client.list_subnets
341
- list_subnet.return_value = {'subnets': [{'subnet': {
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 = neutron_client_exceptions.NotFound
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.neutron_client.list_ports
364
- list_port.return_value = {'ports': [{'port': {
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 = neutron_client_exceptions.NotFound
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.neutron_client.list_ports
397
- list_port.return_value = {'ports': [{'port': {
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 = neutron_client_exceptions.NotFound
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.neutron_client.list_ports
440
- list_port.return_value = {
441
- 'ports': [t_constants.MOCK_NEUTRON_PORT,
442
- t_constants.MOCK_NEUTRON_PORT2,
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 = neutron_client_exceptions.NotFound
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.neutron_client.list_ports
475
- list_port.return_value = {
476
- 'ports': [t_constants.MOCK_NEUTRON_PORT,
477
- t_constants.MOCK_NEUTRON_PORT2,
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.neutron_client.list_ports
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.neutron_client.list_ports
512
- list_port.return_value = {'ports': []}
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.neutron_client.show_qos_policy
520
- get_qos.return_value = {'policy': {
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 = neutron_client_exceptions.NotFound
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 = neutron_client_exceptions.ServiceUnavailable
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.neutron_client.update_port
542
- update_port.side_effect = neutron_client_exceptions.PortNotFoundClient
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 = neutron_client_exceptions.ServiceUnavailable
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.neutron_client.show_network_ip_availability)
556
+ self.driver.network_proxy.get_network_ip_availability)
557
557
  show_network_ip_availability.return_value = (
558
- {'network_ip_availability': {
559
- 'network_id': t_constants.MOCK_NETWORK_ID,
560
- 'subnet_ip_availability': t_constants.MOCK_SUBNET_IP_AVAILABILITY
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.neutron_client.show_port
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
- 'port': {
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
- ]
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.neutron_client.update_port.assert_called_once_with(
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.neutron_client.show_port
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
- 'port': {
621
- 'fixed_ips': [
622
- {
623
- 'subnet_id': t_constants.MOCK_SUBNET_ID,
624
- 'ip_address': t_constants.MOCK_IP_ADDRESS,
625
- 'subnet': None
626
- }, {
627
- 'subnet_id': t_constants.MOCK_SUBNET_ID2,
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.neutron_client.update_port.assert_called_once_with(
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.neutron_client.show_port
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.neutron_client.update_port.side_effect = Exception
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.neutron_client.show_port
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.MOCK_SUBNET_ID,
698
- 'ip_address': t_constants.MOCK_IP_ADDRESS,
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.neutron_client.update_port.side_effect = Exception
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,