From b6e73d67935d623acc171a7dd9c9692819aa1f0d Mon Sep 17 00:00:00 2001 From: Srinivas Sakhamuri Date: Thu, 2 Jun 2016 19:11:02 -0600 Subject: [PATCH] Update create_nested_snapshots_and_attach_volume Update cinder task create_nested_snapshots_and_attach_volume to accept create volume kwargs Change-Id: Ie82dfef2166f20fa099ce3249dd1a2cb8fa4f6ef --- .../openstack/scenarios/cinder/volumes.py | 19 ++++- .../scenarios/cinder/test_volumes.py | 80 ++++++++++++++++++- 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/rally/plugins/openstack/scenarios/cinder/volumes.py b/rally/plugins/openstack/scenarios/cinder/volumes.py index 02ef87ef..de4aea60 100755 --- a/rally/plugins/openstack/scenarios/cinder/volumes.py +++ b/rally/plugins/openstack/scenarios/cinder/volumes.py @@ -365,9 +365,14 @@ class CinderVolumes(cinder_utils.CinderScenario, @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) @scenario.configure(context={"cleanup": ["cinder", "nova"]}) + @logging.log_deprecated_args( + "Use 'create_snapshot_kwargs' for additional snapshot kwargs.", + "0.4.1", ["kwargs"], once=True) def create_nested_snapshots_and_attach_volume(self, size=None, nested_level=1, + create_volume_kwargs=None, + create_snapshot_kwargs=None, **kwargs): """Create a volume from snapshot and attach/detach the volume @@ -382,6 +387,8 @@ class CinderVolumes(cinder_utils.CinderScenario, max - maximum size volumes will be created as. default values: {"min": 1, "max": 5} :param nested_level: amount of nested levels + :param create_volume_kwargs: optional args to create a volume + :param create_snapshot_kwargs: optional args to create a snapshot :param kwargs: Optional parameters used during volume snapshot creation. """ @@ -394,16 +401,22 @@ class CinderVolumes(cinder_utils.CinderScenario, # size in _create_volume method. size = random.randint(size["min"], size["max"]) - source_vol = self._create_volume(size) + create_volume_kwargs = create_volume_kwargs or {} + + create_snapshot_kwargs = create_snapshot_kwargs or kwargs or {} + + source_vol = self._create_volume(size, **create_volume_kwargs) nes_objs = [(self.get_random_server(), source_vol, - self._create_snapshot(source_vol.id, False, **kwargs))] + self._create_snapshot(source_vol.id, False, + **create_snapshot_kwargs))] self._attach_volume(nes_objs[0][0], nes_objs[0][1]) snapshot = nes_objs[0][2] for i in range(nested_level - 1): volume = self._create_volume(size, snapshot_id=snapshot.id) - snapshot = self._create_snapshot(volume.id, False, **kwargs) + snapshot = self._create_snapshot(volume.id, False, + **create_snapshot_kwargs) server = self.get_random_server() self._attach_volume(server, volume) diff --git a/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py b/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py index 9a4f4661..76264614 100755 --- a/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py +++ b/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py @@ -342,6 +342,84 @@ class CinderServersTestCase(test.ScenarioTestCase): self.assertEqual(scenario._delete_snapshot.call_count, snapshots_count) self.assertEqual(scenario._detach_volume.call_count, attached_count) + def test_create_nested_snapshots_and_attach_volume_kwargs(self): + fake_volume = mock.MagicMock() + fake_snapshot = mock.MagicMock() + + scenario = volumes.CinderVolumes(context=self._get_context()) + + scenario._attach_volume = mock.MagicMock() + scenario._detach_volume = mock.MagicMock() + scenario._delete_server = mock.MagicMock() + scenario._create_volume = mock.MagicMock(return_value=fake_volume) + scenario._delete_volume = mock.MagicMock() + scenario._create_snapshot = mock.MagicMock(return_value=fake_snapshot) + scenario._delete_snapshot = mock.MagicMock() + + volume_kwargs = {"volume_type": "type1"} + scenario.create_nested_snapshots_and_attach_volume( + size={"min": 1, "max": 1}, + create_volume_kwargs=volume_kwargs) + + scenario._create_volume.assert_called_once_with(1, **volume_kwargs) + self.assertEqual(fake_volume, scenario._create_volume.return_value) + + def test_create_nested_snapshots_and_attach_volume_snapshot_kwargs(self): + fake_volume = mock.MagicMock() + fake_volume.id = "FAKE_ID" + fake_snapshot = mock.MagicMock() + + scenario = volumes.CinderVolumes(context=self._get_context()) + + scenario._attach_volume = mock.MagicMock() + scenario._detach_volume = mock.MagicMock() + scenario._delete_server = mock.MagicMock() + scenario._create_volume = mock.MagicMock(return_value=fake_volume) + scenario._delete_volume = mock.MagicMock() + scenario._create_snapshot = mock.MagicMock(return_value=fake_snapshot) + scenario._delete_snapshot = mock.MagicMock() + + volume_kwargs = {"volume_type": "type1"} + snapshot_kwargs = {"name": "snapshot1", "description": "snaphot one"} + scenario.create_nested_snapshots_and_attach_volume( + size={"min": 1, "max": 1}, + create_volume_kwargs=volume_kwargs, + create_snapshot_kwargs=snapshot_kwargs + ) + + scenario._create_snapshot.assert_called_once_with(fake_volume.id, + False, + **snapshot_kwargs) + self.assertEqual(fake_snapshot, scenario._create_snapshot.return_value) + + def test_create_nested_snapshots_and_attach_volume_deprecate_kwargs(self): + fake_volume = mock.MagicMock() + fake_volume.id = "FAKE_ID" + fake_snapshot = mock.MagicMock() + + scenario = volumes.CinderVolumes(context=self._get_context()) + + scenario._attach_volume = mock.MagicMock() + scenario._detach_volume = mock.MagicMock() + scenario._delete_server = mock.MagicMock() + scenario._create_volume = mock.MagicMock(return_value=fake_volume) + scenario._delete_volume = mock.MagicMock() + scenario._create_snapshot = mock.MagicMock(return_value=fake_snapshot) + scenario._delete_snapshot = mock.MagicMock() + + volume_kwargs = {"volume_type": "type1"} + snapshot_kwargs = {"name": "snapshot1", "description": "snaphot one"} + scenario.create_nested_snapshots_and_attach_volume( + size={"min": 1, "max": 1}, + create_volume_kwargs=volume_kwargs, + **snapshot_kwargs + ) + + scenario._create_snapshot.assert_called_once_with(fake_volume.id, + False, + **snapshot_kwargs) + self.assertEqual(fake_snapshot, scenario._create_snapshot.return_value) + def test_create_nested_snapshots_calls_order(self): fake_volume1 = mock.MagicMock() fake_volume2 = mock.MagicMock() @@ -558,4 +636,4 @@ class CinderServersTestCase(test.ScenarioTestCase): scenario._create_volume.assert_called_once_with( 1, snapshot_id=fake_snapshot.id, fakearg="f") self.assertFalse(scenario._delete_snapshot.called) - self.assertFalse(scenario._delete_volume.called) \ No newline at end of file + self.assertFalse(scenario._delete_volume.called)