Add nova.CreateFlavorAndAddTenantAccess scenario
create a flavor and add flavor access to given tenant. Change-Id: I2b483bc3fc62dffb837f79c755159a00cbb757c2
This commit is contained in:
parent
a2dba3c333
commit
4d9a6d4b27
@ -1154,6 +1154,24 @@
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NovaFlavors.create_flavor_and_add_tenant_access:
|
||||
-
|
||||
args:
|
||||
ram: 500
|
||||
vcpus : 1
|
||||
disk: 1
|
||||
runner:
|
||||
type: "constant"
|
||||
concurrency: 2
|
||||
times: 10
|
||||
context:
|
||||
users:
|
||||
tenants: 2
|
||||
users_per_tenant: 2
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NovaServers.boot_and_update_server:
|
||||
-
|
||||
args:
|
||||
|
@ -71,6 +71,25 @@ class CreateAndListFlavorAccess(utils.NovaScenario):
|
||||
self._list_flavor_access(flavor.id)
|
||||
|
||||
|
||||
@validation.required_services(consts.Service.NOVA)
|
||||
@validation.required_openstack(admin=True)
|
||||
@scenario.configure(context={"admin_cleanup": ["nova"]},
|
||||
name="NovaFlavors.create_flavor_and_add_tenant_access")
|
||||
class CreateFlavorAndAddTenantAccess(utils.NovaScenario):
|
||||
|
||||
def run(self, ram, vcpus, disk, **kwargs):
|
||||
"""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
|
||||
"""
|
||||
flavor = self._create_flavor(ram, vcpus, disk, **kwargs)
|
||||
self.assertTrue(flavor)
|
||||
self._add_tenant_access(flavor.id, self.context["tenant"]["id"])
|
||||
|
||||
|
||||
@validation.required_services(consts.Service.NOVA)
|
||||
@validation.required_openstack(admin=True)
|
||||
@scenario.configure(context={"admin_cleanup": ["nova"]},
|
||||
|
@ -1068,6 +1068,17 @@ class NovaScenario(scenario.OpenStackScenario):
|
||||
"""
|
||||
return self.admin_clients("nova").flavor_access.list(flavor=flavor)
|
||||
|
||||
@atomic.action_timer("nova.add_tenant_access")
|
||||
def _add_tenant_access(self, flavor, tenant):
|
||||
"""Add a tenant to the given flavor access list.
|
||||
|
||||
:param flavor: name or id of the object flavor
|
||||
:param tenant: id of the object tenant
|
||||
:returns: access rules for flavor instance or flavor ID
|
||||
"""
|
||||
return self.admin_clients("nova").flavor_access.add_tenant_access(
|
||||
flavor, tenant)
|
||||
|
||||
@atomic.action_timer("nova.update_server")
|
||||
def _update_server(self, server, description=None):
|
||||
"""update the server's name and description.
|
||||
|
@ -0,0 +1,27 @@
|
||||
{
|
||||
"NovaFlavors.create_flavor_and_add_tenant_access": [
|
||||
{
|
||||
"runner": {
|
||||
"type": "constant",
|
||||
"concurrency": 2,
|
||||
"times": 10
|
||||
},
|
||||
"args": {
|
||||
"ram": 500,
|
||||
"vcpus" : 1,
|
||||
"disk": 1
|
||||
},
|
||||
"context": {
|
||||
"users": {
|
||||
"tenants": 2,
|
||||
"users_per_tenant": 2
|
||||
}
|
||||
},
|
||||
"sla": {
|
||||
"failure_rate": {
|
||||
"max": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
---
|
||||
NovaFlavors.create_flavor_and_add_tenant_access:
|
||||
-
|
||||
runner:
|
||||
type: "constant"
|
||||
concurrency: 2
|
||||
times: 10
|
||||
args:
|
||||
ram: 500
|
||||
vcpus : 1
|
||||
disk: 1
|
||||
context:
|
||||
users:
|
||||
tenants: 2
|
||||
users_per_tenant: 2
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
@ -63,6 +63,31 @@ class NovaFlavorsTestCase(test.TestCase):
|
||||
is_public=False,
|
||||
**kwargs)
|
||||
|
||||
def test_create_flavor_add_tenant_access(self, **kwargs):
|
||||
flavor = mock.MagicMock()
|
||||
context = {"user": {"tenant_id": "fake"},
|
||||
"tenant": {"id": "fake"}}
|
||||
scenario = flavors.CreateFlavorAndAddTenantAccess()
|
||||
scenario.context = context
|
||||
scenario.generate_random_name = mock.MagicMock()
|
||||
scenario._create_flavor = mock.MagicMock(return_value=flavor)
|
||||
scenario._add_tenant_access = mock.MagicMock()
|
||||
|
||||
# Positive case:
|
||||
scenario.run(ram=100, vcpus=1, disk=1, **kwargs)
|
||||
|
||||
scenario._create_flavor.assert_called_once_with(100, 1, 1,
|
||||
**kwargs)
|
||||
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)
|
||||
|
||||
def test_create_flavor(self):
|
||||
scenario = flavors.CreateFlavor()
|
||||
scenario._create_flavor = mock.MagicMock()
|
||||
|
@ -1054,6 +1054,20 @@ class NovaScenarioTestCase(test.ScenarioTestCase):
|
||||
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
|
||||
"nova.list_flavor_access")
|
||||
|
||||
def test__add_tenant_access(self):
|
||||
tenant = mock.Mock()
|
||||
flavor = mock.Mock()
|
||||
nova_scenario = utils.NovaScenario()
|
||||
admin_clients = self.admin_clients("nova")
|
||||
result = nova_scenario._add_tenant_access(flavor.id, tenant.id)
|
||||
self.assertEqual(
|
||||
admin_clients.flavor_access.add_tenant_access.return_value,
|
||||
result)
|
||||
admin_clients.flavor_access.add_tenant_access.assert_called_once_with(
|
||||
flavor.id, tenant.id)
|
||||
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
|
||||
"nova.add_tenant_access")
|
||||
|
||||
def test__create_flavor(self):
|
||||
nova_scenario = utils.NovaScenario()
|
||||
random_name = "random_name"
|
||||
@ -1213,4 +1227,4 @@ class NovaScenarioTestCase(test.ScenarioTestCase):
|
||||
"nova").aggregates.set_metadata.assert_called_once_with(
|
||||
"fake_aggregate", fake_metadata)
|
||||
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
|
||||
"nova.aggregate_set_metadata")
|
||||
"nova.aggregate_set_metadata")
|
||||
|
Loading…
x
Reference in New Issue
Block a user