Merge "[flavor]replace kwargs with details args"

This commit is contained in:
Jenkins 2017-05-26 00:32:44 +00:00 committed by Gerrit Code Review
commit b48ffccf06
2 changed files with 150 additions and 67 deletions

View File

@ -32,40 +32,61 @@ LOG = logging.getLogger(__name__)
@scenario.configure(name="NovaFlavors.list_flavors")
class ListFlavors(utils.NovaScenario):
def run(self, detailed=True, **kwargs):
def run(self, detailed=True, is_public=True, marker=None, min_disk=None,
min_ram=None, limit=None, sort_key=None, sort_dir=None):
"""List all flavors.
Measure the "nova flavor-list" command performance.
:param detailed: True if the flavor listing
should contain detailed information
:param kwargs: Optional additional arguments for flavor listing
:param detailed: Whether flavor needs to be return with details
(optional).
:param is_public: Filter flavors with provided access type (optional).
None means give all flavors and only admin has query
access to all flavor types.
:param marker: Begin returning flavors that appear later in the flavor
list than that represented by this flavor id (optional).
:param min_disk: Filters the flavors by a minimum disk space, in GiB.
:param min_ram: Filters the flavors by a minimum RAM, in MB.
:param limit: maximum number of flavors to return (optional).
:param sort_key: Flavors list sort key (optional).
:param sort_dir: Flavors list sort direction (optional).
"""
self._list_flavors(detailed, **kwargs)
self._list_flavors(detailed=detailed, is_public=is_public,
marker=marker, min_disk=min_disk, min_ram=min_ram,
limit=limit, sort_key=sort_key, sort_dir=sort_dir)
@validation.add("required_services", services=(consts.Service.NOVA))
@validation.add("required_services", services=[consts.Service.NOVA])
@validation.add("required_platform", platform="openstack", admin=True)
@scenario.configure(context={"admin_cleanup": ["nova"]},
name="NovaFlavors.create_and_list_flavor_access")
class CreateAndListFlavorAccess(utils.NovaScenario):
def run(self, ram, vcpus, disk, **kwargs):
def run(self, ram, vcpus, disk, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create a non-public flavor and list its access rules
:param ram: Memory in MB for the flavor
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
# NOTE(pirsriva): access rules can be listed
# only for non-public flavors
if kwargs.get("is_public", False):
if is_public:
LOG.warning(_LW("is_public cannot be set to True for listing "
"flavor access rules. Setting is_public to False"))
kwargs["is_public"] = False
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
is_public = False
flavor = self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
self.assertTrue(flavor)
self._list_flavor_access(flavor.id)
@ -77,15 +98,25 @@ class CreateAndListFlavorAccess(utils.NovaScenario):
name="NovaFlavors.create_flavor_and_add_tenant_access")
class CreateFlavorAndAddTenantAccess(utils.NovaScenario):
def run(self, ram, vcpus, disk, **kwargs):
def run(self, ram, vcpus, disk, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create a flavor and Add flavor access for the given tenant.
:param ram: Memory in MB for the flavor
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
flavor = self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
self.assertTrue(flavor)
self._add_tenant_access(flavor.id, self.context["tenant"]["id"])
@ -96,34 +127,53 @@ class CreateFlavorAndAddTenantAccess(utils.NovaScenario):
name="NovaFlavors.create_flavor")
class CreateFlavor(utils.NovaScenario):
def run(self, ram, vcpus, disk, **kwargs):
def run(self, ram, vcpus, disk, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create a flavor.
:param ram: Memory in MB for the flavor
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
self._create_flavor(ram, vcpus, disk, **kwargs)
self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
@validation.add("required_services", services=(consts.Service.NOVA))
@validation.add("required_services", services=[consts.Service.NOVA])
@validation.add("required_platform", platform="openstack", admin=True)
@scenario.configure(context={"admin_cleanup": ["nova"]},
name="NovaFlavors.create_and_get_flavor")
class CreateAndGetFlavor(utils.NovaScenario):
"""Scenario for create and get flavor."""
def run(self, ram, vcpus, disk, **kwargs):
def run(self, ram, vcpus, disk, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create flavor and get detailed information of the flavor.
:param ram: Memory in MB for the flavor
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
flavor = self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
self._get_flavor(flavor.id)
@ -132,16 +182,25 @@ class CreateAndGetFlavor(utils.NovaScenario):
@scenario.configure(context={"admin_cleanup": ["nova"]},
name="NovaFlavors.create_and_delete_flavor")
class CreateAndDeleteFlavor(utils.NovaScenario):
def run(self, ram, vcpus, disk, **kwargs):
def run(self, ram, vcpus, disk, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create flavor and delete the flavor.
:param ram: Memory in MB for the flavor
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
flavor = self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
self._delete_flavor(flavor.id)
@ -150,7 +209,8 @@ class CreateAndDeleteFlavor(utils.NovaScenario):
@scenario.configure(context={"admin_cleanup": ["nova"]},
name="NovaFlavors.create_flavor_and_set_keys")
class CreateFlavorAndSetKeys(utils.NovaScenario):
def run(self, ram, vcpus, disk, extra_specs, **kwargs):
def run(self, ram, vcpus, disk, extra_specs, flavorid="auto",
ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True):
"""Create flavor and set keys to the flavor.
Measure the "nova flavor-key" command performance.
@ -160,7 +220,16 @@ class CreateFlavorAndSetKeys(utils.NovaScenario):
:param vcpus: Number of VCPUs for the flavor
:param disk: Size of local disk in GB
:param extra_specs: additional arguments for flavor set keys
:param kwargs: Optional additional arguments for flavor creation
:param flavorid: ID for the flavor (optional). You can use the reserved
value ``"auto"`` to have Nova generate a UUID for the
flavor in cases where you cannot simply pass ``None``.
:param ephemeral: Ephemeral space size in GB (default 0).
:param swap: Swap space in MB
:param rxtx_factor: RX/TX factor
:param is_public: Make flavor accessible to the public (default true).
"""
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
flavor = self._create_flavor(ram, vcpus, disk, flavorid=flavorid,
ephemeral=ephemeral, swap=swap,
rxtx_factor=rxtx_factor,
is_public=is_public)
self._set_flavor_keys(flavor, extra_specs)

View File

@ -27,16 +27,13 @@ class NovaFlavorsTestCase(test.TestCase):
def test_list_flavors(self):
scenario = flavors.ListFlavors()
scenario._list_flavors = mock.Mock()
scenario.run(detailed=True, fakearg="fakearg")
scenario._list_flavors.assert_called_once_with(True, fakearg="fakearg")
scenario.run(detailed=True, is_public=True, limit=None, marker=None,
min_disk=None, min_ram=None, sort_dir=None, sort_key=None)
scenario._list_flavors.assert_called_once_with(
detailed=True, is_public=True, limit=None, marker=None,
min_disk=None, min_ram=None, sort_dir=None, sort_key=None)
@ddt.data({},
{"is_public": True},
{"is_public": False},
{"fakeargs": "fakeargs"},
{"is_public": False, "fakeargs": "fakeargs"})
@ddt.unpack
def test_create_and_list_flavor_access(self, **kwargs):
def test_create_and_list_flavor_access(self):
# Common parameters
ram = 100
vcpus = 1
@ -47,23 +44,25 @@ class NovaFlavorsTestCase(test.TestCase):
scenario._list_flavor_access = mock.Mock()
# Positive case:
scenario.run(ram, vcpus, disk, **kwargs)
kwargs.pop("is_public", None)
scenario._create_flavor.assert_called_once_with(ram, vcpus, disk,
is_public=False,
**kwargs)
scenario.run(
ram, vcpus, disk, ephemeral=0, flavorid="auto",
is_public=False, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(
ram, vcpus, disk, ephemeral=0, flavorid="auto",
is_public=False, rxtx_factor=1.0, swap=0)
scenario._list_flavor_access.assert_called_once_with(
scenario._create_flavor.return_value.id)
# Negative case1: flavor wasn't created
scenario._create_flavor.return_value = None
self.assertRaises(exceptions.RallyAssertionError, scenario.run,
ram, vcpus, disk, **kwargs)
scenario._create_flavor.assert_called_with(ram, vcpus, disk,
is_public=False,
**kwargs)
ram, vcpus, disk, ephemeral=0, flavorid="auto",
is_public=False, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_with(
ram, vcpus, disk, ephemeral=0, flavorid="auto",
is_public=False, rxtx_factor=1.0, swap=0)
def test_create_flavor_add_tenant_access(self, **kwargs):
def test_create_flavor_add_tenant_access(self):
flavor = mock.MagicMock()
context = {"user": {"tenant_id": "fake"},
"tenant": {"id": "fake"}}
@ -74,44 +73,56 @@ class NovaFlavorsTestCase(test.TestCase):
scenario._add_tenant_access = mock.MagicMock()
# Positive case:
scenario.run(ram=100, vcpus=1, disk=1, **kwargs)
scenario.run(ram=100, vcpus=1, disk=1, ephemeral=0,
flavorid="auto", is_public=True, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(100, 1, 1,
**kwargs)
scenario._create_flavor.assert_called_once_with(
100, 1, 1, ephemeral=0, flavorid="auto", is_public=True,
rxtx_factor=1.0, swap=0)
scenario._add_tenant_access.assert_called_once_with(flavor.id,
"fake")
# Negative case1: flavor wasn't created
scenario._create_flavor.return_value = None
self.assertRaises(exceptions.RallyAssertionError, scenario.run,
100, 1, 1, **kwargs)
scenario._create_flavor.assert_called_with(100, 1, 1,
**kwargs)
100, 1, 1, ephemeral=0, flavorid="auto",
is_public=True, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_with(
100, 1, 1, ephemeral=0, flavorid="auto", is_public=True,
rxtx_factor=1.0, swap=0)
def test_create_flavor(self):
scenario = flavors.CreateFlavor()
scenario._create_flavor = mock.MagicMock()
scenario.run(ram=100, vcpus=1, disk=1, fakeargs="fakeargs")
scenario._create_flavor.assert_called_once_with(100, 1, 1,
fakeargs="fakeargs")
scenario.run(ram=100, vcpus=1, disk=1, ephemeral=0, flavorid="auto",
is_public=True, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(
100, 1, 1, ephemeral=0,
flavorid="auto", is_public=True, rxtx_factor=1.0, swap=0)
def test_create_and_get_flavor(self, **kwargs):
scenario = flavors.CreateAndGetFlavor()
scenario._create_flavor = mock.Mock()
scenario._get_flavor = mock.Mock()
scenario.run(ram=100, vcpus=1, disk=1, **kwargs)
scenario.run(ram=100, vcpus=1, disk=1, ephemeral=0, flavorid="auto",
is_public=True, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(100, 1, 1, **kwargs)
scenario._create_flavor.assert_called_once_with(
100, 1, 1, ephemeral=0, flavorid="auto", is_public=True,
rxtx_factor=1.0, swap=0)
scenario._get_flavor.assert_called_once_with(
scenario._create_flavor.return_value.id)
def test_create_and_delete_flavor(self, **kwargs):
def test_create_and_delete_flavor(self):
scenario = flavors.CreateAndDeleteFlavor()
scenario._create_flavor = mock.Mock()
scenario._delete_flavor = mock.Mock()
scenario.run(ram=100, vcpus=1, disk=1, **kwargs)
scenario.run(ram=100, vcpus=1, disk=1, ephemeral=0, flavorid="auto",
is_public=True, rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(100, 1, 1, **kwargs)
scenario._create_flavor.assert_called_once_with(
100, 1, 1, ephemeral=0, flavorid="auto", is_public=True,
rxtx_factor=1.0, swap=0)
scenario._delete_flavor.assert_called_once_with(
scenario._create_flavor.return_value.id)
@ -120,10 +131,13 @@ class NovaFlavorsTestCase(test.TestCase):
scenario._create_flavor = mock.MagicMock()
scenario._set_flavor_keys = mock.MagicMock()
specs_args = {"fakeargs": "foo"}
scenario.run(ram=100, vcpus=1, disk=1, extra_specs=specs_args,
fakeargs="fakeargs")
scenario.run(
ram=100, vcpus=1, disk=1, extra_specs=specs_args,
ephemeral=0, flavorid="auto", is_public=True,
rxtx_factor=1.0, swap=0)
scenario._create_flavor.assert_called_once_with(100, 1, 1,
fakeargs="fakeargs")
scenario._create_flavor.assert_called_once_with(
100, 1, 1, ephemeral=0, flavorid="auto",
is_public=True, rxtx_factor=1.0, swap=0)
scenario._set_flavor_keys.assert_called_once_with(
scenario._create_flavor.return_value, specs_args)