Skip to content

Commit

Permalink
Merge "Add extend_volume scenario for Cinder test"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Jan 20, 2015
2 parents 75798c6 + 91ed064 commit 930394d
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 0 deletions.
17 changes: 17 additions & 0 deletions rally-jobs/rally-neutron.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,23 @@
failure_rate:
max: 0

CinderVolumes.create_and_extend_volume:
-
args:
size: 1
new_size: 2
runner:
type: "constant"
times: 2
concurrency: 2
context:
users:
tenants: 1
users_per_tenant: 1
sla:
failure_rate:
max: 0

CinderVolumes.create_and_delete_snapshot:
-
args:
Expand Down
18 changes: 18 additions & 0 deletions rally/benchmark/scenarios/cinder/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,24 @@ def _delete_volume(self, volume):
check_interval=CONF.benchmark.cinder_volume_delete_poll_interval
)

@base.atomic_action_timer('cinder.extend_volume')
def _extend_volume(self, volume, new_size):
"""Extend the given volume.
Returns when the volume is actually extended.
:param volume: volume object
:param new_size: new volume size in GB
"""
volume.extend(volume, new_size)
volume = bench_utils.wait_for(
volume,
is_ready=bench_utils.resource_is("available"),
update_resource=bench_utils.get_from_manager(),
timeout=CONF.benchmark.cinder_volume_create_timeout,
check_interval=CONF.benchmark.cinder_volume_create_poll_interval
)

@base.atomic_action_timer('cinder.create_snapshot')
def _create_snapshot(self, volume_id, force=False, **kwargs):
"""Create one snapshot.
Expand Down
21 changes: 21 additions & 0 deletions rally/benchmark/scenarios/cinder/volumes.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,27 @@ def create_volume(self, size, **kwargs):
"""
self._create_volume(size, **kwargs)

@validation.required_services(consts.Service.CINDER)
@validation.required_openstack(users=True)
@base.scenario(context={"cleanup": ["cinder"]})
def create_and_extend_volume(self, size, new_size, min_sleep=0,
max_sleep=0, **kwargs):
"""Create and extend a volume and then delete it.
:param size: volume size (in GB)
:param new_size: volume new size (in GB) to extend
:param min_sleep: minimum sleep time between volume extension and
deletion (in seconds)
:param max_sleep: maximum sleep time between volume extension and
deletion (in seconds)
:param kwargs: optinal args to extend the volume
"""
volume = self._create_volume(size, **kwargs)
self._extend_volume(volume, new_size)
self.sleep_between(min_sleep, max_sleep)
self._delete_volume(volume)

@validation.required_services(consts.Service.CINDER)
@validation.required_contexts("volumes")
@validation.required_openstack(users=True)
Expand Down
21 changes: 21 additions & 0 deletions samples/tasks/scenarios/cinder/create-and-extend-volume.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"CinderVolumes.create_and_extend_volume": [
{
"args": {
"size": 1,
"new_size": 2
},
"runner": {
"type": "constant",
"times": 2,
"concurrency": 2
},
"context": {
"users": {
"tenants": 1,
"users_per_tenant": 1
}
}
}
]
}
14 changes: 14 additions & 0 deletions samples/tasks/scenarios/cinder/create-and-extend-volume.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
CinderVolumes.create_and_extend_volume:
-
args:
size: 1
new_size: 2
runner:
type: "constant"
times: 2
concurrency: 2
context:
users:
tenants: 1
users_per_tenant: 1
17 changes: 17 additions & 0 deletions tests/unit/benchmark/scenarios/cinder/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,23 @@ def test__delete_volume(self):
self._test_atomic_action_timer(self.scenario.atomic_actions(),
'cinder.delete_volume')

@mock.patch(CINDER_UTILS + '.CinderScenario.clients')
def test__extend_volume(self, mock_clients):
CONF = cfg.CONF
volume = mock.Mock()
mock_clients('cinder').volumes.extend.return_value = volume
self.scenario._extend_volume(volume, 2)
self.wait_for.mock.assert_called_once_with(
volume,
is_ready=self.res_is.mock(),
update_resource=self.gfm(),
timeout=CONF.benchmark.cinder_volume_create_timeout,
check_interval=CONF.benchmark.cinder_volume_create_poll_interval
)
self.res_is.mock.assert_has_calls([mock.call('available')])
self._test_atomic_action_timer(self.scenario.atomic_actions(),
'cinder.extend_volume')

@mock.patch(CINDER_UTILS + '.CinderScenario.clients')
def test__create_snapshot(self, mock_clients):
snapshot = mock.Mock()
Expand Down
15 changes: 15 additions & 0 deletions tests/unit/benchmark/scenarios/cinder/test_volumes.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,21 @@ def test_create_volume(self):
scenario.create_volume(1, fakearg="f")
scenario._create_volume.assert_called_once_with(1, fakearg="f")

def test_create_and_extend_volume(self):
fake_volume = mock.MagicMock()

scenario = volumes.CinderVolumes()
scenario._create_volume = mock.MagicMock(return_value=fake_volume)
scenario._extend_volume = mock.MagicMock(return_value=fake_volume)
scenario.sleep_between = mock.MagicMock()
scenario._delete_volume = mock.MagicMock()

scenario.create_and_extend_volume(1, 2, 10, 20, fakearg="f")
scenario._create_volume.assert_called_once_with(1, fakearg="f")
self.assertTrue(scenario._extend_volume.called)
scenario.sleep_between.assert_called_once_with(10, 20)
scenario._delete_volume.assert_called_once_with(fake_volume)

def test_create_and_delete_snapshot(self):
fake_snapshot = mock.MagicMock()
scenario = volumes.CinderVolumes(
Expand Down

0 comments on commit 930394d

Please sign in to comment.