octavia 12.0.0.0rc2__py3-none-any.whl → 13.0.0.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
  2. octavia/amphorae/backends/agent/api_server/plug.py +21 -7
  3. octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
  4. octavia/amphorae/backends/agent/api_server/util.py +21 -0
  5. octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
  6. octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
  7. octavia/amphorae/backends/utils/interface.py +14 -6
  8. octavia/amphorae/backends/utils/interface_file.py +6 -3
  9. octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
  10. octavia/amphorae/drivers/driver_base.py +1 -2
  11. octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
  12. octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
  13. octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
  14. octavia/amphorae/drivers/noop_driver/driver.py +3 -5
  15. octavia/api/common/pagination.py +4 -4
  16. octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
  17. octavia/api/drivers/driver_agent/driver_get.py +22 -14
  18. octavia/api/drivers/driver_agent/driver_updater.py +8 -4
  19. octavia/api/drivers/utils.py +4 -2
  20. octavia/api/healthcheck/healthcheck_plugins.py +4 -2
  21. octavia/api/root_controller.py +4 -1
  22. octavia/api/v2/controllers/amphora.py +35 -38
  23. octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
  24. octavia/api/v2/controllers/availability_zones.py +22 -18
  25. octavia/api/v2/controllers/flavor_profiles.py +37 -28
  26. octavia/api/v2/controllers/flavors.py +19 -15
  27. octavia/api/v2/controllers/health_monitor.py +44 -33
  28. octavia/api/v2/controllers/l7policy.py +52 -40
  29. octavia/api/v2/controllers/l7rule.py +68 -55
  30. octavia/api/v2/controllers/listener.py +88 -61
  31. octavia/api/v2/controllers/load_balancer.py +52 -34
  32. octavia/api/v2/controllers/member.py +63 -52
  33. octavia/api/v2/controllers/pool.py +55 -42
  34. octavia/api/v2/controllers/quotas.py +5 -3
  35. octavia/api/v2/types/listener.py +15 -0
  36. octavia/cmd/octavia_worker.py +0 -3
  37. octavia/cmd/status.py +1 -4
  38. octavia/common/clients.py +25 -45
  39. octavia/common/config.py +64 -22
  40. octavia/common/constants.py +3 -2
  41. octavia/common/data_models.py +7 -1
  42. octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
  43. octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
  44. octavia/common/jinja/lvs/jinja_cfg.py +4 -2
  45. octavia/common/keystone.py +58 -5
  46. octavia/common/validate.py +35 -0
  47. octavia/compute/drivers/noop_driver/driver.py +6 -0
  48. octavia/controller/healthmanager/health_manager.py +3 -6
  49. octavia/controller/housekeeping/house_keeping.py +36 -37
  50. octavia/controller/worker/amphora_rate_limit.py +5 -4
  51. octavia/controller/worker/task_utils.py +57 -41
  52. octavia/controller/worker/v2/controller_worker.py +160 -103
  53. octavia/controller/worker/v2/flows/listener_flows.py +3 -0
  54. octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
  55. octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
  56. octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
  57. octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
  58. octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
  59. octavia/db/api.py +26 -23
  60. octavia/db/base_models.py +2 -2
  61. octavia/db/healthcheck.py +2 -1
  62. octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
  63. octavia/db/models.py +12 -2
  64. octavia/db/prepare.py +2 -0
  65. octavia/db/repositories.py +462 -482
  66. octavia/hacking/checks.py +1 -1
  67. octavia/network/base.py +0 -14
  68. octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
  69. octavia/network/drivers/neutron/base.py +65 -77
  70. octavia/network/drivers/neutron/utils.py +69 -85
  71. octavia/network/drivers/noop_driver/driver.py +0 -7
  72. octavia/statistics/drivers/update_db.py +10 -10
  73. octavia/tests/common/constants.py +91 -84
  74. octavia/tests/common/sample_data_models.py +13 -1
  75. octavia/tests/fixtures.py +32 -0
  76. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
  77. octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
  78. octavia/tests/functional/api/test_root_controller.py +3 -28
  79. octavia/tests/functional/api/v2/base.py +5 -3
  80. octavia/tests/functional/api/v2/test_amphora.py +18 -5
  81. octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
  82. octavia/tests/functional/api/v2/test_listener.py +51 -19
  83. octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
  84. octavia/tests/functional/db/base.py +31 -16
  85. octavia/tests/functional/db/test_models.py +27 -28
  86. octavia/tests/functional/db/test_repositories.py +407 -50
  87. octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
  88. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
  89. octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
  90. octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
  91. octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
  92. octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
  93. octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
  94. octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
  95. octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
  96. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
  97. octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
  98. octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
  99. octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
  100. octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
  101. octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
  102. octavia/tests/unit/base.py +6 -0
  103. octavia/tests/unit/cmd/test_interface.py +2 -2
  104. octavia/tests/unit/cmd/test_status.py +2 -2
  105. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
  106. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
  107. octavia/tests/unit/common/test_clients.py +0 -39
  108. octavia/tests/unit/common/test_keystone.py +54 -0
  109. octavia/tests/unit/common/test_validate.py +67 -0
  110. octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
  111. octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
  112. octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
  113. octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
  114. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
  115. octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
  116. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
  117. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
  118. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
  119. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
  120. octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
  121. octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
  122. octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
  123. octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
  124. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
  125. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
  126. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
  127. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
  128. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
  129. octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
  130. octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
  131. octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
  132. octavia/controller/queue/v1/__init__.py +0 -11
  133. octavia/controller/queue/v1/consumer.py +0 -64
  134. octavia/controller/queue/v1/endpoints.py +0 -160
  135. octavia/controller/worker/v1/__init__.py +0 -11
  136. octavia/controller/worker/v1/controller_worker.py +0 -1157
  137. octavia/controller/worker/v1/flows/__init__.py +0 -11
  138. octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
  139. octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
  140. octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
  141. octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
  142. octavia/controller/worker/v1/flows/listener_flows.py +0 -128
  143. octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
  144. octavia/controller/worker/v1/flows/member_flows.py +0 -230
  145. octavia/controller/worker/v1/flows/pool_flows.py +0 -127
  146. octavia/controller/worker/v1/tasks/__init__.py +0 -11
  147. octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
  148. octavia/controller/worker/v1/tasks/cert_task.py +0 -51
  149. octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
  150. octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
  151. octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
  152. octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
  153. octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
  154. octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
  155. octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
  156. octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
  157. octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
  158. octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
  159. octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
  160. octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
  161. octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
  162. octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
  163. octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
  164. octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
  165. octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
  166. octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
  167. octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
  168. octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
  169. octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
  170. octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
  171. octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
  172. octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
  173. octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
  174. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
  175. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
  176. octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
  177. octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
  178. octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
  179. octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
  180. octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
  181. octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
  182. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
  183. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  184. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  185. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  186. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  187. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  188. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  189. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  190. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
  191. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
  192. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
  193. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,6 @@ from unittest import mock
