Merge "[flavor]replace kwargs with details args"
This commit is contained in:
commit
b48ffccf06
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue