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.
- octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
- octavia/amphorae/backends/agent/api_server/plug.py +21 -7
- octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
- octavia/amphorae/backends/agent/api_server/util.py +21 -0
- octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
- octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
- octavia/amphorae/backends/utils/interface.py +14 -6
- octavia/amphorae/backends/utils/interface_file.py +6 -3
- octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
- octavia/amphorae/drivers/driver_base.py +1 -2
- octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
- octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
- octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
- octavia/amphorae/drivers/noop_driver/driver.py +3 -5
- octavia/api/common/pagination.py +4 -4
- octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
- octavia/api/drivers/driver_agent/driver_get.py +22 -14
- octavia/api/drivers/driver_agent/driver_updater.py +8 -4
- octavia/api/drivers/utils.py +4 -2
- octavia/api/healthcheck/healthcheck_plugins.py +4 -2
- octavia/api/root_controller.py +4 -1
- octavia/api/v2/controllers/amphora.py +35 -38
- octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
- octavia/api/v2/controllers/availability_zones.py +22 -18
- octavia/api/v2/controllers/flavor_profiles.py +37 -28
- octavia/api/v2/controllers/flavors.py +19 -15
- octavia/api/v2/controllers/health_monitor.py +44 -33
- octavia/api/v2/controllers/l7policy.py +52 -40
- octavia/api/v2/controllers/l7rule.py +68 -55
- octavia/api/v2/controllers/listener.py +88 -61
- octavia/api/v2/controllers/load_balancer.py +52 -34
- octavia/api/v2/controllers/member.py +63 -52
- octavia/api/v2/controllers/pool.py +55 -42
- octavia/api/v2/controllers/quotas.py +5 -3
- octavia/api/v2/types/listener.py +15 -0
- octavia/cmd/octavia_worker.py +0 -3
- octavia/cmd/status.py +1 -4
- octavia/common/clients.py +25 -45
- octavia/common/config.py +64 -22
- octavia/common/constants.py +3 -2
- octavia/common/data_models.py +7 -1
- octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
- octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
- octavia/common/jinja/lvs/jinja_cfg.py +4 -2
- octavia/common/keystone.py +58 -5
- octavia/common/validate.py +35 -0
- octavia/compute/drivers/noop_driver/driver.py +6 -0
- octavia/controller/healthmanager/health_manager.py +3 -6
- octavia/controller/housekeeping/house_keeping.py +36 -37
- octavia/controller/worker/amphora_rate_limit.py +5 -4
- octavia/controller/worker/task_utils.py +57 -41
- octavia/controller/worker/v2/controller_worker.py +160 -103
- octavia/controller/worker/v2/flows/listener_flows.py +3 -0
- octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
- octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
- octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
- octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
- octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
- octavia/db/api.py +26 -23
- octavia/db/base_models.py +2 -2
- octavia/db/healthcheck.py +2 -1
- octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
- octavia/db/models.py +12 -2
- octavia/db/prepare.py +2 -0
- octavia/db/repositories.py +462 -482
- octavia/hacking/checks.py +1 -1
- octavia/network/base.py +0 -14
- octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
- octavia/network/drivers/neutron/base.py +65 -77
- octavia/network/drivers/neutron/utils.py +69 -85
- octavia/network/drivers/noop_driver/driver.py +0 -7
- octavia/statistics/drivers/update_db.py +10 -10
- octavia/tests/common/constants.py +91 -84
- octavia/tests/common/sample_data_models.py +13 -1
- octavia/tests/fixtures.py +32 -0
- octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
- octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
- octavia/tests/functional/api/test_root_controller.py +3 -28
- octavia/tests/functional/api/v2/base.py +5 -3
- octavia/tests/functional/api/v2/test_amphora.py +18 -5
- octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
- octavia/tests/functional/api/v2/test_listener.py +51 -19
- octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
- octavia/tests/functional/db/base.py +31 -16
- octavia/tests/functional/db/test_models.py +27 -28
- octavia/tests/functional/db/test_repositories.py +407 -50
- octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
- octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
- octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
- octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
- octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
- octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
- octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
- octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
- octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
- octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
- octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
- octavia/tests/unit/base.py +6 -0
- octavia/tests/unit/cmd/test_interface.py +2 -2
- octavia/tests/unit/cmd/test_status.py +2 -2
- octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
- octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
- octavia/tests/unit/common/test_clients.py +0 -39
- octavia/tests/unit/common/test_keystone.py +54 -0
- octavia/tests/unit/common/test_validate.py +67 -0
- octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
- octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
- octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
- octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
- octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
- octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
- octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
- octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
- octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
- octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
- octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
- octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
- octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
- octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
- octavia/controller/queue/v1/__init__.py +0 -11
- octavia/controller/queue/v1/consumer.py +0 -64
- octavia/controller/queue/v1/endpoints.py +0 -160
- octavia/controller/worker/v1/__init__.py +0 -11
- octavia/controller/worker/v1/controller_worker.py +0 -1157
- octavia/controller/worker/v1/flows/__init__.py +0 -11
- octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
- octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
- octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
- octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
- octavia/controller/worker/v1/flows/listener_flows.py +0 -128
- octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
- octavia/controller/worker/v1/flows/member_flows.py +0 -230
- octavia/controller/worker/v1/flows/pool_flows.py +0 -127
- octavia/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
- octavia/controller/worker/v1/tasks/cert_task.py +0 -51
- octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
- octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
- octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
- octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
- octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
- octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
- octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
- octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
- octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
- octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
- octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
- octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
- octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
- octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
- octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
- octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
- octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
- octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
- octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
- octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
- octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
- octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
- octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
- octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
- octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,46 +0,0 @@
|
|
1
|
-
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
4
|
-
# not use this file except in compliance with the License. You may obtain
|
5
|
-
# a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
11
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
|
-
# License for the specific language governing permissions and limitations
|
13
|
-
# under the License.
|
14
|
-
#
|
15
|
-
from unittest import mock
|
16
|
-
|
17
|
-
from cryptography import fernet
|
18
|
-
from oslo_config import cfg
|
19
|
-
|
20
|
-
from octavia.certificates.common import local
|
21
|
-
from octavia.common import utils
|
22
|
-
from octavia.controller.worker.v1.tasks import cert_task
|
23
|
-
import octavia.tests.unit.base as base
|
24
|
-
|
25
|
-
CONF = cfg.CONF
|
26
|
-
|
27
|
-
|
28
|
-
class TestCertTasks(base.TestCase):
|
29
|
-
|
30
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
31
|
-
def test_execute(self, mock_driver):
|
32
|
-
key = utils.get_compatible_server_certs_key_passphrase()
|
33
|
-
fer = fernet.Fernet(key)
|
34
|
-
dummy_cert = local.LocalCert(
|
35
|
-
utils.get_compatible_value('test_cert'),
|
36
|
-
utils.get_compatible_value('test_key'))
|
37
|
-
mock_driver.generate_cert_key_pair.side_effect = [dummy_cert]
|
38
|
-
c = cert_task.GenerateServerPEMTask()
|
39
|
-
pem = c.execute('123')
|
40
|
-
self.assertEqual(
|
41
|
-
fer.decrypt(pem),
|
42
|
-
dummy_cert.get_certificate() +
|
43
|
-
dummy_cert.get_private_key()
|
44
|
-
)
|
45
|
-
mock_driver.generate_cert_key_pair.assert_called_once_with(
|
46
|
-
cn='123', validity=CONF.certificates.cert_validity_time)
|
@@ -1,634 +0,0 @@
|
|
1
|
-
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
4
|
-
# not use this file except in compliance with the License. You may obtain
|
5
|
-
# a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
11
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
|
-
# License for the specific language governing permissions and limitations
|
13
|
-
# under the License.
|
14
|
-
#
|
15
|
-
from unittest import mock
|
16
|
-
|
17
|
-
from cryptography import fernet
|
18
|
-
from oslo_config import cfg
|
19
|
-
from oslo_config import fixture as oslo_fixture
|
20
|
-
from oslo_utils import uuidutils
|
21
|
-
import tenacity
|
22
|
-
|
23
|
-
from octavia.common import constants
|
24
|
-
from octavia.common import exceptions
|
25
|
-
from octavia.common import utils
|
26
|
-
from octavia.controller.worker.v1.tasks import compute_tasks
|
27
|
-
from octavia.tests.common import utils as test_utils
|
28
|
-
import octavia.tests.unit.base as base
|
29
|
-
|
30
|
-
|
31
|
-
AMP_FLAVOR_ID = '10'
|
32
|
-
AMP_IMAGE_TAG = 'glance_tag'
|
33
|
-
AMP_SSH_KEY_NAME = None
|
34
|
-
AMP_NET = [uuidutils.generate_uuid()]
|
35
|
-
AMP_SEC_GROUPS = []
|
36
|
-
AMP_WAIT = 12
|
37
|
-
AMPHORA_ID = uuidutils.generate_uuid()
|
38
|
-
COMPUTE_ID = uuidutils.generate_uuid()
|
39
|
-
LB_NET_IP = '192.0.2.1'
|
40
|
-
PORT_ID = uuidutils.generate_uuid()
|
41
|
-
SERVER_GRPOUP_ID = uuidutils.generate_uuid()
|
42
|
-
|
43
|
-
|
44
|
-
class TestException(Exception):
|
45
|
-
|
46
|
-
def __init__(self, value):
|
47
|
-
self.value = value
|
48
|
-
|
49
|
-
def __str__(self):
|
50
|
-
return repr(self.value)
|
51
|
-
|
52
|
-
|
53
|
-
_amphora_mock = mock.MagicMock()
|
54
|
-
_amphora_mock.id = AMPHORA_ID
|
55
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
56
|
-
_load_balancer_mock = mock.MagicMock()
|
57
|
-
_load_balancer_mock.amphorae = [_amphora_mock]
|
58
|
-
_port = mock.MagicMock()
|
59
|
-
_port.id = PORT_ID
|
60
|
-
|
61
|
-
|
62
|
-
class TestComputeTasks(base.TestCase):
|
63
|
-
|
64
|
-
def setUp(self):
|
65
|
-
self.conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
|
66
|
-
self.conf.config(
|
67
|
-
group="controller_worker", amp_flavor_id=AMP_FLAVOR_ID)
|
68
|
-
self.conf.config(
|
69
|
-
group="controller_worker", amp_image_tag=AMP_IMAGE_TAG)
|
70
|
-
self.conf.config(
|
71
|
-
group="controller_worker", amp_ssh_key_name=AMP_SSH_KEY_NAME)
|
72
|
-
self.conf.config(
|
73
|
-
group="controller_worker", amp_boot_network_list=AMP_NET)
|
74
|
-
self.conf.config(
|
75
|
-
group="controller_worker", amp_active_wait_sec=AMP_WAIT)
|
76
|
-
self.conf.config(
|
77
|
-
group="controller_worker", amp_secgroup_list=AMP_SEC_GROUPS)
|
78
|
-
self.conf.config(group="controller_worker", amp_image_owner_id='')
|
79
|
-
|
80
|
-
_amphora_mock.id = AMPHORA_ID
|
81
|
-
_amphora_mock.status = constants.AMPHORA_ALLOCATED
|
82
|
-
|
83
|
-
logging_mock = mock.MagicMock()
|
84
|
-
compute_tasks.LOG = logging_mock
|
85
|
-
|
86
|
-
super().setUp()
|
87
|
-
|
88
|
-
@mock.patch('octavia.common.jinja.logging.logging_jinja_cfg.'
|
89
|
-
'LoggingJinjaTemplater.build_logging_config')
|
90
|
-
@mock.patch('jinja2.Environment.get_template')
|
91
|
-
@mock.patch('octavia.amphorae.backends.agent.'
|
92
|
-
'agent_jinja_cfg.AgentJinjaTemplater.'
|
93
|
-
'build_agent_config', return_value='test_conf')
|
94
|
-
@mock.patch('octavia.common.jinja.'
|
95
|
-
'user_data_jinja_cfg.UserDataJinjaCfg.'
|
96
|
-
'build_user_data_config', return_value='user_data_conf')
|
97
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
98
|
-
def test_compute_create(self, mock_driver, mock_ud_conf,
|
99
|
-
mock_conf, mock_jinja, mock_log_cfg):
|
100
|
-
|
101
|
-
image_owner_id = uuidutils.generate_uuid()
|
102
|
-
self.conf.config(
|
103
|
-
group="controller_worker", amp_image_owner_id=image_owner_id)
|
104
|
-
mock_log_cfg.return_value = 'FAKE CFG'
|
105
|
-
|
106
|
-
createcompute = compute_tasks.ComputeCreate()
|
107
|
-
|
108
|
-
mock_driver.build.return_value = COMPUTE_ID
|
109
|
-
# Test execute()
|
110
|
-
compute_id = createcompute.execute(_amphora_mock.id, ports=[_port],
|
111
|
-
server_group_id=SERVER_GRPOUP_ID)
|
112
|
-
|
113
|
-
# Validate that the build method was called properly
|
114
|
-
mock_driver.build.assert_called_once_with(
|
115
|
-
name="amphora-" + _amphora_mock.id,
|
116
|
-
amphora_flavor=AMP_FLAVOR_ID,
|
117
|
-
image_tag=AMP_IMAGE_TAG,
|
118
|
-
image_owner=image_owner_id,
|
119
|
-
key_name=AMP_SSH_KEY_NAME,
|
120
|
-
sec_groups=AMP_SEC_GROUPS,
|
121
|
-
network_ids=AMP_NET,
|
122
|
-
port_ids=[PORT_ID],
|
123
|
-
config_drive_files={'/etc/octavia/'
|
124
|
-
'amphora-agent.conf': 'test_conf',
|
125
|
-
'/etc/rsyslog.d/10-rsyslog.conf': 'FAKE CFG'},
|
126
|
-
user_data='user_data_conf',
|
127
|
-
server_group_id=SERVER_GRPOUP_ID,
|
128
|
-
availability_zone=None)
|
129
|
-
|
130
|
-
# Make sure it returns the expected compute_id
|
131
|
-
self.assertEqual(COMPUTE_ID, compute_id)
|
132
|
-
|
133
|
-
# Test that a build exception is raised
|
134
|
-
createcompute = compute_tasks.ComputeCreate()
|
135
|
-
|
136
|
-
self.assertRaises(TypeError,
|
137
|
-
createcompute.execute,
|
138
|
-
_amphora_mock, config_drive_files='test_cert')
|
139
|
-
|
140
|
-
# Test revert()
|
141
|
-
|
142
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
143
|
-
|
144
|
-
createcompute = compute_tasks.ComputeCreate()
|
145
|
-
createcompute.revert(compute_id, _amphora_mock.id)
|
146
|
-
|
147
|
-
# Validate that the delete method was called properly
|
148
|
-
mock_driver.delete.assert_called_once_with(
|
149
|
-
COMPUTE_ID)
|
150
|
-
|
151
|
-
# Test that a delete exception is not raised
|
152
|
-
|
153
|
-
createcompute.revert(COMPUTE_ID, _amphora_mock.id)
|
154
|
-
|
155
|
-
@mock.patch('jinja2.Environment.get_template')
|
156
|
-
@mock.patch('octavia.amphorae.backends.agent.'
|
157
|
-
'agent_jinja_cfg.AgentJinjaTemplater.'
|
158
|
-
'build_agent_config', return_value='test_conf')
|
159
|
-
@mock.patch('octavia.common.jinja.'
|
160
|
-
'user_data_jinja_cfg.UserDataJinjaCfg.'
|
161
|
-
'build_user_data_config', return_value='user_data_conf')
|
162
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
163
|
-
def test_compute_create_user_data(self, mock_driver,
|
164
|
-
mock_ud_conf, mock_conf, mock_jinja):
|
165
|
-
|
166
|
-
self.conf.config(
|
167
|
-
group="controller_worker", user_data_config_drive=True)
|
168
|
-
createcompute = compute_tasks.ComputeCreate()
|
169
|
-
|
170
|
-
mock_driver.build.return_value = COMPUTE_ID
|
171
|
-
# Test execute()
|
172
|
-
compute_id = createcompute.execute(_amphora_mock.id, ports=[_port],
|
173
|
-
server_group_id=None)
|
174
|
-
|
175
|
-
# Validate that the build method was called properly
|
176
|
-
mock_driver.build.assert_called_once_with(
|
177
|
-
name="amphora-" + _amphora_mock.id,
|
178
|
-
amphora_flavor=AMP_FLAVOR_ID,
|
179
|
-
image_tag=AMP_IMAGE_TAG,
|
180
|
-
image_owner='',
|
181
|
-
key_name=AMP_SSH_KEY_NAME,
|
182
|
-
sec_groups=AMP_SEC_GROUPS,
|
183
|
-
network_ids=AMP_NET,
|
184
|
-
port_ids=[PORT_ID],
|
185
|
-
config_drive_files=None,
|
186
|
-
user_data='user_data_conf',
|
187
|
-
server_group_id=None,
|
188
|
-
availability_zone=None)
|
189
|
-
|
190
|
-
# Make sure it returns the expected compute_id
|
191
|
-
self.assertEqual(COMPUTE_ID, compute_id)
|
192
|
-
|
193
|
-
# Test that a build exception is raised
|
194
|
-
createcompute = compute_tasks.ComputeCreate()
|
195
|
-
|
196
|
-
self.assertRaises(TypeError,
|
197
|
-
createcompute.execute,
|
198
|
-
_amphora_mock, config_drive_files='test_cert')
|
199
|
-
|
200
|
-
# Test revert()
|
201
|
-
|
202
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
203
|
-
|
204
|
-
createcompute = compute_tasks.ComputeCreate()
|
205
|
-
createcompute.revert(compute_id, _amphora_mock.id)
|
206
|
-
|
207
|
-
# Validate that the delete method was called properly
|
208
|
-
mock_driver.delete.assert_called_once_with(
|
209
|
-
COMPUTE_ID)
|
210
|
-
|
211
|
-
# Test that a delete exception is not raised
|
212
|
-
|
213
|
-
createcompute.revert(COMPUTE_ID, _amphora_mock.id)
|
214
|
-
|
215
|
-
@mock.patch('octavia.common.jinja.logging.logging_jinja_cfg.'
|
216
|
-
'LoggingJinjaTemplater.build_logging_config')
|
217
|
-
@mock.patch('jinja2.Environment.get_template')
|
218
|
-
@mock.patch('octavia.amphorae.backends.agent.'
|
219
|
-
'agent_jinja_cfg.AgentJinjaTemplater.'
|
220
|
-
'build_agent_config', return_value='test_conf')
|
221
|
-
@mock.patch('octavia.common.jinja.'
|
222
|
-
'user_data_jinja_cfg.UserDataJinjaCfg.'
|
223
|
-
'build_user_data_config', return_value='user_data_conf')
|
224
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
225
|
-
def test_compute_create_availability_zone(self, mock_driver, mock_ud_conf,
|
226
|
-
mock_conf, mock_jinja,
|
227
|
-
mock_log_cfg):
|
228
|
-
|
229
|
-
image_owner_id = uuidutils.generate_uuid()
|
230
|
-
compute_zone = uuidutils.generate_uuid()
|
231
|
-
az_dict = {constants.COMPUTE_ZONE: compute_zone}
|
232
|
-
|
233
|
-
self.conf.config(
|
234
|
-
group="controller_worker", amp_image_owner_id=image_owner_id)
|
235
|
-
mock_log_cfg.return_value = 'FAKE CFG'
|
236
|
-
|
237
|
-
createcompute = compute_tasks.ComputeCreate()
|
238
|
-
|
239
|
-
mock_driver.build.return_value = COMPUTE_ID
|
240
|
-
# Test execute()
|
241
|
-
compute_id = createcompute.execute(_amphora_mock.id, ports=[_port],
|
242
|
-
server_group_id=SERVER_GRPOUP_ID,
|
243
|
-
availability_zone=az_dict)
|
244
|
-
|
245
|
-
# Validate that the build method was called properly
|
246
|
-
mock_driver.build.assert_called_once_with(
|
247
|
-
name="amphora-" + _amphora_mock.id,
|
248
|
-
amphora_flavor=AMP_FLAVOR_ID,
|
249
|
-
image_tag=AMP_IMAGE_TAG,
|
250
|
-
image_owner=image_owner_id,
|
251
|
-
key_name=AMP_SSH_KEY_NAME,
|
252
|
-
sec_groups=AMP_SEC_GROUPS,
|
253
|
-
network_ids=AMP_NET,
|
254
|
-
port_ids=[PORT_ID],
|
255
|
-
config_drive_files={'/etc/octavia/'
|
256
|
-
'amphora-agent.conf': 'test_conf',
|
257
|
-
'/etc/rsyslog.d/10-rsyslog.conf': 'FAKE CFG'},
|
258
|
-
user_data='user_data_conf',
|
259
|
-
server_group_id=SERVER_GRPOUP_ID,
|
260
|
-
availability_zone=compute_zone)
|
261
|
-
|
262
|
-
# Make sure it returns the expected compute_id
|
263
|
-
self.assertEqual(COMPUTE_ID, compute_id)
|
264
|
-
|
265
|
-
# Test that a build exception is raised
|
266
|
-
createcompute = compute_tasks.ComputeCreate()
|
267
|
-
|
268
|
-
self.assertRaises(TypeError,
|
269
|
-
createcompute.execute,
|
270
|
-
_amphora_mock, config_drive_files='test_cert')
|
271
|
-
|
272
|
-
# Test revert()
|
273
|
-
|
274
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
275
|
-
|
276
|
-
createcompute = compute_tasks.ComputeCreate()
|
277
|
-
createcompute.revert(compute_id, _amphora_mock.id)
|
278
|
-
|
279
|
-
# Validate that the delete method was called properly
|
280
|
-
mock_driver.delete.assert_called_once_with(
|
281
|
-
COMPUTE_ID)
|
282
|
-
|
283
|
-
# Test that a delete exception is not raised
|
284
|
-
|
285
|
-
createcompute.revert(COMPUTE_ID, _amphora_mock.id)
|
286
|
-
|
287
|
-
@mock.patch('octavia.common.jinja.logging.logging_jinja_cfg.'
|
288
|
-
'LoggingJinjaTemplater.build_logging_config')
|
289
|
-
@mock.patch('jinja2.Environment.get_template')
|
290
|
-
@mock.patch('octavia.amphorae.backends.agent.'
|
291
|
-
'agent_jinja_cfg.AgentJinjaTemplater.'
|
292
|
-
'build_agent_config', return_value='test_conf')
|
293
|
-
@mock.patch('octavia.common.jinja.'
|
294
|
-
'user_data_jinja_cfg.UserDataJinjaCfg.'
|
295
|
-
'build_user_data_config', return_value='user_data_conf')
|
296
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
297
|
-
def test_compute_create_without_ssh_access(
|
298
|
-
self, mock_driver, mock_user_data_config,
|
299
|
-
mock_conf, mock_jinja, mock_log_cfg):
|
300
|
-
|
301
|
-
createcompute = compute_tasks.ComputeCreate()
|
302
|
-
|
303
|
-
mock_driver.build.return_value = COMPUTE_ID
|
304
|
-
self.conf.config(
|
305
|
-
group="controller_worker", user_data_config_drive=False)
|
306
|
-
mock_log_cfg.return_value = 'FAKE CFG'
|
307
|
-
|
308
|
-
# Test execute()
|
309
|
-
compute_id = createcompute.execute(_amphora_mock.id, ports=[_port],
|
310
|
-
server_group_id=SERVER_GRPOUP_ID)
|
311
|
-
|
312
|
-
# Validate that the build method was called properly
|
313
|
-
mock_driver.build.assert_called_once_with(
|
314
|
-
name="amphora-" + _amphora_mock.id,
|
315
|
-
amphora_flavor=AMP_FLAVOR_ID,
|
316
|
-
image_tag=AMP_IMAGE_TAG,
|
317
|
-
image_owner='',
|
318
|
-
key_name=None,
|
319
|
-
sec_groups=AMP_SEC_GROUPS,
|
320
|
-
network_ids=AMP_NET,
|
321
|
-
port_ids=[PORT_ID],
|
322
|
-
config_drive_files={'/etc/octavia/'
|
323
|
-
'amphora-agent.conf': 'test_conf',
|
324
|
-
'/etc/rsyslog.d/10-rsyslog.conf': 'FAKE CFG'},
|
325
|
-
user_data='user_data_conf',
|
326
|
-
server_group_id=SERVER_GRPOUP_ID,
|
327
|
-
availability_zone=None)
|
328
|
-
|
329
|
-
self.assertEqual(COMPUTE_ID, compute_id)
|
330
|
-
|
331
|
-
# Test that a build exception is raised
|
332
|
-
createcompute = compute_tasks.ComputeCreate()
|
333
|
-
|
334
|
-
self.assertRaises(TypeError,
|
335
|
-
createcompute.execute,
|
336
|
-
_amphora_mock, config_drive_files='test_cert')
|
337
|
-
|
338
|
-
# Test revert()
|
339
|
-
|
340
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
341
|
-
|
342
|
-
createcompute = compute_tasks.ComputeCreate()
|
343
|
-
createcompute.revert(compute_id, _amphora_mock.id)
|
344
|
-
|
345
|
-
# Validate that the delete method was called properly
|
346
|
-
mock_driver.delete.assert_called_once_with(
|
347
|
-
COMPUTE_ID)
|
348
|
-
|
349
|
-
# Test that a delete exception is not raised
|
350
|
-
|
351
|
-
createcompute.revert(COMPUTE_ID, _amphora_mock.id)
|
352
|
-
|
353
|
-
@mock.patch('octavia.common.jinja.logging.logging_jinja_cfg.'
|
354
|
-
'LoggingJinjaTemplater.build_logging_config')
|
355
|
-
@mock.patch('jinja2.Environment.get_template')
|
356
|
-
@mock.patch('octavia.amphorae.backends.agent.'
|
357
|
-
'agent_jinja_cfg.AgentJinjaTemplater.'
|
358
|
-
'build_agent_config', return_value='test_conf')
|
359
|
-
@mock.patch('octavia.common.jinja.'
|
360
|
-
'user_data_jinja_cfg.UserDataJinjaCfg.'
|
361
|
-
'build_user_data_config', return_value='user_data_conf')
|
362
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
363
|
-
def test_compute_create_cert(self, mock_driver, mock_ud_conf,
|
364
|
-
mock_conf, mock_jinja, mock_log_cfg):
|
365
|
-
createcompute = compute_tasks.CertComputeCreate()
|
366
|
-
key = utils.get_compatible_server_certs_key_passphrase()
|
367
|
-
fer = fernet.Fernet(key)
|
368
|
-
mock_log_cfg.return_value = 'FAKE CFG'
|
369
|
-
|
370
|
-
mock_driver.build.return_value = COMPUTE_ID
|
371
|
-
path = '/etc/octavia/certs/ca_01.pem'
|
372
|
-
self.useFixture(test_utils.OpenFixture(path, 'test'))
|
373
|
-
# Test execute()
|
374
|
-
test_cert = fer.encrypt(
|
375
|
-
utils.get_compatible_value('test_cert')
|
376
|
-
)
|
377
|
-
compute_id = createcompute.execute(_amphora_mock.id, test_cert,
|
378
|
-
server_group_id=SERVER_GRPOUP_ID
|
379
|
-
)
|
380
|
-
|
381
|
-
# Validate that the build method was called properly
|
382
|
-
mock_driver.build.assert_called_once_with(
|
383
|
-
name="amphora-" + _amphora_mock.id,
|
384
|
-
amphora_flavor=AMP_FLAVOR_ID,
|
385
|
-
image_tag=AMP_IMAGE_TAG,
|
386
|
-
image_owner='',
|
387
|
-
key_name=AMP_SSH_KEY_NAME,
|
388
|
-
sec_groups=AMP_SEC_GROUPS,
|
389
|
-
network_ids=AMP_NET,
|
390
|
-
port_ids=[],
|
391
|
-
user_data='user_data_conf',
|
392
|
-
config_drive_files={
|
393
|
-
'/etc/rsyslog.d/10-rsyslog.conf': 'FAKE CFG',
|
394
|
-
'/etc/octavia/certs/server.pem': fer.decrypt(
|
395
|
-
test_cert).decode('utf-8'),
|
396
|
-
'/etc/octavia/certs/client_ca.pem': 'test',
|
397
|
-
'/etc/octavia/amphora-agent.conf': 'test_conf'},
|
398
|
-
server_group_id=SERVER_GRPOUP_ID,
|
399
|
-
availability_zone=None)
|
400
|
-
|
401
|
-
self.assertEqual(COMPUTE_ID, compute_id)
|
402
|
-
|
403
|
-
# Test that a build exception is raised
|
404
|
-
self.useFixture(test_utils.OpenFixture(path, 'test'))
|
405
|
-
|
406
|
-
createcompute = compute_tasks.ComputeCreate()
|
407
|
-
self.assertRaises(TypeError,
|
408
|
-
createcompute.execute,
|
409
|
-
_amphora_mock,
|
410
|
-
config_drive_files=test_cert)
|
411
|
-
|
412
|
-
# Test revert()
|
413
|
-
|
414
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
415
|
-
|
416
|
-
createcompute = compute_tasks.ComputeCreate()
|
417
|
-
createcompute.revert(compute_id, _amphora_mock.id)
|
418
|
-
|
419
|
-
# Validate that the delete method was called properly
|
420
|
-
mock_driver.delete.assert_called_once_with(COMPUTE_ID)
|
421
|
-
|
422
|
-
# Test that a delete exception is not raised
|
423
|
-
|
424
|
-
createcompute.revert(COMPUTE_ID, _amphora_mock.id)
|
425
|
-
|
426
|
-
@mock.patch('octavia.controller.worker.amphora_rate_limit'
|
427
|
-
'.AmphoraBuildRateLimit.remove_from_build_req_queue')
|
428
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
429
|
-
@mock.patch('time.sleep')
|
430
|
-
def test_compute_wait(self,
|
431
|
-
mock_time_sleep,
|
432
|
-
mock_driver,
|
433
|
-
mock_remove_from_build_queue):
|
434
|
-
|
435
|
-
self.conf.config(group='haproxy_amphora', build_rate_limit=5)
|
436
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
437
|
-
_amphora_mock.status = constants.ACTIVE
|
438
|
-
_amphora_mock.lb_network_ip = LB_NET_IP
|
439
|
-
|
440
|
-
mock_driver.get_amphora.return_value = _amphora_mock, None
|
441
|
-
|
442
|
-
computewait = compute_tasks.ComputeActiveWait()
|
443
|
-
|
444
|
-
# Test with no AZ
|
445
|
-
computewait.execute(COMPUTE_ID, AMPHORA_ID, None)
|
446
|
-
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID, None)
|
447
|
-
|
448
|
-
# Test with AZ
|
449
|
-
mock_driver.reset_mock()
|
450
|
-
az = {constants.MANAGEMENT_NETWORK: uuidutils.generate_uuid()}
|
451
|
-
computewait.execute(COMPUTE_ID, AMPHORA_ID, az)
|
452
|
-
mock_driver.get_amphora.assert_called_once_with(
|
453
|
-
COMPUTE_ID, az[constants.MANAGEMENT_NETWORK])
|
454
|
-
|
455
|
-
# Test with deleted amp
|
456
|
-
_amphora_mock.status = constants.DELETED
|
457
|
-
self.assertRaises(exceptions.ComputeWaitTimeoutException,
|
458
|
-
computewait.execute,
|
459
|
-
_amphora_mock, AMPHORA_ID, None)
|
460
|
-
|
461
|
-
@mock.patch('octavia.controller.worker.amphora_rate_limit'
|
462
|
-
'.AmphoraBuildRateLimit.remove_from_build_req_queue')
|
463
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
464
|
-
@mock.patch('time.sleep')
|
465
|
-
def test_compute_wait_error_status(self,
|
466
|
-
mock_time_sleep,
|
467
|
-
mock_driver,
|
468
|
-
mock_remove_from_build_queue):
|
469
|
-
|
470
|
-
self.conf.config(group='haproxy_amphora', build_rate_limit=5)
|
471
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
472
|
-
_amphora_mock.status = constants.ACTIVE
|
473
|
-
_amphora_mock.lb_network_ip = LB_NET_IP
|
474
|
-
|
475
|
-
mock_driver.get_amphora.return_value = _amphora_mock, None
|
476
|
-
|
477
|
-
computewait = compute_tasks.ComputeActiveWait()
|
478
|
-
computewait.execute(COMPUTE_ID, AMPHORA_ID, None)
|
479
|
-
|
480
|
-
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID, None)
|
481
|
-
|
482
|
-
_amphora_mock.status = constants.ERROR
|
483
|
-
|
484
|
-
self.assertRaises(exceptions.ComputeBuildException,
|
485
|
-
computewait.execute,
|
486
|
-
_amphora_mock, AMPHORA_ID, None)
|
487
|
-
|
488
|
-
@mock.patch('octavia.controller.worker.amphora_rate_limit'
|
489
|
-
'.AmphoraBuildRateLimit.remove_from_build_req_queue')
|
490
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
491
|
-
@mock.patch('time.sleep')
|
492
|
-
def test_compute_wait_skipped(self,
|
493
|
-
mock_time_sleep,
|
494
|
-
mock_driver,
|
495
|
-
mock_remove_from_build_queue):
|
496
|
-
_amphora_mock.compute_id = COMPUTE_ID
|
497
|
-
_amphora_mock.status = constants.ACTIVE
|
498
|
-
_amphora_mock.lb_network_ip = LB_NET_IP
|
499
|
-
|
500
|
-
mock_driver.get_amphora.return_value = _amphora_mock, None
|
501
|
-
|
502
|
-
computewait = compute_tasks.ComputeActiveWait()
|
503
|
-
computewait.execute(COMPUTE_ID, AMPHORA_ID, None)
|
504
|
-
|
505
|
-
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID, None)
|
506
|
-
mock_remove_from_build_queue.assert_not_called()
|
507
|
-
|
508
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
509
|
-
def test_delete_amphorae_on_load_balancer(self, mock_driver):
|
510
|
-
|
511
|
-
mock_driver.delete.side_effect = [mock.DEFAULT,
|
512
|
-
exceptions.OctaviaException('boom')]
|
513
|
-
|
514
|
-
delete_amps = compute_tasks.DeleteAmphoraeOnLoadBalancer()
|
515
|
-
|
516
|
-
delete_amps.execute(_load_balancer_mock)
|
517
|
-
|
518
|
-
mock_driver.delete.assert_called_once_with(COMPUTE_ID)
|
519
|
-
|
520
|
-
# Test compute driver exception is raised
|
521
|
-
self.assertRaises(exceptions.OctaviaException, delete_amps.execute,
|
522
|
-
_load_balancer_mock)
|
523
|
-
|
524
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
525
|
-
def test_compute_delete(self, mock_driver):
|
526
|
-
mock_driver.delete.side_effect = [
|
527
|
-
mock.DEFAULT, exceptions.OctaviaException('boom'),
|
528
|
-
mock.DEFAULT, exceptions.OctaviaException('boom'),
|
529
|
-
exceptions.OctaviaException('boom'),
|
530
|
-
exceptions.OctaviaException('boom'),
|
531
|
-
exceptions.OctaviaException('boom')]
|
532
|
-
|
533
|
-
delete_compute = compute_tasks.ComputeDelete()
|
534
|
-
|
535
|
-
# Limit the retry attempts for the test run to save time
|
536
|
-
delete_compute.execute.retry.stop = tenacity.stop_after_attempt(2)
|
537
|
-
|
538
|
-
delete_compute.execute(_amphora_mock)
|
539
|
-
|
540
|
-
mock_driver.delete.assert_called_once_with(COMPUTE_ID)
|
541
|
-
|
542
|
-
# Test retry after a compute exception
|
543
|
-
mock_driver.reset_mock()
|
544
|
-
delete_compute.execute(_amphora_mock)
|
545
|
-
mock_driver.delete.assert_has_calls([mock.call(COMPUTE_ID),
|
546
|
-
mock.call(COMPUTE_ID)])
|
547
|
-
|
548
|
-
# Test passive failure
|
549
|
-
mock_driver.reset_mock()
|
550
|
-
delete_compute.execute(_amphora_mock, passive_failure=True)
|
551
|
-
mock_driver.delete.assert_has_calls([mock.call(COMPUTE_ID),
|
552
|
-
mock.call(COMPUTE_ID)])
|
553
|
-
|
554
|
-
# Test non-passive failure
|
555
|
-
mock_driver.reset_mock()
|
556
|
-
self.assertRaises(exceptions.OctaviaException, delete_compute.execute,
|
557
|
-
_amphora_mock, passive_failure=False)
|
558
|
-
|
559
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
560
|
-
def test_nova_server_group_create(self, mock_driver):
|
561
|
-
nova_sever_group_obj = compute_tasks.NovaServerGroupCreate()
|
562
|
-
|
563
|
-
server_group_test_id = '6789'
|
564
|
-
fake_server_group = mock.MagicMock()
|
565
|
-
fake_server_group.id = server_group_test_id
|
566
|
-
fake_server_group.policy = 'anti-affinity'
|
567
|
-
mock_driver.create_server_group.return_value = fake_server_group
|
568
|
-
|
569
|
-
# Test execute()
|
570
|
-
sg_id = nova_sever_group_obj.execute('123')
|
571
|
-
|
572
|
-
# Validate that the build method was called properly
|
573
|
-
mock_driver.create_server_group.assert_called_once_with(
|
574
|
-
'octavia-lb-123', 'anti-affinity')
|
575
|
-
|
576
|
-
# Make sure it returns the expected server group_id
|
577
|
-
self.assertEqual(server_group_test_id, sg_id)
|
578
|
-
|
579
|
-
# Test revert()
|
580
|
-
nova_sever_group_obj.revert(sg_id)
|
581
|
-
|
582
|
-
# Validate that the delete_server_group method was called properly
|
583
|
-
mock_driver.delete_server_group.assert_called_once_with(sg_id)
|
584
|
-
|
585
|
-
# Test revert with exception
|
586
|
-
mock_driver.reset_mock()
|
587
|
-
mock_driver.delete_server_group.side_effect = Exception('DelSGExcept')
|
588
|
-
nova_sever_group_obj.revert(sg_id)
|
589
|
-
mock_driver.delete_server_group.assert_called_once_with(sg_id)
|
590
|
-
|
591
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
592
|
-
def test_nova_server_group_delete_with_sever_group_id(self, mock_driver):
|
593
|
-
nova_sever_group_obj = compute_tasks.NovaServerGroupDelete()
|
594
|
-
sg_id = '6789'
|
595
|
-
nova_sever_group_obj.execute(sg_id)
|
596
|
-
mock_driver.delete_server_group.assert_called_once_with(sg_id)
|
597
|
-
|
598
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
599
|
-
def test_nova_server_group_delete_with_None(self, mock_driver):
|
600
|
-
nova_sever_group_obj = compute_tasks.NovaServerGroupDelete()
|
601
|
-
sg_id = None
|
602
|
-
nova_sever_group_obj.execute(sg_id)
|
603
|
-
self.assertFalse(mock_driver.delete_server_group.called, sg_id)
|
604
|
-
|
605
|
-
@mock.patch('stevedore.driver.DriverManager.driver')
|
606
|
-
def test_attach_port(self, mock_driver):
|
607
|
-
COMPUTE_ID = uuidutils.generate_uuid()
|
608
|
-
PORT_ID = uuidutils.generate_uuid()
|
609
|
-
amphora_mock = mock.MagicMock()
|
610
|
-
port_mock = mock.MagicMock()
|
611
|
-
amphora_mock.compute_id = COMPUTE_ID
|
612
|
-
port_mock.id = PORT_ID
|
613
|
-
|
614
|
-
attach_port_obj = compute_tasks.AttachPort()
|
615
|
-
|
616
|
-
# Test execute
|
617
|
-
attach_port_obj.execute(amphora_mock, port_mock)
|
618
|
-
|
619
|
-
mock_driver.attach_network_or_port.assert_called_once_with(
|
620
|
-
COMPUTE_ID, port_id=PORT_ID)
|
621
|
-
|
622
|
-
# Test revert
|
623
|
-
mock_driver.reset_mock()
|
624
|
-
|
625
|
-
attach_port_obj.revert(amphora_mock, port_mock)
|
626
|
-
|
627
|
-
mock_driver.detach_port.assert_called_once_with(COMPUTE_ID, PORT_ID)
|
628
|
-
|
629
|
-
# Test rever exception
|
630
|
-
mock_driver.reset_mock()
|
631
|
-
mock_driver.detach_port.side_effect = [Exception('boom')]
|
632
|
-
|
633
|
-
# should not raise
|
634
|
-
attach_port_obj.revert(amphora_mock, port_mock)
|