13
13
 
14
14
  import cinderclient.v3
15
15
  import glanceclient.v2
16
- import neutronclient.v2_0
17
16
  import novaclient.v2
18
17
  from oslo_config import cfg
19
18
 
@@ -62,44 +61,6 @@ class TestNovaAuth(base.TestCase):
62
61
  self.assertIs(bc1, bc2)
63
62
 
64
63
 
65
- class TestNeutronAuth(base.TestCase):
66
-
67
- def setUp(self):
68
- # Reset the session and client
69
- clients.NeutronAuth.neutron_client = None
70
- keystone._SESSION = None
71
-
72
- super().setUp()
73
-
74
- @mock.patch('keystoneauth1.session.Session', mock.Mock())
75
- def test_get_neutron_client(self):
76
- # There should be no existing client
77
- self.assertIsNone(
78
- clients.NeutronAuth.neutron_client
79
- )
80
-
81
- # Mock out the keystone session and get the client
82
- keystone._SESSION = mock.MagicMock()
83
- bc1 = clients.NeutronAuth.get_neutron_client(
84
- region=None, endpoint_type='publicURL')
85
-
86
- # Our returned client should also be the saved client
87
- self.assertIsInstance(
88
- clients.NeutronAuth.neutron_client,
89
- neutronclient.v2_0.client.Client
90
- )
91
- self.assertIs(
92
- clients.NeutronAuth.neutron_client,
93
- bc1
94
- )
95
-
96
- # Getting the session again should return the same object
97
- bc2 = clients.NeutronAuth.get_neutron_client(
98
- region="test-region", service_name="neutronEndpoint1",
99
- endpoint="test-endpoint", endpoint_type='publicURL', insecure=True)
100
- self.assertIs(bc1, bc2)
101
-
102
-
103
64
  class TestGlanceAuth(base.TestCase):
