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,415 +0,0 @@
1
- # Copyright 2017 Rackspace, US Inc.
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_utils import uuidutils
18
- from taskflow.types import failure
19
-
20
- from octavia.common import data_models
21
- from octavia.common import exceptions
22
- from octavia.controller.worker.v1.tasks import database_tasks
23
- import octavia.tests.unit.base as base
24
-
25
-
26
- class TestDatabaseTasksQuota(base.TestCase):
27
-
28
- def setUp(self):
29
-
30
- self._tf_failure_mock = mock.Mock(spec=failure.Failure)
31
- self.zero_pool_child_count = {'HM': 0, 'member': 0}
32
-
33
- super().setUp()
34
-
35
- @mock.patch('octavia.db.api.get_session', return_value='TEST')
36
- @mock.patch('octavia.db.repositories.Repositories.decrement_quota')
37
- @mock.patch('octavia.db.repositories.Repositories.check_quota_met')
38
- def _test_decrement_quota(self,
39
- task,
40
- data_model,
41
- mock_check_quota_met,
42
- mock_decrement_quota,
43
- mock_get_session):
44
-
45
- project_id = uuidutils.generate_uuid()
46
- test_object = mock.MagicMock()
47
- test_object.project_id = project_id
48
-
49
- # execute without exception
50
- mock_decrement_quota.reset_mock()
51
- with mock.patch('octavia.db.api.'
52
- 'get_session') as mock_get_session_local:
53
- mock_session = mock.MagicMock()
54
- mock_get_session_local.return_value = mock_session
55
-
56
- if data_model == data_models.Pool:
57
- task.execute(test_object, self.zero_pool_child_count)
58
- else:
59
- if data_model == data_models.L7Policy:
60
- test_object.l7rules = []
61
- task.execute(test_object)
62
-
63
- mock_decrement_quota.assert_called_once_with(
64
- mock_session, data_model, project_id)
65
-
66
- mock_session.commit.assert_called_once_with()
67
-
68
- # execute with exception
69
- mock_decrement_quota.reset_mock()
70
- with mock.patch('octavia.db.api.'
71
- 'get_session') as mock_get_session_local:
72
- mock_session = mock.MagicMock()
73
- mock_get_session_local.return_value = mock_session
74
-
75
- mock_decrement_quota.side_effect = (
76
- exceptions.OctaviaException('fail'))
77
- if data_model == data_models.Pool:
78
- self.assertRaises(exceptions.OctaviaException,
79
- task.execute,
80
- test_object,
81
- self.zero_pool_child_count)
82
- else:
83
- self.assertRaises(exceptions.OctaviaException,
84
- task.execute,
85
- test_object)
86
-
87
- mock_decrement_quota.assert_called_once_with(
88
- mock_session, data_model, project_id)
89
-
90
- mock_session.rollback.assert_called_once_with()
91
-
92
- # revert with instance of failure
93
- mock_get_session.reset_mock()
94
- mock_check_quota_met.reset_mock()
95
- if data_model == data_models.Pool:
96
- task.revert(test_object,
97
- self.zero_pool_child_count,
98
- self._tf_failure_mock)
99
- else:
100
- if data_model == data_models.L7Policy:
101
- test_object.l7rules = []
102
- task.revert(test_object, self._tf_failure_mock)
103
- self.assertFalse(mock_get_session.called)
104
- self.assertFalse(mock_check_quota_met.called)
105
-
106
- # revert
107
- mock_check_quota_met.reset_mock()
108
- with mock.patch('octavia.db.api.'
109
- 'get_session') as mock_get_session_local:
110
- mock_session = mock.MagicMock()
111
- mock_lock_session = mock.MagicMock()
112
- mock_get_session_local.side_effect = [mock_session,
113
- mock_lock_session]
114
-
115
- if data_model == data_models.Pool:
116
- task.revert(test_object, self.zero_pool_child_count, None)
117
- else:
118
- task.revert(test_object, None)
119
-
120
- mock_check_quota_met.assert_called_once_with(
121
- mock_session, mock_lock_session, data_model,
122
- project_id)
123
-
124
- mock_lock_session.commit.assert_called_once_with()
125
-
126
- # revert with rollback
127
- with mock.patch('octavia.db.api.'
128
- 'get_session') as mock_get_session_local:
129
- mock_session = mock.MagicMock()
130
- mock_lock_session = mock.MagicMock()
131
- mock_get_session_local.side_effect = [mock_session,
132
- mock_lock_session]
133
- mock_check_quota_met.side_effect = (
134
- exceptions.OctaviaException('fail'))
135
-
136
- if data_model == data_models.Pool:
137
- task.revert(test_object, self.zero_pool_child_count, None)
138
- else:
139
- task.revert(test_object, None)
140
-
141
- mock_lock_session.rollback.assert_called_once_with()
142
-
143
- # revert with db exception
144
- mock_check_quota_met.reset_mock()
145
- with mock.patch('octavia.db.api.'
146
- 'get_session') as mock_get_session_local:
147
- mock_get_session_local.side_effect = Exception('fail')
148
-
149
- if data_model == data_models.Pool:
150
- task.revert(test_object, self.zero_pool_child_count, None)
151
- else:
152
- task.revert(test_object, None)
153
-
154
- self.assertFalse(mock_check_quota_met.called)
155
-
156
- def test_decrement_health_monitor_quota(self):
157
- task = database_tasks.DecrementHealthMonitorQuota()
158
- data_model = data_models.HealthMonitor
159
- self._test_decrement_quota(task, data_model)
160
-
161
- def test_decrement_listener_quota(self):
162
- task = database_tasks.DecrementListenerQuota()
163
- data_model = data_models.Listener
164
- self._test_decrement_quota(task, data_model)
165
-
166
- def test_decrement_loadbalancer_quota(self):
167
- task = database_tasks.DecrementLoadBalancerQuota()
168
- data_model = data_models.LoadBalancer
169
- self._test_decrement_quota(task, data_model)
170
-
171
- def test_decrement_pool_quota(self):
172
- task = database_tasks.DecrementPoolQuota()
173
- data_model = data_models.Pool
174
- self._test_decrement_quota(task, data_model)
175
-
176
- def test_decrement_member_quota(self):
177
- task = database_tasks.DecrementMemberQuota()
178
- data_model = data_models.Member
179
- self._test_decrement_quota(task, data_model)
180
-
181
- @mock.patch('octavia.db.repositories.Repositories.decrement_quota')
182
- @mock.patch('octavia.db.repositories.Repositories.check_quota_met')
183
- def test_decrement_pool_quota_pool_children(self,
184
- mock_check_quota_met,
185
- mock_decrement_quota):
186
- pool_child_count = {'HM': 1, 'member': 2}
187
- project_id = uuidutils.generate_uuid()
188
- test_object = mock.MagicMock()
189
- test_object.project_id = project_id
190
- task = database_tasks.DecrementPoolQuota()
191
- mock_session = mock.MagicMock()
192
-
193
- with mock.patch('octavia.db.api.'
194
- 'get_session') as mock_get_session_local:
195
- mock_get_session_local.return_value = mock_session
196
-
197
- task.execute(test_object, pool_child_count)
198
-
199
- calls = [mock.call(mock_session, data_models.Pool, project_id),
200
- mock.call(mock_session, data_models.HealthMonitor,
201
- project_id),
202
- mock.call(mock_session, data_models.Member, project_id,
203
- quantity=2)]
204
-
205
- mock_decrement_quota.assert_has_calls(calls)
206
-
207
- mock_session.commit.assert_called_once_with()
208
-
209
- # revert
210
- mock_session.reset_mock()
211
- with mock.patch('octavia.db.api.'
212
- 'get_session') as mock_get_session_local:
213
- mock_lock_session = mock.MagicMock()
214
- mock_get_session_local.side_effect = [mock_session,
215
- mock_lock_session,
216
- mock_lock_session,
217
- mock_lock_session,
218
- mock_lock_session]
219
-
220
- task.revert(test_object, pool_child_count, None)
221
-
222
- calls = [mock.call(mock_session, mock_lock_session,
223
- data_models.Pool, project_id),
224
- mock.call(mock_session, mock_lock_session,
225
- data_models.HealthMonitor, project_id),
226
- mock.call(mock_session, mock_lock_session,
227
- data_models.Member, project_id),
228
- mock.call(mock_session, mock_lock_session,
229
- data_models.Member, project_id)]
230
-
231
- mock_check_quota_met.assert_has_calls(calls)
232
-
233
- self.assertEqual(4, mock_lock_session.commit.call_count)
234
-
235
- # revert with health monitor quota exception
236
- mock_session.reset_mock()
237
- mock_check_quota_met.side_effect = [None, Exception('fail'), None,
238
- None]
239
- with mock.patch('octavia.db.api.'
240
- 'get_session') as mock_get_session_local:
241
- mock_lock_session = mock.MagicMock()
242
- mock_get_session_local.side_effect = [mock_session,
243
- mock_lock_session,
244
- mock_lock_session,
245
- mock_lock_session,
246
- mock_lock_session]
247
-
248
- task.revert(test_object, pool_child_count, None)
249
-
250
- calls = [mock.call(mock_session, mock_lock_session,
251
- data_models.Pool, project_id),
252
- mock.call(mock_session, mock_lock_session,
253
- data_models.HealthMonitor, project_id),
254
- mock.call(mock_session, mock_lock_session,
255
- data_models.Member, project_id),
256
- mock.call(mock_session, mock_lock_session,
257
- data_models.Member, project_id)]
258
-
259
- mock_check_quota_met.assert_has_calls(calls)
260
-
261
- self.assertEqual(3, mock_lock_session.commit.call_count)
262
- self.assertEqual(1, mock_lock_session.rollback.call_count)
263
-
264
- # revert with member quota exception
265
- mock_session.reset_mock()
266
- mock_check_quota_met.side_effect = [None, None, None,
267
- Exception('fail')]
268
- with mock.patch('octavia.db.api.'
269
- 'get_session') as mock_get_session_local:
270
- mock_lock_session = mock.MagicMock()
271
- mock_get_session_local.side_effect = [mock_session,
272
- mock_lock_session,
273
- mock_lock_session,
274
- mock_lock_session,
275
- mock_lock_session]
276
-
277
- task.revert(test_object, pool_child_count, None)
278
-
279
- calls = [mock.call(mock_session, mock_lock_session,
280
- data_models.Pool, project_id),
281
- mock.call(mock_session, mock_lock_session,
282
- data_models.HealthMonitor, project_id),
283
- mock.call(mock_session, mock_lock_session,
284
- data_models.Member, project_id),
285
- mock.call(mock_session, mock_lock_session,
286
- data_models.Member, project_id)]
287
-
288
- mock_check_quota_met.assert_has_calls(calls)
289
-
290
- self.assertEqual(3, mock_lock_session.commit.call_count)
291
- self.assertEqual(1, mock_lock_session.rollback.call_count)
292
-
293
- def test_count_pool_children_for_quota(self):
294
- project_id = uuidutils.generate_uuid()
295
- member1 = data_models.Member(id=1, project_id=project_id)
296
- member2 = data_models.Member(id=2, project_id=project_id)
297
- healtmon = data_models.HealthMonitor(id=1, project_id=project_id)
298
- pool_no_children = data_models.Pool(id=1, project_id=project_id)
299
- pool_1_mem = data_models.Pool(id=1, project_id=project_id,
300
- members=[member1])
301
- pool_hm = data_models.Pool(id=1, project_id=project_id,
302
- health_monitor=healtmon)
303
- pool_hm_2_mem = data_models.Pool(id=1, project_id=project_id,
304
- health_monitor=healtmon,
305
- members=[member1, member2])
306
- task = database_tasks.CountPoolChildrenForQuota()
307
-
308
- # Test pool with no children
309
- result = task.execute(pool_no_children)
310
-
311
- self.assertEqual({'HM': 0, 'member': 0}, result)
312
-
313
- # Test pool with one member
314
- result = task.execute(pool_1_mem)
315
-
316
- self.assertEqual({'HM': 0, 'member': 1}, result)
317
-
318
- # Test pool with health monitor and no members
319
- result = task.execute(pool_hm)
320
-
321
- self.assertEqual({'HM': 1, 'member': 0}, result)
322
-
323
- # Test pool with health monitor and two members
324
- result = task.execute(pool_hm_2_mem)
325
-
326
- self.assertEqual({'HM': 1, 'member': 2}, result)
327
-
328
- def test_decrement_l7policy_quota(self):
329
- task = database_tasks.DecrementL7policyQuota()
330
- data_model = data_models.L7Policy
331
- self._test_decrement_quota(task, data_model)
332
-
333
- @mock.patch('octavia.db.repositories.Repositories.decrement_quota')
334
- @mock.patch('octavia.db.repositories.Repositories.check_quota_met')
335
- def test_decrement_l7policy_quota_with_children(self,
336
- mock_check_quota_met,
337
- mock_decrement_quota):
338
- project_id = uuidutils.generate_uuid()
339
- test_l7rule1 = mock.MagicMock()
340
- test_l7rule1.project_id = project_id
341
- test_l7rule2 = mock.MagicMock()
342
- test_l7rule2.project_id = project_id
343
- test_object = mock.MagicMock()
344
- test_object.project_id = project_id
345
- test_object.l7rules = [test_l7rule1, test_l7rule2]
346
- task = database_tasks.DecrementL7policyQuota()
347
- mock_session = mock.MagicMock()
348
-
349
- with mock.patch('octavia.db.api.'
350
- 'get_session') as mock_get_session_local:
351
- mock_get_session_local.return_value = mock_session
352
-
353
- task.execute(test_object)
354
-
355
- calls = [mock.call(mock_session, data_models.L7Policy, project_id),
356
- mock.call(mock_session, data_models.L7Rule, project_id,
357
- quantity=2)]
358
-
359
- mock_decrement_quota.assert_has_calls(calls)
360
-
361
- mock_session.commit.assert_called_once_with()
362
-
363
- # revert
364
- mock_session.reset_mock()
365
- with mock.patch('octavia.db.api.'
366
- 'get_session') as mock_get_session_local:
367
- mock_lock_session = mock.MagicMock()
368
- mock_get_session_local.side_effect = [mock_session,
369
- mock_lock_session,
370
- mock_lock_session,
371
- mock_lock_session]
372
-
373
- task.revert(test_object, None)
374
-
375
- calls = [mock.call(mock_session, mock_lock_session,
376
- data_models.L7Policy, project_id),
377
- mock.call(mock_session, mock_lock_session,
378
- data_models.L7Rule, project_id),
379
- mock.call(mock_session, mock_lock_session,
380
- data_models.L7Rule, project_id)]
381
-
382
- mock_check_quota_met.assert_has_calls(calls)
383
-
384
- self.assertEqual(3, mock_lock_session.commit.call_count)
385
-
386
- # revert with l7rule quota exception
387
- mock_session.reset_mock()
388
- mock_check_quota_met.side_effect = [None, None,
389
- Exception('fail')]
390
- with mock.patch('octavia.db.api.'
391
- 'get_session') as mock_get_session_local:
392
- mock_lock_session = mock.MagicMock()
393
- mock_get_session_local.side_effect = [mock_session,
394
- mock_lock_session,
395
- mock_lock_session,
396
- mock_lock_session]
397
-
398
- task.revert(test_object, None)
399
-
400
- calls = [mock.call(mock_session, mock_lock_session,
401
- data_models.L7Policy, project_id),
402
- mock.call(mock_session, mock_lock_session,
403
- data_models.L7Rule, project_id),
404
- mock.call(mock_session, mock_lock_session,
405
- data_models.L7Rule, project_id)]
406
-
407
- mock_check_quota_met.assert_has_calls(calls)
408
-
409
- self.assertEqual(2, mock_lock_session.commit.call_count)
410
- self.assertEqual(1, mock_lock_session.rollback.call_count)
411
-
412
- def test_decrement_l7rule_quota(self):
413
- task = database_tasks.DecrementL7ruleQuota()
414
- data_model = data_models.L7Rule
415
- self._test_decrement_quota(task, data_model)