Merge "Additional checks for ceilometers and designate scenarios"

This commit is contained in:
Jenkins
2017-01-10 10:32:03 +00:00
committed by Gerrit Code Review
16 changed files with 256 additions and 57 deletions

View File

@@ -17,7 +17,6 @@ Scenarios for Ceilometer Events API.
"""
from rally import consts
from rally import exceptions
from rally.plugins.openstack import scenario
from rally.plugins.openstack.scenarios.ceilometer import utils as cutils
from rally.plugins.openstack.scenarios.keystone import basic as kbasic
@@ -45,10 +44,9 @@ class CeilometerEventsCreateUserAndListEvents(cutils.CeilometerScenario,
"""
self.admin_keystone.create_user()
events = self._list_events()
if not events:
raise exceptions.RallyException(
"Events list is empty, but it should include at least one "
"event about user creation")
msg = ("Events list is empty, but it should include at least one "
"event about user creation")
self.assertTrue(events, msg)
@validation.required_services(consts.Service.CEILOMETER,
@@ -68,10 +66,9 @@ class CeilometerEventsCreateUserAndListEventTypes(cutils.CeilometerScenario,
"""
self.admin_keystone.create_user()
event_types = self._list_event_types()
if not event_types:
raise exceptions.RallyException(
"Event types list is empty, but it should include at least one"
" type about user creation")
msg = ("Event types list is empty, but it should include at least one"
" type about user creation")
self.assertTrue(event_types, msg)
@validation.required_services(consts.Service.CEILOMETER,
@@ -91,9 +88,7 @@ class CeilometerEventsCreateUserAndGetEvent(cutils.CeilometerScenario,
"""
self.admin_keystone.create_user()
events = self._list_events()
if not events:
raise exceptions.RallyException(
"Events list is empty, but it should include at least one "
"event about user creation")
event = events[0]
self._get_event(event_id=event.message_id)
msg = ("Events list is empty, but it should include at least one "
"event about user creation")
self.assertTrue(events, msg)
self._get_event(event_id=events[0].message_id)

View File

@@ -13,7 +13,6 @@
# under the License.
from rally import consts
from rally import exceptions
from rally.plugins.openstack import scenario
from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils
from rally.task import validation
@@ -67,10 +66,9 @@ class GetTenantResources(ceiloutils.CeilometerScenario):
GET /v2/resources/(resource_id)
"""
resources = self.context["tenant"].get("resources", [])
if not resources:
msg = ("No resources found for tenant: %s"
% self.context["tenant"].get("name"))
raise exceptions.NotFoundException(message=msg)
msg = ("No resources found for tenant: %s"
% self.context["tenant"].get("name"))
self.assertTrue(resources, msg)
for res_id in resources:
self._get_resource(res_id)

View File

@@ -42,8 +42,11 @@ class CreateAndListDomains(utils.DesignateScenario):
performance of the "designate domain-list" command depending on
the number of domains owned by users.
"""
self._create_domain()
self._list_domains()
domain = self._create_domain()
msg = "Domain isn't created"
self.assertTrue(domain, msg)
list_domains = self._list_domains()
self.assertIn(domain, list_domains)
@validation.required_services(consts.Service.DESIGNATE)
@@ -170,11 +173,14 @@ class CreateAndListRecords(utils.DesignateScenario):
domain = self._create_domain()
key = "designate.create_%s_records" % records_per_domain
records = []
with atomic.ActionTimer(self, key):
for i in range(records_per_domain):
self._create_record(domain, atomic_action=False)
records.append(
self._create_record(domain, atomic_action=False))
self._list_records(domain["id"])
list_records = self._list_records(domain["id"])
self.assertEqual(records, list_records)
@validation.required_services(consts.Service.DESIGNATE)
@@ -192,8 +198,10 @@ class CreateAndListServers(utils.DesignateScenario):
performance of the "designate server-list" command depending on
the number of servers owned by users.
"""
self._create_server()
self._list_servers()
server = self._create_server()
self.assertTrue(server)
list_servers = self._list_servers()
self.assertIn(server, list_servers)
@validation.required_services(consts.Service.DESIGNATE)
@@ -245,8 +253,10 @@ class CreateAndListZones(utils.DesignateScenario):
performance of the "openstack zone list" command depending on
the number of zones owned by users.
"""
self._create_zone()
self._list_zones()
zone = self._create_zone()
self.assertTrue(zone)
list_zones = self._list_zones()
self.assertIn(zone, list_zones)
@validation.required_services(consts.Service.DESIGNATE)

View File

@@ -51,11 +51,13 @@ class CreateAndListImage(utils.GlanceScenario, nova_utils.NovaScenario):
ami, ari, aki, vhd, vmdk, raw, qcow2, vdi, and iso
:param kwargs: optional parameters to create image
"""
self._create_image(container_format,
image_location,
disk_format,
**kwargs)
self._list_images()
image = self._create_image(container_format,
image_location,
disk_format,
**kwargs)
self.assertTrue(image)
image_list = self._list_images()
self.assertIn(image.id, [i.id for i in image_list])
@validation.required_services(consts.Service.GLANCE)
@@ -137,6 +139,5 @@ class CreateImageAndBootInstances(utils.GlanceScenario,
image_location,
disk_format,
**create_image_kwargs)
image_id = image.id
self._boot_servers(image_id, flavor, number_instances,
self._boot_servers(image.id, flavor, number_instances,
**boot_server_kwargs)

View File

@@ -44,8 +44,11 @@ class CreateAndListStack(utils.HeatScenario):
:param files: files used in template
:param environment: stack environment definition
"""
self._create_stack(template_path, parameters, files, environment)
self._list_stacks()
stack = self._create_stack(template_path, parameters,
files, environment)
self.assertTrue(stack)
list_stacks = self._list_stacks()
self.assertIn(stack.id, [i.id for i in list_stacks])
@validation.required_services(consts.Service.HEAT)

View File

@@ -61,11 +61,12 @@ class CreateAndListNode(utils.IronicScenario):
:param kwargs: Optional additional arguments for node creation
"""
self._create_node(**kwargs)
self._list_nodes(
node = self._create_node(**kwargs)
self.assertTrue(node)
list_nodes = self._list_nodes(
associated=associated, maintenance=maintenance, marker=marker,
limit=limit, detail=detail, sort_key=sort_key, sort_dir=sort_dir)
self.assertIn(node, list_nodes)
@validation.required_parameters("driver")

View File

@@ -153,6 +153,7 @@ class CreateAndListUsers(KeystoneBasic):
:param kwargs: Other optional parameters to create users like
"tenant_id", "enabled".
"""
kwargs.pop("name", None)
self.admin_keystone.create_user(**kwargs)
self.admin_keystone.list_users()

View File

@@ -61,5 +61,8 @@ class CreateAndListClusters(utils.MagnumScenario):
cluster_template_uuid = kwargs.get("cluster_template_uuid", None)
if cluster_template_uuid is None:
cluster_template_uuid = self.context["tenant"]["cluster_template"]
self._create_cluster(cluster_template_uuid, node_count, **kwargs)
self._list_clusters(**kwargs)
cluster = self._create_cluster(cluster_template_uuid,
node_count, **kwargs)
self.assertTrue(cluster)
list_clusters = self._list_clusters(**kwargs)
self.assertIn(cluster, list_clusters)

View File

@@ -104,4 +104,4 @@ class CeilometerResourcesTestCase(test.ScenarioTestCase):
context = {"user": {"tenant_id": "fake"},
"tenant": {"id": "fake", "resources": resource_list}}
scenario.context = context
self.assertRaises(exceptions.NotFoundException, scenario.run)
self.assertRaises(exceptions.RallyAssertionError, scenario.run)

View File

@@ -16,6 +16,7 @@
import mock
from rally import exceptions
from rally.plugins.openstack.scenarios.designate import basic
from tests.unit import test
@@ -29,10 +30,31 @@ class DesignateBasicTestCase(test.ScenarioTestCase):
def test_create_and_list_domains(self,
mock__create_domain,
mock__list_domains):
mock__create_domain.return_value = "fake_domain.xyz"
mock__list_domains.return_value = (["fake_domain.org",
"fake_domain.xyz",
"ultimate_question.net"])
basic.CreateAndListDomains(self.context).run()
mock__create_domain.assert_called_once_with()
mock__list_domains.assert_called_once_with()
@mock.patch("%s.CreateAndListDomains._list_domains" % BASE)
@mock.patch("%s.CreateAndListDomains._create_domain" % BASE)
def test_create_and_list_domains_fails(self,
mock__create_domain,
mock__list_domains):
mock__list_domains.return_value = (["fake_domain.org",
"fake_domain.xyz",
"ultimate_question.net"])
scenario = basic.CreateAndListDomains(self.context)
self.assertRaises(exceptions.RallyAssertionError, scenario.run)
mock__create_domain.assert_called_once_with()
mock__create_domain.return_value = "fake_not_existed_domain.xyz"
self.assertRaises(exceptions.RallyAssertionError, scenario.run)
mock__create_domain.assert_called_with()
mock__list_domains.assert_called_with()
@mock.patch("%s.CreateAndDeleteDomain._delete_domain" % BASE)
@mock.patch("%s.CreateAndDeleteDomain._create_domain" % BASE,
return_value={"id": "123"})
@@ -76,12 +98,16 @@ class DesignateBasicTestCase(test.ScenarioTestCase):
"id": "123"}
mock__create_domain.return_value = domain
records_per_domain = 5
return_value = mock.call(domain, atomic_action=False)
mock__create_record.return_value = return_value
mock__list_records.return_value = [return_value] * records_per_domain
basic.CreateAndListRecords(self.context).run(
records_per_domain=records_per_domain)
mock__create_domain.assert_called_once_with()
self.assertEqual(mock__create_record.mock_calls,
[mock.call(domain, atomic_action=False)]
[return_value]
* records_per_domain)
mock__list_records.assert_called_once_with(domain["id"])
@@ -122,11 +148,32 @@ class DesignateBasicTestCase(test.ScenarioTestCase):
def test_create_and_list_servers(self,
mock__create_server,
mock__list_servers):
mock__create_server.return_value = "fake_server"
mock__list_servers.return_value = ["fake_srv1",
"fake_srv2",
"fake_server"]
# Positive case:
basic.CreateAndListServers(self.context).run()
mock__create_server.assert_called_once_with()
mock__list_servers.assert_called_once_with()
# Negative case: server isn't created
mock__create_server.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
basic.CreateAndListServers(self.context).run)
mock__create_server.assert_called_with()
# Negative case: server not found in the list of existed servers
mock__create_server.return_value = "The_main_server_of_the_universe"
self.assertRaises(exceptions.RallyAssertionError,
basic.CreateAndListServers(self.context).run)
mock__create_server.assert_called_with()
mock__list_servers.assert_called_with()
@mock.patch("%s.CreateAndDeleteServer._delete_server" % BASE)
@mock.patch("%s.CreateAndDeleteServer._create_server" % BASE,
return_value={"id": "123"})
@@ -149,10 +196,28 @@ class DesignateBasicTestCase(test.ScenarioTestCase):
def test_create_and_list_zones(self,
mock__create_zone,
mock__list_zones):
mock__create_zone.return_value = "Area_51"
mock__list_zones.return_value = ["Area_51",
"Siachen",
"Bagram"]
# Positive case:
basic.CreateAndListZones(self.context).run()
mock__create_zone.assert_called_once_with()
mock__list_zones.assert_called_once_with()
# Negative case: zone isn't created
mock__create_zone.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
basic.CreateAndListZones(self.context).run)
mock__create_zone.assert_called_with()
# Negative case: created zone not in the list of available zones
mock__create_zone.return_value = "HAARP"
self.assertRaises(exceptions.RallyAssertionError,
basic.CreateAndListZones(self.context).run)
mock__create_zone.assert_called_with()
mock__list_zones.assert_called_with()
@mock.patch("%s.CreateAndDeleteZone._delete_zone" % BASE)
@mock.patch("%s.CreateAndDeleteZone._create_zone" % BASE,
return_value={"id": "123"})

