Merge "Port Senlin and others scenarios to new style"
This commit is contained in:
commit
66d4ffa078
@ -153,7 +153,9 @@ class BaseCustomImageGenerator(context.Context):
|
||||
flavor_id = types.Flavor.transform(
|
||||
clients=clients, resource_config=self.config["flavor"])
|
||||
|
||||
vm_scenario = vmtasks.VMTasks(self.context, clients=clients)
|
||||
vm_scenario = vmtasks.BootRuncommandDeleteCustomImage(
|
||||
self.context,
|
||||
clients=clients)
|
||||
|
||||
glance_wrap = glance_wrapper.wrap(admin_clients.glance, self)
|
||||
|
||||
|
@ -16,15 +16,18 @@ from rally.plugins.openstack.scenarios.senlin import utils
|
||||
from rally.task import validation
|
||||
|
||||
|
||||
class SenlinClusters(utils.SenlinScenario):
|
||||
"""Benchmark scenarios for Senlin clusters."""
|
||||
"""Scenarios for Senlin clusters."""
|
||||
|
||||
@validation.required_openstack(admin=True)
|
||||
@validation.required_services(consts.Service.SENLIN)
|
||||
@validation.required_contexts("profiles")
|
||||
@scenario.configure(context={"cleanup": ["senlin"]})
|
||||
def create_and_delete_cluster(self, desired_capacity=0, min_size=0,
|
||||
max_size=-1, timeout=3600, metadata=None):
|
||||
|
||||
@validation.required_openstack(admin=True)
|
||||
@validation.required_services(consts.Service.SENLIN)
|
||||
@validation.required_contexts("profiles")
|
||||
@scenario.configure(context={"cleanup": ["senlin"]},
|
||||
name="SenlinClusters.create_and_delete_cluster")
|
||||
class CreateAndDeleteCluster(utils.SenlinScenario):
|
||||
|
||||
def run(self, desired_capacity=0, min_size=0,
|
||||
max_size=-1, timeout=3600, metadata=None):
|
||||
"""Create a cluster and then delete it.
|
||||
|
||||
Measure the "senlin cluster-create" and "senlin cluster-delete"
|
||||
@ -38,7 +41,8 @@ class SenlinClusters(utils.SenlinScenario):
|
||||
:param timeout: The timeout value in seconds for cluster creation
|
||||
:param metadata: A set of key value pairs to associate with the cluster
|
||||
"""
|
||||
|
||||
profile_id = self.context["tenant"]["profile"]
|
||||
cluster = self._create_cluster(profile_id, desired_capacity,
|
||||
min_size, max_size, timeout, metadata)
|
||||
self._delete_cluster(cluster)
|
||||
self._delete_cluster(cluster)
|
@ -22,15 +22,17 @@ from rally.task import atomic
|
||||
from rally.task import validation
|
||||
|
||||
|
||||
class SwiftObjects(utils.SwiftScenario):
|
||||
"""Benchmark scenarios for Swift Objects."""
|
||||
"""Scenarios for Swift Objects."""
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]})
|
||||
def create_container_and_object_then_list_objects(
|
||||
self, objects_per_container=1,
|
||||
object_size=1024, **kwargs):
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]},
|
||||
name="SwiftObjects.create_container"
|
||||
"_and_object_then_list_objects")
|
||||
class CreateContainerAndObjectThenListObjects(utils.SwiftScenario):
|
||||
|
||||
def run(self, objects_per_container=1, object_size=1024, **kwargs):
|
||||
"""Create container and objects then list all objects.
|
||||
|
||||
:param objects_per_container: int, number of objects to upload
|
||||
@ -53,12 +55,15 @@ class SwiftObjects(utils.SwiftScenario):
|
||||
atomic_action=False)
|
||||
self._list_objects(container_name)
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]})
|
||||
def create_container_and_object_then_delete_all(
|
||||
self, objects_per_container=1,
|
||||
object_size=1024, **kwargs):
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]},
|
||||
name="SwiftObjects.create_container"
|
||||
"_and_object_then_delete_all")
|
||||
class CreateContainerAndObjectThenDeleteAll(utils.SwiftScenario):
|
||||
|
||||
def run(self, objects_per_container=1, object_size=1024, **kwargs):
|
||||
"""Create container and objects then delete everything created.
|
||||
|
||||
:param objects_per_container: int, number of objects to upload
|
||||
@ -89,12 +94,15 @@ class SwiftObjects(utils.SwiftScenario):
|
||||
atomic_action=False)
|
||||
self._delete_container(container_name)
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]})
|
||||
def create_container_and_object_then_download_object(
|
||||
self, objects_per_container=1,
|
||||
object_size=1024, **kwargs):
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["swift"]},
|
||||
name="SwiftObjects.create_container"
|
||||
"_and_object_then_download_object")
|
||||
class CreateContainerAndObjectThenDownloadObject(utils.SwiftScenario):
|
||||
|
||||
def run(self, objects_per_container=1, object_size=1024, **kwargs):
|
||||
"""Create container and objects then download all objects.
|
||||
|
||||
:param objects_per_container: int, number of objects to upload
|
||||
@ -124,11 +132,16 @@ class SwiftObjects(utils.SwiftScenario):
|
||||
self._download_object(container_name, object_name,
|
||||
atomic_action=False)
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"swift_objects": {}})
|
||||
def list_objects_in_containers(self):
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"swift_objects": {}},
|
||||
name="SwiftObjects.list_objects_in_containers")
|
||||
class ListObjectsInContainers(utils.SwiftScenario):
|
||||
|
||||
def run(self):
|
||||
"""List objects in all containers."""
|
||||
|
||||
containers = self._list_containers()[1]
|
||||
|
||||
key_suffix = "container"
|
||||
@ -139,11 +152,17 @@ class SwiftObjects(utils.SwiftScenario):
|
||||
for container in containers:
|
||||
self._list_objects(container["name"], atomic_action=False)
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"swift_objects": {}})
|
||||
def list_and_download_objects_in_containers(self):
|
||||
|
||||
@validation.required_services(consts.Service.SWIFT)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"swift_objects": {}},
|
||||
name="SwiftObjects.list_and_"
|
||||
"download_objects_in_containers")
|
||||
class ListAndDownloadObjectsInContainers(utils.SwiftScenario):
|
||||
|
||||
def run(self):
|
||||
"""List and download objects in all containers."""
|
||||
|
||||
containers = self._list_containers()[1]
|
||||
|
||||
list_key_suffix = "container"
|
||||
@ -169,4 +188,4 @@ class SwiftObjects(utils.SwiftScenario):
|
||||
for container_name, objects in objects_dict.items():
|
||||
for obj in objects:
|
||||
self._download_object(container_name, obj["name"],
|
||||
atomic_action=False)
|
||||
atomic_action=False)
|
@ -27,46 +27,36 @@ from rally.task import atomic
|
||||
from rally.task import types
|
||||
from rally.task import validation
|
||||
|
||||
|
||||
"""Scenarios that are to be run inside VM instances."""
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class VMTasks(vm_utils.VMScenario):
|
||||
"""Benchmark scenarios that are to be run inside VM instances."""
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.image_valid_on_flavor("flavor", "image")
|
||||
@validation.valid_command("command")
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
"keypair": {}, "allow_ssh": {}},
|
||||
name="VMTasks.boot_runcommand_delete")
|
||||
class BootRuncommandDelete(vm_utils.VMScenario):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(VMTasks, self).__init__(*args, **kwargs)
|
||||
super(BootRuncommandDelete, self).__init__(*args, **kwargs)
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.image_valid_on_flavor("flavor", "image")
|
||||
@validation.valid_command("command")
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
"keypair": {}, "allow_ssh": {}})
|
||||
def boot_runcommand_delete(self, image, flavor,
|
||||
username,
|
||||
password=None,
|
||||
command=None,
|
||||
volume_args=None,
|
||||
floating_network=None,
|
||||
port=22,
|
||||
use_floating_ip=True,
|
||||
force_delete=False,
|
||||
wait_for_ping=True,
|
||||
max_log_length=None,
|
||||
**kwargs):
|
||||
def run(self, image, flavor, username, password=None, command=None,
|
||||
volume_args=None, floating_network=None, port=22,
|
||||
use_floating_ip=True, force_delete=False, wait_for_ping=True,
|
||||
max_log_length=None, **kwargs):
|
||||
"""Boot a server, run script specified in command and delete server.
|
||||
|
||||
Example Script in samples/tasks/support/instance_dd_test.sh
|
||||
|
||||
The script to be executed is provided like command['remote_path'] or
|
||||
command['local_path'] and interpreter in command['interpreter']
|
||||
respectively.
|
||||
|
||||
:param image: glance image name to use for the vm
|
||||
:param flavor: VM flavor name
|
||||
:param username: ssh username on server, str
|
||||
@ -223,46 +213,60 @@ class VMTasks(vm_utils.VMScenario):
|
||||
for chart in charts:
|
||||
self.add_output(**{chart_type: chart})
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.valid_command("command")
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("image_command_customizer")
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
"keypair": {}, "allow_ssh": {}})
|
||||
def boot_runcommand_delete_custom_image(self, **kwargs):
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.valid_command("command")
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("image_command_customizer")
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
"keypair": {}, "allow_ssh": {}},
|
||||
name="VMTasks.boot_runcommand_delete_custom_image")
|
||||
class BootRuncommandDeleteCustomImage(vm_utils.VMScenario):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(BootRuncommandDeleteCustomImage, self).__init__(*args, **kwargs)
|
||||
|
||||
def run(self, **kwargs):
|
||||
"""Boot a server from a custom image, run a command that outputs JSON.
|
||||
|
||||
Example Script in rally-jobs/extra/install_benchmark.sh
|
||||
"""
|
||||
|
||||
return self.boot_runcommand_delete(
|
||||
boot_runcommand_delete = BootRuncommandDelete(self.context)
|
||||
return boot_runcommand_delete.run(
|
||||
image=self.context["tenant"]["custom_image"]["id"], **kwargs)
|
||||
|
||||
@scenario.configure(context={"cleanup": ["nova", "heat"],
|
||||
"keypair": {}, "network": {}})
|
||||
def runcommand_heat(self, workload, template, files, parameters):
|
||||
|
||||
@scenario.configure(context={"cleanup": ["nova", "heat"],
|
||||
"keypair": {}, "network": {}},
|
||||
name="VMTasks.runcommand_heat")
|
||||
class RuncommandHeat(vm_utils.VMScenario):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(RuncommandHeat, self).__init__(*args, **kwargs)
|
||||
|
||||
def run(self, workload, template, files, parameters):
|
||||
"""Run workload on stack deployed by heat.
|
||||
|
||||
Workload can be either file or resource:
|
||||
Workload can be either file or resource:
|
||||
|
||||
.. code-block: json
|
||||
.. code-block: json
|
||||
|
||||
{"file": "/path/to/file.sh"}
|
||||
{"resource": ["package.module", "workload.py"]}
|
||||
{"file": "/path/to/file.sh"}
|
||||
{"resource": ["package.module", "workload.py"]}
|
||||
|
||||
Also it should contain "username" key.
|
||||
Also it should contain "username" key.
|
||||
|
||||
Given file will be uploaded to `gate_node` and started. This script
|
||||
should print `key` `value` pairs separated by colon. These pairs will
|
||||
be presented in results.
|
||||
Given file will be uploaded to `gate_node` and started. This script
|
||||
should print `key` `value` pairs separated by colon. These pairs will
|
||||
be presented in results.
|
||||
|
||||
Gate node should be accessible via ssh with keypair `key_name`, so
|
||||
heat template should accept parameter `key_name`.
|
||||
Gate node should be accessible via ssh with keypair `key_name`, so
|
||||
heat template should accept parameter `key_name`.
|
||||
|
||||
:param workload: workload to run
|
||||
:param template: path to heat template file
|
||||
@ -310,4 +314,4 @@ class VMTasks(vm_utils.VMScenario):
|
||||
"data": {
|
||||
"cols": ["key", "value"],
|
||||
"rows": rows}}
|
||||
)
|
||||
)
|
@ -17,15 +17,18 @@ from rally.task import types
|
||||
from rally.task import validation
|
||||
|
||||
|
||||
class Watcher(utils.WatcherScenario):
|
||||
"""Benchmark scenarios for Watcher servers."""
|
||||
"""Scenarios for Watcher servers."""
|
||||
|
||||
@types.convert(strategy={"type": "watcher_strategy"},
|
||||
goal={"type": "watcher_goal"})
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@validation.required_openstack(admin=True)
|
||||
@scenario.configure(context={"admin_cleanup": ["watcher"]})
|
||||
def create_audit_template_and_delete(self, goal, strategy, extra=None):
|
||||
|
||||
@types.convert(strategy={"type": "watcher_strategy"},
|
||||
goal={"type": "watcher_goal"})
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@validation.required_openstack(admin=True)
|
||||
@scenario.configure(context={"admin_cleanup": ["watcher"]},
|
||||
name="Watcher.create_audit_template_and_delete")
|
||||
class CreateAuditTemplateAndDelete(utils.WatcherScenario):
|
||||
|
||||
def run(self, goal, strategy, extra=None):
|
||||
"""Create audit template and delete it.
|
||||
|
||||
:param goal: The goal audit template is based on
|
||||
@ -39,11 +42,14 @@ class Watcher(utils.WatcherScenario):
|
||||
audit_template = self._create_audit_template(goal, strategy, extra)
|
||||
self._delete_audit_template(audit_template.uuid)
|
||||
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@scenario.configure()
|
||||
def list_audit_templates(self, name=None, goal=None, strategy=None,
|
||||
limit=None, sort_key=None, sort_dir=None,
|
||||
detail=False):
|
||||
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@scenario.configure(name="Watcher.list_audit_templates")
|
||||
class ListAuditTemplates(utils.WatcherScenario):
|
||||
|
||||
def run(self, name=None, goal=None, strategy=None,
|
||||
limit=None, sort_key=None, sort_dir=None,
|
||||
detail=False):
|
||||
"""List existing audit templates.
|
||||
|
||||
Audit templates are being created by Audit Template Context.
|
||||
@ -69,10 +75,14 @@ class Watcher(utils.WatcherScenario):
|
||||
limit=limit, sort_key=sort_key,
|
||||
sort_dir=sort_dir, detail=detail)
|
||||
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@validation.required_contexts("audit_templates")
|
||||
@scenario.configure(context={"admin_cleanup": ["watcher"]})
|
||||
def create_audit_and_delete(self):
|
||||
|
||||
@validation.required_services(consts.Service.WATCHER)
|
||||
@validation.required_contexts("audit_templates")
|
||||
@scenario.configure(context={"admin_cleanup": ["watcher"]},
|
||||
name="Watcher.create_audit_and_delete")
|
||||
class CreateAuditAndDelete(utils.WatcherScenario):
|
||||
|
||||
def run(self):
|
||||
"""Create and delete audit.
|
||||
|
||||
Create Audit, wait until whether Audit is in SUCCEEDED state or in
|
||||
@ -81,4 +91,4 @@ class Watcher(utils.WatcherScenario):
|
||||
|
||||
audit_template_uuid = self.context["audit_templates"][0]
|
||||
audit = self._create_audit(audit_template_uuid)
|
||||
self._delete_audit(audit)
|
||||
self._delete_audit(audit)
|
@ -19,14 +19,17 @@ from rally.plugins.openstack import scenario
|
||||
from rally.plugins.openstack.scenarios.zaqar import utils as zutils
|
||||
|
||||
|
||||
class ZaqarBasic(zutils.ZaqarScenario):
|
||||
"""Benchmark scenarios for Zaqar."""
|
||||
"""Scenarios for Zaqar."""
|
||||
|
||||
|
||||
@scenario.configure(context={"cleanup": ["zaqar"]},
|
||||
name="ZaqarBasic.create_queue")
|
||||
class CreateQueue(zutils.ZaqarScenario):
|
||||
|
||||
@scenario.configure(context={"cleanup": ["zaqar"]})
|
||||
@logging.log_deprecated_args(
|
||||
"The 'name_length' argument to create_queue is ignored",
|
||||
"0.1.2", ["name_length"], once=True)
|
||||
def create_queue(self, name_length=None, **kwargs):
|
||||
def run(self, name_length=None, **kwargs):
|
||||
"""Create a Zaqar queue with a random name.
|
||||
|
||||
:param kwargs: other optional parameters to create queues like
|
||||
@ -34,12 +37,16 @@ class ZaqarBasic(zutils.ZaqarScenario):
|
||||
"""
|
||||
self._queue_create(**kwargs)
|
||||
|
||||
@scenario.configure(context={"cleanup": ["zaqar"]})
|
||||
|
||||
@scenario.configure(context={"cleanup": ["zaqar"]},
|
||||
name="ZaqarBasic.producer_consumer")
|
||||
class ProducerConsumer(zutils.ZaqarScenario):
|
||||
|
||||
@logging.log_deprecated_args(
|
||||
"The 'name_length' argument to producer_consumer is ignored",
|
||||
"0.1.2", ["name_length"], once=True)
|
||||
def producer_consumer(self, name_length=None,
|
||||
min_msg_count=50, max_msg_count=200, **kwargs):
|
||||
def run(self, name_length=None,
|
||||
min_msg_count=50, max_msg_count=200, **kwargs):
|
||||
"""Serial message producer/consumer.
|
||||
|
||||
Creates a Zaqar queue with random name, sends a set of messages
|
||||
@ -57,4 +64,4 @@ class ZaqarBasic(zutils.ZaqarScenario):
|
||||
in range(msg_count)]
|
||||
self._messages_post(queue, messages, min_msg_count, max_msg_count)
|
||||
self._messages_list(queue)
|
||||
self._queue_delete(queue)
|
||||
self._queue_delete(queue)
|
@ -62,26 +62,26 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
}
|
||||
})
|
||||
|
||||
@mock.patch("%s.vmtasks.VMTasks" % BASE)
|
||||
@mock.patch("%s.osclients.Clients" % BASE)
|
||||
@mock.patch("%s.types.GlanceImage.transform" % BASE, return_value="image")
|
||||
@mock.patch("%s.types.Flavor.transform" % BASE, return_value="flavor")
|
||||
@mock.patch("rally.plugins.openstack.wrappers.glance.wrap")
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDeleteCustomImage" % BASE)
|
||||
def test_create_one_image(
|
||||
self, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients, mock_vm_tasks):
|
||||
self, mock_scenario, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients
|
||||
):
|
||||
ip = {"ip": "foo_ip", "id": "foo_id", "is_floating": True}
|
||||
fake_server = mock.Mock()
|
||||
|
||||
fake_image = mock.MagicMock(
|
||||
to_dict=mock.MagicMock(return_value={"id": "image"}))
|
||||
|
||||
mock_vm_scenario = mock_vm_tasks.return_value = mock.MagicMock(
|
||||
scenario = mock_scenario.return_value = mock.MagicMock(
|
||||
_create_image=mock.MagicMock(return_value=fake_image),
|
||||
_boot_server_with_fip=mock.MagicMock(
|
||||
return_value=(fake_server, ip))
|
||||
)
|
||||
|
||||
generator_ctx = TestImageGenerator(self.context)
|
||||
generator_ctx._customize_image = mock.MagicMock()
|
||||
|
||||
@ -103,47 +103,47 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
mock_glance_image_transform.assert_called_once_with(
|
||||
clients=mock_clients.return_value,
|
||||
resource_config={"name": "image"})
|
||||
mock_vm_tasks.assert_called_once_with(
|
||||
mock_scenario.assert_called_once_with(
|
||||
self.context, clients=mock_clients.return_value)
|
||||
|
||||
mock_vm_scenario._boot_server_with_fip.assert_called_once_with(
|
||||
scenario._boot_server_with_fip.assert_called_once_with(
|
||||
image="image", flavor="flavor",
|
||||
floating_network="floating",
|
||||
key_name="keypair_name", security_groups=["secgroup_name"],
|
||||
userdata=None, foo_arg="foo_value")
|
||||
|
||||
mock_vm_scenario._stop_server.assert_called_once_with(fake_server)
|
||||
scenario._stop_server.assert_called_once_with(fake_server)
|
||||
|
||||
generator_ctx._customize_image.assert_called_once_with(
|
||||
fake_server, ip, user)
|
||||
|
||||
mock_vm_scenario._create_image.assert_called_once_with(fake_server)
|
||||
scenario._create_image.assert_called_once_with(fake_server)
|
||||
mock_glance_wrap.return_value.set_visibility.assert_called_once_with(
|
||||
fake_image)
|
||||
|
||||
mock_vm_scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
fake_server, ip)
|
||||
|
||||
self.assertEqual({"id": "image"}, custom_image)
|
||||
|
||||
@mock.patch("%s.vmtasks.VMTasks" % BASE)
|
||||
@mock.patch("%s.osclients.Clients" % BASE)
|
||||
@mock.patch("%s.types.GlanceImage.transform" % BASE,
|
||||
return_value="image")
|
||||
@mock.patch("%s.types.Flavor.transform" % BASE,
|
||||
return_value="flavor")
|
||||
@mock.patch("rally.plugins.openstack.wrappers.glance.wrap")
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDeleteCustomImage" % BASE)
|
||||
def test_create_one_image_cleanup(
|
||||
self, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients,
|
||||
mock_vm_tasks):
|
||||
self, mock_scenario, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients
|
||||
):
|
||||
ip = {"ip": "foo_ip", "id": "foo_id", "is_floating": True}
|
||||
fake_server = mock.Mock()
|
||||
|
||||
fake_image = mock.MagicMock(
|
||||
to_dict=mock.MagicMock(return_value={"id": "image"}))
|
||||
|
||||
mock_vm_scenario = mock_vm_tasks.return_value = mock.MagicMock(
|
||||
scenario = mock_scenario.return_value = mock.MagicMock(
|
||||
_create_image=mock.MagicMock(return_value=fake_image),
|
||||
_boot_server_with_fip=mock.MagicMock(
|
||||
return_value=(fake_server, ip)),
|
||||
@ -167,7 +167,7 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
generator_ctx._customize_image.assert_called_once_with(
|
||||
fake_server, ip, user)
|
||||
|
||||
mock_vm_scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
fake_server, ip)
|
||||
|
||||
@mock.patch("%s.nova_utils.NovaScenario" % BASE)
|
||||
|
@ -21,13 +21,12 @@ class SenlinClustersTestCase(test.ScenarioTestCase):
|
||||
def test_create_and_delete_cluster(self):
|
||||
mock_cluster = mock.Mock()
|
||||
self.context["tenant"] = {"profile": "fake_profile_id"}
|
||||
scenario = clusters.SenlinClusters(self.context)
|
||||
scenario = clusters.CreateAndDeleteCluster(self.context)
|
||||
scenario._create_cluster = mock.Mock(return_value=mock_cluster)
|
||||
scenario._delete_cluster = mock.Mock()
|
||||
|
||||
scenario.create_and_delete_cluster(desired_capacity=1, min_size=0,
|
||||
max_size=3, timeout=60,
|
||||
metadata={"k2": "v2"})
|
||||
scenario.run(desired_capacity=1, min_size=0,
|
||||
max_size=3, timeout=60, metadata={"k2": "v2"})
|
||||
|
||||
scenario._create_cluster.assert_called_once_with("fake_profile_id",
|
||||
1, 0, 3, 60,
|
||||
|
@ -24,14 +24,13 @@ from tests.unit import test
|
||||
class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
|
||||
def test_create_container_and_object_then_list_objects(self):
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenListObjects(
|
||||
self.context)
|
||||
scenario._create_container = mock.MagicMock(return_value="AA")
|
||||
scenario._upload_object = mock.MagicMock()
|
||||
scenario._list_objects = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_list_objects(
|
||||
objects_per_container=5,
|
||||
object_size=100)
|
||||
scenario.run(objects_per_container=5, object_size=100)
|
||||
|
||||
self.assertEqual(1, scenario._create_container.call_count)
|
||||
self.assertEqual(5, scenario._upload_object.call_count)
|
||||
@ -41,16 +40,14 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
"swift.create_5_objects")
|
||||
|
||||
def test_create_container_and_object_then_delete_all(self):
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenDeleteAll(self.context)
|
||||
scenario._create_container = mock.MagicMock(return_value="BB")
|
||||
scenario._upload_object = mock.MagicMock(
|
||||
side_effect=[("etaaag", "ooobj_%i" % i) for i in range(3)])
|
||||
scenario._delete_object = mock.MagicMock()
|
||||
scenario._delete_container = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_delete_all(
|
||||
objects_per_container=3,
|
||||
object_size=10)
|
||||
scenario.run(objects_per_container=3, object_size=10)
|
||||
|
||||
self.assertEqual(1, scenario._create_container.call_count)
|
||||
self.assertEqual(3, scenario._upload_object.call_count)
|
||||
@ -65,15 +62,15 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
"swift.delete_3_objects")
|
||||
|
||||
def test_create_container_and_object_then_download_object(self):
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenDownloadObject(
|
||||
self.context
|
||||
)
|
||||
scenario._create_container = mock.MagicMock(return_value="CC")
|
||||
scenario._upload_object = mock.MagicMock(
|
||||
side_effect=[("etaaaag", "obbbj_%i" % i) for i in range(2)])
|
||||
scenario._download_object = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_download_object(
|
||||
objects_per_container=2,
|
||||
object_size=50)
|
||||
scenario.run(objects_per_container=2, object_size=50)
|
||||
|
||||
self.assertEqual(1, scenario._create_container.call_count)
|
||||
self.assertEqual(2, scenario._upload_object.call_count)
|
||||
@ -89,12 +86,12 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
@ddt.data(1, 5)
|
||||
def test_list_objects_in_containers(self, num_cons):
|
||||
con_list = [{"name": "cooon_%s" % i} for i in range(num_cons)]
|
||||
scenario = objects.SwiftObjects()
|
||||
scenario = objects.ListObjectsInContainers(self.context)
|
||||
scenario._list_containers = mock.MagicMock(return_value=("header",
|
||||
con_list))
|
||||
scenario._list_objects = mock.MagicMock()
|
||||
|
||||
scenario.list_objects_in_containers()
|
||||
scenario.run()
|
||||
scenario._list_containers.assert_called_once_with()
|
||||
con_calls = [mock.call(container["name"], atomic_action=False)
|
||||
for container in con_list]
|
||||
@ -111,14 +108,14 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
def test_list_and_download_objects_in_containers(self, num_cons, num_objs):
|
||||
con_list = [{"name": "connn_%s" % i} for i in range(num_cons)]
|
||||
obj_list = [{"name": "ooobj_%s" % i} for i in range(num_objs)]
|
||||
scenario = objects.SwiftObjects()
|
||||
scenario = objects.ListAndDownloadObjectsInContainers(self.context)
|
||||
scenario._list_containers = mock.MagicMock(return_value=("header",
|
||||
con_list))
|
||||
scenario._list_objects = mock.MagicMock(return_value=("header",
|
||||
obj_list))
|
||||
scenario._download_object = mock.MagicMock()
|
||||
|
||||
scenario.list_and_download_objects_in_containers()
|
||||
scenario.run()
|
||||
scenario._list_containers.assert_called_once_with()
|
||||
con_calls = [mock.call(container["name"], atomic_action=False)
|
||||
for container in con_list]
|
||||
@ -146,13 +143,12 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
def test_functional_create_container_and_object_then_list_objects(self):
|
||||
names_list = ["AA", "BB", "CC", "DD"]
|
||||
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenListObjects(
|
||||
self.context)
|
||||
scenario.generate_random_name = mock.MagicMock(side_effect=names_list)
|
||||
scenario._list_objects = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_list_objects(
|
||||
objects_per_container=3,
|
||||
object_size=100)
|
||||
scenario.run(objects_per_container=3, object_size=100)
|
||||
|
||||
scenario._list_objects.assert_called_once_with("AA")
|
||||
|
||||
@ -162,14 +158,12 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
def test_functional_create_container_and_object_then_delete_all(self):
|
||||
names_list = ["111", "222", "333", "444", "555"]
|
||||
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenDeleteAll(self.context)
|
||||
scenario.generate_random_name = mock.MagicMock(side_effect=names_list)
|
||||
scenario._delete_object = mock.MagicMock()
|
||||
scenario._delete_container = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_delete_all(
|
||||
objects_per_container=4,
|
||||
object_size=240)
|
||||
scenario.run(objects_per_container=4, object_size=240)
|
||||
|
||||
scenario._delete_object.assert_has_calls(
|
||||
[mock.call("111", name,
|
||||
@ -184,13 +178,12 @@ class SwiftObjectsTestCase(test.ScenarioTestCase):
|
||||
def test_functional_create_container_and_object_then_download_object(self):
|
||||
names_list = ["aaa", "bbb", "ccc", "ddd", "eee", "fff"]
|
||||
|
||||
scenario = objects.SwiftObjects(self.context)
|
||||
scenario = objects.CreateContainerAndObjectThenDownloadObject(
|
||||
self.context)
|
||||
scenario.generate_random_name = mock.MagicMock(side_effect=names_list)
|
||||
scenario._download_object = mock.MagicMock()
|
||||
|
||||
scenario.create_container_and_object_then_download_object(
|
||||
objects_per_container=5,
|
||||
object_size=750)
|
||||
scenario.run(objects_per_container=5, object_size=750)
|
||||
|
||||
scenario._download_object.assert_has_calls(
|
||||
[mock.call("aaa", name,
|
||||
|
@ -21,6 +21,9 @@ from rally.plugins.openstack.scenarios.vm import vmtasks
|
||||
from tests.unit import test
|
||||
|
||||
|
||||
BASE = "rally.plugins.openstack.scenarios.vm.vmtasks"
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class VMTasksTestCase(test.ScenarioTestCase):
|
||||
|
||||
@ -28,49 +31,50 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
super(VMTasksTestCase, self).setUp()
|
||||
self.context.update({"user": {"keypair": {"name": "keypair_name"},
|
||||
"credential": mock.MagicMock()}})
|
||||
self.scenario = vmtasks.VMTasks(context=self.context)
|
||||
|
||||
def create_env(self, scenario):
|
||||
self.ip = {"id": "foo_id", "ip": "foo_ip", "is_floating": True}
|
||||
self.scenario._boot_server_with_fip = mock.Mock(
|
||||
scenario._boot_server_with_fip = mock.Mock(
|
||||
return_value=("foo_server", self.ip))
|
||||
self.scenario._wait_for_ping = mock.Mock()
|
||||
self.scenario._delete_server_with_fip = mock.Mock()
|
||||
self.scenario._create_volume = mock.Mock(
|
||||
scenario._wait_for_ping = mock.Mock()
|
||||
scenario._delete_server_with_fip = mock.Mock()
|
||||
scenario._create_volume = mock.Mock(
|
||||
return_value=mock.Mock(id="foo_volume"))
|
||||
self.scenario._run_command = mock.MagicMock(
|
||||
scenario._run_command = mock.MagicMock(
|
||||
return_value=(0, "{\"foo\": 42}", "foo_err"))
|
||||
self.scenario.add_output = mock.Mock()
|
||||
scenario.add_output = mock.Mock()
|
||||
return scenario
|
||||
|
||||
def test_boot_runcommand_delete(self):
|
||||
self.scenario._run_command = mock.MagicMock(
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
scenario._run_command = mock.MagicMock(
|
||||
return_value=(0, "{\"foo\": 42}", "foo_err"))
|
||||
self.scenario.boot_runcommand_delete(
|
||||
"foo_image", "foo_flavor",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"},
|
||||
username="foo_username",
|
||||
password="foo_password",
|
||||
use_floating_ip="use_fip",
|
||||
floating_network="ext_network",
|
||||
force_delete="foo_force",
|
||||
volume_args={"size": 16},
|
||||
foo_arg="foo_value")
|
||||
scenario.run("foo_image", "foo_flavor",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"},
|
||||
username="foo_username",
|
||||
password="foo_password",
|
||||
use_floating_ip="use_fip",
|
||||
floating_network="ext_network",
|
||||
force_delete="foo_force",
|
||||
volume_args={"size": 16},
|
||||
foo_arg="foo_value")
|
||||
|
||||
self.scenario._create_volume.assert_called_once_with(
|
||||
16, imageRef=None)
|
||||
self.scenario._boot_server_with_fip.assert_called_once_with(
|
||||
scenario._create_volume.assert_called_once_with(16, imageRef=None)
|
||||
scenario._boot_server_with_fip.assert_called_once_with(
|
||||
"foo_image", "foo_flavor", key_name="keypair_name",
|
||||
use_floating_ip="use_fip", floating_network="ext_network",
|
||||
block_device_mapping={"vdrally": "foo_volume:::1"},
|
||||
foo_arg="foo_value")
|
||||
|
||||
self.scenario._wait_for_ping.assert_called_once_with("foo_ip")
|
||||
self.scenario._run_command.assert_called_once_with(
|
||||
scenario._wait_for_ping.assert_called_once_with("foo_ip")
|
||||
scenario._run_command.assert_called_once_with(
|
||||
"foo_ip", 22, "foo_username", "foo_password",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"})
|
||||
self.scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete="foo_force")
|
||||
self.scenario.add_output.assert_called_once_with(
|
||||
scenario.add_output.assert_called_once_with(
|
||||
additive={"title": "Command output", "chart_plugin": "Lines",
|
||||
"data": [["foo", 42.0]]})
|
||||
|
||||
@ -93,7 +97,9 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
@ddt.unpack
|
||||
def test_boot_runcommand_delete_add_output(self, output,
|
||||
expected=None, raises=None):
|
||||
self.scenario._run_command.return_value = output
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
|
||||
scenario._run_command.return_value = output
|
||||
kwargs = {"command": {"remote_path": "foo"},
|
||||
"username": "foo_username",
|
||||
"password": "foo_password",
|
||||
@ -103,48 +109,50 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
"volume_args": {"size": 16},
|
||||
"foo_arg": "foo_value"}
|
||||
if raises:
|
||||
self.assertRaises(raises, self.scenario.boot_runcommand_delete,
|
||||
self.assertRaises(raises, scenario.run,
|
||||
"foo_image", "foo_flavor", **kwargs)
|
||||
self.assertFalse(self.scenario.add_output.called)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
else:
|
||||
self.scenario.boot_runcommand_delete("foo_image", "foo_flavor",
|
||||
**kwargs)
|
||||
scenario.run("foo_image", "foo_flavor", **kwargs)
|
||||
calls = [mock.call(**kw) for kw in expected]
|
||||
self.scenario.add_output.assert_has_calls(calls, any_order=True)
|
||||
scenario.add_output.assert_has_calls(calls, any_order=True)
|
||||
|
||||
self.scenario._create_volume.assert_called_once_with(
|
||||
16, imageRef=None)
|
||||
self.scenario._boot_server_with_fip.assert_called_once_with(
|
||||
scenario._create_volume.assert_called_once_with(16, imageRef=None)
|
||||
scenario._boot_server_with_fip.assert_called_once_with(
|
||||
"foo_image", "foo_flavor", key_name="keypair_name",
|
||||
use_floating_ip="use_fip", floating_network="ext_network",
|
||||
block_device_mapping={"vdrally": "foo_volume:::1"},
|
||||
foo_arg="foo_value")
|
||||
|
||||
self.scenario._run_command.assert_called_once_with(
|
||||
scenario._run_command.assert_called_once_with(
|
||||
"foo_ip", 22, "foo_username", "foo_password",
|
||||
command={"remote_path": "foo"})
|
||||
self.scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete="foo_force")
|
||||
|
||||
def test_boot_runcommand_delete_command_timeouts(self):
|
||||
self.scenario._run_command.side_effect = exceptions.SSHTimeout()
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
|
||||
scenario._run_command.side_effect = exceptions.SSHTimeout()
|
||||
self.assertRaises(exceptions.SSHTimeout,
|
||||
self.scenario.boot_runcommand_delete,
|
||||
scenario.run,
|
||||
"foo_image", "foo_flavor", "foo_interpreter",
|
||||
"foo_script", "foo_username")
|
||||
self.scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete=False)
|
||||
self.assertFalse(self.scenario.add_output.called)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
|
||||
def test_boot_runcommand_delete_ping_wait_timeouts(self):
|
||||
self.scenario._wait_for_ping.side_effect = exceptions.TimeoutException(
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
|
||||
scenario._wait_for_ping.side_effect = exceptions.TimeoutException(
|
||||
resource_type="foo_resource",
|
||||
resource_name="foo_name",
|
||||
resource_id="foo_id",
|
||||
desired_status="foo_desired_status",
|
||||
resource_status="foo_resource_status")
|
||||
exc = self.assertRaises(exceptions.TimeoutException,
|
||||
self.scenario.boot_runcommand_delete,
|
||||
scenario.run,
|
||||
"foo_image", "foo_flavor", "foo_interpreter",
|
||||
"foo_script", "foo_username",
|
||||
wait_for_ping=True)
|
||||
@ -154,22 +162,25 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
self.assertEqual(exc.kwargs["desired_status"], "foo_desired_status")
|
||||
self.assertEqual(exc.kwargs["resource_status"], "foo_resource_status")
|
||||
|
||||
self.scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete=False)
|
||||
self.assertFalse(self.scenario.add_output.called)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
|
||||
@mock.patch("rally.plugins.openstack.scenarios.vm.vmtasks.json")
|
||||
@mock.patch("%s.json" % BASE)
|
||||
def test_boot_runcommand_delete_json_fails(self, mock_json):
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
|
||||
mock_json.loads.side_effect = ValueError()
|
||||
self.assertRaises(exceptions.ScriptError,
|
||||
self.scenario.boot_runcommand_delete,
|
||||
scenario.run,
|
||||
"foo_image", "foo_flavor", "foo_interpreter",
|
||||
"foo_script", "foo_username")
|
||||
self.scenario._delete_server_with_fip.assert_called_once_with(
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete=False)
|
||||
self.assertFalse(self.scenario.add_output.called)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
|
||||
def test_boot_runcommand_delete_custom_image(self):
|
||||
@mock.patch("%s.BootRuncommandDelete.run" % BASE)
|
||||
def test_boot_runcommand_delete_custom_image(self, mock_scenario):
|
||||
context = {
|
||||
"user": {
|
||||
"tenant_id": "tenant_id",
|
||||
@ -179,26 +190,23 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
"custom_image": {"id": "image_id"}
|
||||
}
|
||||
}
|
||||
scenario = vmtasks.VMTasks(context)
|
||||
scenario = vmtasks.BootRuncommandDeleteCustomImage(context)
|
||||
|
||||
scenario.boot_runcommand_delete = mock.Mock()
|
||||
scenario.run(flavor="flavor_id",
|
||||
command={
|
||||
"script_file": "foo_script",
|
||||
"interpreter": "bar_interpreter"},
|
||||
username="username")
|
||||
|
||||
scenario.boot_runcommand_delete_custom_image(
|
||||
flavor="flavor_id",
|
||||
command={
|
||||
"script_file": "foo_script",
|
||||
"interpreter": "bar_interpreter"},
|
||||
username="username")
|
||||
|
||||
scenario.boot_runcommand_delete.assert_called_once_with(
|
||||
mock_scenario.assert_called_once_with(
|
||||
image="image_id", flavor="flavor_id", username="username",
|
||||
command={
|
||||
"script_file": "foo_script",
|
||||
"interpreter": "bar_interpreter"}
|
||||
)
|
||||
|
||||
@mock.patch("rally.plugins.openstack.scenarios.vm.vmtasks.heat")
|
||||
@mock.patch("rally.plugins.openstack.scenarios.vm.vmtasks.sshutils")
|
||||
@mock.patch("%s.heat" % BASE)
|
||||
@mock.patch("%s.sshutils" % BASE)
|
||||
def test_runcommand_heat(self, mock_sshutils, mock_heat):
|
||||
fake_ssh = mock.Mock()
|
||||
fake_ssh.execute.return_value = [0, "key:val", ""]
|
||||
@ -212,14 +220,14 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
"credential": "ok"},
|
||||
"tenant": {"networks": [{"router_id": "1"}]}
|
||||
}
|
||||
scenario = vmtasks.VMTasks(context)
|
||||
scenario = vmtasks.RuncommandHeat(context)
|
||||
scenario.generate_random_name = mock.Mock(return_value="name")
|
||||
scenario.add_output = mock.Mock()
|
||||
workload = {"username": "admin",
|
||||
"resource": ["foo", "bar"]}
|
||||
scenario.runcommand_heat(workload, "template",
|
||||
{"file_key": "file_value"},
|
||||
{"param_key": "param_value"})
|
||||
scenario.run(workload, "template",
|
||||
{"file_key": "file_value"},
|
||||
{"param_key": "param_value"})
|
||||
expected = {"chart_plugin": "Table",
|
||||
"data": {"rows": [["key", "val"]],
|
||||
"cols": ["key", "value"]},
|
||||
|
@ -22,12 +22,12 @@ from tests.unit import test
|
||||
class WatcherTestCase(test.ScenarioTestCase):
|
||||
|
||||
def test_create_audit_template_and_delete(self):
|
||||
scenario = basic.Watcher(self.context)
|
||||
scenario = basic.CreateAuditTemplateAndDelete(self.context)
|
||||
audit_template = mock.Mock()
|
||||
scenario._create_audit_template = mock.MagicMock(
|
||||
return_value=audit_template)
|
||||
scenario._delete_audit_template = mock.MagicMock()
|
||||
scenario.create_audit_template_and_delete("goal", "strategy", {})
|
||||
scenario.run("goal", "strategy", {})
|
||||
scenario._create_audit_template.assert_called_once_with("goal",
|
||||
"strategy",
|
||||
{})
|
||||
@ -35,20 +35,20 @@ class WatcherTestCase(test.ScenarioTestCase):
|
||||
audit_template.uuid)
|
||||
|
||||
def test_list_audit_template(self):
|
||||
scenario = basic.Watcher(self.context)
|
||||
scenario = basic.ListAuditTemplates(self.context)
|
||||
scenario._list_audit_templates = mock.MagicMock()
|
||||
scenario.list_audit_templates()
|
||||
scenario.run()
|
||||
scenario._list_audit_templates.assert_called_once_with(
|
||||
detail=False, goal=None, limit=None, name=None, sort_dir=None,
|
||||
sort_key=None, strategy=None)
|
||||
|
||||
def test_create_audit_and_delete(self):
|
||||
mock_audit = mock.MagicMock()
|
||||
scenario = basic.Watcher(self.context)
|
||||
scenario = basic.CreateAuditAndDelete(self.context)
|
||||
scenario.context = mock.MagicMock()
|
||||
scenario._create_audit = mock.MagicMock(return_value=mock_audit)
|
||||
scenario.sleep_between = mock.MagicMock()
|
||||
scenario._delete_audit = mock.MagicMock()
|
||||
scenario.create_audit_and_delete()
|
||||
scenario.run()
|
||||
scenario._create_audit.assert_called_once_with(mock.ANY)
|
||||
scenario._delete_audit.assert_called_once_with(mock_audit)
|
||||
|
@ -17,22 +17,23 @@ import mock
|
||||
from rally.plugins.openstack.scenarios.zaqar import basic
|
||||
from tests.unit import test
|
||||
|
||||
BASE = "rally.plugins.openstack.scenarios.zaqar."
|
||||
BASIC = BASE + "basic.ZaqarBasic."
|
||||
BASE = "rally.plugins.openstack.scenarios.zaqar.basic"
|
||||
|
||||
|
||||
class ZaqarBasicTestCase(test.ScenarioTestCase):
|
||||
|
||||
@mock.patch(BASIC + "generate_random_name", return_value="fizbit")
|
||||
def test_create_queue(self, mock_generate_random_name):
|
||||
scenario = basic.ZaqarBasic(self.context)
|
||||
@mock.patch("%s.CreateQueue.generate_random_name" % BASE,
|
||||
return_value="fizbit")
|
||||
def test_create_queue(self, mock_random_name):
|
||||
scenario = basic.CreateQueue(self.context)
|
||||
scenario._queue_create = mock.MagicMock()
|
||||
scenario.create_queue(fakearg="fake")
|
||||
scenario.run(fakearg="fake")
|
||||
scenario._queue_create.assert_called_once_with(fakearg="fake")
|
||||
|
||||
@mock.patch(BASIC + "generate_random_name", return_value="kitkat")
|
||||
def test_producer_consumer(self, mock_generate_random_name):
|
||||
scenario = basic.ZaqarBasic(self.context)
|
||||
@mock.patch("%s.CreateQueue.generate_random_name" % BASE,
|
||||
return_value="kitkat")
|
||||
def test_producer_consumer(self, mock_random_name):
|
||||
scenario = basic.ProducerConsumer(self.context)
|
||||
messages = [{"body": {"id": idx}, "ttl": 360} for idx
|
||||
in range(20)]
|
||||
queue = mock.MagicMock()
|
||||
@ -42,8 +43,7 @@ class ZaqarBasicTestCase(test.ScenarioTestCase):
|
||||
scenario._messages_list = mock.MagicMock()
|
||||
scenario._queue_delete = mock.MagicMock()
|
||||
|
||||
scenario.producer_consumer(min_msg_count=20, max_msg_count=20,
|
||||
fakearg="fake")
|
||||
scenario.run(min_msg_count=20, max_msg_count=20, fakearg="fake")
|
||||
|
||||
scenario._queue_create.assert_called_once_with(fakearg="fake")
|
||||
scenario._messages_post.assert_called_once_with(queue, messages,
|
||||
|
Loading…
x
Reference in New Issue
Block a user