Add NovaServerGroups.create_and_get_server_group

Create a server group, then get its detailed information.

Measure the "nova server-group-create" and "nova server-group-get"
command performance.

Change-Id: I865fda72b88af017caba96be1b11183d7ca804e9
This commit is contained in:
maxinjian 2017-02-22 04:51:36 -05:00
parent 3ace05f34a
commit 00a5b34787
7 changed files with 167 additions and 0 deletions

View File

@ -181,6 +181,25 @@
failure_rate: failure_rate:
max: 0 max: 0
NovaServerGroups.create_and_get_server_group:
{% for s in (["affinity"], ["anti-affinity"]) %}
-
args:
kwargs:
policies: {{s}}
runner:
type: "constant"
times: 4
concurrency: 2
context:
users:
tenants: 2
users_per_tenant: 2
sla:
failure_rate:
max: 0
{% endfor %}
NovaServerGroups.create_and_list_server_groups: NovaServerGroups.create_and_list_server_groups:
{% for s in (["affinity"], ["anti-affinity"]) %} {% for s in (["affinity"], ["anti-affinity"]) %}
- -

View File

@ -53,3 +53,26 @@ class CreateAndListServerGroups(utils.NovaScenario):
"list of server groups: {}").format(server_group, "list of server groups: {}").format(server_group,
server_groups_list) server_groups_list)
self.assertIn(server_group, server_groups_list, err_msg=msg) self.assertIn(server_group, server_groups_list, err_msg=msg)
@validation.required_services(consts.Service.NOVA)
@validation.required_openstack(users=True)
@scenario.configure(context={"cleanup": ["nova"]},
name="NovaServerGroups.create_and_get_server_group")
class CreateAndGetServerGroup(utils.NovaScenario):
def run(self, kwargs=None):
"""Create a server group, then get its detailed information.
Measure the "nova server-group-create" and "nova server-group-get"
command performance.
:param kwargs: Server group name and policy
"""
kwargs["name"] = self.generate_random_name()
server_group = self._create_server_group(**kwargs)
msg = ("Server Groups isn't created")
self.assertTrue(server_group, err_msg=msg)
server_group_info = self._get_server_group(server_group.id)
self.assertEqual(server_group.id, server_group_info.id)

View File

@ -466,6 +466,16 @@ class NovaScenario(scenario.OpenStackScenario):
""" """
return self.clients("nova").server_groups.create(**kwargs) return self.clients("nova").server_groups.create(**kwargs)
@atomic.action_timer("nova.get_server_group")
def _get_server_group(self, id):
"""Get a specific server group.
:param id: Unique ID of the server group to get
:rtype: :class:`ServerGroup`
"""
return self.clients("nova").server_groups.get(id)
@atomic.action_timer("nova.list_server_groups") @atomic.action_timer("nova.list_server_groups")
def _list_server_groups(self, all_projects=False): def _list_server_groups(self, all_projects=False):
"""Get a list of all server groups. """Get a list of all server groups.

View File

@ -0,0 +1,29 @@
{
"NovaServerGroups.create_and_get_server_group": [
{
"args": {
"kwargs": {
"policies": [
"affinity"
]
}
},
"runner": {
"type": "constant",
"times": 4,
"concurrency": 2
},
"context": {
"users": {
"tenants": 2,
"users_per_tenant": 2
}
},
"sla": {
"failure_rate": {
"max": 0
}
}
}
]
}

View File

@ -0,0 +1,16 @@
NovaServerGroups.create_and_get_server_group:
-
args:
kwargs:
policies: ["affinity"]
runner:
type: "constant"
times: 4
concurrency: 2
context:
users:
tenants: 2
users_per_tenant: 2
sla:
failure_rate:
max: 0

View File

@ -60,3 +60,61 @@ class NovaServerGroupsTestCase(test.ScenarioTestCase):
kwargs=create_args) kwargs=create_args)
scenario._create_server_group.assert_called_with(**create_args) scenario._create_server_group.assert_called_with(**create_args)
scenario._list_server_groups.assert_called_with(all_projects) scenario._list_server_groups.assert_called_with(all_projects)
@ddt.data(
{},
{"create_args": {"policies": ["fake_policy"]}}
)
@ddt.unpack
def test_create_and_get_server_group_positive(self, create_args=None):
scenario = server_groups.CreateAndGetServerGroup(self.context)
gen_name = mock.MagicMock()
scenario.generate_random_name = gen_name
fake_server_group = mock.MagicMock()
fake_server_group_info = mock.MagicMock()
fake_server_group.id = 123
fake_server_group_info.id = 123
scenario._create_server_group = mock.MagicMock()
scenario._get_server_group = mock.MagicMock()
create_args = create_args or {}
# Positive case
scenario._create_server_group.return_value = fake_server_group
scenario._get_server_group.return_value = fake_server_group_info
scenario.run(create_args)
scenario._create_server_group.assert_called_once_with(**create_args)
scenario._get_server_group.assert_called_once_with(
fake_server_group.id)
@ddt.data(
{},
{"create_args": {"policies": ["fake_policy"]}}
)
@ddt.unpack
def test_create_and_get_server_group_negative(self, create_args=None):
scenario = server_groups.CreateAndGetServerGroup(self.context)
gen_name = mock.MagicMock()
scenario.generate_random_name = gen_name
fake_server_group = mock.MagicMock()
fake_server_group_info = mock.MagicMock()
fake_server_group.id = 123
fake_server_group_info.id = 123
scenario._create_server_group = mock.MagicMock()
scenario._get_server_group = mock.MagicMock()
create_args = create_args or {}
# Negative case1: server group isn't created
scenario._create_server_group.return_value = None
self.assertRaises(rally_exceptions.RallyAssertionError,
scenario.run,
create_args)
scenario._create_server_group.assert_called_with(**create_args)
# Negative case2: server group to get information not the created one
fake_server_group_info.id = 456
scenario._create_server_group.return_value = fake_server_group
self.assertRaises(rally_exceptions.RallyAssertionError,
scenario.run,
create_args)
scenario._create_server_group.assert_called_with(**create_args)
scenario._get_server_group.assert_called_with(
fake_server_group.id)

View File

@ -806,6 +806,18 @@ class NovaScenarioTestCase(test.ScenarioTestCase):
self._test_atomic_action_timer(nova_scenario.atomic_actions(), self._test_atomic_action_timer(nova_scenario.atomic_actions(),
"nova.create_keypair") "nova.create_keypair")
def test__get_server_group(self):
nova_scenario = utils.NovaScenario()
fakeid = 12345
result = nova_scenario._get_server_group(fakeid)
self.assertEqual(
self.clients("nova").server_groups.get.return_value,
result)
self.clients("nova").server_groups.get.assert_called_once_with(
fakeid)
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
"nova.get_server_group")
def test__create_server_group(self): def test__create_server_group(self):
nova_scenario = utils.NovaScenario() nova_scenario = utils.NovaScenario()
result = nova_scenario._create_server_group(fakeargs="fakeargs") result = nova_scenario._create_server_group(fakeargs="fakeargs")