View File

@@ -15,6 +15,7 @@
import mock
from rally import exceptions
from rally.plugins.openstack.scenarios.glance import images
from tests.unit import fakes
from tests.unit import test
@@ -26,18 +27,43 @@ class GlanceImagesTestCase(test.ScenarioTestCase):
@mock.patch("%s.CreateAndListImage._list_images" % BASE)
@mock.patch("%s.CreateAndListImage._create_image" % BASE)
@mock.patch("%s.CreateAndListImage.generate_random_name" % BASE,
return_value="test-rally-image")
def test_create_and_list_image(self,
mock_random_name,
mock_create_image,
mock_list_images):
fake_image = fakes.FakeImage(id=1, name="img_name1")
mock_create_image.return_value = fake_image
mock_list_images.return_value = [
fakes.FakeImage(id=0, name="img_name1"),
fake_image,
fakes.FakeImage(id=2, name="img_name1")
]
# Positive case
images.CreateAndListImage(self.context).run(
"cf", "url", "df", fakearg="f")
mock_create_image.assert_called_once_with(
"cf", "url", "df", fakearg="f")
mock_list_images.assert_called_once_with()
# Negative case: image isn't created
mock_create_image.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
images.CreateAndListImage(self.context).run,
"cf", "url", "df", fakearg="f")
mock_create_image.assert_called_with(
"cf", "url", "df", fakearg="f")
# Negative case: created image n ot in the list of available images
mock_create_image.return_value = fakes.FakeImage(
id=12, name="img_nameN")
self.assertRaises(exceptions.RallyAssertionError,
images.CreateAndListImage(self.context).run,
"cf", "url", "df", fakearg="f")
mock_create_image.assert_called_with(
"cf", "url", "df", fakearg="f")
mock_list_images.assert_called_with()
@mock.patch("%s.ListImages._list_images" % BASE)
def test_list_images(self, mock_list_images__list_images):
images.ListImages(self.context).run()

