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
@@ -1,792 +0,0 @@
1
- # Copyright 2015 Hewlett-Packard Development Company, L.P.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"); you may
4
- # not use this file except in compliance with the License. You may obtain
5
- # a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
- # License for the specific language governing permissions and limitations
13
- # under the License.
14
- #
15
- from unittest import mock
16
-
17
- from cryptography import fernet
18
- from oslo_config import cfg
19
- from oslo_config import fixture as oslo_fixture
20
- from oslo_utils import uuidutils
21
- from taskflow.types import failure
22
-
23
- from octavia.amphorae.driver_exceptions import exceptions as driver_except
24
- from octavia.common import constants
25
- from octavia.common import data_models
26
- from octavia.common import utils
27
- from octavia.controller.worker.v1.tasks import amphora_driver_tasks
28
- from octavia.db import repositories as repo
29
- import octavia.tests.unit.base as base
30
-
31
-
32
- AMP_ID = uuidutils.generate_uuid()
33
- COMPUTE_ID = uuidutils.generate_uuid()
34
- LISTENER_ID = uuidutils.generate_uuid()
35
- LB_ID = uuidutils.generate_uuid()
36
- CONN_MAX_RETRIES = 10
37
- CONN_RETRY_INTERVAL = 6
38
- FAKE_CONFIG_FILE = 'fake config file'
39
-
40
- _amphora_mock = mock.MagicMock()
41
- _amphora_mock.id = AMP_ID
42
- _amphora_mock.status = constants.AMPHORA_ALLOCATED
43
- _amphora_mock.vrrp_ip = '198.51.100.65'
44
- _load_balancer_mock = mock.MagicMock()
45
- _load_balancer_mock.id = LB_ID
46
- _listener_mock = mock.MagicMock()
47
- _listener_mock.id = LISTENER_ID
48
- _load_balancer_mock.listeners = [_listener_mock]
49
- _vip_mock = mock.MagicMock()
50
- _load_balancer_mock.vip = _vip_mock
51
- _LB_mock = mock.MagicMock()
52
- _amphorae_mock = [_amphora_mock]
53
- _amphora_network_config_mock = mock.MagicMock()
54
- _amphorae_network_config_mock = {
55
- _amphora_mock.id: _amphora_network_config_mock}
56
- _network_mock = mock.MagicMock()
57
- _port_mock = mock.MagicMock()
58
- _ports_mock = [_port_mock]
59
- _session_mock = mock.MagicMock()
60
-
61
-
62
- @mock.patch('octavia.db.repositories.AmphoraRepository.update')
63
- @mock.patch('octavia.db.repositories.ListenerRepository.update')
64
- @mock.patch('octavia.db.repositories.ListenerRepository.get',
65
- return_value=_listener_mock)
66
- @mock.patch('octavia.db.api.get_session', return_value=_session_mock)
67
- @mock.patch('octavia.controller.worker.v1.tasks.amphora_driver_tasks.LOG')
68
- @mock.patch('oslo_utils.uuidutils.generate_uuid', return_value=AMP_ID)
69
- @mock.patch('stevedore.driver.DriverManager.driver')
70
- class TestAmphoraDriverTasks(base.TestCase):
71
-
72
- def setUp(self):
73
-
74
- _LB_mock.amphorae = [_amphora_mock]
75
- _LB_mock.id = LB_ID
76
- conf = oslo_fixture.Config(cfg.CONF)
77
- conf.config(group="haproxy_amphora",
78
- active_connection_max_retries=CONN_MAX_RETRIES)
79
- conf.config(group="haproxy_amphora",
80
- active_connection_retry_interval=CONN_RETRY_INTERVAL)
81
- conf.config(group="controller_worker",
82
- loadbalancer_topology=constants.TOPOLOGY_SINGLE)
83
- self.timeout_dict = {constants.REQ_CONN_TIMEOUT: 1,
84
- constants.REQ_READ_TIMEOUT: 2,
85
- constants.CONN_MAX_RETRIES: 3,
86
- constants.CONN_RETRY_INTERVAL: 4}
87
- super().setUp()
88
-
89
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
90
- def test_amp_listeners_update(self,
91
- mock_lb_repo_get,
92
- mock_driver,
93
- mock_generate_uuid,
94
- mock_log,
95
- mock_get_session,
96
- mock_listener_repo_get,
97
- mock_listener_repo_update,
98
- mock_amphora_repo_update):
99
-
100
- mock_lb_repo_get.return_value = _LB_mock
101
- amp_list_update_obj = amphora_driver_tasks.AmpListenersUpdate()
102
- amp_list_update_obj.execute(_load_balancer_mock, _amphora_mock,
103
- self.timeout_dict)
104
-
105
- mock_driver.update_amphora_listeners.assert_called_once_with(
106
- _LB_mock, _amphora_mock, self.timeout_dict)
107
-
108
- mock_driver.update_amphora_listeners.side_effect = Exception('boom')
109
-
110
- amp_list_update_obj.execute(_load_balancer_mock, _amphora_mock,
111
- self.timeout_dict)
112
-
113
- mock_amphora_repo_update.assert_called_once_with(
114
- _session_mock, AMP_ID, status=constants.ERROR)
115
-
116
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
117
- def test_amphorae_listeners_update(self,
118
- mock_lb_repo_get,
119
- mock_driver,
120
- mock_generate_uuid,
121
- mock_log,
122
- mock_get_session,
123
- mock_listener_repo_get,
124
- mock_listener_repo_update,
125
- mock_amphora_repo_update):
126
-
127
- mock_lb_repo_get.return_value = _LB_mock
128
- amp_list_update_obj = amphora_driver_tasks.AmphoraIndexListenerUpdate()
129
- amp_list_update_obj.execute(_load_balancer_mock, 0,
130
- [_amphora_mock], self.timeout_dict)
131
-
132
- mock_driver.update_amphora_listeners.assert_called_once_with(
133
- _LB_mock, _amphora_mock, self.timeout_dict)
134
-
135
- mock_driver.update_amphora_listeners.side_effect = Exception('boom')
136
-
137
- amp_list_update_obj.execute(_load_balancer_mock, 0,
138
- [_amphora_mock], self.timeout_dict)
139
-
140
- mock_amphora_repo_update.assert_called_once_with(
141
- _session_mock, AMP_ID, status=constants.ERROR)
142
-
143
- def test_listener_update(self,
144
- mock_driver,
145
- mock_generate_uuid,
146
- mock_log,
147
- mock_get_session,
148
- mock_listener_repo_get,
149
- mock_listener_repo_update,
150
- mock_amphora_repo_update):
151
-
152
- listener_update_obj = amphora_driver_tasks.ListenersUpdate()
153
- listener_update_obj.execute(_load_balancer_mock)
154
-
155
- mock_driver.update.assert_called_once_with(_load_balancer_mock)
156
-
157
- # Test the revert
158
- amp = listener_update_obj.revert(_load_balancer_mock)
159
- repo.ListenerRepository.update.assert_called_once_with(
160
- _session_mock,
161
- id=LISTENER_ID,
162
- provisioning_status=constants.ERROR)
163
- self.assertIsNone(amp)
164
-
165
- # Test the revert with exception
166
- repo.ListenerRepository.update.reset_mock()
167
- mock_listener_repo_update.side_effect = Exception('fail')
168
- amp = listener_update_obj.revert(_load_balancer_mock)
169
- repo.ListenerRepository.update.assert_called_once_with(
170
- _session_mock,
171
- id=LISTENER_ID,
172
- provisioning_status=constants.ERROR)
173
- self.assertIsNone(amp)
174
-
175
- def test_listeners_update(self,
176
- mock_driver,
177
- mock_generate_uuid,
178
- mock_log,
179
- mock_get_session,
180
- mock_listener_repo_get,
181
- mock_listener_repo_update,
182
- mock_amphora_repo_update):
183
- listeners_update_obj = amphora_driver_tasks.ListenersUpdate()
184
- listeners = [data_models.Listener(id='listener1'),
185
- data_models.Listener(id='listener2')]
186
- vip = data_models.Vip(ip_address='10.0.0.1')
187
- lb = data_models.LoadBalancer(id='lb1', listeners=listeners, vip=vip)
188
- listeners_update_obj.execute(lb)
189
- mock_driver.update.assert_called_once_with(lb)
190
- self.assertEqual(1, mock_driver.update.call_count)
191
-
192
- # Test the revert
193
- amp = listeners_update_obj.revert(lb)
194
- expected_db_calls = [mock.call(_session_mock,
195
- id=listeners[0].id,
196
- provisioning_status=constants.ERROR),
197
- mock.call(_session_mock,
198
- id=listeners[1].id,
199
- provisioning_status=constants.ERROR)]
200
- repo.ListenerRepository.update.assert_has_calls(expected_db_calls)
201
- self.assertEqual(2, repo.ListenerRepository.update.call_count)
202
- self.assertIsNone(amp)
203
-
204
- @mock.patch('octavia.controller.worker.task_utils.TaskUtils.'
205
- 'mark_listener_prov_status_error')
206
- def test_amphora_index_listeners_reload(
207
- self, mock_prov_status_error, mock_driver, mock_generate_uuid,
208
- mock_log, mock_get_session, mock_listener_repo_get,
209
- mock_listener_repo_update, mock_amphora_repo_update):
210
- amphora_mock = mock.MagicMock()
211
- listeners_reload_obj = (
212
- amphora_driver_tasks.AmphoraIndexListenersReload())
213
- mock_lb = mock.MagicMock()
214
- mock_listener = mock.MagicMock()
215
- mock_listener.id = '12345'
216
- mock_driver.reload.side_effect = [mock.DEFAULT, Exception('boom')]
217
-
218
- # Test no listeners
219
- mock_lb.listeners = None
220
- listeners_reload_obj.execute(mock_lb, 0, None)
221
- mock_driver.reload.assert_not_called()
222
-
223
- # Test with listeners
224
- mock_driver.start.reset_mock()
225
- mock_lb.listeners = [mock_listener]
226
- listeners_reload_obj.execute(mock_lb, 0, [amphora_mock],
227
- timeout_dict=self.timeout_dict)
228
- mock_driver.reload.assert_called_once_with(mock_lb, amphora_mock,
229
- self.timeout_dict)
230
-
231
- # Test with reload exception
232
- mock_driver.reload.reset_mock()
233
- listeners_reload_obj.execute(mock_lb, 0, [amphora_mock],
234
- timeout_dict=self.timeout_dict)
235
- mock_driver.reload.assert_called_once_with(mock_lb, amphora_mock,
236
- self.timeout_dict)
237
- mock_amphora_repo_update.assert_called_once_with(
238
- _session_mock, amphora_mock.id, status=constants.ERROR)
239
-
240
- @mock.patch('octavia.controller.worker.task_utils.TaskUtils.'
241
- 'mark_listener_prov_status_error')
242
- def test_listeners_start(self,
243
- mock_prov_status_error,
244
- mock_driver,
245
- mock_generate_uuid,
246
- mock_log,
247
- mock_get_session,
248
- mock_listener_repo_get,
249
- mock_listener_repo_update,
250
- mock_amphora_repo_update):
251
- listeners_start_obj = amphora_driver_tasks.ListenersStart()
252
- mock_lb = mock.MagicMock()
253
- mock_listener = mock.MagicMock()
254
- mock_listener.id = '12345'
255
-
256
- # Test no listeners
257
- mock_lb.listeners = None
258
- listeners_start_obj.execute(mock_lb)
259
- mock_driver.start.assert_not_called()
260
-
261
- # Test with listeners
262
- mock_driver.start.reset_mock()
263
- mock_lb.listeners = [mock_listener]
264
- listeners_start_obj.execute(mock_lb)
265
- mock_driver.start.assert_called_once_with(mock_lb, None)
266
-
267
- # Test revert
268
- mock_lb.listeners = [mock_listener]
269
- listeners_start_obj.revert(mock_lb)
270
- mock_prov_status_error.assert_called_once_with('12345')
271
-
272
- def test_listener_delete(self,
273
- mock_driver,
274
- mock_generate_uuid,
275
- mock_log,
276
- mock_get_session,
277
- mock_listener_repo_get,
278
- mock_listener_repo_update,
279
- mock_amphora_repo_update):
280
-
281
- listener_delete_obj = amphora_driver_tasks.ListenerDelete()
282
- listener_delete_obj.execute(_listener_mock)
283
-
284
- mock_driver.delete.assert_called_once_with(_listener_mock)
285
-
286
- # Test the revert
287
- amp = listener_delete_obj.revert(_listener_mock)
288
- repo.ListenerRepository.update.assert_called_once_with(
289
- _session_mock,
290
- id=LISTENER_ID,
291
- provisioning_status=constants.ERROR)
292
- self.assertIsNone(amp)
293
-
294
- # Test the revert with exception
295
- repo.ListenerRepository.update.reset_mock()
296
- mock_listener_repo_update.side_effect = Exception('fail')
297
- amp = listener_delete_obj.revert(_listener_mock)
298
- repo.ListenerRepository.update.assert_called_once_with(
299
- _session_mock,
300
- id=LISTENER_ID,
301
- provisioning_status=constants.ERROR)
302
- self.assertIsNone(amp)
303
-
304
- def test_amphora_get_info(self,
305
- mock_driver,
306
- mock_generate_uuid,
307
- mock_log,
308
- mock_get_session,
309
- mock_listener_repo_get,
310
- mock_listener_repo_update,
311
- mock_amphora_repo_update):
312
-
313
- amphora_get_info_obj = amphora_driver_tasks.AmphoraGetInfo()
314
- amphora_get_info_obj.execute(_amphora_mock)
315
-
316
- mock_driver.get_info.assert_called_once_with(
317
- _amphora_mock)
318
-
319
- def test_amphora_get_diagnostics(self,
320
- mock_driver,
321
- mock_generate_uuid,
322
- mock_log,
323
- mock_get_session,
324
- mock_listener_repo_get,
325
- mock_listener_repo_update,
326
- mock_amphora_repo_update):
327
-
328
- amphora_get_diagnostics_obj = (amphora_driver_tasks.
329
- AmphoraGetDiagnostics())
330
- amphora_get_diagnostics_obj.execute(_amphora_mock)
331
-
332
- mock_driver.get_diagnostics.assert_called_once_with(
333
- _amphora_mock)
334
-
335
- def test_amphora_finalize(self,
336
- mock_driver,
337
- mock_generate_uuid,
338
- mock_log,
339
- mock_get_session,
340
- mock_listener_repo_get,
341
- mock_listener_repo_update,
342
- mock_amphora_repo_update):
343
-
344
- amphora_finalize_obj = amphora_driver_tasks.AmphoraFinalize()
345
- amphora_finalize_obj.execute(_amphora_mock)
346
-
347
- mock_driver.finalize_amphora.assert_called_once_with(
348
- _amphora_mock)
349
-
350
- # Test revert
351
- amp = amphora_finalize_obj.revert(None, _amphora_mock)
352
- repo.AmphoraRepository.update.assert_called_once_with(
353
- _session_mock,
354
- id=AMP_ID,
355
- status=constants.ERROR)
356
- self.assertIsNone(amp)
357
-
358
- # Test revert with exception
359
- repo.AmphoraRepository.update.reset_mock()
360
- mock_amphora_repo_update.side_effect = Exception('fail')
361
- amp = amphora_finalize_obj.revert(None, _amphora_mock)
362
- repo.AmphoraRepository.update.assert_called_once_with(
363
- _session_mock,
364
- id=AMP_ID,
365
- status=constants.ERROR)
366
- self.assertIsNone(amp)
367
-
368
- # Test revert when this task failed
369
- repo.AmphoraRepository.update.reset_mock()
370
- amp = amphora_finalize_obj.revert(
371
- failure.Failure.from_exception(Exception('boom')), _amphora_mock)
372
- repo.AmphoraRepository.update.assert_not_called()
373
-
374
- def test_amphora_post_network_plug(self,
375
- mock_driver,
376
- mock_generate_uuid,
377
- mock_log,
378
- mock_get_session,
379
- mock_listener_repo_get,
380
- mock_listener_repo_update,
381
- mock_amphora_repo_update):
382
-
383
- amphora_post_network_plug_obj = (amphora_driver_tasks.
384
- AmphoraPostNetworkPlug())
385
- amphora_post_network_plug_obj.execute(_amphora_mock, _ports_mock,
386
- _amphora_network_config_mock)
387
-
388
- (mock_driver.post_network_plug.
389
- assert_called_once_with)(_amphora_mock, _port_mock,
390
- _amphora_network_config_mock)
391
-
392
- # Test revert
393
- amp = amphora_post_network_plug_obj.revert(None, _amphora_mock)
394
- repo.AmphoraRepository.update.assert_called_once_with(
395
- _session_mock,
396
- id=AMP_ID,
397
- status=constants.ERROR)
398
-
399
- self.assertIsNone(amp)
400
-
401
- # Test revert with exception
402
- repo.AmphoraRepository.update.reset_mock()
403
- mock_amphora_repo_update.side_effect = Exception('fail')
404
- amp = amphora_post_network_plug_obj.revert(None, _amphora_mock)
405
- repo.AmphoraRepository.update.assert_called_once_with(
406
- _session_mock,
407
- id=AMP_ID,
408
- status=constants.ERROR)
409
-
410
- self.assertIsNone(amp)
411
-
412
- # Test revert when this task failed
413
- repo.AmphoraRepository.update.reset_mock()
414
- amp = amphora_post_network_plug_obj.revert(
415
- failure.Failure.from_exception(Exception('boom')), _amphora_mock)
416
- repo.AmphoraRepository.update.assert_not_called()
417
-
418
- @mock.patch('octavia.db.repositories.AmphoraRepository.get_all')
419
- def test_amphorae_post_network_plug(self, mock_amp_get_all, mock_driver,
420
- mock_generate_uuid,
421
- mock_log,
422
- mock_get_session,
423
- mock_listener_repo_get,
424
- mock_listener_repo_update,
425
- mock_amphora_repo_update):
426
- mock_driver.get_network.return_value = _network_mock
427
- _amphora_mock.id = AMP_ID
428
- _amphora_mock.compute_id = COMPUTE_ID
429
- mock_amp_get_all.return_value = [[_amphora_mock], None]
430
- amphora_post_network_plug_obj = (amphora_driver_tasks.
431
- AmphoraePostNetworkPlug())
432
-
433
- port_mock = mock.Mock()
434
- _deltas_mock = {_amphora_mock.id: [port_mock]}
435
-
436
- amphora_post_network_plug_obj.execute(_LB_mock, _deltas_mock,
437
- _amphorae_network_config_mock)
438
-
439
- (mock_driver.post_network_plug.
440
- assert_called_once_with(_amphora_mock, port_mock,
441
- _amphora_network_config_mock))
442
-
443
- # Test with no ports to plug
444
- mock_driver.post_network_plug.reset_mock()
445
-
446
- _deltas_mock = {'0': [port_mock]}
447
-
448
- amphora_post_network_plug_obj.execute(_LB_mock, _deltas_mock,
449
- _amphora_network_config_mock)
450
- mock_driver.post_network_plug.assert_not_called()
451
-
452
- # Test revert
453
- amp = amphora_post_network_plug_obj.revert(None, _LB_mock,
454
- _deltas_mock)
455
- repo.AmphoraRepository.update.assert_called_once_with(
456
- _session_mock,
457
- id=AMP_ID,
458
- status=constants.ERROR)
459
-
460
- self.assertIsNone(amp)
461
-
462
- # Test revert with exception
463
- repo.AmphoraRepository.update.reset_mock()
464
- mock_amphora_repo_update.side_effect = Exception('fail')
465
- amp = amphora_post_network_plug_obj.revert(None, _LB_mock,
466
- _deltas_mock)
467
- repo.AmphoraRepository.update.assert_called_once_with(
468
- _session_mock,
469
- id=AMP_ID,
470
- status=constants.ERROR)
471
-
472
- self.assertIsNone(amp)
473
-
474
- # Test revert when this task failed
475
- repo.AmphoraRepository.update.reset_mock()
476
- amp = amphora_post_network_plug_obj.revert(
477
- failure.Failure.from_exception(Exception('boom')), _amphora_mock,
478
- None)
479
- repo.AmphoraRepository.update.assert_not_called()
480
-
481
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
482
- def test_amphora_post_vip_plug(self,
483
- mock_loadbalancer_repo_update,
484
- mock_driver,
485
- mock_generate_uuid,
486
- mock_log,
487
- mock_get_session,
488
- mock_listener_repo_get,
489
- mock_listener_repo_update,
490
- mock_amphora_repo_update):
491
-
492
- amphorae_net_config_mock = mock.Mock()
493
- amphora_post_vip_plug_obj = amphora_driver_tasks.AmphoraPostVIPPlug()
494
- amphora_post_vip_plug_obj.execute(_amphora_mock,
495
- _LB_mock,
496
- amphorae_net_config_mock)
497
-
498
- mock_driver.post_vip_plug.assert_called_once_with(
499
- _amphora_mock, _LB_mock, amphorae_net_config_mock)
500
-
501
- # Test revert
502
- amp = amphora_post_vip_plug_obj.revert(None, _amphora_mock, _LB_mock)
503
- repo.AmphoraRepository.update.assert_called_once_with(
504
- _session_mock,
505
- id=AMP_ID,
506
- status=constants.ERROR)
507
- repo.LoadBalancerRepository.update.assert_not_called()
508
-
509
- self.assertIsNone(amp)
510
-
511
- # Test revert with repo exceptions
512
- repo.AmphoraRepository.update.reset_mock()
513
- repo.LoadBalancerRepository.update.reset_mock()
514
- mock_amphora_repo_update.side_effect = Exception('fail')
515
- mock_loadbalancer_repo_update.side_effect = Exception('fail')
516
- amp = amphora_post_vip_plug_obj.revert(None, _amphora_mock, _LB_mock)
517
- repo.AmphoraRepository.update.assert_called_once_with(
518
- _session_mock,
519
- id=AMP_ID,
520
- status=constants.ERROR)
521
- repo.LoadBalancerRepository.update.assert_not_called()
522
-
523
- self.assertIsNone(amp)
524
-
525
- # Test revert when this task failed
526
- repo.AmphoraRepository.update.reset_mock()
527
- amp = amphora_post_vip_plug_obj.revert(
528
- failure.Failure.from_exception(Exception('boom')), _amphora_mock,
529
- None)
530
- repo.AmphoraRepository.update.assert_not_called()
531
-
532
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
533
- def test_amphorae_post_vip_plug(self,
534
- mock_loadbalancer_repo_update,
535
- mock_driver,
536
- mock_generate_uuid,
537
- mock_log,
538
- mock_get_session,
539
- mock_listener_repo_get,
540
- mock_listener_repo_update,
541
- mock_amphora_repo_update):
542
-
543
- amphorae_net_config_mock = mock.Mock()
544
- amphora_post_vip_plug_obj = amphora_driver_tasks.AmphoraePostVIPPlug()
545
- amphora_post_vip_plug_obj.execute(_LB_mock,
546
- amphorae_net_config_mock)
547
-
548
- mock_driver.post_vip_plug.assert_called_once_with(
549
- _amphora_mock, _LB_mock, amphorae_net_config_mock)
550
-
551
- def test_amphora_cert_upload(self,
552
- mock_driver,
553
- mock_generate_uuid,
554
- mock_log,
555
- mock_get_session,
556
- mock_listener_repo_get,
557
- mock_listener_repo_update,
558
- mock_amphora_repo_update):
559
- key = utils.get_compatible_server_certs_key_passphrase()
560
- fer = fernet.Fernet(key)
561
- pem_file_mock = fer.encrypt(
562
- utils.get_compatible_value('test-pem-file'))
563
- amphora_cert_upload_mock = amphora_driver_tasks.AmphoraCertUpload()
564
- amphora_cert_upload_mock.execute(_amphora_mock, pem_file_mock)
565
-
566
- mock_driver.upload_cert_amp.assert_called_once_with(
567
- _amphora_mock, fer.decrypt(pem_file_mock))
568
-
569
- def test_amphora_update_vrrp_interface(self,
570
- mock_driver,
571
- mock_generate_uuid,
572
- mock_log,
573
- mock_get_session,
574
- mock_listener_repo_get,
575
- mock_listener_repo_update,
576
- mock_amphora_repo_update):
577
- FAKE_INTERFACE = 'fake0'
578
- _LB_mock.amphorae = _amphorae_mock
579
- mock_driver.get_interface_from_ip.side_effect = [FAKE_INTERFACE,
580
- Exception('boom')]
581
-
582
- timeout_dict = {constants.CONN_MAX_RETRIES: CONN_MAX_RETRIES,
583
- constants.CONN_RETRY_INTERVAL: CONN_RETRY_INTERVAL}
584
-
585
- amphora_update_vrrp_interface_obj = (
586
- amphora_driver_tasks.AmphoraUpdateVRRPInterface())
587
- amphora_update_vrrp_interface_obj.execute(_amphora_mock, timeout_dict)
588
- mock_driver.get_interface_from_ip.assert_called_once_with(
589
- _amphora_mock, _amphora_mock.vrrp_ip, timeout_dict=timeout_dict)
590
- mock_amphora_repo_update.assert_called_once_with(
591
- _session_mock, _amphora_mock.id, vrrp_interface=FAKE_INTERFACE)
592
-
593
- # Test with an exception
594
- mock_amphora_repo_update.reset_mock()
595
- amphora_update_vrrp_interface_obj.execute(_amphora_mock, timeout_dict)
596
- mock_amphora_repo_update.assert_called_once_with(
597
- _session_mock, _amphora_mock.id, status=constants.ERROR)
598
-
599
- def test_amphora_index_update_vrrp_interface(
600
- self, mock_driver, mock_generate_uuid, mock_log, mock_get_session,
601
- mock_listener_repo_get, mock_listener_repo_update,
602
- mock_amphora_repo_update):
603
- FAKE_INTERFACE = 'fake0'
604
- _LB_mock.amphorae = _amphorae_mock
605
- mock_driver.get_interface_from_ip.side_effect = [FAKE_INTERFACE,
606
- Exception('boom')]
607
-
608
- timeout_dict = {constants.CONN_MAX_RETRIES: CONN_MAX_RETRIES,
609
- constants.CONN_RETRY_INTERVAL: CONN_RETRY_INTERVAL}
610
-
611
- amphora_update_vrrp_interface_obj = (
612
- amphora_driver_tasks.AmphoraIndexUpdateVRRPInterface())
613
- amphora_update_vrrp_interface_obj.execute(
614
- 0, [_amphora_mock], timeout_dict)
615
- mock_driver.get_interface_from_ip.assert_called_once_with(
616
- _amphora_mock, _amphora_mock.vrrp_ip, timeout_dict=timeout_dict)
617
- mock_amphora_repo_update.assert_called_once_with(
618
- _session_mock, _amphora_mock.id, vrrp_interface=FAKE_INTERFACE)
619
-
620
- # Test with an exception
621
- mock_amphora_repo_update.reset_mock()
622
- amphora_update_vrrp_interface_obj.execute(
623
- 0, [_amphora_mock], timeout_dict)
624
- mock_amphora_repo_update.assert_called_once_with(
625
- _session_mock, _amphora_mock.id, status=constants.ERROR)
626
-
627
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
628
- def test_amphora_vrrp_update(self,
629
- mock_lb_get,
630
- mock_driver,
631
- mock_generate_uuid,
632
- mock_log,
633
- mock_get_session,
634
- mock_listener_repo_get,
635
- mock_listener_repo_update,
636
- mock_amphora_repo_update):
637
- amphorae_network_config = mock.MagicMock()
638
- mock_driver.update_vrrp_conf.side_effect = [mock.DEFAULT,
639
- Exception('boom')]
640
- mock_lb_get.return_value = _LB_mock
641
- amphora_vrrp_update_obj = (
642
- amphora_driver_tasks.AmphoraVRRPUpdate())
643
- amphora_vrrp_update_obj.execute(_LB_mock.id, amphorae_network_config,
644
- _amphora_mock, 'fakeint0')
645
- mock_driver.update_vrrp_conf.assert_called_once_with(
646
- _LB_mock, amphorae_network_config, _amphora_mock, None)
647
-
648
- # Test with an exception
649
- mock_amphora_repo_update.reset_mock()
650
- amphora_vrrp_update_obj.execute(_LB_mock.id, amphorae_network_config,
651
- _amphora_mock, 'fakeint0')
652
- mock_amphora_repo_update.assert_called_once_with(
653
- _session_mock, _amphora_mock.id, status=constants.ERROR)
654
-
655
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
656
- def test_amphora_index_vrrp_update(self,
657
- mock_lb_get,
658
- mock_driver,
659
- mock_generate_uuid,
660
- mock_log,
661
- mock_get_session,
662
- mock_listener_repo_get,
663
- mock_listener_repo_update,
664
- mock_amphora_repo_update):
665
- amphorae_network_config = mock.MagicMock()
666
- mock_driver.update_vrrp_conf.side_effect = [mock.DEFAULT,
667
- Exception('boom')]
668
- mock_lb_get.return_value = _LB_mock
669
- amphora_vrrp_update_obj = (
670
- amphora_driver_tasks.AmphoraIndexVRRPUpdate())
671
-
672
- amphora_vrrp_update_obj.execute(_LB_mock.id, amphorae_network_config,
673
- 0, [_amphora_mock], 'fakeint0',
674
- timeout_dict=self.timeout_dict)
675
- mock_driver.update_vrrp_conf.assert_called_once_with(
676
- _LB_mock, amphorae_network_config, _amphora_mock,
677
- self.timeout_dict)
678
-
679
- # Test with an exception
680
- mock_amphora_repo_update.reset_mock()
681
- amphora_vrrp_update_obj.execute(_LB_mock.id, amphorae_network_config,
682
- 0, [_amphora_mock], 'fakeint0')
683
- mock_amphora_repo_update.assert_called_once_with(
684
- _session_mock, _amphora_mock.id, status=constants.ERROR)
685
-
686
- def test_amphora_vrrp_start(self,
687
- mock_driver,
688
- mock_generate_uuid,
689
- mock_log,
690
- mock_get_session,
691
- mock_listener_repo_get,
692
- mock_listener_repo_update,
693
- mock_amphora_repo_update):
694
- amphora_vrrp_start_obj = (
695
- amphora_driver_tasks.AmphoraVRRPStart())
696
- amphora_vrrp_start_obj.execute(_amphora_mock,
697
- timeout_dict=self.timeout_dict)
698
- mock_driver.start_vrrp_service.assert_called_once_with(
699
- _amphora_mock, self.timeout_dict)
700
-
701
- def test_amphora_index_vrrp_start(self,
702
- mock_driver,
703
- mock_generate_uuid,
704
- mock_log,
705
- mock_get_session,
706
- mock_listener_repo_get,
707
- mock_listener_repo_update,
708
- mock_amphora_repo_update):
709
- amphora_vrrp_start_obj = (
710
- amphora_driver_tasks.AmphoraIndexVRRPStart())
711
- mock_driver.start_vrrp_service.side_effect = [mock.DEFAULT,
712
- Exception('boom')]
713
-
714
- amphora_vrrp_start_obj.execute(0, [_amphora_mock],
715
- timeout_dict=self.timeout_dict)
716
- mock_driver.start_vrrp_service.assert_called_once_with(
717
- _amphora_mock, self.timeout_dict)
718
-
719
- # Test with a start exception
720
- mock_driver.start_vrrp_service.reset_mock()
721
- amphora_vrrp_start_obj.execute(0, [_amphora_mock],
722
- timeout_dict=self.timeout_dict)
723
- mock_driver.start_vrrp_service.assert_called_once_with(
724
- _amphora_mock, self.timeout_dict)
725
- mock_amphora_repo_update.assert_called_once_with(
726
- _session_mock, _amphora_mock.id, status=constants.ERROR)
727
-
728
- def test_amphora_compute_connectivity_wait(self,
729
- mock_driver,
730
- mock_generate_uuid,
731
- mock_log,
732
- mock_get_session,
733
- mock_listener_repo_get,
734
- mock_listener_repo_update,
735
- mock_amphora_repo_update):
736
- amp_compute_conn_wait_obj = (
737
- amphora_driver_tasks.AmphoraComputeConnectivityWait())
738
- amp_compute_conn_wait_obj.execute(_amphora_mock)
739
- mock_driver.get_info.assert_called_once_with(_amphora_mock)
740
-
741
- mock_driver.get_info.side_effect = driver_except.TimeOutException()
742
- self.assertRaises(driver_except.TimeOutException,
743
- amp_compute_conn_wait_obj.execute, _amphora_mock)
744
- mock_amphora_repo_update.assert_called_once_with(
745
- _session_mock, AMP_ID, status=constants.ERROR)
746
-
747
- @mock.patch('octavia.amphorae.backends.agent.agent_jinja_cfg.'
748
- 'AgentJinjaTemplater.build_agent_config')
749
- def test_amphora_config_update(self,
750
- mock_build_config,
751
- mock_driver,
752
- mock_generate_uuid,
753
- mock_log,
754
- mock_get_session,
755
- mock_listener_repo_get,
756
- mock_listener_repo_update,
757
- mock_amphora_repo_update):
758
- mock_build_config.return_value = FAKE_CONFIG_FILE
759
- amp_config_update_obj = amphora_driver_tasks.AmphoraConfigUpdate()
760
- mock_driver.update_amphora_agent_config.side_effect = [
761
- None, None, driver_except.AmpDriverNotImplementedError,
762
- driver_except.TimeOutException]
763
- # With Flavor
764
- flavor = {constants.LOADBALANCER_TOPOLOGY:
765
- constants.TOPOLOGY_ACTIVE_STANDBY}
766
- amp_config_update_obj.execute(_amphora_mock, flavor)
767
- mock_build_config.assert_called_once_with(
768
- _amphora_mock.id, constants.TOPOLOGY_ACTIVE_STANDBY)
769
- mock_driver.update_amphora_agent_config.assert_called_once_with(
770
- _amphora_mock, FAKE_CONFIG_FILE)
771
- # With no Flavor
772
- mock_driver.reset_mock()
773
- mock_build_config.reset_mock()
774
- amp_config_update_obj.execute(_amphora_mock, None)
775
- mock_build_config.assert_called_once_with(
776
- _amphora_mock.id, constants.TOPOLOGY_SINGLE)
777
- mock_driver.update_amphora_agent_config.assert_called_once_with(
778
- _amphora_mock, FAKE_CONFIG_FILE)
779
- # With amphora that does not support config update
780
- mock_driver.reset_mock()
781
- mock_build_config.reset_mock()
782
- amp_config_update_obj.execute(_amphora_mock, flavor)
783
- mock_build_config.assert_called_once_with(
784
- _amphora_mock.id, constants.TOPOLOGY_ACTIVE_STANDBY)
785
- mock_driver.update_amphora_agent_config.assert_called_once_with(
786
- _amphora_mock, FAKE_CONFIG_FILE)
787
- # With an unknown exception
788
- mock_driver.reset_mock()
789
- mock_build_config.reset_mock()
790
- self.assertRaises(driver_except.TimeOutException,
791
- amp_config_update_obj.execute,
792
- _amphora_mock, flavor)