104
65
 
105
66
  def setUp(self):
@@ -0,0 +1,54 @@
1
+ # Copyright Red Hat
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
+ from unittest import mock
15
+ from unittest.mock import call
16
+
17
+ from keystoneauth1 import exceptions as ks_exceptions
18
+ from oslo_config import cfg
19
+ from oslo_config import fixture as oslo_fixture
20
+
21
+ import octavia.common.keystone as ks
22
+ import octavia.tests.unit.base as base
23
+
24
+
25
+ class TestKeystoneSession(base.TestCase):
26
+
27
+ @mock.patch("oslo_config.cfg.ConfigOpts.get_location", return_value=None)
28
+ @mock.patch("octavia.common.keystone.ks_loading"
29
+ ".load_auth_from_conf_options")
30
+ @mock.patch("octavia.common.keystone.LOG")
31
+ def test_get_auth_neutron_override(self, mock_log, mock_load_auth,
32
+ mock_get_location):
33
+ opt_mock = mock.MagicMock()
34
+ opt_mock.dest = "foo"
35
+ conf = oslo_fixture.Config(cfg.CONF)
36
+ conf.conf.service_auth.cafile = "bar"
37
+
38
+ mock_load_auth.side_effect = [
39
+ ks_exceptions.auth_plugins.MissingRequiredOptions(
40
+ [opt_mock]),
41
+ None,
42
+ None
43
+ ]
44
+
45
+ sess = ks.KeystoneSession("neutron")
46
+ sess.get_auth()
47
+
48
+ mock_load_auth.assert_has_calls([call(cfg.CONF, 'neutron'),
49
+ call(cfg.CONF, 'service_auth'),
50
+ call(cfg.CONF, 'neutron')])
51
+ mock_log.debug.assert_has_calls(
52
+ [call("Overriding [%s].%s with '%s'", 'neutron', 'cafile',
53
+ 'bar')]
54
+ )
@@ -16,6 +16,7 @@ from unittest import mock
16
16
  from oslo_config import cfg
17
17
  from oslo_config import fixture as oslo_fixture
18
18
  from oslo_utils import uuidutils
19
+ from wsme import types as wtypes
19
20
 
20
21
  import octavia.common.constants as constants
21
22
  import octavia.common.exceptions as exceptions
@@ -536,3 +537,69 @@ class TestValidations(base.TestCase):
536
537
  '2001:db8::/32'))
537
538
  self.assertFalse(validate.is_ip_member_of_cidr('::ffff:0:203.0.113.5',
538
539
  '2001:db8::/32'))
540
+
541
+ def test_check_hsts_options(self):
542
+ self.assertRaises(
543
+ exceptions.ValidationException,
544
+ validate.check_hsts_options,
545
+ {'hsts_include_subdomains': True,
546
+ 'hsts_preload': wtypes.Unset,
547
+ 'hsts_max_age': wtypes.Unset}
548
+ )
549
+ self.assertRaises(
550
+ exceptions.ValidationException,
551
+ validate.check_hsts_options,
552
+ {'hsts_include_subdomains': wtypes.Unset,
553
+ 'hsts_preload': True,
554
+ 'hsts_max_age': wtypes.Unset}
555
+ )
556
+ self.assertRaises(
557
+ exceptions.ValidationException,
558
+ validate.check_hsts_options,
559
+ {'protocol': constants.PROTOCOL_UDP,
560
+ 'hsts_include_subdomains': wtypes.Unset,
561
+ 'hsts_preload': wtypes.Unset,
562
+ 'hsts_max_age': 1}
563
+ )
564
+ self.assertIsNone(
565
+ validate.check_hsts_options(
566
+ {'protocol': constants.PROTOCOL_TERMINATED_HTTPS,
567
+ 'hsts_include_subdomains': wtypes.Unset,
568
+ 'hsts_preload': wtypes.Unset,
569
+ 'hsts_max_age': 1})
570
+ )
571
+
572
+ def test_check_hsts_options_put(self):
573
+ listener = mock.MagicMock()
574
+ db_listener = mock.MagicMock()
575
+ db_listener.protocol = constants.PROTOCOL_TERMINATED_HTTPS
576
+
577
+ listener.hsts_max_age = wtypes.Unset
578
+ db_listener.hsts_max_age = None
579
+ for obj in (listener, db_listener):
580
+ obj.hsts_include_subdomains = False
581
+ obj.hsts_preload = False
582
+ self.assertIsNone(validate.check_hsts_options_put(
583
+ listener, db_listener))
584
+
585
+ for i in range(2):
586
+ listener.hsts_include_subdomains = bool(i % 2)
587
+ listener.hsts_preload = not bool(i % 2)
588
+ self.assertRaises(
589
+ exceptions.ValidationException,
590
+ validate.check_hsts_options_put,
591
+ listener, db_listener)
592
+
593
+ listener.hsts_max_age, db_listener.hsts_max_age = wtypes.Unset, 0
594
+ self.assertIsNone(validate.check_hsts_options_put(
595
+ listener, db_listener))
596
+
597
+ listener.hsts_max_age, db_listener.hsts_max_age = 3, None
598
+ self.assertIsNone(validate.check_hsts_options_put(
599
+ listener, db_listener))
600
+
601
+ db_listener.protocol = constants.PROTOCOL_HTTP
602
+ self.assertRaises(
603
+ exceptions.ValidationException,
604
+ validate.check_hsts_options_put,
605
+ listener, db_listener)
@@ -43,15 +43,13 @@ class TestHealthManager(base.TestCase):
43
43
  super().setUp()