View File

@@ -15,6 +15,7 @@
import mock
from rally import exceptions
from rally.plugins.openstack.scenarios.heat import stacks
from tests.unit import test
@@ -33,12 +34,14 @@ class HeatStacksTestCase(test.ScenarioTestCase):
@mock.patch("%s.CreateAndListStack._list_stacks" % BASE)
@mock.patch("%s.CreateAndListStack._create_stack" % BASE)
@mock.patch("%s.CreateAndListStack.generate_random_name" % BASE,
return_value="test-rally-stack")
def test_create_and_list_stack(self,
mock_generate_random_name,
mock__create_stack,
mock__list_stacks):
stack = mock.Mock()
mock__create_stack.return_value = stack
mock__list_stacks.return_value = [stack] * 3
# Positive case:
stacks.CreateAndListStack(self.context).run(
template_path=self.default_template,
parameters=self.default_parameters,
@@ -50,6 +53,34 @@ class HeatStacksTestCase(test.ScenarioTestCase):
self.default_files, self.default_environment)
mock__list_stacks.assert_called_once_with()
# Negative case1: stack isn't created
mock__create_stack.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
stacks.CreateAndListStack(self.context).run,
template_path=self.default_template,
parameters=self.default_parameters,
files=self.default_files,
environment=self.default_environment)
mock__create_stack.assert_called_with(
self.default_template, self.default_parameters,
self.default_files, self.default_environment)
# Negative case2: created stack not in the list of available stacks
fake_stack = mock.Mock()
mock__create_stack.return_value = fake_stack
self.assertRaises(exceptions.RallyAssertionError,
stacks.CreateAndListStack(self.context).run,
template_path=self.default_template,
parameters=self.default_parameters,
files=self.default_files,
environment=self.default_environment)
mock__create_stack.assert_called_with(
self.default_template, self.default_parameters,
self.default_files, self.default_environment)
mock__list_stacks.assert_called_with()
@mock.patch("%s.ListStacksAndResources._list_stacks" % BASE)
def test_list_stack_and_resources(self, mock__list_stacks):
stack = mock.Mock()

