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,2096 +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 oslo_config import cfg
18
- from oslo_config import fixture as oslo_fixture
19
- from oslo_utils import uuidutils
20
-
21
- from octavia.common import base_taskflow
22
- from octavia.common import constants
23
- from octavia.common import data_models
24
- from octavia.common import exceptions
25
- from octavia.controller.worker.v1 import controller_worker
26
- import octavia.tests.unit.base as base
27
-
28
-
29
- AMP_ID = uuidutils.generate_uuid()
30
- LB_ID = uuidutils.generate_uuid()
31
- POOL_ID = uuidutils.generate_uuid()
32
- HM_ID = uuidutils.generate_uuid()
33
- MEMBER_ID = uuidutils.generate_uuid()
34
- COMPUTE_ID = uuidutils.generate_uuid()
35
- L7POLICY_ID = uuidutils.generate_uuid()
36
- L7RULE_ID = uuidutils.generate_uuid()
37
- HEALTH_UPDATE_DICT = {'delay': 1, 'timeout': 2}
38
- LISTENER_UPDATE_DICT = {'name': 'test', 'description': 'test2'}
39
- MEMBER_UPDATE_DICT = {'weight': 1, 'ip_address': '10.0.0.0'}
40
- POOL_UPDATE_DICT = {'name': 'test', 'description': 'test2'}
41
- L7POLICY_UPDATE_DICT = {'action': constants.L7POLICY_ACTION_REJECT}
42
- L7RULE_UPDATE_DICT = {
43
- 'type': constants.L7RULE_TYPE_PATH,
44
- 'compare_type': constants.L7RULE_COMPARE_TYPE_STARTS_WITH,
45
- 'value': '/api'}
46
-
47
- _amphora_mock = mock.MagicMock()
48
- _flow_mock = mock.MagicMock()
49
- _health_mon_mock = mock.MagicMock()
50
- _vip_mock = mock.MagicMock()
51
- _listener_mock = mock.MagicMock()
52
- _load_balancer_mock = mock.MagicMock()
53
- _load_balancer_mock.listeners = [_listener_mock]
54
- _load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
55
- _load_balancer_mock.flavor_id = None
56
- _load_balancer_mock.availability_zone = None
57
- _member_mock = mock.MagicMock()
58
- _pool_mock = mock.MagicMock()
59
- _l7policy_mock = mock.MagicMock()
60
- _l7rule_mock = mock.MagicMock()
61
- _create_map_flow_mock = mock.MagicMock()
62
- _amphora_mock.load_balancer_id = LB_ID
63
- _amphora_mock.id = AMP_ID
64
- _db_session = mock.MagicMock()
65
-
66
- CONF = cfg.CONF
67
-
68
-
69
- class TestException(Exception):
70
-
71
- def __init__(self, value):
72
- self.value = value
73
-
74
- def __str__(self):
75
- return repr(self.value)
76
-
77
-
78
- @mock.patch('octavia.db.repositories.AmphoraRepository.get',
79
- return_value=_amphora_mock)
80
- @mock.patch('octavia.db.repositories.HealthMonitorRepository.get',
81
- return_value=_health_mon_mock)
82
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.get',
83
- return_value=_load_balancer_mock)
84
- @mock.patch('octavia.db.repositories.ListenerRepository.get',
85
- return_value=_listener_mock)
86
- @mock.patch('octavia.db.repositories.L7PolicyRepository.get',
87
- return_value=_l7policy_mock)
88
- @mock.patch('octavia.db.repositories.L7RuleRepository.get',
89
- return_value=_l7rule_mock)
90
- @mock.patch('octavia.db.repositories.MemberRepository.get',
91
- return_value=_member_mock)
92
- @mock.patch('octavia.db.repositories.PoolRepository.get',
93
- return_value=_pool_mock)
94
- @mock.patch('octavia.common.base_taskflow.BaseTaskFlowEngine.taskflow_load',
95
- return_value=_flow_mock)
96
- @mock.patch('taskflow.listeners.logging.DynamicLoggingListener')
97
- @mock.patch('octavia.db.api.get_session', return_value=_db_session)
98
- class TestControllerWorker(base.TestCase):
99
-
100
- def setUp(self):
101
-
102
- self.conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
103
-
104
- _pool_mock.listeners = [_listener_mock]
105
- _pool_mock.load_balancer = _load_balancer_mock
106
- _health_mon_mock.pool = _pool_mock
107
- _load_balancer_mock.amphorae = _amphora_mock
108
- _load_balancer_mock.vip = _vip_mock
109
- _listener_mock.load_balancer = _load_balancer_mock
110
- _member_mock.pool = _pool_mock
111
- _l7policy_mock.listener = _listener_mock
112
- _l7rule_mock.l7policy = _l7policy_mock
113
-
114
- fetch_mock = mock.MagicMock(return_value=AMP_ID)
115
- _flow_mock.storage.fetch = fetch_mock
116
-
117
- _pool_mock.id = POOL_ID
118
- _health_mon_mock.pool_id = POOL_ID
119
- _health_mon_mock.id = HM_ID
120
-
121
- super().setUp()
122
-
123
- @mock.patch('octavia.controller.worker.v1.flows.'
124
- 'amphora_flows.AmphoraFlows.get_delete_amphora_flow',
125
- return_value='TEST')
126
- def test_delete_amphora(self,
127
- mock_get_delete_amp_flow,
128
- mock_api_get_session,
129
- mock_dyn_log_listener,
130
- mock_taskflow_load,
131
- mock_pool_repo_get,
132
- mock_member_repo_get,
133
- mock_l7rule_repo_get,
134
- mock_l7policy_repo_get,
135
- mock_listener_repo_get,
136
- mock_lb_repo_get,
137
- mock_health_mon_repo_get,
138
- mock_amp_repo_get):
139
-
140
- _flow_mock.reset_mock()
141
-
142
- cw = controller_worker.ControllerWorker()
143
- cw.delete_amphora(_amphora_mock.id)
144
-
145
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
146
- assert_called_once_with('TEST'))
147
-
148
- mock_get_delete_amp_flow.assert_called_once_with(_amphora_mock)
149
- _flow_mock.run.assert_called_once_with()
150
-
151
- @mock.patch('octavia.controller.worker.v1.flows.'
152
- 'health_monitor_flows.HealthMonitorFlows.'
153
- 'get_create_health_monitor_flow',
154
- return_value=_flow_mock)
155
- def test_create_health_monitor(self,
156
- mock_get_create_hm_flow,
157
- mock_api_get_session,
158
- mock_dyn_log_listener,
159
- mock_taskflow_load,
160
- mock_pool_repo_get,
161
- mock_member_repo_get,
162
- mock_l7rule_repo_get,
163
- mock_l7policy_repo_get,
164
- mock_listener_repo_get,
165
- mock_lb_repo_get,
166
- mock_health_mon_repo_get,
167
- mock_amp_repo_get):
168
-
169
- _flow_mock.reset_mock()
170
- mock_health_mon_repo_get.side_effect = [None, _health_mon_mock]
171
-
172
- cw = controller_worker.ControllerWorker()
173
- cw.create_health_monitor(_health_mon_mock)
174
-
175
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
176
- assert_called_once_with(_flow_mock,
177
- store={constants.HEALTH_MON:
178
- _health_mon_mock,
179
- constants.LISTENERS:
180
- [_listener_mock],
181
- constants.LOADBALANCER:
182
- _load_balancer_mock,
183
- constants.POOL:
184
- _pool_mock}))
185
-
186
- _flow_mock.run.assert_called_once_with()
187
- self.assertEqual(2, mock_health_mon_repo_get.call_count)
188
-
189
- @mock.patch('octavia.controller.worker.v1.flows.'
190
- 'health_monitor_flows.HealthMonitorFlows.'
191
- 'get_delete_health_monitor_flow',
192
- return_value=_flow_mock)
193
- def test_delete_health_monitor(self,
194
- mock_get_delete_hm_flow,
195
- mock_api_get_session,
196
- mock_dyn_log_listener,
197
- mock_taskflow_load,
198
- mock_pool_repo_get,
199
- mock_member_repo_get,
200
- mock_l7rule_repo_get,
201
- mock_l7policy_repo_get,
202
- mock_listener_repo_get,
203
- mock_lb_repo_get,
204
- mock_health_mon_repo_get,
205
- mock_amp_repo_get):
206
-
207
- _flow_mock.reset_mock()
208
-
209
- cw = controller_worker.ControllerWorker()
210
- cw.delete_health_monitor(HM_ID)
211
-
212
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
213
- assert_called_once_with(_flow_mock,
214
- store={constants.HEALTH_MON:
215
- _health_mon_mock,
216
- constants.LISTENERS:
217
- [_listener_mock],
218
- constants.LOADBALANCER:
219
- _load_balancer_mock,
220
- constants.POOL:
221
- _pool_mock}))
222
-
223
- _flow_mock.run.assert_called_once_with()
224
-
225
- @mock.patch('octavia.controller.worker.v1.flows.'
226
- 'health_monitor_flows.HealthMonitorFlows.'
227
- 'get_update_health_monitor_flow',
228
- return_value=_flow_mock)
229
- def test_update_health_monitor(self,
230
- mock_get_update_hm_flow,
231
- mock_api_get_session,
232
- mock_dyn_log_listener,
233
- mock_taskflow_load,
234
- mock_pool_repo_get,
235
- mock_member_repo_get,
236
- mock_l7rule_repo_get,
237
- mock_l7policy_repo_get,
238
- mock_listener_repo_get,
239
- mock_lb_repo_get,
240
- mock_health_mon_repo_get,
241
- mock_amp_repo_get):
242
-
243
- _flow_mock.reset_mock()
244
- _health_mon_mock.provisioning_status = constants.PENDING_UPDATE
245
-
246
- cw = controller_worker.ControllerWorker()
247
- cw.update_health_monitor(_health_mon_mock.id,
248
- HEALTH_UPDATE_DICT)
249
-
250
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
251
- assert_called_once_with(_flow_mock,
252
- store={constants.HEALTH_MON:
253
- _health_mon_mock,
254
- constants.POOL:
255
- _pool_mock,
256
- constants.LISTENERS:
257
- [_listener_mock],
258
- constants.LOADBALANCER:
259
- _load_balancer_mock,
260
- constants.UPDATE_DICT:
261
- HEALTH_UPDATE_DICT}))
262
-
263
- _flow_mock.run.assert_called_once_with()
264
-
265
- @mock.patch('octavia.controller.worker.v1.flows.'
266
- 'listener_flows.ListenerFlows.get_create_listener_flow',
267
- return_value=_flow_mock)
268
- def test_create_listener(self,
269
- mock_get_create_listener_flow,
270
- mock_api_get_session,
271
- mock_dyn_log_listener,
272
- mock_taskflow_load,
273
- mock_pool_repo_get,
274
- mock_member_repo_get,
275
- mock_l7rule_repo_get,
276
- mock_l7policy_repo_get,
277
- mock_listener_repo_get,
278
- mock_lb_repo_get,
279
- mock_health_mon_repo_get,
280
- mock_amp_repo_get):
281
-
282
- _flow_mock.reset_mock()
283
- mock_listener_repo_get.side_effect = [None, _listener_mock]
284
-
285
- cw = controller_worker.ControllerWorker()
286
- cw.create_listener(LB_ID)
287
-
288
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
289
- assert_called_once_with(_flow_mock,
290
- store={constants.LOADBALANCER:
291
- _load_balancer_mock,
292
- constants.LISTENERS:
293
- _load_balancer_mock.listeners}))
294
-
295
- _flow_mock.run.assert_called_once_with()
296
- self.assertEqual(2, mock_listener_repo_get.call_count)
297
-
298
- @mock.patch('octavia.controller.worker.v1.flows.'
299
- 'listener_flows.ListenerFlows.get_delete_listener_flow',
300
- return_value=_flow_mock)
301
- def test_delete_listener(self,
302
- mock_get_delete_listener_flow,
303
- mock_api_get_session,
304
- mock_dyn_log_listener,
305
- mock_taskflow_load,
306
- mock_pool_repo_get,
307
- mock_member_repo_get,
308
- mock_l7rule_repo_get,
309
- mock_l7policy_repo_get,
310
- mock_listener_repo_get,
311
- mock_lb_repo_get,
312
- mock_health_mon_repo_get,
313
- mock_amp_repo_get):
314
-
315
- _flow_mock.reset_mock()
316
-
317
- cw = controller_worker.ControllerWorker()
318
- cw.delete_listener(LB_ID)
319
-
320
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
321
- assert_called_once_with(
322
- _flow_mock, store={constants.LISTENER: _listener_mock,
323
- constants.LOADBALANCER: _load_balancer_mock}))
324
-
325
- _flow_mock.run.assert_called_once_with()
326
-
327
- @mock.patch('octavia.controller.worker.v1.flows.'
328
- 'listener_flows.ListenerFlows.get_update_listener_flow',
329
- return_value=_flow_mock)
330
- def test_update_listener(self,
331
- mock_get_update_listener_flow,
332
- mock_api_get_session,
333
- mock_dyn_log_listener,
334
- mock_taskflow_load,
335
- mock_pool_repo_get,
336
- mock_member_repo_get,
337
- mock_l7rule_repo_get,
338
- mock_l7policy_repo_get,
339
- mock_listener_repo_get,
340
- mock_lb_repo_get,
341
- mock_health_mon_repo_get,
342
- mock_amp_repo_get):
343
-
344
- _flow_mock.reset_mock()
345
- _listener_mock.provisioning_status = constants.PENDING_UPDATE
346
-
347
- cw = controller_worker.ControllerWorker()
348
- cw.update_listener(LB_ID, LISTENER_UPDATE_DICT)
349
-
350
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
351
- assert_called_once_with(_flow_mock,
352
- store={constants.LISTENER: _listener_mock,
353
- constants.LOADBALANCER:
354
- _load_balancer_mock,
355
- constants.UPDATE_DICT:
356
- LISTENER_UPDATE_DICT,
357
- constants.LISTENERS:
358
- [_listener_mock]}))
359
-
360
- _flow_mock.run.assert_called_once_with()
361
-
362
- def test_create_load_balancer_single_no_anti_affinity(
363
- self, mock_api_get_session,
364
- mock_dyn_log_listener, mock_taskflow_load, mock_pool_repo_get,
365
- mock_member_repo_get, mock_l7rule_repo_get, mock_l7policy_repo_get,
366
- mock_listener_repo_get, mock_lb_repo_get,
367
- mock_health_mon_repo_get, mock_amp_repo_get):
368
- # Test the code path with Nova anti-affinity disabled
369
- self.conf.config(group="nova", enable_anti_affinity=False)
370
- self._test_create_load_balancer_single(
371
- mock_api_get_session,
372
- mock_dyn_log_listener, mock_taskflow_load, mock_pool_repo_get,
373
- mock_member_repo_get, mock_l7rule_repo_get,
374
- mock_l7policy_repo_get, mock_listener_repo_get,
375
- mock_lb_repo_get, mock_health_mon_repo_get, mock_amp_repo_get)
376
-
377
- def test_create_load_balancer_single_anti_affinity(
378
- self, mock_api_get_session,
379
- mock_dyn_log_listener, mock_taskflow_load, mock_pool_repo_get,
380
- mock_member_repo_get, mock_l7rule_repo_get, mock_l7policy_repo_get,
381
- mock_listener_repo_get, mock_lb_repo_get,
382
- mock_health_mon_repo_get, mock_amp_repo_get):
383
- # Test the code path with Nova anti-affinity enabled
384
- self.conf.config(group="nova", enable_anti_affinity=True)
385
- self._test_create_load_balancer_single(
386
- mock_api_get_session,
387
- mock_dyn_log_listener, mock_taskflow_load, mock_pool_repo_get,
388
- mock_member_repo_get, mock_l7rule_repo_get,
389
- mock_l7policy_repo_get, mock_listener_repo_get,
390
- mock_lb_repo_get, mock_health_mon_repo_get, mock_amp_repo_get)
391
-
392
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
393
- 'LoadBalancerFlows.get_create_load_balancer_flow',
394
- return_value=_flow_mock)
395
- def _test_create_load_balancer_single(
396
- self,
397
- mock_api_get_session,
398
- mock_dyn_log_listener,
399
- mock_taskflow_load,
400
- mock_pool_repo_get,
401
- mock_member_repo_get,
402
- mock_l7rule_repo_get,
403
- mock_l7policy_repo_get,
404
- mock_listener_repo_get,
405
- mock_lb_repo_get,
406
- mock_health_mon_repo_get,
407
- mock_amp_repo_get,
408
- mock_get_create_load_balancer_flow):
409
-
410
- # Test the code path with an SINGLE topology
411
- self.conf.config(group="controller_worker",
412
- loadbalancer_topology=constants.TOPOLOGY_SINGLE)
413
- _flow_mock.reset_mock()
414
- mock_taskflow_load.reset_mock()
415
- mock_eng = mock.Mock()
416
- mock_taskflow_load.return_value = mock_eng
417
- store = {
418
- constants.LOADBALANCER_ID: LB_ID,
419
- 'update_dict': {'topology': constants.TOPOLOGY_SINGLE},
420
- constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
421
- constants.FLAVOR: None, constants.AVAILABILITY_ZONE: None,
422
- constants.SERVER_GROUP_ID: None
423
- }
424
- lb_mock = mock.MagicMock()
425
- lb_mock.listeners = []
426
- lb_mock.topology = constants.TOPOLOGY_SINGLE
427
- mock_lb_repo_get.side_effect = [None, None, None, lb_mock]
428
-
429
- cw = controller_worker.ControllerWorker()
430
- cw.create_load_balancer(LB_ID)
431
-
432
- mock_get_create_load_balancer_flow.assert_called_with(
433
- topology=constants.TOPOLOGY_SINGLE, listeners=[])
434
- mock_taskflow_load.assert_called_with(
435
- mock_get_create_load_balancer_flow.return_value, store=store)
436
- mock_eng.run.assert_any_call()
437
- self.assertEqual(4, mock_lb_repo_get.call_count)
438
-
439
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
440
- 'LoadBalancerFlows.get_create_load_balancer_flow',
441
- return_value=_flow_mock)
442
- def test_create_load_balancer_active_standby(
443
- self,
444
- mock_get_create_load_balancer_flow,
445
- mock_api_get_session,
446
- mock_dyn_log_listener,
447
- mock_taskflow_load,
448
- mock_pool_repo_get,
449
- mock_member_repo_get,
450
- mock_l7rule_repo_get,
451
- mock_l7policy_repo_get,
452
- mock_listener_repo_get,
453
- mock_lb_repo_get,
454
- mock_health_mon_repo_get,
455
- mock_amp_repo_get):
456
-
457
- self.conf.config(
458
- group="controller_worker",
459
- loadbalancer_topology=constants.TOPOLOGY_ACTIVE_STANDBY)
460
-
461
- _flow_mock.reset_mock()
462
- mock_taskflow_load.reset_mock()
463
- mock_eng = mock.Mock()
464
- mock_taskflow_load.return_value = mock_eng
465
- store = {
466
- constants.LOADBALANCER_ID: LB_ID,
467
- 'update_dict': {'topology': constants.TOPOLOGY_ACTIVE_STANDBY},
468
- constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
469
- constants.FLAVOR: None, constants.SERVER_GROUP_ID: None,
470
- constants.AVAILABILITY_ZONE: None,
471
- }
472
- setattr(mock_lb_repo_get.return_value, 'topology',
473
- constants.TOPOLOGY_ACTIVE_STANDBY)
474
- setattr(mock_lb_repo_get.return_value, 'listeners', [])
475
-
476
- cw = controller_worker.ControllerWorker()
477
- cw.create_load_balancer(LB_ID)
478
-
479
- mock_get_create_load_balancer_flow.assert_called_with(
480
- topology=constants.TOPOLOGY_ACTIVE_STANDBY, listeners=[])
481
- mock_taskflow_load.assert_called_with(
482
- mock_get_create_load_balancer_flow.return_value, store=store)
483
- mock_eng.run.assert_any_call()
484
-
485
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
486
- 'LoadBalancerFlows.get_create_load_balancer_flow')
487
- def test_create_load_balancer_full_graph_single(
488
- self,
489
- mock_get_create_load_balancer_flow,
490
- mock_api_get_session,
491
- mock_dyn_log_listener,
492
- mock_taskflow_load,
493
- mock_pool_repo_get,
494
- mock_member_repo_get,
495
- mock_l7rule_repo_get,
496
- mock_l7policy_repo_get,
497
- mock_listener_repo_get,
498
- mock_lb_repo_get,
499
- mock_health_mon_repo_get,
500
- mock_amp_repo_get):
501
-
502
- self.conf.config(
503
- group="controller_worker",
504
- loadbalancer_topology=constants.TOPOLOGY_SINGLE)
505
-
506
- listeners = [data_models.Listener(id='listener1'),
507
- data_models.Listener(id='listener2')]
508
- lb = data_models.LoadBalancer(id=LB_ID, listeners=listeners,
509
- topology=constants.TOPOLOGY_SINGLE)
510
- mock_lb_repo_get.return_value = lb
511
- mock_eng = mock.Mock()
512
- mock_taskflow_load.return_value = mock_eng
513
- store = {
514
- constants.LOADBALANCER_ID: LB_ID,
515
- 'update_dict': {'topology': constants.TOPOLOGY_SINGLE},
516
- constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
517
- constants.FLAVOR: None, constants.SERVER_GROUP_ID: None,
518
- constants.AVAILABILITY_ZONE: None,
519
- }
520
-
521
- cw = controller_worker.ControllerWorker()
522
- cw.create_load_balancer(LB_ID)
523
-
524
- # mock_create_single_topology.assert_called_once()
525
- # mock_create_active_standby_topology.assert_not_called()
526
- mock_get_create_load_balancer_flow.assert_called_with(
527
- topology=constants.TOPOLOGY_SINGLE, listeners=lb.listeners)
528
- mock_taskflow_load.assert_called_with(
529
- mock_get_create_load_balancer_flow.return_value, store=store)
530
- mock_eng.run.assert_any_call()
531
-
532
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
533
- 'LoadBalancerFlows.get_create_load_balancer_flow')
534
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
535
- 'LoadBalancerFlows._create_single_topology')
536
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
537
- 'LoadBalancerFlows._create_active_standby_topology')
538
- def test_create_load_balancer_full_graph_active_standby(
539
- self,
540
- mock_create_active_standby_topology,
541
- mock_create_single_topology,
542
- mock_get_create_load_balancer_flow,
543
- mock_api_get_session,
544
- mock_dyn_log_listener,
545
- mock_taskflow_load,
546
- mock_pool_repo_get,
547
- mock_member_repo_get,
548
- mock_l7rule_repo_get,
549
- mock_l7policy_repo_get,
550
- mock_listener_repo_get,
551
- mock_lb_repo_get,
552
- mock_health_mon_repo_get,
553
- mock_amp_repo_get):
554
-
555
- self.conf.config(
556
- group="controller_worker",
557
- loadbalancer_topology=constants.TOPOLOGY_ACTIVE_STANDBY)
558
-
559
- listeners = [data_models.Listener(id='listener1'),
560
- data_models.Listener(id='listener2')]
561
- lb = data_models.LoadBalancer(
562
- id=LB_ID, listeners=listeners,
563
- topology=constants.TOPOLOGY_ACTIVE_STANDBY)
564
- mock_lb_repo_get.return_value = lb
565
- mock_eng = mock.Mock()
566
- mock_taskflow_load.return_value = mock_eng
567
- store = {
568
- constants.LOADBALANCER_ID: LB_ID,
569
- 'update_dict': {'topology': constants.TOPOLOGY_ACTIVE_STANDBY},
570
- constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
571
- constants.FLAVOR: None, constants.SERVER_GROUP_ID: None,
572
- constants.AVAILABILITY_ZONE: None,
573
- }
574
-
575
- cw = controller_worker.ControllerWorker()
576
- cw.create_load_balancer(LB_ID)
577
-
578
- mock_get_create_load_balancer_flow.assert_called_with(
579
- topology=constants.TOPOLOGY_ACTIVE_STANDBY, listeners=lb.listeners)
580
- mock_taskflow_load.assert_called_with(
581
- mock_get_create_load_balancer_flow.return_value, store=store)
582
- mock_eng.run.assert_any_call()
583
-
584
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
585
- 'LoadBalancerFlows.get_delete_load_balancer_flow',
586
- return_value=(_flow_mock, {'test': 'test'}))
587
- def test_delete_load_balancer_without_cascade(self,
588
- mock_get_delete_lb_flow,
589
- mock_api_get_session,
590
- mock_dyn_log_listener,
591
- mock_taskflow_load,
592
- mock_pool_repo_get,
593
- mock_member_repo_get,
594
- mock_l7rule_repo_get,
595
- mock_l7policy_repo_get,
596
- mock_listener_repo_get,
597
- mock_lb_repo_get,
598
- mock_health_mon_repo_get,
599
- mock_amp_repo_get):
600
-
601
- _flow_mock.reset_mock()
602
-
603
- cw = controller_worker.ControllerWorker()
604
- cw.delete_load_balancer(LB_ID, cascade=False)
605
-
606
- mock_lb_repo_get.assert_called_once_with(
607
- _db_session,
608
- id=LB_ID)
609
-
610
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
611
- assert_called_once_with(_flow_mock,
612
- store={constants.LOADBALANCER:
613
- _load_balancer_mock,
614
- constants.SERVER_GROUP_ID:
615
- _load_balancer_mock.server_group_id,
616
- 'test': 'test'
617
- }
618
- )
619
- )
620
- _flow_mock.run.assert_called_once_with()
621
-
622
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
623
- 'LoadBalancerFlows.get_cascade_delete_load_balancer_flow',
624
- return_value=(_flow_mock, {'test': 'test'}))
625
- def test_delete_load_balancer_with_cascade(self,
626
- mock_get_delete_lb_flow,
627
- mock_api_get_session,
628
- mock_dyn_log_listener,
629
- mock_taskflow_load,
630
- mock_pool_repo_get,
631
- mock_member_repo_get,
632
- mock_l7rule_repo_get,
633
- mock_l7policy_repo_get,
634
- mock_listener_repo_get,
635
- mock_lb_repo_get,
636
- mock_health_mon_repo_get,
637
- mock_amp_repo_get):
638
-
639
- _flow_mock.reset_mock()
640
-
641
- cw = controller_worker.ControllerWorker()
642
- cw.delete_load_balancer(LB_ID, cascade=True)
643
-
644
- mock_lb_repo_get.assert_called_once_with(
645
- _db_session,
646
- id=LB_ID)
647
-
648
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
649
- assert_called_once_with(_flow_mock,
650
- store={constants.LOADBALANCER:
651
- _load_balancer_mock,
652
- constants.SERVER_GROUP_ID:
653
- _load_balancer_mock.server_group_id,
654
- 'test': 'test'
655
- }
656
- )
657
- )
658
- _flow_mock.run.assert_called_once_with()
659
-
660
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
661
- 'LoadBalancerFlows.get_update_load_balancer_flow',
662
- return_value=_flow_mock)
663
- @mock.patch('octavia.db.repositories.ListenerRepository.get_all',
664
- return_value=([_listener_mock], None))
665
- def test_update_load_balancer(self,
666
- mock_listener_repo_get_all,
667
- mock_get_update_lb_flow,
668
- mock_api_get_session,
669
- mock_dyn_log_listener,
670
- mock_taskflow_load,
671
- mock_pool_repo_get,
672
- mock_member_repo_get,
673
- mock_l7rule_repo_get,
674
- mock_l7policy_repo_get,
675
- mock_listener_repo_get,
676
- mock_lb_repo_get,
677
- mock_health_mon_repo_get,
678
- mock_amp_repo_get):
679
-
680
- _flow_mock.reset_mock()
681
- _load_balancer_mock.provisioning_status = constants.PENDING_UPDATE
682
-
683
- cw = controller_worker.ControllerWorker()
684
- change = 'TEST2'
685
- cw.update_load_balancer(LB_ID, change)
686
-
687
- mock_lb_repo_get.assert_called_once_with(
688
- _db_session,
689
- id=LB_ID)
690
-
691
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
692
- assert_called_once_with(_flow_mock,
693
- store={constants.UPDATE_DICT: change,
694
- constants.LOADBALANCER:
695
- _load_balancer_mock,
696
- constants.LISTENERS:
697
- [_listener_mock]}))
698
-
699
- _flow_mock.run.assert_called_once_with()
700
-
701
- @mock.patch('octavia.controller.worker.v1.flows.'
702
- 'member_flows.MemberFlows.get_create_member_flow',
703
- return_value=_flow_mock)
704
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
705
- 'get_availability_zone_metadata_dict')
706
- def test_create_member(self,
707
- mock_get_az_metadata_dict,
708
- mock_get_create_member_flow,
709
- mock_api_get_session,
710
- mock_dyn_log_listener,
711
- mock_taskflow_load,
712
- mock_pool_repo_get,
713
- mock_member_repo_get,
714
- mock_l7rule_repo_get,
715
- mock_l7policy_repo_get,
716
- mock_listener_repo_get,
717
- mock_lb_repo_get,
718
- mock_health_mon_repo_get,
719
- mock_amp_repo_get):
720
-
721
- _flow_mock.reset_mock()
722
- mock_get_az_metadata_dict.return_value = {}
723
- mock_member_repo_get.side_effect = [None, _member_mock]
724
-
725
- cw = controller_worker.ControllerWorker()
726
- cw.create_member(MEMBER_ID)
727
-
728
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
729
- assert_called_once_with(
730
- _flow_mock,
731
- store={constants.MEMBER: _member_mock,
732
- constants.LISTENERS: [_listener_mock],
733
- constants.LOADBALANCER: _load_balancer_mock,
734
- constants.LOADBALANCER_ID: _load_balancer_mock.id,
735
- constants.POOL: _pool_mock,
736
- constants.AVAILABILITY_ZONE: {}}))
737
-
738
- _flow_mock.run.assert_called_once_with()
739
- self.assertEqual(2, mock_member_repo_get.call_count)
740
-
741
- @mock.patch('octavia.controller.worker.v1.flows.'
742
- 'member_flows.MemberFlows.get_delete_member_flow',
743
- return_value=_flow_mock)
744
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
745
- 'get_availability_zone_metadata_dict')
746
- def test_delete_member(self,
747
- mock_get_az_metadata_dict,
748
- mock_get_delete_member_flow,
749
- mock_api_get_session,
750
- mock_dyn_log_listener,
751
- mock_taskflow_load,
752
- mock_pool_repo_get,
753
- mock_member_repo_get,
754
- mock_l7rule_repo_get,
755
- mock_l7policy_repo_get,
756
- mock_listener_repo_get,
757
- mock_lb_repo_get,
758
- mock_health_mon_repo_get,
759
- mock_amp_repo_get):
760
-
761
- _flow_mock.reset_mock()
762
- mock_get_az_metadata_dict.return_value = {}
763
- cw = controller_worker.ControllerWorker()
764
- cw.delete_member(MEMBER_ID)
765
-
766
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
767
- assert_called_once_with(
768
- _flow_mock, store={constants.MEMBER: _member_mock,
769
- constants.LISTENERS:
770
- [_listener_mock],
771
- constants.LOADBALANCER:
772
- _load_balancer_mock,
773
- constants.LOADBALANCER_ID:
774
- _load_balancer_mock.id,
775
- constants.POOL:
776
- _pool_mock,
777
- constants.AVAILABILITY_ZONE: {}}))
778
-
779
- _flow_mock.run.assert_called_once_with()
780
-
781
- @mock.patch('octavia.controller.worker.v1.flows.'
782
- 'member_flows.MemberFlows.get_update_member_flow',
783
- return_value=_flow_mock)
784
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
785
- 'get_availability_zone_metadata_dict')
786
- def test_update_member(self,
787
- mock_get_az_metadata_dict,
788
- mock_get_update_member_flow,
789
- mock_api_get_session,
790
- mock_dyn_log_listener,
791
- mock_taskflow_load,
792
- mock_pool_repo_get,
793
- mock_member_repo_get,
794
- mock_l7rule_repo_get,
795
- mock_l7policy_repo_get,
796
- mock_listener_repo_get,
797
- mock_lb_repo_get,
798
- mock_health_mon_repo_get,
799
- mock_amp_repo_get):
800
-
801
- _flow_mock.reset_mock()
802
- _member_mock.provisioning_status = constants.PENDING_UPDATE
803
- mock_get_az_metadata_dict.return_value = {}
804
- cw = controller_worker.ControllerWorker()
805
- cw.update_member(MEMBER_ID, MEMBER_UPDATE_DICT)
806
-
807
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
808
- assert_called_once_with(_flow_mock,
809
- store={constants.MEMBER: _member_mock,
810
- constants.LISTENERS:
811
- [_listener_mock],
812
- constants.LOADBALANCER:
813
- _load_balancer_mock,
814
- constants.POOL:
815
- _pool_mock,
816
- constants.UPDATE_DICT:
817
- MEMBER_UPDATE_DICT,
818
- constants.AVAILABILITY_ZONE: {}}))
819
-
820
- _flow_mock.run.assert_called_once_with()
821
-
822
- @mock.patch('octavia.controller.worker.v1.flows.'
823
- 'member_flows.MemberFlows.get_batch_update_members_flow',
824
- return_value=_flow_mock)
825
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
826
- 'get_availability_zone_metadata_dict')
827
- def test_batch_update_members(self,
828
- mock_get_az_metadata_dict,
829
- mock_get_batch_update_members_flow,
830
- mock_api_get_session,
831
- mock_dyn_log_listener,
832
- mock_taskflow_load,
833
- mock_pool_repo_get,
834
- mock_member_repo_get,
835
- mock_l7rule_repo_get,
836
- mock_l7policy_repo_get,
837
- mock_listener_repo_get,
838
- mock_lb_repo_get,
839
- mock_health_mon_repo_get,
840
- mock_amp_repo_get):
841
-
842
- _flow_mock.reset_mock()
843
- mock_member_repo_get.side_effect = [None, _member_mock,
844
- _member_mock, _member_mock]
845
- mock_get_az_metadata_dict.return_value = {}
846
- cw = controller_worker.ControllerWorker()
847
- cw.batch_update_members([9], [11], [MEMBER_UPDATE_DICT])
848
-
849
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
850
- assert_called_once_with(_flow_mock,
851
- store={
852
- constants.LISTENERS: [_listener_mock],
853
- constants.LOADBALANCER:
854
- _load_balancer_mock,
855
- constants.LOADBALANCER_ID:
856
- _load_balancer_mock.id,
857
- constants.POOL: _pool_mock,
858
- constants.AVAILABILITY_ZONE: {}}))
859
-
860
- _flow_mock.run.assert_called_once_with()
861
- self.assertEqual(4, mock_member_repo_get.call_count)
862
-
863
- @mock.patch('octavia.controller.worker.v1.flows.'
864
- 'pool_flows.PoolFlows.get_create_pool_flow',
865
- return_value=_flow_mock)
866
- def test_create_pool(self,
867
- mock_get_create_listener_flow,
868
- mock_api_get_session,
869
- mock_dyn_log_listener,
870
- mock_taskflow_load,
871
- mock_pool_repo_get,
872
- mock_member_repo_get,
873
- mock_l7rule_repo_get,
874
- mock_l7policy_repo_get,
875
- mock_listener_repo_get,
876
- mock_lb_repo_get,
877
- mock_health_mon_repo_get,
878
- mock_amp_repo_get):
879
-
880
- _flow_mock.reset_mock()
881
- mock_pool_repo_get.side_effect = [None, _pool_mock]
882
-
883
- cw = controller_worker.ControllerWorker()
884
- cw.create_pool(POOL_ID)
885
-
886
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
887
- assert_called_once_with(_flow_mock,
888
- store={constants.POOL: _pool_mock,
889
- constants.LISTENERS:
890
- [_listener_mock],
891
- constants.LOADBALANCER:
892
- _load_balancer_mock}))
893
-
894
- _flow_mock.run.assert_called_once_with()
895
- self.assertEqual(2, mock_pool_repo_get.call_count)
896
-
897
- @mock.patch('octavia.controller.worker.v1.flows.'
898
- 'pool_flows.PoolFlows.get_delete_pool_flow',
899
- return_value=_flow_mock)
900
- def test_delete_pool(self,
901
- mock_get_delete_listener_flow,
902
- mock_api_get_session,
903
- mock_dyn_log_listener,
904
- mock_taskflow_load,
905
- mock_pool_repo_get,
906
- mock_member_repo_get,
907
- mock_l7rule_repo_get,
908
- mock_l7policy_repo_get,
909
- mock_listener_repo_get,
910
- mock_lb_repo_get,
911
- mock_health_mon_repo_get,
912
- mock_amp_repo_get):
913
-
914
- _flow_mock.reset_mock()
915
-
916
- cw = controller_worker.ControllerWorker()
917
- cw.delete_pool(POOL_ID)
918
-
919
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
920
- assert_called_once_with(_flow_mock,
921
- store={constants.POOL: _pool_mock,
922
- constants.LISTENERS:
923
- [_listener_mock],
924
- constants.LOADBALANCER:
925
- _load_balancer_mock}))
926
-
927
- _flow_mock.run.assert_called_once_with()
928
-
929
- @mock.patch('octavia.controller.worker.v1.flows.'
930
- 'pool_flows.PoolFlows.get_update_pool_flow',
931
- return_value=_flow_mock)
932
- def test_update_pool(self,
933
- mock_get_update_listener_flow,
934
- mock_api_get_session,
935
- mock_dyn_log_listener,
936
- mock_taskflow_load,
937
- mock_pool_repo_get,
938
- mock_member_repo_get,
939
- mock_l7rule_repo_get,
940
- mock_l7policy_repo_get,
941
- mock_listener_repo_get,
942
- mock_lb_repo_get,
943
- mock_health_mon_repo_get,
944
- mock_amp_repo_get):
945
-
946
- _flow_mock.reset_mock()
947
- _pool_mock.provisioning_status = constants.PENDING_UPDATE
948
-
949
- cw = controller_worker.ControllerWorker()
950
- cw.update_pool(POOL_ID, POOL_UPDATE_DICT)
951
-
952
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
953
- assert_called_once_with(_flow_mock,
954
- store={constants.POOL: _pool_mock,
955
- constants.LISTENERS:
956
- [_listener_mock],
957
- constants.LOADBALANCER:
958
- _load_balancer_mock,
959
- constants.UPDATE_DICT:
960
- POOL_UPDATE_DICT}))
961
-
962
- _flow_mock.run.assert_called_once_with()
963
-
964
- @mock.patch('octavia.controller.worker.v1.flows.'
965
- 'l7policy_flows.L7PolicyFlows.get_create_l7policy_flow',
966
- return_value=_flow_mock)
967
- def test_create_l7policy(self,
968
- mock_get_create_listener_flow,
969
- mock_api_get_session,
970
- mock_dyn_log_listener,
971
- mock_taskflow_load,
972
- mock_pool_repo_get,
973
- mock_member_repo_get,
974
- mock_l7rule_repo_get,
975
- mock_l7policy_repo_get,
976
- mock_listener_repo_get,
977
- mock_lb_repo_get,
978
- mock_health_mon_repo_get,
979
- mock_amp_repo_get):
980
-
981
- _flow_mock.reset_mock()
982
- mock_l7policy_repo_get.side_effect = [None, _l7policy_mock]
983
-
984
- cw = controller_worker.ControllerWorker()
985
- cw.create_l7policy(L7POLICY_ID)
986
-
987
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
988
- assert_called_once_with(_flow_mock,
989
- store={constants.L7POLICY: _l7policy_mock,
990
- constants.LISTENERS:
991
- [_listener_mock],
992
- constants.LOADBALANCER:
993
- _load_balancer_mock}))
994
-
995
- _flow_mock.run.assert_called_once_with()
996
- self.assertEqual(2, mock_l7policy_repo_get.call_count)
997
-
998
- @mock.patch('octavia.controller.worker.v1.flows.'
999
- 'l7policy_flows.L7PolicyFlows.get_delete_l7policy_flow',
1000
- return_value=_flow_mock)
1001
- def test_delete_l7policy(self,
1002
- mock_get_delete_listener_flow,
1003
- mock_api_get_session,
1004
- mock_dyn_log_listener,
1005
- mock_taskflow_load,
1006
- mock_pool_repo_get,
1007
- mock_member_repo_get,
1008
- mock_l7rule_repo_get,
1009
- mock_l7policy_repo_get,
1010
- mock_listener_repo_get,
1011
- mock_lb_repo_get,
1012
- mock_health_mon_repo_get,
1013
- mock_amp_repo_get):
1014
-
1015
- _flow_mock.reset_mock()
1016
-
1017
- cw = controller_worker.ControllerWorker()
1018
- cw.delete_l7policy(L7POLICY_ID)
1019
-
1020
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1021
- assert_called_once_with(_flow_mock,
1022
- store={constants.L7POLICY: _l7policy_mock,
1023
- constants.LISTENERS:
1024
- [_listener_mock],
1025
- constants.LOADBALANCER:
1026
- _load_balancer_mock}))
1027
-
1028
- _flow_mock.run.assert_called_once_with()
1029
-
1030
- @mock.patch('octavia.controller.worker.v1.flows.'
1031
- 'l7policy_flows.L7PolicyFlows.get_update_l7policy_flow',
1032
- return_value=_flow_mock)
1033
- def test_update_l7policy(self,
1034
- mock_get_update_listener_flow,
1035
- mock_api_get_session,
1036
- mock_dyn_log_listener,
1037
- mock_taskflow_load,
1038
- mock_pool_repo_get,
1039
- mock_member_repo_get,
1040
- mock_l7rule_repo_get,
1041
- mock_l7policy_repo_get,
1042
- mock_listener_repo_get,
1043
- mock_lb_repo_get,
1044
- mock_health_mon_repo_get,
1045
- mock_amp_repo_get):
1046
-
1047
- _flow_mock.reset_mock()
1048
- _l7policy_mock.provisioning_status = constants.PENDING_UPDATE
1049
-
1050
- cw = controller_worker.ControllerWorker()
1051
- cw.update_l7policy(L7POLICY_ID, L7POLICY_UPDATE_DICT)
1052
-
1053
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1054
- assert_called_once_with(_flow_mock,
1055
- store={constants.L7POLICY: _l7policy_mock,
1056
- constants.LISTENERS:
1057
- [_listener_mock],
1058
- constants.LOADBALANCER:
1059
- _load_balancer_mock,
1060
- constants.UPDATE_DICT:
1061
- L7POLICY_UPDATE_DICT}))
1062
-
1063
- _flow_mock.run.assert_called_once_with()
1064
-
1065
- @mock.patch('octavia.controller.worker.v1.flows.'
1066
- 'l7rule_flows.L7RuleFlows.get_create_l7rule_flow',
1067
- return_value=_flow_mock)
1068
- def test_create_l7rule(self,
1069
- mock_get_create_listener_flow,
1070
- mock_api_get_session,
1071
- mock_dyn_log_listener,
1072
- mock_taskflow_load,
1073
- mock_pool_repo_get,
1074
- mock_member_repo_get,
1075
- mock_l7rule_repo_get,
1076
- mock_l7policy_repo_get,
1077
- mock_listener_repo_get,
1078
- mock_lb_repo_get,
1079
- mock_health_mon_repo_get,
1080
- mock_amp_repo_get):
1081
-
1082
- _flow_mock.reset_mock()
1083
- mock_l7rule_repo_get.side_effect = [None, _l7rule_mock]
1084
-
1085
- cw = controller_worker.ControllerWorker()
1086
- cw.create_l7rule(L7RULE_ID)
1087
-
1088
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1089
- assert_called_once_with(_flow_mock,
1090
- store={constants.L7RULE: _l7rule_mock,
1091
- constants.L7POLICY: _l7policy_mock,
1092
- constants.LISTENERS:
1093
- [_listener_mock],
1094
- constants.LOADBALANCER:
1095
- _load_balancer_mock}))
1096
-
1097
- _flow_mock.run.assert_called_once_with()
1098
- self.assertEqual(2, mock_l7rule_repo_get.call_count)
1099
-
1100
- @mock.patch('octavia.controller.worker.v1.flows.'
1101
- 'l7rule_flows.L7RuleFlows.get_delete_l7rule_flow',
1102
- return_value=_flow_mock)
1103
- def test_delete_l7rule(self,
1104
- mock_get_delete_listener_flow,
1105
- mock_api_get_session,
1106
- mock_dyn_log_listener,
1107
- mock_taskflow_load,
1108
- mock_pool_repo_get,
1109
- mock_member_repo_get,
1110
- mock_l7rule_repo_get,
1111
- mock_l7policy_repo_get,
1112
- mock_listener_repo_get,
1113
- mock_lb_repo_get,
1114
- mock_health_mon_repo_get,
1115
- mock_amp_repo_get):
1116
-
1117
- _flow_mock.reset_mock()
1118
-
1119
- cw = controller_worker.ControllerWorker()
1120
- cw.delete_l7rule(L7RULE_ID)
1121
-
1122
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1123
- assert_called_once_with(_flow_mock,
1124
- store={constants.L7RULE: _l7rule_mock,
1125
- constants.L7POLICY: _l7policy_mock,
1126
- constants.LISTENERS:
1127
- [_listener_mock],
1128
- constants.LOADBALANCER:
1129
- _load_balancer_mock}))
1130
-
1131
- _flow_mock.run.assert_called_once_with()
1132
-
1133
- @mock.patch('octavia.controller.worker.v1.flows.'
1134
- 'l7rule_flows.L7RuleFlows.get_update_l7rule_flow',
1135
- return_value=_flow_mock)
1136
- def test_update_l7rule(self,
1137
- mock_get_update_listener_flow,
1138
- mock_api_get_session,
1139
- mock_dyn_log_listener,
1140
- mock_taskflow_load,
1141
- mock_pool_repo_get,
1142
- mock_member_repo_get,
1143
- mock_l7rule_repo_get,
1144
- mock_l7policy_repo_get,
1145
- mock_listener_repo_get,
1146
- mock_lb_repo_get,
1147
- mock_health_mon_repo_get,
1148
- mock_amp_repo_get):
1149
-
1150
- _flow_mock.reset_mock()
1151
- _l7rule_mock.provisioning_status = constants.PENDING_UPDATE
1152
-
1153
- cw = controller_worker.ControllerWorker()
1154
- cw.update_l7rule(L7RULE_ID, L7RULE_UPDATE_DICT)
1155
-
1156
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1157
- assert_called_once_with(_flow_mock,
1158
- store={constants.L7RULE: _l7rule_mock,
1159
- constants.L7POLICY: _l7policy_mock,
1160
- constants.LISTENERS:
1161
- [_listener_mock],
1162
- constants.LOADBALANCER:
1163
- _load_balancer_mock,
1164
- constants.UPDATE_DICT:
1165
- L7RULE_UPDATE_DICT}))
1166
-
1167
- _flow_mock.run.assert_called_once_with()
1168
-
1169
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1170
- 'get_availability_zone_metadata_dict', return_value={})
1171
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1172
- 'get_flavor_metadata_dict', return_value={})
1173
- @mock.patch('octavia.controller.worker.v1.flows.'
1174
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1175
- return_value=_flow_mock)
1176
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1177
- def test_failover_amphora_lb_single(self,
1178
- mock_update,
1179
- mock_get_failover_flow,
1180
- mock_get_flavor_meta,
1181
- mock_get_az_meta,
1182
- mock_api_get_session,
1183
- mock_dyn_log_listener,
1184
- mock_taskflow_load,
1185
- mock_pool_repo_get,
1186
- mock_member_repo_get,
1187
- mock_l7rule_repo_get,
1188
- mock_l7policy_repo_get,
1189
- mock_listener_repo_get,
1190
- mock_lb_repo_get,
1191
- mock_health_mon_repo_get,
1192
- mock_amp_repo_get):
1193
- _flow_mock.reset_mock()
1194
- mock_lb_repo_get.return_value = _load_balancer_mock
1195
-
1196
- cw = controller_worker.ControllerWorker()
1197
- cw.failover_amphora(AMP_ID)
1198
-
1199
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1200
- assert_called_once_with(
1201
- _flow_mock,
1202
- store={constants.FLAVOR: {'loadbalancer_topology':
1203
- _load_balancer_mock.topology},
1204
- constants.LOADBALANCER: _load_balancer_mock,
1205
- constants.LOADBALANCER_ID:
1206
- _load_balancer_mock.id,
1207
- constants.BUILD_TYPE_PRIORITY:
1208
- constants.LB_CREATE_FAILOVER_PRIORITY,
1209
- constants.SERVER_GROUP_ID:
1210
- _load_balancer_mock.server_group_id,
1211
- constants.AVAILABILITY_ZONE: {},
1212
- constants.VIP: _load_balancer_mock.vip
1213
- }))
1214
-
1215
- _flow_mock.run.assert_called_once_with()
1216
-
1217
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1218
- 'get_availability_zone_metadata_dict', return_value={})
1219
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1220
- 'get_flavor_metadata_dict', return_value={})
1221
- @mock.patch('octavia.controller.worker.v1.flows.'
1222
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1223
- return_value=_flow_mock)
1224
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1225
- def test_failover_amphora_lb_act_stdby(self,
1226
- mock_update,
1227
- mock_get_failover_flow,
1228
- mock_get_flavor_meta,
1229
- mock_get_az_meta,
1230
- mock_api_get_session,
1231
- mock_dyn_log_listener,
1232
- mock_taskflow_load,
1233
- mock_pool_repo_get,
1234
- mock_member_repo_get,
1235
- mock_l7rule_repo_get,
1236
- mock_l7policy_repo_get,
1237
- mock_listener_repo_get,
1238
- mock_lb_repo_get,
1239
- mock_health_mon_repo_get,
1240
- mock_amp_repo_get):
1241
- _flow_mock.reset_mock()
1242
- load_balancer_mock = mock.MagicMock()
1243
- load_balancer_mock.listeners = [_listener_mock]
1244
- load_balancer_mock.topology = constants.TOPOLOGY_ACTIVE_STANDBY
1245
- load_balancer_mock.flavor_id = None
1246
- load_balancer_mock.availability_zone = None
1247
- load_balancer_mock.vip = _vip_mock
1248
-
1249
- mock_lb_repo_get.return_value = load_balancer_mock
1250
-
1251
- cw = controller_worker.ControllerWorker()
1252
- cw.failover_amphora(AMP_ID)
1253
-
1254
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1255
- assert_called_once_with(
1256
- _flow_mock,
1257
- store={constants.FLAVOR: {'loadbalancer_topology':
1258
- load_balancer_mock.topology},
1259
- constants.LOADBALANCER: load_balancer_mock,
1260
- constants.LOADBALANCER_ID: load_balancer_mock.id,
1261
- constants.BUILD_TYPE_PRIORITY:
1262
- constants.LB_CREATE_FAILOVER_PRIORITY,
1263
- constants.AVAILABILITY_ZONE: {},
1264
- constants.SERVER_GROUP_ID:
1265
- load_balancer_mock.server_group_id,
1266
- constants.VIP: load_balancer_mock.vip
1267
- }))
1268
-
1269
- _flow_mock.run.assert_called_once_with()
1270
-
1271
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1272
- 'get_availability_zone_metadata_dict', return_value={})
1273
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1274
- 'get_flavor_metadata_dict', return_value={})
1275
- @mock.patch('octavia.controller.worker.v1.flows.'
1276
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1277
- return_value=_flow_mock)
1278
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1279
- def test_failover_amphora_unknown_topology(self,
1280
- mock_update,
1281
- mock_get_failover_flow,
1282
- mock_get_flavor_meta,
1283
- mock_get_az_meta,
1284
- mock_api_get_session,
1285
- mock_dyn_log_listener,
1286
- mock_taskflow_load,
1287
- mock_pool_repo_get,
1288
- mock_member_repo_get,
1289
- mock_l7rule_repo_get,
1290
- mock_l7policy_repo_get,
1291
- mock_listener_repo_get,
1292
- mock_lb_repo_get,
1293
- mock_health_mon_repo_get,
1294
- mock_amp_repo_get):
1295
-
1296
- _flow_mock.reset_mock()
1297
- load_balancer_mock = mock.MagicMock()
1298
- load_balancer_mock.listeners = [_listener_mock]
1299
- load_balancer_mock.topology = 'bogus'
1300
- load_balancer_mock.flavor_id = None
1301
- load_balancer_mock.availability_zone = None
1302
- load_balancer_mock.vip = _vip_mock
1303
-
1304
- mock_lb_repo_get.return_value = load_balancer_mock
1305
-
1306
- cw = controller_worker.ControllerWorker()
1307
- cw.failover_amphora(AMP_ID)
1308
-
1309
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1310
- assert_called_once_with(
1311
- _flow_mock,
1312
- store={constants.FLAVOR: {'loadbalancer_topology':
1313
- load_balancer_mock.topology},
1314
- constants.LOADBALANCER: load_balancer_mock,
1315
- constants.LOADBALANCER_ID: load_balancer_mock.id,
1316
- constants.BUILD_TYPE_PRIORITY:
1317
- constants.LB_CREATE_FAILOVER_PRIORITY,
1318
- constants.SERVER_GROUP_ID:
1319
- load_balancer_mock.server_group_id,
1320
- constants.AVAILABILITY_ZONE: {},
1321
- constants.VIP: load_balancer_mock.vip
1322
- }))
1323
-
1324
- _flow_mock.run.assert_called_once_with()
1325
-
1326
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1327
- 'get_availability_zone_metadata_dict', return_value={})
1328
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1329
- 'get_flavor_metadata_dict', return_value={})
1330
- @mock.patch('octavia.controller.worker.v1.flows.'
1331
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1332
- return_value=_flow_mock)
1333
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1334
- def test_failover_amphora_with_flavor(self,
1335
- mock_update,
1336
- mock_get_failover_flow,
1337
- mock_get_flavor_meta,
1338
- mock_get_az_meta,
1339
- mock_api_get_session,
1340
- mock_dyn_log_listener,
1341
- mock_taskflow_load,
1342
- mock_pool_repo_get,
1343
- mock_member_repo_get,
1344
- mock_l7rule_repo_get,
1345
- mock_l7policy_repo_get,
1346
- mock_listener_repo_get,
1347
- mock_lb_repo_get,
1348
- mock_health_mon_repo_get,
1349
- mock_amp_repo_get):
1350
- _flow_mock.reset_mock()
1351
- load_balancer_mock = mock.MagicMock()
1352
- load_balancer_mock.listeners = [_listener_mock]
1353
- load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
1354
- load_balancer_mock.flavor_id = uuidutils.generate_uuid()
1355
- load_balancer_mock.availability_zone = None
1356
- load_balancer_mock.vip = _vip_mock
1357
- mock_get_flavor_meta.return_value = {'taste': 'spicy'}
1358
-
1359
- mock_lb_repo_get.return_value = load_balancer_mock
1360
-
1361
- cw = controller_worker.ControllerWorker()
1362
- cw.failover_amphora(AMP_ID)
1363
-
1364
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1365
- assert_called_once_with(
1366
- _flow_mock,
1367
- store={constants.FLAVOR: {'loadbalancer_topology':
1368
- load_balancer_mock.topology,
1369
- 'taste': 'spicy'},
1370
- constants.LOADBALANCER: load_balancer_mock,
1371
- constants.LOADBALANCER_ID: load_balancer_mock.id,
1372
- constants.BUILD_TYPE_PRIORITY:
1373
- constants.LB_CREATE_FAILOVER_PRIORITY,
1374
- constants.SERVER_GROUP_ID: None,
1375
- constants.AVAILABILITY_ZONE: {},
1376
- constants.SERVER_GROUP_ID:
1377
- load_balancer_mock.server_group_id,
1378
- constants.VIP: load_balancer_mock.vip
1379
- }))
1380
-
1381
- _flow_mock.run.assert_called_once_with()
1382
-
1383
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1384
- 'get_availability_zone_metadata_dict', return_value={})
1385
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1386
- 'get_flavor_metadata_dict', return_value={})
1387
- @mock.patch('octavia.controller.worker.v1.flows.'
1388
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1389
- return_value=_flow_mock)
1390
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1391
- def test_failover_amphora_with_az(self,
1392
- mock_update,
1393
- mock_get_failover_flow,
1394
- mock_get_flavor_meta,
1395
- mock_get_az_meta,
1396
- mock_api_get_session,
1397
- mock_dyn_log_listener,
1398
- mock_taskflow_load,
1399
- mock_pool_repo_get,
1400
- mock_member_repo_get,
1401
- mock_l7rule_repo_get,
1402
- mock_l7policy_repo_get,
1403
- mock_listener_repo_get,
1404
- mock_lb_repo_get,
1405
- mock_health_mon_repo_get,
1406
- mock_amp_repo_get):
1407
-
1408
- _flow_mock.reset_mock()
1409
- load_balancer_mock = mock.MagicMock()
1410
- load_balancer_mock.listeners = [_listener_mock]
1411
- load_balancer_mock.topology = 'bogus'
1412
- load_balancer_mock.flavor_id = None
1413
- load_balancer_mock.availability_zone = uuidutils.generate_uuid()
1414
- load_balancer_mock.vip = _vip_mock
1415
- mock_get_az_meta.return_value = {'planet': 'jupiter'}
1416
-
1417
- mock_lb_repo_get.return_value = load_balancer_mock
1418
-
1419
- cw = controller_worker.ControllerWorker()
1420
- cw.failover_amphora(AMP_ID)
1421
-
1422
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1423
- assert_called_once_with(
1424
- _flow_mock,
1425
- store={constants.FLAVOR: {'loadbalancer_topology':
1426
- load_balancer_mock.topology},
1427
- constants.LOADBALANCER: load_balancer_mock,
1428
- constants.LOADBALANCER_ID: load_balancer_mock.id,
1429
- constants.BUILD_TYPE_PRIORITY:
1430
- constants.LB_CREATE_FAILOVER_PRIORITY,
1431
- constants.SERVER_GROUP_ID:
1432
- load_balancer_mock.server_group_id,
1433
- constants.AVAILABILITY_ZONE: {'planet': 'jupiter'},
1434
- constants.VIP: load_balancer_mock.vip
1435
- }))
1436
-
1437
- _flow_mock.run.assert_called_once_with()
1438
-
1439
- @mock.patch('octavia.controller.worker.v1.flows.amphora_flows.'
1440
- 'AmphoraFlows.get_failover_amphora_flow')
1441
- def test_failover_amp_missing_amp(self,
1442
- mock_get_amp_failover,
1443
- mock_api_get_session,
1444
- mock_dyn_log_listener,
1445
- mock_taskflow_load,
1446
- mock_pool_repo_get,
1447
- mock_member_repo_get,
1448
- mock_l7rule_repo_get,
1449
- mock_l7policy_repo_get,
1450
- mock_listener_repo_get,
1451
- mock_lb_repo_get,
1452
- mock_health_mon_repo_get,
1453
- mock_amp_repo_get):
1454
-
1455
- mock_amp_repo_get.return_value = None
1456
-
1457
- cw = controller_worker.ControllerWorker()
1458
- cw.failover_amphora(AMP_ID)
1459
-
1460
- mock_get_amp_failover.assert_not_called()
1461
-
1462
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1463
- def test_failover_amp_flow_exception(self,
1464
- mock_update,
1465
- mock_api_get_session,
1466
- mock_dyn_log_listener,
1467
- mock_taskflow_load,
1468
- mock_pool_repo_get,
1469
- mock_member_repo_get,
1470
- mock_l7rule_repo_get,
1471
- mock_l7policy_repo_get,
1472
- mock_listener_repo_get,
1473
- mock_lb_repo_get,
1474
- mock_health_mon_repo_get,
1475
- mock_amp_repo_get):
1476
-
1477
- mock_amphora = mock.MagicMock()
1478
- mock_amphora.id = AMP_ID
1479
- mock_amphora.load_balancer_id = LB_ID
1480
- mock_amp_repo_get.return_value = mock_amphora
1481
-
1482
- mock_lb_repo_get.side_effect = TestException('boom')
1483
- cw = controller_worker.ControllerWorker()
1484
- cw.failover_amphora(AMP_ID)
1485
- mock_update.assert_called_with(_db_session, LB_ID,
1486
- provisioning_status=constants.ERROR)
1487
-
1488
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1489
- def test_failover_amp_flow_exception_reraise(self,
1490
- mock_update,
1491
- mock_api_get_session,
1492
- mock_dyn_log_listener,
1493
- mock_taskflow_load,
1494
- mock_pool_repo_get,
1495
- mock_member_repo_get,
1496
- mock_l7rule_repo_get,
1497
- mock_l7policy_repo_get,
1498
- mock_listener_repo_get,
1499
- mock_lb_repo_get,
1500
- mock_health_mon_repo_get,
1501
- mock_amp_repo_get):
1502
-
1503
- mock_amphora = mock.MagicMock()
1504
- mock_amphora.id = AMP_ID
1505
- mock_amphora.load_balancer_id = LB_ID
1506
- mock_amp_repo_get.return_value = mock_amphora
1507
-
1508
- mock_lb_repo_get.side_effect = TestException('boom')
1509
- cw = controller_worker.ControllerWorker()
1510
- self.assertRaises(TestException,
1511
- cw.failover_amphora,
1512
- AMP_ID, reraise=True)
1513
-
1514
- @mock.patch('octavia.controller.worker.v1.flows.amphora_flows.'
1515
- 'AmphoraFlows.get_failover_amphora_flow')
1516
- def test_failover_amp_no_lb(self,
1517
- mock_get_failover_amp_flow,
1518
- mock_api_get_session,
1519
- mock_dyn_log_listener,
1520
- mock_taskflow_load,
1521
- mock_pool_repo_get,
1522
- mock_member_repo_get,
1523
- mock_l7rule_repo_get,
1524
- mock_l7policy_repo_get,
1525
- mock_listener_repo_get,
1526
- mock_lb_repo_get,
1527
- mock_health_mon_repo_get,
1528
- mock_amp_repo_get):
1529
- _flow_mock.run.reset_mock()
1530
- FAKE_FLOW = 'FAKE_FLOW'
1531
- mock_amphora = mock.MagicMock()
1532
- mock_amphora.load_balancer_id = None
1533
- mock_amphora.id = AMP_ID
1534
- mock_amphora.status = constants.AMPHORA_READY
1535
- mock_amp_repo_get.return_value = mock_amphora
1536
- mock_get_failover_amp_flow.return_value = FAKE_FLOW
1537
- expected_stored_params = {constants.AVAILABILITY_ZONE: {},
1538
- constants.BUILD_TYPE_PRIORITY:
1539
- constants.LB_CREATE_FAILOVER_PRIORITY,
1540
- constants.FLAVOR: {},
1541
- constants.LOADBALANCER: None,
1542
- constants.LOADBALANCER_ID: None,
1543
- constants.SERVER_GROUP_ID: None,
1544
- constants.VIP: None}
1545
-
1546
- cw = controller_worker.ControllerWorker()
1547
- cw.failover_amphora(AMP_ID)
1548
-
1549
- mock_get_failover_amp_flow.assert_called_once_with(mock_amphora, None)
1550
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
1551
- assert_called_once_with(FAKE_FLOW, store=expected_stored_params))
1552
- _flow_mock.run.assert_called_once_with()
1553
-
1554
- @mock.patch('octavia.db.repositories.AmphoraHealthRepository.delete')
1555
- def test_failover_deleted_amphora(self,
1556
- mock_delete,
1557
- mock_api_get_session,
1558
- mock_dyn_log_listener,
1559
- mock_taskflow_load,
1560
- mock_pool_repo_get,
1561
- mock_member_repo_get,
1562
- mock_l7rule_repo_get,
1563
- mock_l7policy_repo_get,
1564
- mock_listener_repo_get,
1565
- mock_lb_repo_get,
1566
- mock_health_mon_repo_get,
1567
- mock_amp_repo_get):
1568
-
1569
- mock_taskflow_load.reset_mock()
1570
- mock_amphora = mock.MagicMock()
1571
- mock_amphora.id = AMP_ID
1572
- mock_amphora.status = constants.DELETED
1573
- mock_amp_repo_get.return_value = mock_amphora
1574
-
1575
- cw = controller_worker.ControllerWorker()
1576
- cw.failover_amphora(AMP_ID)
1577
-
1578
- mock_delete.assert_called_with(_db_session, amphora_id=AMP_ID)
1579
- mock_taskflow_load.assert_not_called()
1580
-
1581
- def test_get_amphorae_for_failover_single(self,
1582
- mock_api_get_session,
1583
- mock_dyn_log_listener,
1584
- mock_taskflow_load,
1585
- mock_pool_repo_get,
1586
- mock_member_repo_get,
1587
- mock_l7rule_repo_get,
1588
- mock_l7policy_repo_get,
1589
- mock_listener_repo_get,
1590
- mock_lb_repo_get,
1591
- mock_health_mon_repo_get,
1592
- mock_amp_repo_get):
1593
- amphora1_mock = mock.MagicMock()
1594
- amphora1_mock.status = constants.AMPHORA_ALLOCATED
1595
- amphora2_mock = mock.MagicMock()
1596
- amphora2_mock.status = constants.DELETED
1597
-
1598
- load_balancer_mock = mock.MagicMock()
1599
- load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
1600
- load_balancer_mock.amphorae = [amphora1_mock, amphora2_mock]
1601
-
1602
- cw = controller_worker.ControllerWorker()
1603
- result = cw._get_amphorae_for_failover(load_balancer_mock)
1604
-
1605
- self.assertEqual([amphora1_mock], result)
1606
-
1607
- @mock.patch('octavia.common.utils.get_amphora_driver')
1608
- def test_get_amphorae_for_failover_act_stdby(self,
1609
- mock_get_amp_driver,
1610
- mock_api_get_session,
1611
- mock_dyn_log_listener,
1612
- mock_taskflow_load,
1613
- mock_pool_repo_get,
1614
- mock_member_repo_get,
1615
- mock_l7rule_repo_get,
1616
- mock_l7policy_repo_get,
1617
- mock_listener_repo_get,
1618
- mock_lb_repo_get,
1619
- mock_health_mon_repo_get,
1620
- mock_amp_repo_get):
1621
- # Note: This test uses three amphora even though we only have
1622
- # two per load balancer to properly test the ordering from
1623
- # this method.
1624
- amp_driver_mock = mock.MagicMock()
1625
- amp_driver_mock.get_interface_from_ip.side_effect = [
1626
- 'fake0', None, 'fake1']
1627
- mock_get_amp_driver.return_value = amp_driver_mock
1628
- backup_amphora_mock = mock.MagicMock()
1629
- backup_amphora_mock.status = constants.AMPHORA_ALLOCATED
1630
- deleted_amphora_mock = mock.MagicMock()
1631
- deleted_amphora_mock.status = constants.DELETED
1632
- master_amphora_mock = mock.MagicMock()
1633
- master_amphora_mock.status = constants.AMPHORA_ALLOCATED
1634
- bogus_amphora_mock = mock.MagicMock()
1635
- bogus_amphora_mock.status = constants.AMPHORA_ALLOCATED
1636
-
1637
- load_balancer_mock = mock.MagicMock()
1638
- load_balancer_mock.topology = constants.TOPOLOGY_ACTIVE_STANDBY
1639
- load_balancer_mock.amphorae = [
1640
- master_amphora_mock, deleted_amphora_mock, backup_amphora_mock,
1641
- bogus_amphora_mock]
1642
-
1643
- cw = controller_worker.ControllerWorker()
1644
- result = cw._get_amphorae_for_failover(load_balancer_mock)
1645
-
1646
- self.assertEqual([master_amphora_mock, bogus_amphora_mock,
1647
- backup_amphora_mock], result)
1648
-
1649
- @mock.patch('octavia.common.utils.get_amphora_driver')
1650
- def test_get_amphorae_for_failover_act_stdby_net_split(
1651
- self, mock_get_amp_driver, mock_api_get_session,
1652
- mock_dyn_log_listener, mock_taskflow_load, mock_pool_repo_get,
1653
- mock_member_repo_get, mock_l7rule_repo_get, mock_l7policy_repo_get,
1654
- mock_listener_repo_get, mock_lb_repo_get, mock_health_mon_repo_get,
1655
- mock_amp_repo_get):
1656
- # Case where the amps can't see eachother and somehow end up with
1657
- # two amphora with an interface. This is highly unlikely as the
1658
- # higher priority amphora should get the IP in a net split, but
1659
- # let's test the code for this odd case.
1660
- # Note: This test uses three amphora even though we only have
1661
- # two per load balancer to properly test the ordering from
1662
- # this method.
1663
- amp_driver_mock = mock.MagicMock()
1664
- amp_driver_mock.get_interface_from_ip.side_effect = [
1665
- 'fake0', 'fake1']
1666
- mock_get_amp_driver.return_value = amp_driver_mock
1667
- backup_amphora_mock = mock.MagicMock()
1668
- backup_amphora_mock.status = constants.AMPHORA_ALLOCATED
1669
- deleted_amphora_mock = mock.MagicMock()
1670
- deleted_amphora_mock.status = constants.DELETED
1671
- master_amphora_mock = mock.MagicMock()
1672
- master_amphora_mock.status = constants.AMPHORA_ALLOCATED
1673
-
1674
- load_balancer_mock = mock.MagicMock()
1675
- load_balancer_mock.topology = constants.TOPOLOGY_ACTIVE_STANDBY
1676
- load_balancer_mock.amphorae = [
1677
- backup_amphora_mock, deleted_amphora_mock, master_amphora_mock]
1678
-
1679
- cw = controller_worker.ControllerWorker()
1680
- result = cw._get_amphorae_for_failover(load_balancer_mock)
1681
-
1682
- self.assertEqual([backup_amphora_mock, master_amphora_mock], result)
1683
-
1684
- def test_get_amphorae_for_failover_bogus_topology(self,
1685
- mock_api_get_session,
1686
- mock_dyn_log_listener,
1687
- mock_taskflow_load,
1688
- mock_pool_repo_get,
1689
- mock_member_repo_get,
1690
- mock_l7rule_repo_get,
1691
- mock_l7policy_repo_get,
1692
- mock_listener_repo_get,
1693
- mock_lb_repo_get,
1694
- mock_health_mon_repo_get,
1695
- mock_amp_repo_get):
1696
- load_balancer_mock = mock.MagicMock()
1697
- load_balancer_mock.topology = 'bogus'
1698
-
1699
- cw = controller_worker.ControllerWorker()
1700
- self.assertRaises(exceptions.InvalidTopology,
1701
- cw._get_amphorae_for_failover,
1702
- load_balancer_mock)
1703
-
1704
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
1705
- 'LoadBalancerFlows.get_failover_LB_flow')
1706
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
1707
- 'ControllerWorker._get_amphorae_for_failover')
1708
- def test_failover_loadbalancer_single(self,
1709
- mock_get_amps_for_failover,
1710
- mock_get_failover_lb_flow,
1711
- mock_api_get_session,
1712
- mock_dyn_log_listener,
1713
- mock_taskflow_load,
1714
- mock_pool_repo_get,
1715
- mock_member_repo_get,
1716
- mock_l7rule_repo_get,
1717
- mock_l7policy_repo_get,
1718
- mock_listener_repo_get,
1719
- mock_lb_repo_get,
1720
- mock_health_mon_repo_get,
1721
- mock_amp_repo_get):
1722
- FAKE_FLOW = 'FAKE_FLOW'
1723
- _flow_mock.reset_mock()
1724
- mock_lb_repo_get.return_value = _load_balancer_mock
1725
- mock_get_amps_for_failover.return_value = [_amphora_mock]
1726
- mock_get_failover_lb_flow.return_value = FAKE_FLOW
1727
-
1728
- expected_flavor = {constants.LOADBALANCER_TOPOLOGY:
1729
- _load_balancer_mock.topology}
1730
- expected_flow_store = {constants.LOADBALANCER: _load_balancer_mock,
1731
- constants.BUILD_TYPE_PRIORITY:
1732
- constants.LB_CREATE_FAILOVER_PRIORITY,
1733
- constants.LOADBALANCER_ID:
1734
- _load_balancer_mock.id,
1735
- constants.SERVER_GROUP_ID:
1736
- _load_balancer_mock.server_group_id,
1737
- constants.FLAVOR: expected_flavor,
1738
- constants.AVAILABILITY_ZONE: {}}
1739
-
1740
- cw = controller_worker.ControllerWorker()
1741
- cw.failover_loadbalancer(LB_ID)
1742
-
1743
- mock_lb_repo_get.assert_called_once_with(_db_session, id=LB_ID)
1744
- mock_get_amps_for_failover.assert_called_once_with(_load_balancer_mock)
1745
- mock_get_failover_lb_flow.assert_called_once_with([_amphora_mock],
1746
- _load_balancer_mock)
1747
- mock_taskflow_load.assert_called_once_with(FAKE_FLOW,
1748
- store=expected_flow_store)
1749
- _flow_mock.run.assert_called_once_with()
1750
-
1751
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
1752
- 'LoadBalancerFlows.get_failover_LB_flow')
1753
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
1754
- 'ControllerWorker._get_amphorae_for_failover')
1755
- def test_failover_loadbalancer_act_stdby(self,
1756
- mock_get_amps_for_failover,
1757
- mock_get_failover_lb_flow,
1758
- mock_api_get_session,
1759
- mock_dyn_log_listener,
1760
- mock_taskflow_load,
1761
- mock_pool_repo_get,
1762
- mock_member_repo_get,
1763
- mock_l7rule_repo_get,
1764
- mock_l7policy_repo_get,
1765
- mock_listener_repo_get,
1766
- mock_lb_repo_get,
1767
- mock_health_mon_repo_get,
1768
- mock_amp_repo_get):
1769
- FAKE_FLOW = 'FAKE_FLOW'
1770
- _flow_mock.reset_mock()
1771
- load_balancer_mock = mock.MagicMock()
1772
- load_balancer_mock.listeners = [_listener_mock]
1773
- load_balancer_mock.topology = constants.TOPOLOGY_ACTIVE_STANDBY
1774
- load_balancer_mock.flavor_id = None
1775
- load_balancer_mock.availability_zone = None
1776
- load_balancer_mock.vip = _vip_mock
1777
- mock_lb_repo_get.return_value = load_balancer_mock
1778
- mock_get_amps_for_failover.return_value = [_amphora_mock,
1779
- _amphora_mock]
1780
- mock_get_failover_lb_flow.return_value = FAKE_FLOW
1781
-
1782
- expected_flavor = {constants.LOADBALANCER_TOPOLOGY:
1783
- load_balancer_mock.topology}
1784
- expected_flow_store = {constants.LOADBALANCER: load_balancer_mock,
1785
- constants.BUILD_TYPE_PRIORITY:
1786
- constants.LB_CREATE_FAILOVER_PRIORITY,
1787
- constants.LOADBALANCER_ID:
1788
- load_balancer_mock.id,
1789
- constants.SERVER_GROUP_ID:
1790
- load_balancer_mock.server_group_id,
1791
- constants.FLAVOR: expected_flavor,
1792
- constants.AVAILABILITY_ZONE: {}}
1793
-
1794
- cw = controller_worker.ControllerWorker()
1795
- cw.failover_loadbalancer(LB_ID)
1796
-
1797
- mock_lb_repo_get.assert_called_once_with(_db_session, id=LB_ID)
1798
- mock_get_amps_for_failover.assert_called_once_with(load_balancer_mock)
1799
- mock_get_failover_lb_flow.assert_called_once_with(
1800
- [_amphora_mock, _amphora_mock], load_balancer_mock)
1801
- mock_taskflow_load.assert_called_once_with(FAKE_FLOW,
1802
- store=expected_flow_store)
1803
- _flow_mock.run.assert_called_once_with()
1804
-
1805
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1806
- def test_failover_loadbalancer_no_lb(self,
1807
- mock_lb_repo_update,
1808
- mock_api_get_session,
1809
- mock_dyn_log_listener,
1810
- mock_taskflow_load,
1811
- mock_pool_repo_get,
1812
- mock_member_repo_get,
1813
- mock_l7rule_repo_get,
1814
- mock_l7policy_repo_get,
1815
- mock_listener_repo_get,
1816
- mock_lb_repo_get,
1817
- mock_health_mon_repo_get,
1818
- mock_amp_repo_get):
1819
- mock_lb_repo_get.return_value = None
1820
-
1821
- cw = controller_worker.ControllerWorker()
1822
- cw.failover_loadbalancer(LB_ID)
1823
-
1824
- mock_lb_repo_update.assert_called_once_with(
1825
- _db_session, LB_ID, provisioning_status=constants.ERROR)
1826
-
1827
- @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
1828
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
1829
- 'ControllerWorker._get_amphorae_for_failover')
1830
- def test_failover_loadbalancer_with_bogus_topology(
1831
- self, mock_get_amps_for_failover, mock_lb_repo_update,
1832
- mock_api_get_session, mock_dyn_log_listener, mock_taskflow_load,
1833
- mock_pool_repo_get, mock_member_repo_get, mock_l7rule_repo_get,
1834
- mock_l7policy_repo_get, mock_listener_repo_get, mock_lb_repo_get,
1835
- mock_health_mon_repo_get, mock_amp_repo_get):
1836
- _flow_mock.reset_mock()
1837
- load_balancer_mock = mock.MagicMock()
1838
- load_balancer_mock.topology = 'bogus'
1839
- mock_lb_repo_get.return_value = load_balancer_mock
1840
- mock_get_amps_for_failover.return_value = [_amphora_mock]
1841
-
1842
- cw = controller_worker.ControllerWorker()
1843
- result = cw.failover_loadbalancer(LB_ID)
1844
-
1845
- self.assertIsNone(result)
1846
- mock_lb_repo_update.assert_called_once_with(
1847
- _db_session, LB_ID, provisioning_status=constants.ERROR)
1848
- mock_lb_repo_get.assert_called_once_with(_db_session, id=LB_ID)
1849
- mock_get_amps_for_failover.assert_called_once_with(load_balancer_mock)
1850
-
1851
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1852
- 'get_availability_zone_metadata_dict', return_value={})
1853
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
1854
- 'LoadBalancerFlows.get_failover_LB_flow')
1855
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
1856
- 'ControllerWorker._get_amphorae_for_failover')
1857
- def test_failover_loadbalancer_with_az(self,
1858
- mock_get_amps_for_failover,
1859
- mock_get_failover_lb_flow,
1860
- mock_get_az_meta,
1861
- mock_api_get_session,
1862
- mock_dyn_log_listener,
1863
- mock_taskflow_load,
1864
- mock_pool_repo_get,
1865
- mock_member_repo_get,
1866
- mock_l7rule_repo_get,
1867
- mock_l7policy_repo_get,
1868
- mock_listener_repo_get,
1869
- mock_lb_repo_get,
1870
- mock_health_mon_repo_get,
1871
- mock_amp_repo_get):
1872
- FAKE_FLOW = 'FAKE_FLOW'
1873
- _flow_mock.reset_mock()
1874
- load_balancer_mock = mock.MagicMock()
1875
- load_balancer_mock.listeners = [_listener_mock]
1876
- load_balancer_mock.topology = constants.TOPOLOGY_ACTIVE_STANDBY
1877
- load_balancer_mock.flavor_id = None
1878
- load_balancer_mock.availability_zone = uuidutils.generate_uuid()
1879
- load_balancer_mock.vip = _vip_mock
1880
- mock_lb_repo_get.return_value = load_balancer_mock
1881
- mock_get_amps_for_failover.return_value = [_amphora_mock]
1882
- mock_get_failover_lb_flow.return_value = FAKE_FLOW
1883
- mock_get_az_meta.return_value = {'planet': 'jupiter'}
1884
-
1885
- expected_flavor = {constants.LOADBALANCER_TOPOLOGY:
1886
- load_balancer_mock.topology}
1887
- expected_flow_store = {constants.LOADBALANCER: load_balancer_mock,
1888
- constants.BUILD_TYPE_PRIORITY:
1889
- constants.LB_CREATE_FAILOVER_PRIORITY,
1890
- constants.LOADBALANCER_ID:
1891
- load_balancer_mock.id,
1892
- constants.FLAVOR: expected_flavor,
1893
- constants.SERVER_GROUP_ID:
1894
- load_balancer_mock.server_group_id,
1895
- constants.AVAILABILITY_ZONE: {
1896
- 'planet': 'jupiter'}}
1897
-
1898
- cw = controller_worker.ControllerWorker()
1899
- cw.failover_loadbalancer(LB_ID)
1900
-
1901
- mock_lb_repo_get.assert_called_once_with(_db_session, id=LB_ID)
1902
- mock_get_amps_for_failover.assert_called_once_with(load_balancer_mock)
1903
- mock_get_failover_lb_flow.assert_called_once_with([_amphora_mock],
1904
- load_balancer_mock)
1905
- mock_taskflow_load.assert_called_once_with(FAKE_FLOW,
1906
- store=expected_flow_store)
1907
- _flow_mock.run.assert_called_once_with()
1908
-
1909
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1910
- 'get_flavor_metadata_dict', return_value={'taste': 'spicy'})
1911
- @mock.patch('octavia.controller.worker.v1.flows.load_balancer_flows.'
1912
- 'LoadBalancerFlows.get_failover_LB_flow')
1913
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
1914
- 'ControllerWorker._get_amphorae_for_failover')
1915
- def test_failover_loadbalancer_with_flavor(self,
1916
- mock_get_amps_for_failover,
1917
- mock_get_failover_lb_flow,
1918
- mock_get_flavor_meta,
1919
- mock_api_get_session,
1920
- mock_dyn_log_listener,
1921
- mock_taskflow_load,
1922
- mock_pool_repo_get,
1923
- mock_member_repo_get,
1924
- mock_l7rule_repo_get,
1925
- mock_l7policy_repo_get,
1926
- mock_listener_repo_get,
1927
- mock_lb_repo_get,
1928
- mock_health_mon_repo_get,
1929
- mock_amp_repo_get):
1930
- FAKE_FLOW = 'FAKE_FLOW'
1931
- _flow_mock.reset_mock()
1932
- load_balancer_mock = mock.MagicMock()
1933
- load_balancer_mock.listeners = [_listener_mock]
1934
- load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
1935
- load_balancer_mock.flavor_id = uuidutils.generate_uuid()
1936
- load_balancer_mock.availability_zone = None
1937
- load_balancer_mock.vip = _vip_mock
1938
- mock_lb_repo_get.return_value = load_balancer_mock
1939
- mock_get_amps_for_failover.return_value = [_amphora_mock,
1940
- _amphora_mock]
1941
- mock_get_failover_lb_flow.return_value = FAKE_FLOW
1942
-
1943
- expected_flavor = {'taste': 'spicy', constants.LOADBALANCER_TOPOLOGY:
1944
- load_balancer_mock.topology}
1945
- expected_flow_store = {constants.LOADBALANCER: load_balancer_mock,
1946
- constants.BUILD_TYPE_PRIORITY:
1947
- constants.LB_CREATE_FAILOVER_PRIORITY,
1948
- constants.LOADBALANCER_ID:
1949
- load_balancer_mock.id,
1950
- constants.FLAVOR: expected_flavor,
1951
- constants.SERVER_GROUP_ID:
1952
- load_balancer_mock.server_group_id,
1953
- constants.AVAILABILITY_ZONE: {}}
1954
-
1955
- cw = controller_worker.ControllerWorker()
1956
- cw.failover_loadbalancer(LB_ID)
1957
-
1958
- mock_lb_repo_get.assert_called_once_with(_db_session, id=LB_ID)
1959
- mock_get_amps_for_failover.assert_called_once_with(load_balancer_mock)
1960
- mock_get_failover_lb_flow.assert_called_once_with(
1961
- [_amphora_mock, _amphora_mock], load_balancer_mock)
1962
- mock_taskflow_load.assert_called_once_with(FAKE_FLOW,
1963
- store=expected_flow_store)
1964
- _flow_mock.run.assert_called_once_with()
1965
-
1966
- @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1967
- 'get_availability_zone_metadata_dict', return_value={})
1968
- @mock.patch('octavia.db.repositories.FlavorRepository.'
1969
- 'get_flavor_metadata_dict', return_value={})
1970
- @mock.patch('octavia.controller.worker.v1.flows.'
1971
- 'amphora_flows.AmphoraFlows.get_failover_amphora_flow',
1972
- return_value=_flow_mock)
1973
- @mock.patch(
1974
- 'octavia.db.repositories.AmphoraRepository.get_lb_for_amphora',
1975
- return_value=_load_balancer_mock)
1976
- def test_failover_amphora_anti_affinity(self,
1977
- mock_get_lb_for_amphora,
1978
- mock_get_update_listener_flow,
1979
- mock_get_flavor_meta,
1980
- mock_get_az_meta,
1981
- mock_api_get_session,
1982
- mock_dyn_log_listener,
1983
- mock_taskflow_load,
1984
- mock_pool_repo_get,
1985
- mock_member_repo_get,
1986
- mock_l7rule_repo_get,
1987
- mock_l7policy_repo_get,
1988
- mock_listener_repo_get,
1989
- mock_lb_repo_get,
1990
- mock_health_mon_repo_get,
1991
- mock_amp_repo_get):
1992
-
1993
- self.conf.config(group="nova", enable_anti_affinity=True)
1994
- _flow_mock.reset_mock()
1995
- _load_balancer_mock.server_group_id = "123"
1996
-
1997
- cw = controller_worker.ControllerWorker()
1998
- cw.failover_amphora(AMP_ID)
1999
-
2000
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
2001
- assert_called_once_with(
2002
- _flow_mock,
2003
- store={constants.LOADBALANCER_ID: _load_balancer_mock.id,
2004
- constants.BUILD_TYPE_PRIORITY:
2005
- constants.LB_CREATE_FAILOVER_PRIORITY,
2006
- constants.FLAVOR: {'loadbalancer_topology':
2007
- _load_balancer_mock.topology},
2008
- constants.AVAILABILITY_ZONE: {},
2009
- constants.LOADBALANCER: _load_balancer_mock,
2010
- constants.VIP: _load_balancer_mock.vip,
2011
- constants.SERVER_GROUP_ID:
2012
- _load_balancer_mock.server_group_id
2013
- }))
2014
-
2015
- _flow_mock.run.assert_called_once_with()
2016
-
2017
- @mock.patch('octavia.controller.worker.v1.flows.'
2018
- 'amphora_flows.AmphoraFlows.cert_rotate_amphora_flow',
2019
- return_value=_flow_mock)
2020
- def test_amphora_cert_rotation(self,
2021
- mock_get_update_listener_flow,
2022
- mock_api_get_session,
2023
- mock_dyn_log_listener,
2024
- mock_taskflow_load,
2025
- mock_pool_repo_get,
2026
- mock_member_repo_get,
2027
- mock_l7rule_repo_get,
2028
- mock_l7policy_repo_get,
2029
- mock_listener_repo_get,
2030
- mock_lb_repo_get,
2031
- mock_health_mon_repo_get,
2032
- mock_amp_repo_get):
2033
- _flow_mock.reset_mock()
2034
- cw = controller_worker.ControllerWorker()
2035
- cw.amphora_cert_rotation(AMP_ID)
2036
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
2037
- assert_called_once_with(_flow_mock,
2038
- store={constants.AMPHORA: _amphora_mock,
2039
- constants.AMPHORA_ID:
2040
- _amphora_mock.id}))
2041
- _flow_mock.run.assert_called_once_with()
2042
-
2043
- @mock.patch('octavia.db.repositories.FlavorRepository.'
2044
- 'get_flavor_metadata_dict')
2045
- @mock.patch('octavia.db.repositories.AmphoraRepository.get_lb_for_amphora')
2046
- @mock.patch('octavia.controller.worker.v1.flows.'
2047
- 'amphora_flows.AmphoraFlows.update_amphora_config_flow',
2048
- return_value=_flow_mock)
2049
- def test_update_amphora_agent_config(self,
2050
- mock_update_flow,
2051
- mock_get_lb_for_amp,
2052
- mock_flavor_meta,
2053
- mock_api_get_session,
2054
- mock_dyn_log_listener,
2055
- mock_taskflow_load,
2056
- mock_pool_repo_get,
2057
- mock_member_repo_get,
2058
- mock_l7rule_repo_get,
2059
- mock_l7policy_repo_get,
2060
- mock_listener_repo_get,
2061
- mock_lb_repo_get,
2062
- mock_health_mon_repo_get,
2063
- mock_amp_repo_get):
2064
- _flow_mock.reset_mock()
2065
- mock_lb = mock.MagicMock()
2066
- mock_lb.flavor_id = 'vanilla'
2067
- mock_get_lb_for_amp.return_value = mock_lb
2068
- mock_flavor_meta.return_value = {'test': 'dict'}
2069
- cw = controller_worker.ControllerWorker()
2070
- cw.update_amphora_agent_config(AMP_ID)
2071
-
2072
- mock_amp_repo_get.assert_called_once_with(_db_session, id=AMP_ID)
2073
- mock_get_lb_for_amp.assert_called_once_with(_db_session, AMP_ID)
2074
- mock_flavor_meta.assert_called_once_with(_db_session, 'vanilla')
2075
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
2076
- assert_called_once_with(_flow_mock,
2077
- store={constants.AMPHORA: _amphora_mock,
2078
- constants.FLAVOR: {'test': 'dict'}}))
2079
- _flow_mock.run.assert_called_once_with()
2080
-
2081
- # Test with no flavor
2082
- _flow_mock.reset_mock()
2083
- mock_amp_repo_get.reset_mock()
2084
- mock_get_lb_for_amp.reset_mock()
2085
- mock_flavor_meta.reset_mock()
2086
- base_taskflow.BaseTaskFlowEngine.taskflow_load.reset_mock()
2087
- mock_lb.flavor_id = None
2088
- cw.update_amphora_agent_config(AMP_ID)
2089
- mock_amp_repo_get.assert_called_once_with(_db_session, id=AMP_ID)
2090
- mock_get_lb_for_amp.assert_called_once_with(_db_session, AMP_ID)
2091
- mock_flavor_meta.assert_not_called()
2092
- (base_taskflow.BaseTaskFlowEngine.taskflow_load.
2093
- assert_called_once_with(_flow_mock,
2094
- store={constants.AMPHORA: _amphora_mock,
2095
- constants.FLAVOR: {}}))
2096
- _flow_mock.run.assert_called_once_with()