44
44
 
45
45
  @mock.patch('octavia.db.api.wait_for_connection')
46
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
47
- 'ControllerWorker.failover_amphora')
48
46
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
49
47
  'ControllerWorker.failover_amphora')
50
48
  @mock.patch('octavia.db.repositories.AmphoraHealthRepository.'
51
49
  'get_stale_amphora')
52
50
  @mock.patch('octavia.db.api.get_session')
53
51
  def test_health_check_stale_amphora(self, session_mock, get_stale_amp_mock,
54
- failover_mockv2, failover_mock,
52
+ failover_mock,
55
53
  db_wait_mock):
56
54
  conf = oslo_fixture.Config(cfg.CONF)
57
55
  conf.config(group="health_manager", heartbeat_timeout=5)
@@ -87,15 +85,13 @@ class TestHealthManager(base.TestCase):
87
85
  self.assertRaises(TestException, hm.health_check)
88
86
  self.assertEqual(4, mock_session.rollback.call_count)
89
87
 
90
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
91
- 'ControllerWorker.failover_amphora')
92
88
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
93
89
  'ControllerWorker.failover_amphora')
94
90
  @mock.patch('octavia.db.repositories.AmphoraHealthRepository.'
95
91
  'get_stale_amphora', return_value=None)
96
92
  @mock.patch('octavia.db.api.get_session')
97
93
  def test_health_check_nonstale_amphora(self, session_mock,
98
- get_stale_amp_mock, failover_mockv2,
94
+ get_stale_amp_mock,
99
95
  failover_mock):
100
96
  get_stale_amp_mock.side_effect = [None, TestException('test')]
101
97
 
@@ -103,42 +99,32 @@ class TestHealthManager(base.TestCase):
103
99
  hm = healthmanager.HealthManager(exit_event)
104
100
 
105
101
  hm.health_check()
106
- session_mock.assert_called_once_with(autocommit=False)
107
- if CONF.api_settings.default_provider_driver == 'amphorav2':
108
- self.assertFalse(failover_mockv2.called)
109
- else:
110
- self.assertFalse(failover_mock.called)
102
+ session_mock.assert_called_once_with()
103
+ self.assertFalse(failover_mock.called)
111
104
 
112
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
113
- 'ControllerWorker.failover_amphora')
114
105
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
115
106
  'ControllerWorker.failover_amphora')
116
107
  @mock.patch('octavia.db.repositories.AmphoraHealthRepository.'
117
108
  'get_stale_amphora', return_value=None)
118
109
  @mock.patch('octavia.db.api.get_session')
119
110
  def test_health_check_exit(self, session_mock, get_stale_amp_mock,
120
- failover_mockv2, failover_mock):
111
+ failover_mock):
121
112
  get_stale_amp_mock.return_value = None
122
113
 
123
114
  exit_event = threading.Event()
124
115
  hm = healthmanager.HealthManager(exit_event)
125
116
  hm.health_check()
126
117
 