View File

@@ -15,6 +15,7 @@
import mock
from rally import exceptions
from rally.plugins.openstack.scenarios.ironic import nodes
from tests.unit import test
@@ -23,8 +24,10 @@ class IronicNodesTestCase(test.ScenarioTestCase):
def test_create_and_list_node(self):
scenario = nodes.CreateAndListNode(self.context)
scenario._create_node = mock.Mock()
scenario._list_nodes = mock.Mock()
scenario._create_node = mock.Mock(return_value="node_obj1")
scenario._list_nodes = mock.Mock(return_value=["node_obj1",
"node_obj2",
"node_obj3"])
fake_params = {
"sort_dir": "foo1",
"associated": "foo2",
@@ -35,6 +38,8 @@ class IronicNodesTestCase(test.ScenarioTestCase):
"marker": "foo6",
"fake_parameter1": "foo7"
}
# Positive case:
scenario.run(**fake_params)
scenario._create_node.assert_called_once_with(fake_parameter1="foo7")
@@ -42,6 +47,25 @@ class IronicNodesTestCase(test.ScenarioTestCase):
sort_dir="foo1", associated="foo2", sort_key="foo3", detail=True,
limit="foo4", maintenance="foo5", marker="foo6")
# Negative case1: node isn't created
scenario._create_node = mock.Mock(return_value=None)
self.assertRaises(exceptions.RallyAssertionError,
scenario.run,
**fake_params)
scenario._create_node.assert_called_with(fake_parameter1="foo7")
# Negative case2: cretaed node not in the list of available nodes
scenario._create_node = mock.Mock()
self.assertRaises(exceptions.RallyAssertionError,
scenario.run,
**fake_params)
scenario._create_node.assert_called_with(fake_parameter1="foo7")
scenario._list_nodes.assert_called_with(
sort_dir="foo1", associated="foo2", sort_key="foo3", detail=True,
limit="foo4", maintenance="foo5", marker="foo6")
def test_create_and_delete_node(self):
fake_node = mock.Mock(uuid="fake_uuid")
scenario = nodes.CreateAndDeleteNode(self.context)

