Merge "Modify atomic action timer in lb scenarios"
This commit is contained in:
commit
bfa39b48f5
@ -34,9 +34,8 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
:param pool_create_args: dict, POST /lb/pools request options
|
||||
"""
|
||||
pool_create_args = pool_create_args or {}
|
||||
for net in self.context.get("tenant", {}).get("networks", []):
|
||||
for subnet_id in net["subnets"]:
|
||||
self._create_v1_pool(subnet_id, **pool_create_args)
|
||||
networks = self.context.get("tenant", {}).get("networks", [])
|
||||
self._create_v1_pools(networks, **pool_create_args)
|
||||
self._list_v1_pools()
|
||||
|
||||
@validation.restricted_parameters("subnet_id",
|
||||
@ -54,12 +53,9 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
|
||||
:param pool_create_args: dict, POST /lb/pools request options
|
||||
"""
|
||||
pools = []
|
||||
pool_create_args = pool_create_args or {}
|
||||
for net in self.context.get("tenant", {}).get("networks", []):
|
||||
for subnet_id in net["subnets"]:
|
||||
pools.append(self._create_v1_pool(subnet_id=subnet_id,
|
||||
**pool_create_args))
|
||||
networks = self.context.get("tenant", {}).get("networks", [])
|
||||
pools = self._create_v1_pools(networks, **pool_create_args)
|
||||
for pool in pools:
|
||||
self._delete_v1_pool(pool["pool"])
|
||||
|
||||
@ -80,12 +76,9 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
:param pool_create_args: dict, POST /lb/pools request options
|
||||
:param pool_update_args: dict, POST /lb/pools update options
|
||||
"""
|
||||
pools = []
|
||||
pool_create_args = pool_create_args or {}
|
||||
pool_update_args = pool_update_args or {}
|
||||
for net in self.context.get("tenant", {}).get("networks", []):
|
||||
for subnet_id in net["subnets"]:
|
||||
pools.append(self._create_v1_pool(subnet_id,
|
||||
**pool_create_args))
|
||||
networks = self.context.get("tenant", {}).get("networks", [])
|
||||
pools = self._create_v1_pools(networks, **pool_create_args)
|
||||
for pool in pools:
|
||||
self._update_v1_pool(pool, **pool_update_args)
|
||||
|
@ -284,20 +284,43 @@ class NeutronScenario(scenario.OpenStackScenario):
|
||||
self.clients("neutron").remove_interface_router(
|
||||
router["id"], {"subnet_id": subnet["id"]})
|
||||
|
||||
@base.atomic_action_timer("neutron.create_pool")
|
||||
def _create_v1_pool(self, subnet_id, **pool_create_args):
|
||||
"""Create pool(v1)
|
||||
def _create_lb_pool(self, subnet_id, atomic_action=True,
|
||||
**pool_create_args):
|
||||
"""Create LB pool(v1)
|
||||
|
||||
:parm subnet_id: str, neutron subnet-id
|
||||
:parm pool_create_args: dict, POST /lb/pools request options
|
||||
:returns: obj, neutron lb pool
|
||||
:param subnet_id: str, neutron subnet-id
|
||||
:param pool_create_args: dict, POST /lb/pools request options
|
||||
:param atomic_action: True if this is an atomic action
|
||||
:returns: dict, neutron lb pool
|
||||
"""
|
||||
args = {"lb_method": self.LB_METHOD, "protocol": self.LB_PROTOCOL,
|
||||
args = {"lb_method": self.LB_METHOD,
|
||||
"protocol": self.LB_PROTOCOL,
|
||||
"name": self._generate_random_name("rally_pool_"),
|
||||
"subnet_id": subnet_id}
|
||||
args.update(pool_create_args)
|
||||
if atomic_action:
|
||||
with base.AtomicAction(self, "neutron.create_pool"):
|
||||
return self.clients("neutron").create_pool({"pool": args})
|
||||
return self.clients("neutron").create_pool({"pool": args})
|
||||
|
||||
def _create_v1_pools(self, networks, **pool_create_args):
|
||||
"""Create LB pools(v1)
|
||||
|
||||
:param networks: list, neutron networks
|
||||
:param pool_create_args: dict, POST /lb/pools request options
|
||||
:returns: list, neutron lb pools
|
||||
"""
|
||||
subnets = []
|
||||
pools = []
|
||||
for net in networks:
|
||||
subnets.extend(net.get("subnets", []))
|
||||
with base.AtomicAction(self, "neutron.create_%s_pools" %
|
||||
len(subnets)):
|
||||
for subnet_id in subnets:
|
||||
pools.append(self._create_lb_pool(
|
||||
subnet_id, atomic_action=False, **pool_create_args))
|
||||
return pools
|
||||
|
||||
@base.atomic_action_timer("neutron.list_pools")
|
||||
def _list_v1_pools(self, **kwargs):
|
||||
"""Return user lb pool list(v1)."""
|
||||
|
@ -42,14 +42,13 @@ class NeutronLoadbalancerv1TestCase(test.TestCase):
|
||||
neutron_scenario = loadbalancer_v1.NeutronLoadbalancerV1(
|
||||
self._get_context())
|
||||
pool_data = pool_create_args or {}
|
||||
neutron_scenario._create_v1_pool = mock.Mock()
|
||||
networks = self._get_context()["tenant"]["networks"]
|
||||
neutron_scenario._create_v1_pools = mock.Mock()
|
||||
neutron_scenario._list_v1_pools = mock.Mock()
|
||||
neutron_scenario.create_and_list_pools(
|
||||
pool_create_args=pool_create_args)
|
||||
for net in self._get_context()["tenant"]["networks"]:
|
||||
for subnet_id in net["subnets"]:
|
||||
neutron_scenario._create_v1_pool.assert_called_once_with(
|
||||
subnet_id, **pool_data)
|
||||
neutron_scenario._create_v1_pools.assert_called_once_with(
|
||||
networks, **pool_data)
|
||||
neutron_scenario._list_v1_pools.assert_called_once_with()
|
||||
|
||||
@ddt.data(
|
||||
@ -62,22 +61,19 @@ class NeutronLoadbalancerv1TestCase(test.TestCase):
|
||||
def test_create_and_delete_pools(self, pool_create_args=None):
|
||||
neutron_scenario = loadbalancer_v1.NeutronLoadbalancerV1(
|
||||
self._get_context())
|
||||
pool = {
|
||||
pools = [{
|
||||
"pool": {
|
||||
"id": "pool-id"
|
||||
}
|
||||
}
|
||||
}]
|
||||
pool_data = pool_create_args or {}
|
||||
neutron_scenario._create_v1_pool = mock.Mock(return_value=pool)
|
||||
networks = self._get_context()["tenant"]["networks"]
|
||||
neutron_scenario._create_v1_pools = mock.Mock(return_value=pools)
|
||||
neutron_scenario._delete_v1_pool = mock.Mock()
|
||||
neutron_scenario.create_and_delete_pools(
|
||||
pool_create_args=pool_create_args)
|
||||
pools = []
|
||||
for net in self._get_context()["tenant"]["networks"]:
|
||||
for subnet_id in net["subnets"]:
|
||||
self.assertEqual([mock.call(subnet_id=subnet_id,
|
||||
**pool_data)],
|
||||
neutron_scenario._create_v1_pool.mock_calls)
|
||||
self.assertEqual([mock.call(networks, **pool_data)],
|
||||
neutron_scenario._create_v1_pools.mock_calls)
|
||||
for pool in pools:
|
||||
self.assertEqual(1, neutron_scenario._delete_v1_pool.call_count)
|
||||
|
||||
@ -102,11 +98,11 @@ class NeutronLoadbalancerv1TestCase(test.TestCase):
|
||||
pool_update_args=None):
|
||||
neutron_scenario = loadbalancer_v1.NeutronLoadbalancerV1(
|
||||
self._get_context())
|
||||
pool = {
|
||||
pools = [{
|
||||
"pool": {
|
||||
"id": "pool-id"
|
||||
}
|
||||
}
|
||||
}]
|
||||
updated_pool = {
|
||||
"pool": {
|
||||
"id": "pool-id",
|
||||
@ -117,19 +113,15 @@ class NeutronLoadbalancerv1TestCase(test.TestCase):
|
||||
pool_data = pool_create_args or {}
|
||||
pool_update_args = pool_update_args or {}
|
||||
pool_update_args.update({"name": "_updated", "admin_state_up": True})
|
||||
neutron_scenario._create_v1_pool = mock.Mock(return_value=pool)
|
||||
neutron_scenario._create_v1_pools = mock.Mock(return_value=pools)
|
||||
neutron_scenario._update_v1_pool = mock.Mock(
|
||||
return_value=updated_pool)
|
||||
networks = self._get_context()["tenant"]["networks"]
|
||||
neutron_scenario.create_and_update_pools(
|
||||
pool_create_args=pool_data,
|
||||
pool_update_args=pool_update_args)
|
||||
pools = []
|
||||
for net in self._get_context()["tenant"]["networks"]:
|
||||
for subnet_id in net["subnets"]:
|
||||
pools.append(
|
||||
neutron_scenario._create_v1_pool.assert_called_once_with(
|
||||
subnet_id, **pool_data))
|
||||
self.assertEqual([mock.call(networks, **pool_data)],
|
||||
neutron_scenario._create_v1_pools.mock_calls)
|
||||
for pool in pools:
|
||||
neutron_scenario._update_v1_pool.assert_called_once_with(
|
||||
neutron_scenario._create_v1_pool.return_value,
|
||||
**pool_update_args)
|
||||
pool, **pool_update_args)
|
||||
|
@ -13,6 +13,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import ddt
|
||||
import mock
|
||||
|
||||
from rally.plugins.openstack.scenarios.neutron import utils
|
||||
@ -430,46 +431,6 @@ class NeutronScenarioTestCase(test.ScenarioTestCase):
|
||||
{"allocation_pools": []},
|
||||
"10.10.10.0/24")] * subnets_per_network)
|
||||
|
||||
def test_create_v1_pool_explicit(self):
|
||||
neutron_scenario = utils.NeutronScenario()
|
||||
lb_method = "LEAST_CONNECTIONS"
|
||||
subnet = "fake-id"
|
||||
pool = mock.Mock()
|
||||
self.clients("neutron").create_pool.return_value = pool
|
||||
# Explicit options
|
||||
pool_data = {"lb_method": lb_method, "name": "explicit-name"}
|
||||
args = {"lb_method": "ROUND_ROBIN", "protocol": "HTTP",
|
||||
"name": "random_name", "subnet_id": subnet}
|
||||
args.update(pool_data)
|
||||
expected_pool_data = {"pool": args}
|
||||
pool = neutron_scenario._create_v1_pool(
|
||||
subnet_id=subnet, **pool_data)
|
||||
self.clients("neutron").create_pool.assert_called_once_with(
|
||||
expected_pool_data)
|
||||
self._test_atomic_action_timer(
|
||||
neutron_scenario.atomic_actions(), "neutron.create_pool")
|
||||
|
||||
@mock.patch(NEUTRON_UTILS + "NeutronScenario._generate_random_name")
|
||||
def test_create_v1_pool_default(self, mock__generate_random_name):
|
||||
neutron_scenario = utils.NeutronScenario()
|
||||
random_name = "random_name"
|
||||
subnet = "fake-id"
|
||||
pool = mock.Mock()
|
||||
self.clients("neutron").create_pool.return_value = pool
|
||||
mock__generate_random_name.return_value = random_name
|
||||
# Random pool name
|
||||
pool_data = {}
|
||||
args = {"lb_method": "ROUND_ROBIN", "protocol": "HTTP",
|
||||
"name": "random_name", "subnet_id": subnet}
|
||||
args.update(pool_data)
|
||||
expected_pool_data = {"pool": args}
|
||||
pool = neutron_scenario._create_v1_pool(
|
||||
subnet_id=subnet, **pool_data)
|
||||
self.clients("neutron").create_pool.assert_called_once_with(
|
||||
expected_pool_data)
|
||||
self._test_atomic_action_timer(
|
||||
neutron_scenario.atomic_actions(), "neutron.create_pool")
|
||||
|
||||
def test_delete_v1_pool(self):
|
||||
scenario = utils.NeutronScenario()
|
||||
|
||||
@ -539,3 +500,75 @@ class NeutronScenarioFunctionalTestCase(test.FakeClientsScenarioTestCase):
|
||||
# This checks both data (cidrs seem to be enough) and subnets number
|
||||
result_cidrs = sorted([s["subnet"]["cidr"] for s in subnets])
|
||||
self.assertEqual(cidrs, result_cidrs)
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class NeutronLoadbalancerScenarioTestCase(test.ScenarioTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(NeutronLoadbalancerScenarioTestCase, self).setUp()
|
||||
self.network = mock.Mock()
|
||||
|
||||
@ddt.data(
|
||||
{"networks": [{"subnets": "subnet-id"}]},
|
||||
{"pool_create_args": None, "networks": [{"subnets": ["subnet-id"]}]},
|
||||
{"pool_create_args": {}, "networks": [{"subnets": ["subnet-id"]}]},
|
||||
{"pool_create_args": {"name": "given-name"},
|
||||
"networks": [{"subnets": ["subnet-id"]}]},
|
||||
)
|
||||
@ddt.unpack
|
||||
def test__create_v1_pools(self, networks, pool_create_args=None):
|
||||
neutron_scenario = utils.NeutronScenario()
|
||||
pool_create_args = pool_create_args or {}
|
||||
pool = {"pool": {"id": "pool-id"}}
|
||||
neutron_scenario._create_lb_pool = mock.Mock(return_value=pool)
|
||||
resultant_pools = neutron_scenario._create_v1_pools(
|
||||
networks=networks, **pool_create_args)
|
||||
if networks:
|
||||
subnets = []
|
||||
[subnets.extend(net["subnets"]) for net in networks]
|
||||
neutron_scenario._create_lb_pool.assert_has_calls(
|
||||
[mock.call(subnet, atomic_action=False,
|
||||
**pool_create_args) for subnet in subnets])
|
||||
self.assertEqual(resultant_pools, [pool] * len(subnets))
|
||||
self._test_atomic_action_timer(
|
||||
neutron_scenario.atomic_actions(),
|
||||
"neutron.create_%s_pools" % len(subnets))
|
||||
|
||||
@ddt.data(
|
||||
{"subnet_id": "foo-id"},
|
||||
{"pool_create_args": None, "subnet_id": "foo-id"},
|
||||
{"pool_create_args": {}, "subnet_id": "foo-id"},
|
||||
{"pool_create_args": {"name": "given-name"},
|
||||
"subnet_id": "foo-id"},
|
||||
{"subnet_id": "foo-id", "atomic_action": False},
|
||||
{"pool_create_args": None, "subnet_id": "foo-id",
|
||||
"atomic_action": False},
|
||||
{"pool_create_args": {}, "subnet_id": "foo-id",
|
||||
"atomic_action": False},
|
||||
{"pool_create_args": {"name": "given-name"},
|
||||
"subnet_id": "foo-id", "atomic_action": False},
|
||||
)
|
||||
@ddt.unpack
|
||||
def test__create_lb_pool(self, subnet_id=None, atomic_action=True,
|
||||
pool_create_args=None):
|
||||
neutron_scenario = utils.NeutronScenario()
|
||||
pool = {"pool": {"id": "pool-id"}}
|
||||
pool_create_args = pool_create_args or {}
|
||||
if pool_create_args.get("name") is None:
|
||||
neutron_scenario._generate_random_name = mock.Mock(
|
||||
return_value="random_name")
|
||||
self.clients("neutron").create_pool.return_value = pool
|
||||
args = {"lb_method": "ROUND_ROBIN", "protocol": "HTTP",
|
||||
"name": "random_name", "subnet_id": subnet_id}
|
||||
args.update(pool_create_args)
|
||||
expected_pool_data = {"pool": args}
|
||||
resultant_pool = neutron_scenario._create_lb_pool(
|
||||
subnet_id=subnet_id, atomic_action=atomic_action,
|
||||
**pool_create_args)
|
||||
self.assertEqual(resultant_pool, pool)
|
||||
self.clients("neutron").create_pool.assert_called_once_with(
|
||||
expected_pool_data)
|
||||
if atomic_action:
|
||||
self._test_atomic_action_timer(
|
||||
neutron_scenario.atomic_actions(), "neutron.create_pool")
|
||||
|
Loading…
Reference in New Issue
Block a user