127
- session_mock.assert_called_once_with(autocommit=False)
128
- if CONF.api_settings.default_provider_driver == 'amphorav2':
129
- self.assertFalse(failover_mockv2.called)
130
- else:
131
- self.assertFalse(failover_mock.called)
118
+ session_mock.assert_called_once_with()
119
+ self.assertFalse(failover_mock.called)
132
120
 
133
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
134
- 'ControllerWorker.failover_amphora')
135
121
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
136
122
  'ControllerWorker.failover_amphora')
137
123
  @mock.patch('octavia.db.repositories.AmphoraHealthRepository.'
138
124
  'get_stale_amphora', return_value=None)
139
125
  @mock.patch('octavia.db.api.get_session')
140
126
  def test_health_check_db_error(self, session_mock, get_stale_amp_mock,
141
- failover_mockv2, failover_mock):
127
+ failover_mock):
142
128
  get_stale_amp_mock.return_value = None
143
129
 
144
130
  mock_session = mock.MagicMock()
@@ -158,73 +158,12 @@ class TestCertRotation(base.TestCase):
158
158
  super().setUp()
159
159
  self.CONF = self.useFixture(oslo_fixture.Config(cfg.CONF))
160
160
 
161
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
162
- 'ControllerWorker.amphora_cert_rotation')
163
- @mock.patch('octavia.db.repositories.AmphoraRepository.'
164
- 'get_cert_expiring_amphora')
165
- @mock.patch('octavia.db.api.get_session')
166
- def test_cert_rotation_expired_amphora_with_exception(self, session,
167
- cert_exp_amp_mock,
168
- amp_cert_mock
169
- ):
170
- self.CONF.config(group="api_settings",
171
- default_provider_driver='amphorav1')
172
- amphora = mock.MagicMock()
173
- amphora.id = AMPHORA_ID
174
-
175
- session.return_value = session
176
- cert_exp_amp_mock.side_effect = [amphora, TestException(
177
- 'break_while')]
178
-
179
- cr = house_keeping.CertRotation()
180
- self.assertRaises(TestException, cr.rotate)
181
- amp_cert_mock.assert_called_once_with(AMPHORA_ID)
182
-
183
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
184
- 'ControllerWorker.amphora_cert_rotation')
185
- @mock.patch('octavia.db.repositories.AmphoraRepository.'
186
- 'get_cert_expiring_amphora')
187
- @mock.patch('octavia.db.api.get_session')
188
- def test_cert_rotation_expired_amphora_without_exception(self, session,
189
- cert_exp_amp_mock,
190
- amp_cert_mock
191
- ):
192
- self.CONF.config(group="api_settings",
193
- default_provider_driver='amphorav1')
194
- amphora = mock.MagicMock()
195
- amphora.id = AMPHORA_ID
196
-
197
- session.return_value = session
198
- cert_exp_amp_mock.side_effect = [amphora, None]
199
-
200
- cr = house_keeping.CertRotation()
201
-
202
- self.assertIsNone(cr.rotate())
203
- amp_cert_mock.assert_called_once_with(AMPHORA_ID)
204
-
205
- @mock.patch('octavia.controller.worker.v1.controller_worker.'
206
- 'ControllerWorker.amphora_cert_rotation')
207
- @mock.patch('octavia.db.repositories.AmphoraRepository.'
208
- 'get_cert_expiring_amphora')
209
- @mock.patch('octavia.db.api.get_session')
210
- def test_cert_rotation_non_expired_amphora(self, session,
211
- cert_exp_amp_mock,
212
- amp_cert_mock):
213
- self.CONF.config(group="api_settings",
214
- default_provider_driver='amphorav1')
215
-
216
- session.return_value = session
217
- cert_exp_amp_mock.return_value = None
218
- cr = house_keeping.CertRotation()
219
- cr.rotate()
220
- self.assertFalse(amp_cert_mock.called)
221
-
222
161
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
223
162
  'ControllerWorker.amphora_cert_rotation')
224
163
  @mock.patch('octavia.db.repositories.AmphoraRepository.'
225
164
  'get_cert_expiring_amphora')
226
165
  @mock.patch('octavia.db.api.get_session')
