Merge "Add NeutronNetworks.create_and_show_ports scenario"
This commit is contained in:
commit
3d0bd5b2bf
@ -230,6 +230,29 @@
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NeutronNetworks.create_and_show_ports:
|
||||
-
|
||||
args:
|
||||
network_create_args: {}
|
||||
port_create_args: {}
|
||||
ports_per_network: 2
|
||||
runner:
|
||||
type: "constant"
|
||||
times: {{smoke or 5}}
|
||||
concurrency: {{smoke or 2}}
|
||||
context:
|
||||
network: {}
|
||||
users:
|
||||
tenants: {{smoke or 2}}
|
||||
users_per_tenant: {{smoke or 2}}
|
||||
quotas:
|
||||
neutron:
|
||||
network: -1
|
||||
port: -1
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NeutronNetworks.create_and_update_networks:
|
||||
-
|
||||
args:
|
||||
|
@ -16,6 +16,7 @@
|
||||
from rally import consts
|
||||
from rally.plugins.openstack import scenario
|
||||
from rally.plugins.openstack.scenarios.neutron import utils
|
||||
from rally.task import atomic
|
||||
from rally.task import validation
|
||||
|
||||
|
||||
@ -320,6 +321,42 @@ class CreateAndUpdatePorts(utils.NeutronScenario):
|
||||
self._update_port(port, port_update_args)
|
||||
|
||||
|
||||
@validation.number("ports_per_network", minval=1, integer_only=True)
|
||||
@validation.required_services(consts.Service.NEUTRON)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["neutron"]},
|
||||
name="NeutronNetworks.create_and_show_ports")
|
||||
class CreateAndShowPorts(utils.NeutronScenario):
|
||||
|
||||
def run(self, network_create_args=None,
|
||||
port_create_args=None, ports_per_network=1):
|
||||
"""Create a given number of ports and show created ports in trun.
|
||||
|
||||
Measure the "neutron port-create" and "neutron port-show" commands
|
||||
performance.
|
||||
|
||||
: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_create_args = network_create_args or {}
|
||||
port_create_args = port_create_args or {}
|
||||
|
||||
network = self._get_or_create_network(network_create_args)
|
||||
with atomic.ActionTimer(self, "neutron.create_and_show_%i_ports" %
|
||||
ports_per_network):
|
||||
for i in range(ports_per_network):
|
||||
port = self._create_port(network, port_create_args)
|
||||
msg = "Port isn't created"
|
||||
self.assertTrue(port, err_msg=msg)
|
||||
|
||||
port_info = self._show_port(port)
|
||||
msg = "Created port and Showed port isn't equal"
|
||||
self.assertEqual(port["port"]["id"], port_info["port"]["id"],
|
||||
err_msg=msg)
|
||||
|
||||
|
||||
@validation.required_parameters("ports_per_network")
|
||||
@validation.required_services(consts.Service.NEUTRON)
|
||||
@scenario.configure(context={"cleanup": ["neutron"]},
|
||||
|
@ -253,6 +253,16 @@ class NeutronScenario(scenario.OpenStackScenario):
|
||||
"""Return user ports list."""
|
||||
return self.clients("neutron").list_ports()["ports"]
|
||||
|
||||
@atomic.action_timer("neutron.show_port")
|
||||
def _show_port(self, port, **params):
|
||||
"""Return user port details.
|
||||
|
||||
:param port: dict, neutron port
|
||||
:param params: neutron port show options
|
||||
:returns: neutron port dict
|
||||
"""
|
||||
return self.clients("neutron").show_port(port["port"]["id"], **params)
|
||||
|
||||
@atomic.action_timer("neutron.update_port")
|
||||
def _update_port(self, port, port_update_args):
|
||||
"""Update the neutron port.
|
||||
|
34
samples/tasks/scenarios/neutron/create-and-show-ports.json
Normal file
34
samples/tasks/scenarios/neutron/create-and-show-ports.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"NeutronNetworks.create_and_show_ports": [
|
||||
{
|
||||
"args": {
|
||||
"network_create_args": {},
|
||||
"port_create_args": {},
|
||||
"ports_per_network": 2
|
||||
},
|
||||
"runner": {
|
||||
"type": "constant",
|
||||
"times": 5,
|
||||
"concurrency": 2
|
||||
},
|
||||
"context": {
|
||||
"network": {},
|
||||
"users": {
|
||||
"tenants": 2,
|
||||
"users_per_tenant": 2
|
||||
},
|
||||
"quotas": {
|
||||
"neutron": {
|
||||
"network": -1,
|
||||
"port": -1
|
||||
}
|
||||
}
|
||||
},
|
||||
"sla": {
|
||||
"failure_rate": {
|
||||
"max": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
23
samples/tasks/scenarios/neutron/create-and-show-ports.yaml
Normal file
23
samples/tasks/scenarios/neutron/create-and-show-ports.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
NeutronNetworks.create_and_show_ports:
|
||||
-
|
||||
args:
|
||||
network_create_args: {}
|
||||
port_create_args: {}
|
||||
ports_per_network: 2
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 5
|
||||
concurrency: 2
|
||||
context:
|
||||
network: {}
|
||||
users:
|
||||
tenants: 2
|
||||
users_per_tenant: 2
|
||||
quotas:
|
||||
neutron:
|
||||
network: -1
|
||||
port: -1
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
@ -16,6 +16,7 @@
|
||||
import ddt
|
||||
import mock
|
||||
|
||||
from rally import exceptions as rally_exceptions
|
||||
from rally.plugins.openstack.scenarios.neutron import network
|
||||
from tests.unit import test
|
||||
|
||||
@ -352,6 +353,69 @@ class NeutronNetworksTestCase(test.ScenarioTestCase):
|
||||
scenario._update_port.assert_has_calls(
|
||||
[mock.call(p, port_update_args) for p in ports])
|
||||
|
||||
def test_create_and_show_ports_positive(self):
|
||||
port_create_args = {"allocation_pools": []}
|
||||
ports_per_network = 1
|
||||
network_create_args = {"router:external": True}
|
||||
net = mock.MagicMock()
|
||||
|
||||
scenario = network.CreateAndShowPorts(self.context)
|
||||
scenario._get_or_create_network = mock.MagicMock(return_value=net)
|
||||
scenario._create_port = mock.MagicMock()
|
||||
scenario._show_port = mock.MagicMock()
|
||||
port = {"port": {"id": 1, "name": "f"}}
|
||||
port_info = {"port": {"id": 1, "name": "f", "status": "ACTIVE"}}
|
||||
scenario._show_port.return_value = port_info
|
||||
|
||||
# Positive case:
|
||||
scenario._create_port.return_value = port
|
||||
scenario.run(network_create_args=network_create_args,
|
||||
port_create_args=port_create_args,
|
||||
ports_per_network=ports_per_network)
|
||||
scenario._get_or_create_network.assert_called_once_with(
|
||||
network_create_args)
|
||||
scenario._create_port.assert_called_with(net, port_create_args)
|
||||
scenario._show_port.assert_called_with(port)
|
||||
|
||||
def test_create_and_show_ports_negative(self):
|
||||
port_create_args = {"allocation_pools": []}
|
||||
ports_per_network = 1
|
||||
network_create_args = {"router:external": True}
|
||||
net = mock.MagicMock()
|
||||
|
||||
scenario = network.CreateAndShowPorts(self.context)
|
||||
scenario._get_or_create_network = mock.MagicMock(return_value=net)
|
||||
scenario._create_port = mock.MagicMock()
|
||||
scenario._show_port = mock.MagicMock()
|
||||
|
||||
# Negative case1: port isn't created
|
||||
scenario._create_port.return_value = None
|
||||
self.assertRaises(rally_exceptions.RallyAssertionError,
|
||||
scenario.run,
|
||||
network_create_args,
|
||||
port_create_args,
|
||||
ports_per_network)
|
||||
scenario._get_or_create_network.assert_called_once_with(
|
||||
network_create_args)
|
||||
scenario._create_port.assert_called_once_with(net, port_create_args)
|
||||
|
||||
# Negative case2: port isn't show
|
||||
port = {"port": {"id": 1, "name": "f1"}}
|
||||
port_info = {"port": {"id": 2, "name": "f2", "status": "ACTIVE"}}
|
||||
scenario._show_port.return_value = port_info
|
||||
scenario._create_port.return_value = port
|
||||
|
||||
self.assertRaises(rally_exceptions.RallyAssertionError,
|
||||
scenario.run,
|
||||
network_create_args,
|
||||
port_create_args,
|
||||
ports_per_network)
|
||||
|
||||
scenario._get_or_create_network.assert_called_with(
|
||||
network_create_args)
|
||||
scenario._create_port.assert_called_with(net, port_create_args)
|
||||
scenario._show_port.assert_called_with(port)
|
||||
|
||||
def test_create_and_delete_ports(self):
|
||||
port_create_args = {"allocation_pools": []}
|
||||
ports_per_network = 10
|
||||
|
@ -379,6 +379,21 @@ class NeutronScenarioTestCase(test.ScenarioTestCase):
|
||||
self._test_atomic_action_timer(self.scenario.atomic_actions(),
|
||||
"neutron.list_ports")
|
||||
|
||||
def test_show_port(self):
|
||||
expect_port = {
|
||||
"port": {
|
||||
"id": "port-id",
|
||||
"name": "port-name",
|
||||
"admin_state_up": True
|
||||
}
|
||||
}
|
||||
self.clients("neutron").show_port.return_value = expect_port
|
||||
self.assertEqual(expect_port, self.scenario._show_port(expect_port))
|
||||
self.clients("neutron").show_port.assert_called_once_with(
|
||||
expect_port["port"]["id"])
|
||||
self._test_atomic_action_timer(self.scenario.atomic_actions(),
|
||||
"neutron.show_port")
|
||||
|
||||
def test_update_port(self):
|
||||
expected_port = {
|
||||
"port": {
|
||||
|
Loading…
Reference in New Issue
Block a user