Add Neutron benchmarks scenario for creating and listing ports
Scenario NeutronNetworks.create_and_list_ports is added, which does the following: - creates network - creates a given number of ports - lists ports blueprint benchmark-scenarios-for-neutron Change-Id: I029f220dd70beb0c248877bd4bd718dfa63aba40
This commit is contained in:
28
doc/samples/tasks/neutron/create_and_list_ports.json
Normal file
28
doc/samples/tasks/neutron/create_and_list_ports.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"NeutronNetworks.create_and_list_ports": [
|
||||||
|
{
|
||||||
|
"args": {
|
||||||
|
"network_create_args": {},
|
||||||
|
"port_create_args": {},
|
||||||
|
"ports_per_network": 10
|
||||||
|
},
|
||||||
|
"runner": {
|
||||||
|
"type": "constant",
|
||||||
|
"times": 100,
|
||||||
|
"concurrency": 10
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"users": {
|
||||||
|
"tenants": 1,
|
||||||
|
"users_per_tenant": 1
|
||||||
|
},
|
||||||
|
"quotas": {
|
||||||
|
"neutron": {
|
||||||
|
"network": -1,
|
||||||
|
"port": -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
19
doc/samples/tasks/neutron/create_and_list_ports.yaml
Normal file
19
doc/samples/tasks/neutron/create_and_list_ports.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
NeutronNetworks.create_and_list_ports:
|
||||||
|
-
|
||||||
|
args:
|
||||||
|
network_create_args:
|
||||||
|
port_create_args:
|
||||||
|
ports_per_network: 10
|
||||||
|
runner:
|
||||||
|
type: "constant"
|
||||||
|
times: 100
|
||||||
|
concurrency: 10
|
||||||
|
context:
|
||||||
|
users:
|
||||||
|
tenants: 1
|
||||||
|
users_per_tenant: 1
|
||||||
|
quotas:
|
||||||
|
neutron:
|
||||||
|
network: -1
|
||||||
|
port: -1
|
@@ -91,3 +91,22 @@
|
|||||||
network: -1
|
network: -1
|
||||||
subnet: -1
|
subnet: -1
|
||||||
router: -1
|
router: -1
|
||||||
|
|
||||||
|
NeutronNetworks.create_and_list_ports:
|
||||||
|
-
|
||||||
|
args:
|
||||||
|
network_create_args:
|
||||||
|
port_create_args:
|
||||||
|
ports_per_network: 5
|
||||||
|
runner:
|
||||||
|
type: "constant"
|
||||||
|
times: 100
|
||||||
|
concurrency: 10
|
||||||
|
context:
|
||||||
|
users:
|
||||||
|
tenants: 1
|
||||||
|
users_per_tenant: 1
|
||||||
|
quotas:
|
||||||
|
neutron:
|
||||||
|
network: -1
|
||||||
|
port: -1
|
||||||
|
@@ -93,3 +93,21 @@ class NeutronNetworks(utils.NeutronScenario):
|
|||||||
{"subnet_id": subnet["subnet"]["id"]})
|
{"subnet_id": subnet["subnet"]["id"]})
|
||||||
|
|
||||||
self._list_routers()
|
self._list_routers()
|
||||||
|
|
||||||
|
@base.scenario(context={"cleanup": ["neutron"]})
|
||||||
|
@validation.add(validation.required_parameters(["ports_per_network"]))
|
||||||
|
def create_and_list_ports(self,
|
||||||
|
network_create_args=None,
|
||||||
|
port_create_args=None,
|
||||||
|
ports_per_network=None):
|
||||||
|
"""Test creating and listing a given number of ports.
|
||||||
|
|
||||||
|
:param network_create_args: dict, POST /v2.0/networks request options
|
||||||
|
:param port_create_args: dict, POST /v2.0/ports request options
|
||||||
|
:param ports_per_network: int, number of ports for one network
|
||||||
|
"""
|
||||||
|
network = self._create_network(network_create_args or {})
|
||||||
|
for i in range(ports_per_network):
|
||||||
|
self._create_port(network, port_create_args or {})
|
||||||
|
|
||||||
|
self._list_ports()
|
||||||
|
@@ -103,3 +103,21 @@ class NeutronScenario(base.Scenario):
|
|||||||
def _list_routers(self):
|
def _list_routers(self):
|
||||||
"""Returns user routers list."""
|
"""Returns user routers list."""
|
||||||
return self.clients("neutron").list_routers()["routers"]
|
return self.clients("neutron").list_routers()["routers"]
|
||||||
|
|
||||||
|
@scenario_utils.atomic_action_timer('neutron.create_port')
|
||||||
|
def _create_port(self, network, port_create_args):
|
||||||
|
"""Create neutron port.
|
||||||
|
|
||||||
|
:param network: neutron network dict
|
||||||
|
:param port_create_args: POST /v2.0/ports request options
|
||||||
|
:returns: neutron port dict
|
||||||
|
"""
|
||||||
|
port_create_args["network_id"] = network["network"]["id"]
|
||||||
|
port_create_args.setdefault(
|
||||||
|
"name", self._generate_random_name("rally_port_"))
|
||||||
|
return self.clients("neutron").create_port({"port": port_create_args})
|
||||||
|
|
||||||
|
@scenario_utils.atomic_action_timer('neutron.list_ports')
|
||||||
|
def _list_ports(self):
|
||||||
|
"""Return user ports list."""
|
||||||
|
return self.clients("neutron").list_ports()["ports"]
|
||||||
|
@@ -30,17 +30,20 @@ class CleanupUtilsTestCase(test.TestCase):
|
|||||||
network1 = scenario._create_network({})
|
network1 = scenario._create_network({})
|
||||||
subnet1 = scenario._create_subnet(network1, {})
|
subnet1 = scenario._create_subnet(network1, {})
|
||||||
router1 = scenario._create_router({})
|
router1 = scenario._create_router({})
|
||||||
|
# This also creates a port
|
||||||
neutron.add_interface_router(router1["router"]["id"],
|
neutron.add_interface_router(router1["router"]["id"],
|
||||||
{"subnet_id": subnet1["subnet"]["id"]})
|
{"subnet_id": subnet1["subnet"]["id"]})
|
||||||
network2 = scenario._create_network({})
|
network2 = scenario._create_network({})
|
||||||
scenario._create_subnet(network2, {})
|
scenario._create_subnet(network2, {})
|
||||||
scenario._create_router({})
|
scenario._create_router({})
|
||||||
|
scenario._create_port(network2, {})
|
||||||
|
|
||||||
total = lambda neutron: (len(neutron.list_networks()["networks"])
|
total = lambda neutron: (len(neutron.list_networks()["networks"])
|
||||||
+ len(neutron.list_subnets()["subnets"])
|
+ len(neutron.list_subnets()["subnets"])
|
||||||
+ len(neutron.list_routers()["routers"]))
|
+ len(neutron.list_routers()["routers"])
|
||||||
|
+ len(neutron.list_ports()["ports"]))
|
||||||
|
|
||||||
self.assertEqual(total(neutron), 6)
|
self.assertEqual(total(neutron), 8)
|
||||||
|
|
||||||
utils.delete_neutron_resources(neutron,
|
utils.delete_neutron_resources(neutron,
|
||||||
network1["network"]["tenant_id"])
|
network1["network"]["tenant_id"])
|
||||||
|
@@ -164,3 +164,44 @@ class NeutronNetworksTestCase(test.TestCase):
|
|||||||
] * subnets_per_network)
|
] * subnets_per_network)
|
||||||
|
|
||||||
mock_list.assert_called_once_with()
|
mock_list.assert_called_once_with()
|
||||||
|
|
||||||
|
@mock.patch(NEUTRON_NETWORKS + "._generate_random_name")
|
||||||
|
@mock.patch(NEUTRON_NETWORKS + "._list_ports")
|
||||||
|
@mock.patch(NEUTRON_NETWORKS + "._create_port")
|
||||||
|
@mock.patch(NEUTRON_NETWORKS + "._create_network")
|
||||||
|
def test_create_and_list_ports(self,
|
||||||
|
mock_create_network,
|
||||||
|
mock_create_port,
|
||||||
|
mock_list,
|
||||||
|
mock_random_name):
|
||||||
|
scenario = network.NeutronNetworks()
|
||||||
|
mock_random_name.return_value = "random-name"
|
||||||
|
net = {"network": {"id": "fake-id"}}
|
||||||
|
mock_create_network.return_value = net
|
||||||
|
ports_per_network = 10
|
||||||
|
|
||||||
|
self.assertRaises(TypeError, scenario.create_and_list_ports)
|
||||||
|
|
||||||
|
mock_create_network.reset_mock()
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
scenario.create_and_list_ports(ports_per_network=ports_per_network)
|
||||||
|
mock_create_network.assert_called_once_with({})
|
||||||
|
self.assertEqual(mock_create_port.mock_calls,
|
||||||
|
[mock.call(net, {})] * ports_per_network)
|
||||||
|
mock_list.assert_called_once_with()
|
||||||
|
|
||||||
|
mock_create_network.reset_mock()
|
||||||
|
mock_create_port.reset_mock()
|
||||||
|
mock_list.reset_mock()
|
||||||
|
|
||||||
|
# Custom options
|
||||||
|
scenario.create_and_list_ports(
|
||||||
|
network_create_args={"name": "given-name"},
|
||||||
|
port_create_args={"allocation_pools": []},
|
||||||
|
ports_per_network=ports_per_network)
|
||||||
|
mock_create_network.assert_called_once_with({"name": "given-name"})
|
||||||
|
self.assertEqual(
|
||||||
|
mock_create_port.mock_calls,
|
||||||
|
[mock.call(net, {"allocation_pools": []})] * ports_per_network)
|
||||||
|
mock_list.assert_called_once_with()
|
||||||
|
@@ -187,3 +187,45 @@ class NeutronScenarioTestCase(test.TestCase):
|
|||||||
|
|
||||||
# All CIDRs must be valid
|
# All CIDRs must be valid
|
||||||
map(netaddr.IPNetwork, cidrs1 + cidrs2)
|
map(netaddr.IPNetwork, cidrs1 + cidrs2)
|
||||||
|
|
||||||
|
@mock.patch(NEUTRON_UTILS + "NeutronScenario._generate_random_name")
|
||||||
|
@mock.patch(NEUTRON_UTILS + "NeutronScenario.clients")
|
||||||
|
def test_create_port(self, mock_clients, mock_rand_name):
|
||||||
|
scenario = utils.NeutronScenario()
|
||||||
|
|
||||||
|
net_id = "network-id"
|
||||||
|
net = {"network": {"id": net_id}}
|
||||||
|
rand_name = "random-name"
|
||||||
|
mock_rand_name.return_value = rand_name
|
||||||
|
expected_port_args = {
|
||||||
|
"port": {
|
||||||
|
"network_id": net_id,
|
||||||
|
"name": rand_name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
port_create_args = {}
|
||||||
|
scenario._create_port(net, port_create_args)
|
||||||
|
mock_clients("neutron"
|
||||||
|
).create_port.assert_called_once_with(expected_port_args)
|
||||||
|
self._test_atomic_action_timer(scenario.atomic_actions(),
|
||||||
|
"neutron.create_port")
|
||||||
|
|
||||||
|
mock_clients("neutron").create_port.reset_mock()
|
||||||
|
|
||||||
|
# Custom options
|
||||||
|
port_args = {"admin_state_up": True}
|
||||||
|
expected_port_args["port"].update(port_args)
|
||||||
|
scenario._create_port(net, port_args)
|
||||||
|
mock_clients("neutron"
|
||||||
|
).create_port.assert_called_once_with(expected_port_args)
|
||||||
|
|
||||||
|
@mock.patch(NEUTRON_UTILS + "NeutronScenario.clients")
|
||||||
|
def test_list_ports(self, mock_clients):
|
||||||
|
scenario = utils.NeutronScenario()
|
||||||
|
ports = [{"name": "port1"}, {"name": "port2"}]
|
||||||
|
mock_clients("neutron").list_ports.return_value = {"ports": ports}
|
||||||
|
self.assertEqual(ports, scenario._list_ports())
|
||||||
|
self._test_atomic_action_timer(scenario.atomic_actions(),
|
||||||
|
"neutron.list_ports")
|
||||||
|
Reference in New Issue
Block a user