227
- def test_cert_rotation_expired_amphora_with_exception_amphorav2(
166
+ def test_cert_rotation_expired_amphora_with_exception(
228
167
  self, session, cert_exp_amp_mock, amp_cert_mock):
229
168
  self.CONF.config(group="api_settings",
230
169
  default_provider_driver='amphora')
@@ -245,7 +184,7 @@ class TestCertRotation(base.TestCase):
245
184
  @mock.patch('octavia.db.repositories.AmphoraRepository.'
246
185
  'get_cert_expiring_amphora')
247
186
  @mock.patch('octavia.db.api.get_session')
248
- def test_cert_rotation_expired_amphora_without_exception_amphorav2(
187
+ def test_cert_rotation_expired_amphora_without_exception(
249
188
  self, session, cert_exp_amp_mock, amp_cert_mock):
250
189
  self.CONF.config(group="api_settings",
251
190
  default_provider_driver='amphora')
@@ -265,7 +204,7 @@ class TestCertRotation(base.TestCase):
265
204
  @mock.patch('octavia.db.repositories.AmphoraRepository.'
266
205
  'get_cert_expiring_amphora')
267
206
  @mock.patch('octavia.db.api.get_session')
268
- def test_cert_rotation_non_expired_amphora_amphorav2(
207
+ def test_cert_rotation_non_expired_amphora(
269
208
  self, session, cert_exp_amp_mock, amp_cert_mock):
270
209
  self.CONF.config(group="api_settings",
271
210
  default_provider_driver='amphora')
@@ -36,7 +36,7 @@ class TestAmphoraBuildRateLimit(base.TestCase):
36
36
  self.amp_build_req_repo = mock.MagicMock()
37
37
  self.conf.config(group='haproxy_amphora', build_rate_limit=1)
38
38
 
39
- @mock.patch('octavia.db.api.get_session', mock.MagicMock())
39
+ @mock.patch('octavia.db.api.session', mock.MagicMock())
40
40
  @mock.patch('octavia.controller.worker.amphora_rate_limit'
41
41
  '.AmphoraBuildRateLimit.wait_for_build_slot')
42
42
  @mock.patch('octavia.db.repositories.AmphoraBuildReqRepository'
@@ -19,8 +19,6 @@ from octavia.common import constants
19
19
  from octavia.controller.worker import task_utils as task_utilities
20
20
  import octavia.tests.unit.base as base
21
21
 
22
- TEST_SESSION = 'TEST_SESSION'
23
-
24
22
 
25
23
  class TestTaskUtils(base.TestCase):
26
24
 
@@ -39,7 +37,7 @@ class TestTaskUtils(base.TestCase):
39
37
 
40
38
  super().setUp()
41
39
 
42
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
40
+ @mock.patch('octavia.db.api.session')
43
41
  @mock.patch('octavia.db.repositories.AmphoraRepository.update')
44
42
  def test_mark_amphora_status_error(self,
45
43
  mock_amphora_repo_update,
@@ -48,8 +46,10 @@ class TestTaskUtils(base.TestCase):
48
46
  # Happy path
49
47
  self.task_utils.mark_amphora_status_error(self.AMPHORA_ID)
50
48
 
49
+ mock_session = mock_get_session().begin().__enter__()
50
+
51
51
  mock_amphora_repo_update.assert_called_once_with(
52
- TEST_SESSION,
52
+ mock_session,
53
53
  id=self.AMPHORA_ID,
54
54
  status=constants.ERROR)
55
55
 
@@ -61,7 +61,7 @@ class TestTaskUtils(base.TestCase):
61
61
 
62
62
  self.assertFalse(mock_amphora_repo_update.called)
63
63
 
64
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
64
+ @mock.patch('octavia.db.api.session')
65
65
  @mock.patch('octavia.db.repositories.HealthMonitorRepository.update')
66
66
  def test_mark_health_mon_prov_status_error(self,
67
67
  mock_health_mon_repo_update,
@@ -70,8 +70,10 @@ class TestTaskUtils(base.TestCase):
70
70
  # Happy path
71
71
  self.task_utils.mark_health_mon_prov_status_error(self.HEALTH_MON_ID)
72
72
 
73
+ mock_session = mock_get_session().begin().__enter__()
74
+
73
75
  mock_health_mon_repo_update.assert_called_once_with(
74
- TEST_SESSION,
76
+ mock_session,
75
77
  id=self.HEALTH_MON_ID,
76
78
  provisioning_status=constants.ERROR)
77
79
 
@@ -83,7 +85,7 @@ class TestTaskUtils(base.TestCase):
83
85
 
84
86
  self.assertFalse(mock_health_mon_repo_update.called)
85
87
 
86
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
88
+ @mock.patch('octavia.db.api.session')
87
89
  @mock.patch('octavia.db.repositories.L7PolicyRepository.update')
88
90
  def test_mark_l7policy_prov_status_error(self,
89
91
  mock_l7policy_repo_update,
@@ -92,8 +94,10 @@ class TestTaskUtils(base.TestCase):
92
94
  # Happy path
93
95
  self.task_utils.mark_l7policy_prov_status_error(self.L7POLICY_ID)
94
96
 
97
+ mock_session = mock_get_session().begin().__enter__()
98
+
95
99
  mock_l7policy_repo_update.assert_called_once_with(
96
- TEST_SESSION,
100
+ mock_session,
97
101
  id=self.L7POLICY_ID,
98
102
  provisioning_status=constants.ERROR)
99
103
 
@@ -105,7 +109,7 @@ class TestTaskUtils(base.TestCase):
105
109
 
106
110
  self.assertFalse(mock_l7policy_repo_update.called)
107
111
 
108
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
112
+ @mock.patch('octavia.db.api.session')
109
113
  @mock.patch('octavia.db.repositories.L7RuleRepository.update')
110
114
  def test_mark_l7rule_prov_status_error(self,
111
115
  mock_l7rule_repo_update,
@@ -114,8 +118,10 @@ class TestTaskUtils(base.TestCase):
114
118
  # Happy path
115
119
  self.task_utils.mark_l7rule_prov_status_error(self.L7RULE_ID)
116
120
 
121
+ mock_session = mock_get_session().begin().__enter__()
122
+
117
123
  mock_l7rule_repo_update.assert_called_once_with(
118
- TEST_SESSION,
124
+ mock_session,
119
125
  id=self.L7RULE_ID,
120
126
  provisioning_status=constants.ERROR)
121
127
 
@@ -127,7 +133,7 @@ class TestTaskUtils(base.TestCase):
127
133
 
128
134
  self.assertFalse(mock_l7rule_repo_update.called)
129
135
 
130
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
136
+ @mock.patch('octavia.db.api.session')
131
137
  @mock.patch('octavia.db.repositories.ListenerRepository.update')
132
138
  def test_mark_listener_prov_status_active(self,
133
139
  mock_listener_repo_update,
@@ -136,8 +142,10 @@ class TestTaskUtils(base.TestCase):
136
142
  # Happy path
137
143
  self.task_utils.mark_listener_prov_status_active(self.LISTENER_ID)
138
144
 
145
+ mock_session = mock_get_session().begin().__enter__()
146
+
139
147
  mock_listener_repo_update.assert_called_once_with(
140
- TEST_SESSION,
148
+ mock_session,
141
149
  id=self.LISTENER_ID,
142
150
  provisioning_status=constants.ACTIVE)
143
151
 
@@ -149,7 +157,7 @@ class TestTaskUtils(base.TestCase):
149
157
 
150
158
  self.assertFalse(mock_listener_repo_update.called)
151
159
 
152
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
160
+ @mock.patch('octavia.db.api.session')
153
161
  @mock.patch('octavia.db.repositories.ListenerRepository.update')
154
162
  def test_mark_listener_prov_status_error(self,
155
163
  mock_listener_repo_update,
@@ -158,8 +166,10 @@ class TestTaskUtils(base.TestCase):
158
166
  # Happy path
159
167
  self.task_utils.mark_listener_prov_status_error(self.LISTENER_ID)
160
168
 
169
+ mock_session = mock_get_session().begin().__enter__()
170
+
161
171
  mock_listener_repo_update.assert_called_once_with(
162
- TEST_SESSION,
172
+ mock_session,
163
173
  id=self.LISTENER_ID,
164
174
  provisioning_status=constants.ERROR)
165
175
 
@@ -171,7 +181,7 @@ class TestTaskUtils(base.TestCase):
171
181
 
172
182
  self.assertFalse(mock_listener_repo_update.called)
173
183
 
174
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
184
+ @mock.patch('octavia.db.api.session')
175
185
  @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
176
186
  def test_mark_loadbalancer_prov_status_active(self,
177
187
  mock_lb_repo_update,
@@ -181,8 +191,10 @@ class TestTaskUtils(base.TestCase):
181
191
  self.task_utils.mark_loadbalancer_prov_status_active(
182
192
  self.LOADBALANCER_ID)
183
193
 
194
+ mock_session = mock_get_session().begin().__enter__()
195
+
184
196
  mock_lb_repo_update.assert_called_once_with(
185
- TEST_SESSION,
197
+ mock_session,
186
198
  id=self.LOADBALANCER_ID,
187
199
  provisioning_status=constants.ACTIVE)
188
200
 
@@ -195,7 +207,7 @@ class TestTaskUtils(base.TestCase):
195
207
 
196
208
  self.assertFalse(mock_lb_repo_update.called)
197
209
 
198
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
210
+ @mock.patch('octavia.db.api.session')
199
211
  @mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
200
212
  def test_mark_loadbalancer_prov_status_error(self,
201
213
  mock_lb_repo_update,
@@ -205,8 +217,10 @@ class TestTaskUtils(base.TestCase):
205
217
  self.task_utils.mark_loadbalancer_prov_status_error(
206
218
  self.LOADBALANCER_ID)
207
219
 
220
+ mock_session = mock_get_session().begin().__enter__()
221
+
208
222
  mock_lb_repo_update.assert_called_once_with(
209
- TEST_SESSION,
223
+ mock_session,
210
224
  id=self.LOADBALANCER_ID,
211
225
  provisioning_status=constants.ERROR)
212
226
 
@@ -219,7 +233,7 @@ class TestTaskUtils(base.TestCase):
219
233
 
220
234
  self.assertFalse(mock_lb_repo_update.called)
221
235
 
222
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
236
+ @mock.patch('octavia.db.api.session')
223
237
  @mock.patch('octavia.db.repositories.MemberRepository.update')
224
238
  def test_mark_member_prov_status_error(self,
225
239
  mock_member_repo_update,
@@ -228,8 +242,10 @@ class TestTaskUtils(base.TestCase):
228
242
  # Happy path
229
243
  self.task_utils.mark_member_prov_status_error(self.MEMBER_ID)
230
244
 
245
+ mock_session = mock_get_session().begin().__enter__()
246
+
231
247
  mock_member_repo_update.assert_called_once_with(
232
- TEST_SESSION,
248
+ mock_session,
233
249
  id=self.MEMBER_ID,
234
250
  provisioning_status=constants.ERROR)
235
251
 
@@ -241,7 +257,7 @@ class TestTaskUtils(base.TestCase):
241
257
 
242
258
  self.assertFalse(mock_member_repo_update.called)
243
259
 
244
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
260
+ @mock.patch('octavia.db.api.session')
245
261
  @mock.patch('octavia.db.repositories.PoolRepository.update')
246
262
  def test_mark_pool_prov_status_error(self,
247
263
  mock_pool_repo_update,
@@ -250,8 +266,10 @@ class TestTaskUtils(base.TestCase):
250
266
  # Happy path
251
267
  self.task_utils.mark_pool_prov_status_error(self.POOL_ID)
252
268
 
269
+ mock_session = mock_get_session().begin().__enter__()
270
+
253
271
  mock_pool_repo_update.assert_called_once_with(
254
- TEST_SESSION,
272
+ mock_session,
255
273
  id=self.POOL_ID,
256
274
  provisioning_status=constants.ERROR)
257
275
 
@@ -263,15 +281,17 @@ class TestTaskUtils(base.TestCase):
263
281
 
264
282
  self.assertFalse(mock_pool_repo_update.called)
265
283
 
266
- @mock.patch('octavia.db.api.get_session', return_value=TEST_SESSION)
284
+ @mock.patch('octavia.db.api.session')
267
285
  @mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
268
286
  def test_get_current_loadbalancer_from_db(self, mock_lb_repo_get,
269
287
  mock_get_session):
270
288
  # Happy path
271
289
  self.task_utils.get_current_loadbalancer_from_db(self.LOADBALANCER_ID)
272
290
 
291
+ mock_session = mock_get_session().begin().__enter__()
292
+
273
293
  mock_lb_repo_get.assert_called_once_with(
274
- TEST_SESSION,
294
+ mock_session,
275
295
  id=self.LOADBALANCER_ID)
276
296
 
277
297
  # Exception path
@@ -208,7 +208,6 @@ class TestLoadBalancerFlows(base.TestCase):
208
208
  self.assertEqual(2, len(amp_flow.requires), amp_flow.requires)
209
209
  self.assertEqual(4, len(amp_flow.provides), amp_flow.provides)
210
210
 
211
- # Test mark_active=False
212
211
  amp_flow = self.LBFlow.get_post_lb_amp_association_flow(
213
212
  '123', constants.TOPOLOGY_ACTIVE_STANDBY)
214
213