d2f4e9717d
Move all modules under the next structure: - rally_openstack.common - rally_openstack.enviromnet - rally_openstack.task - rally_openstack.verification Change-Id: I41702d017cd49b117da3b8e12b19c7327229ae32
165 lines
7.5 KiB
Python
165 lines
7.5 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from unittest import mock
|
|
|
|
from rally_openstack.task.contexts.neutron import lbaas as lbaas_context
|
|
from tests.unit import test
|
|
|
|
NET = "rally_openstack.common.wrappers.network."
|
|
|
|
|
|
class LbaasTestCase(test.TestCase):
|
|
def get_context(self, **kwargs):
|
|
foo_tenant = {"networks": [{"id": "foo_net",
|
|
"tenant_id": "foo_tenant",
|
|
"subnets": ["foo_subnet"]}]}
|
|
bar_tenant = {"networks": [{"id": "bar_net",
|
|
"tenant_id": "bar_tenant",
|
|
"subnets": ["bar_subnet"]}]}
|
|
return {"task": {"uuid": "foo_task"},
|
|
"admin": {"credential": "foo_admin"},
|
|
"users": [{"id": "foo_user", "tenant_id": "foo_tenant"},
|
|
{"id": "bar_user", "tenant_id": "bar_tenant"}],
|
|
"config": {"lbaas": kwargs},
|
|
"tenants": {"foo_tenant": foo_tenant,
|
|
"bar_tenant": bar_tenant}}
|
|
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
@mock.patch(NET + "wrap", return_value="foo_service")
|
|
def test__init__default(self, mock_wrap, mock_clients):
|
|
context = lbaas_context.Lbaas(self.get_context())
|
|
self.assertEqual(
|
|
context.config["pool"]["lb_method"],
|
|
lbaas_context.Lbaas.DEFAULT_CONFIG["pool"]["lb_method"])
|
|
self.assertEqual(
|
|
context.config["pool"]["protocol"],
|
|
lbaas_context.Lbaas.DEFAULT_CONFIG["pool"]["protocol"])
|
|
self.assertEqual(
|
|
context.config["lbaas_version"],
|
|
lbaas_context.Lbaas.DEFAULT_CONFIG["lbaas_version"])
|
|
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
@mock.patch(NET + "wrap", return_value="foo_service")
|
|
def test__init__explicit(self, mock_wrap, mock_clients):
|
|
context = lbaas_context.Lbaas(
|
|
self.get_context(pool={"lb_method": "LEAST_CONNECTIONS"}))
|
|
self.assertEqual(context.config["pool"]["lb_method"],
|
|
"LEAST_CONNECTIONS")
|
|
|
|
@mock.patch(NET + "wrap")
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
def test_setup_with_lbaas(self, mock_clients, mock_wrap):
|
|
foo_net = {"id": "foo_net",
|
|
"tenant_id": "foo_tenant",
|
|
"subnets": ["foo_subnet"],
|
|
"lb_pools": [{"pool": {"id": "foo_pool",
|
|
"tenant_id": "foo_tenant"}}]}
|
|
bar_net = {"id": "bar_net",
|
|
"tenant_id": "bar_tenant",
|
|
"subnets": ["bar_subnet"],
|
|
"lb_pools": [{"pool": {"id": "bar_pool",
|
|
"tenant_id": "bar_tenant"}}]}
|
|
expected_net = [bar_net, foo_net]
|
|
mock_create = mock.Mock(
|
|
side_effect=lambda t, s,
|
|
**kw: {"pool": {"id": str(t.split("_")[0]) + "_pool",
|
|
"tenant_id": t}})
|
|
actual_net = []
|
|
mock_wrap.return_value = mock.Mock(create_v1_pool=mock_create)
|
|
net_wrapper = mock_wrap(mock_clients.return_value)
|
|
net_wrapper.supports_extension.return_value = (True, None)
|
|
fake_args = {"lbaas_version": 1}
|
|
|
|
lb_context = lbaas_context.Lbaas(self.get_context(**fake_args))
|
|
lb_context._iterate_per_tenants = mock.MagicMock(
|
|
return_value=[
|
|
("foo_user", "foo_tenant"),
|
|
("bar_user", "bar_tenant")]
|
|
)
|
|
|
|
lb_context.setup()
|
|
|
|
lb_context._iterate_per_tenants.assert_called_once_with()
|
|
net_wrapper.supports_extension.assert_called_once_with("lbaas")
|
|
for tenant_id, tenant_ctx in (
|
|
sorted(lb_context.context["tenants"].items())):
|
|
for network in tenant_ctx["networks"]:
|
|
actual_net.append(network)
|
|
self.assertEqual(expected_net, actual_net)
|
|
|
|
@mock.patch(NET + "wrap")
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
def test_setup_with_no_lbaas(self, mock_clients, mock_wrap):
|
|
mock_create = mock.Mock(side_effect=lambda t, **kw: t + "-net")
|
|
mock_wrap.return_value = mock.Mock(create_v1_pool=mock_create)
|
|
fake_args = {"lbaas_version": 1}
|
|
lb_context = lbaas_context.Lbaas(self.get_context(**fake_args))
|
|
net_wrapper = mock_wrap(mock_clients.return_value)
|
|
net_wrapper.supports_extension.return_value = (False, None)
|
|
|
|
lb_context._iterate_per_tenants = mock.MagicMock(
|
|
return_value=[("bar_user", "bar_tenant")]
|
|
)
|
|
lb_context.setup()
|
|
|
|
lb_context._iterate_per_tenants.assert_not_called()
|
|
net_wrapper.supports_extension.assert_called_once_with("lbaas")
|
|
assert not net_wrapper.create_v1_pool.called
|
|
|
|
@mock.patch(NET + "wrap")
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
def test_setup_with_lbaas_version_not_one(self, mock_clients, mock_wrap):
|
|
mock_create = mock.Mock(side_effect=lambda t, **kw: t + "-net")
|
|
mock_wrap.return_value = mock.Mock(create_v1_pool=mock_create)
|
|
fake_args = {"lbaas_version": 2}
|
|
|
|
lb_context = lbaas_context.Lbaas(self.get_context(**fake_args))
|
|
lb_context._iterate_per_tenants = mock.MagicMock(
|
|
return_value=[("bar_user", "bar_tenant")]
|
|
)
|
|
net_wrapper = mock_wrap(mock_clients.return_value)
|
|
net_wrapper.supports_extension.return_value = (True, None)
|
|
self.assertRaises(NotImplementedError, lb_context.setup)
|
|
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
@mock.patch(NET + "wrap")
|
|
def test_cleanup(self, mock_wrap, mock_clients):
|
|
net_wrapper = mock_wrap(mock_clients.return_value)
|
|
lb_context = lbaas_context.Lbaas(self.get_context())
|
|
expected_pools = []
|
|
for tenant_id, tenant_ctx in lb_context.context["tenants"].items():
|
|
resultant_pool = {"pool": {
|
|
"id": str(tenant_id.split("_")[0]) + "_pool"}}
|
|
expected_pools.append(resultant_pool)
|
|
for network in (
|
|
lb_context.context["tenants"][tenant_id]["networks"]):
|
|
network.setdefault("lb_pools", []).append(resultant_pool)
|
|
lb_context.cleanup()
|
|
net_wrapper.delete_v1_pool.assert_has_calls(
|
|
[mock.call(pool["pool"]["id"]) for pool in expected_pools])
|
|
|
|
@mock.patch("rally_openstack.common.osclients.Clients")
|
|
@mock.patch(NET + "wrap")
|
|
def test_cleanup_lbaas_version_not_one(self, mock_wrap, mock_clients):
|
|
fakeargs = {"lbaas_version": 2}
|
|
net_wrapper = mock_wrap(mock_clients.return_value)
|
|
lb_context = lbaas_context.Lbaas(self.get_context(**fakeargs))
|
|
for tenant_id, tenant_ctx in lb_context.context["tenants"].items():
|
|
resultant_pool = {"pool": {
|
|
"id": str(tenant_id.split("_")[0]) + "_pool"}}
|
|
for network in (
|
|
lb_context.context["tenants"][tenant_id]["networks"]):
|
|
network.setdefault("lb_pools", []).append(resultant_pool)
|
|
lb_context.cleanup()
|
|
assert not net_wrapper.delete_v1_pool.called
|