Add nova.CreateFlavorAndAddTenantAccess scenario

create a flavor and add flavor access to
given tenant.

Change-Id: I2b483bc3fc62dffb837f79c755159a00cbb757c2
This commit is contained in:
zhangzhang 2016-10-25 02:09:08 -04:00
parent a2dba3c333
commit 4d9a6d4b27
7 changed files with 134 additions and 1 deletions

View File

@ -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:

View File

@ -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"]},

View File

@ -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.

View File

@ -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
}
}
}
]
}

View File

@ -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

View File

@ -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()

View File

@ -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")