View File

@@ -129,7 +129,6 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
def test_create_and_list_tenants(self):
identity_service = self.mock_identity.return_value
scenario = basic.CreateAndListTenants(self.context)
scenario.run(enabled=True)
identity_service.create_project.assert_called_once_with(enabled=True)
identity_service.list_projects.assert_called_once_with()

View File

@@ -15,6 +15,7 @@
import ddt
import mock
from rally import exceptions
from rally.plugins.openstack.scenarios.magnum import clusters
from tests.unit import test
@@ -50,24 +51,60 @@ class MagnumClustersTestCase(test.ScenarioTestCase):
"fakearg": "f"}
fake_cluster = mock.Mock()
scenario._create_cluster = mock.Mock(return_value=fake_cluster)
scenario._list_clusters = mock.Mock()
scenario._list_clusters = mock.Mock(return_value=[fake_cluster,
mock.Mock(),
mock.Mock()])
# Positive case
scenario.run(2, **kwargs)
scenario._create_cluster.assert_called_once_with(
"existing_cluster_template_uuid", 2, **kwargs)
scenario._list_clusters.assert_called_once_with(**kwargs)
# Negative case1: cluster isn't created
scenario._create_cluster.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
scenario.run, 2, **kwargs)
scenario._create_cluster.assert_called_with(
"existing_cluster_template_uuid", 2, **kwargs)
# Negative case2: created cluster not in the list of available clusters
scenario._create_cluster.return_value = mock.MagicMock()
self.assertRaises(exceptions.RallyAssertionError,
scenario.run, 2, **kwargs)
scenario._create_cluster.assert_called_with(
"existing_cluster_template_uuid", 2, **kwargs)
scenario._list_clusters.assert_called_with(**kwargs)
def test_create_and_list_clusters(self):
context = self._get_context()
scenario = clusters.CreateAndListClusters(context)
fake_cluster = mock.Mock()
kwargs = {"fakearg": "f"}
scenario._create_cluster = mock.Mock(return_value=fake_cluster)
scenario._list_clusters = mock.Mock()
scenario._list_clusters = mock.Mock(return_value=[fake_cluster,
mock.Mock(),
mock.Mock()])
# Positive case
scenario.run(2, **kwargs)
scenario._create_cluster.assert_called_once_with(
"rally_cluster_template_uuid", 2, **kwargs)
scenario._list_clusters.assert_called_once_with(**kwargs)
# Negative case1: cluster isn't created
scenario._create_cluster.return_value = None
self.assertRaises(exceptions.RallyAssertionError,
scenario.run, 2, **kwargs)
scenario._create_cluster.assert_called_with(
"rally_cluster_template_uuid", 2, **kwargs)
# Negative case2: created cluster not in the list of available clusters
scenario._create_cluster.return_value = mock.MagicMock()
self.assertRaises(exceptions.RallyAssertionError,
scenario.run, 2, **kwargs)
scenario._create_cluster.assert_called_with(
"rally_cluster_template_uuid", 2, **kwargs)
scenario._list_clusters.assert_called_with(**kwargs)

View File

@@ -106,8 +106,13 @@ class ManilaSharesTestCase(test.ScenarioTestCase):
)
def test_create_share_network_and_list(self, params):
scenario = shares.CreateShareNetworkAndList(self.context)
scenario._create_share_network = mock.MagicMock()
scenario._list_share_networks = mock.MagicMock()
fake_network = mock.Mock()
scenario._create_share_network = mock.Mock(
return_value=fake_network)
scenario._list_share_networks = mock.Mock(
return_value=[fake_network,
mock.Mock(),
mock.Mock()])
expected_create_params = {
"description": params.get("description"),
"neutron_net_id": params.get("neutron_net_id"),