Make volume snapshots_client to use **kwargs

As we discussed on
http://lists.openstack.org/pipermail/openstack-dev/2015-July/068864.html
All http POST/PUT methods need to contain **kwargs as their arguments.

This patch makes volume snapshots_client use **kwargs.

Partially implements blueprint consistent-service-method-names

Change-Id: I1fc18a879702a2f77ebbe704fa2e9c5eaa96b220
diff --git a/tempest/api/compute/volumes/test_volume_snapshots.py b/tempest/api/compute/volumes/test_volume_snapshots.py
index a00c0ba..f42d153 100644
--- a/tempest/api/compute/volumes/test_volume_snapshots.py
+++ b/tempest/api/compute/volumes/test_volume_snapshots.py
@@ -50,7 +50,7 @@
         s_name = data_utils.rand_name('Snapshot')
         # Create snapshot
         snapshot = self.snapshots_client.create_snapshot(
-            volume['id'],
+            volume_id=volume['id'],
             display_name=s_name)['snapshot']
 
         def delete_snapshot(snapshot_id):
diff --git a/tempest/api/volume/admin/test_snapshots_actions.py b/tempest/api/volume/admin/test_snapshots_actions.py
index aa6bfdf..f2bf613 100644
--- a/tempest/api/volume/admin/test_snapshots_actions.py
+++ b/tempest/api/volume/admin/test_snapshots_actions.py
@@ -50,7 +50,7 @@
         snap_name = data_utils.rand_name(cls.__name__ + '-Snapshot')
         params = {cls.name_field: snap_name}
         cls.snapshot = cls.client.create_snapshot(
-            cls.volume['id'], **params)['snapshot']
+            volume_id=cls.volume['id'], **params)['snapshot']
         cls.client.wait_for_snapshot_status(cls.snapshot['id'],
                                             'available')
 
@@ -77,7 +77,7 @@
     def _create_reset_and_force_delete_temp_snapshot(self, status=None):
         # Create snapshot, reset snapshot status,
         # and force delete temp snapshot
-        temp_snapshot = self.create_snapshot(self.volume['id'])
+        temp_snapshot = self.create_snapshot(volume_id=self.volume['id'])
         if status:
             self.admin_snapshots_client.\
                 reset_snapshot_status(temp_snapshot['id'], status)
@@ -110,7 +110,7 @@
         status = 'error'
         progress_alias = self._get_progress_alias()
         self.client.update_snapshot_status(self.snapshot['id'],
-                                           status, progress)
+                                           status=status, progress=progress)
         snapshot_get = self.admin_snapshots_client.show_snapshot(
             self.snapshot['id'])['snapshot']
         self.assertEqual(status, snapshot_get['status'])
diff --git a/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py b/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
index ce0b618..c66207f 100644
--- a/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
+++ b/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
@@ -52,14 +52,14 @@
         # NOTE(gfidente): no need to delete in tearDown as
         # they are created using utility wrapper methods.
         cls.volume = cls.create_volume()
-        cls.snapshot = cls.create_snapshot(cls.volume['id'])
+        cls.snapshot = cls.create_snapshot(volume_id=cls.volume['id'])
 
     @test.attr(type='negative')
     @test.idempotent_id('02bbf63f-6c05-4357-9d98-2926a94064ff')
     def test_quota_volume_snapshots(self):
         self.assertRaises(lib_exc.OverLimit,
                           self.snapshots_client.create_snapshot,
-                          self.volume['id'])
+                          volume_id=self.volume['id'])
 
     @test.attr(type='negative')
     @test.idempotent_id('c99a1ca9-6cdf-498d-9fdf-25832babef27')
@@ -74,7 +74,7 @@
             **new_quota_set)
         self.assertRaises(lib_exc.OverLimit,
                           self.snapshots_client.create_snapshot,
-                          self.volume['id'])
+                          volume_id=self.volume['id'])
 
 
 class VolumeSnapshotNegativeV1TestJSON(VolumeSnapshotQuotasNegativeV2TestJSON):
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 5c4d0e1..5dde86f 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -123,7 +123,7 @@
     def create_snapshot(cls, volume_id=1, **kwargs):
         """Wrapper utility that returns a test snapshot."""
         snapshot = cls.snapshots_client.create_snapshot(
-            volume_id, **kwargs)['snapshot']
+            volume_id=volume_id, **kwargs)['snapshot']
         cls.snapshots.append(snapshot)
         cls.snapshots_client.wait_for_snapshot_status(snapshot['id'],
                                                       'available')
diff --git a/tempest/api/volume/test_volumes_snapshots.py b/tempest/api/volume/test_volumes_snapshots.py
index 856adcc..7e57003 100644
--- a/tempest/api/volume/test_volumes_snapshots.py
+++ b/tempest/api/volume/test_volumes_snapshots.py
@@ -42,15 +42,15 @@
         self.volumes_client.detach_volume(volume_id)
         self.volumes_client.wait_for_volume_status(volume_id, 'available')
 
-    def _list_by_param_values_and_assert(self, params, with_detail=False):
+    def _list_by_param_values_and_assert(self, with_detail=False, **params):
         """list or list_details with given params and validates result."""
 
         if with_detail:
             fetched_snap_list = self.snapshots_client.list_snapshots(
-                detail=True, params=params)['snapshots']
+                detail=True, **params)['snapshots']
         else:
             fetched_snap_list = self.snapshots_client.list_snapshots(
-                params=params)['snapshots']
+                **params)['snapshots']
 
         # Validating params of fetched snapshots
         for snap in fetched_snap_list:
@@ -135,16 +135,16 @@
 
         # Verify list snapshots by display_name filter
         params = {self.name_field: snapshot[self.name_field]}
-        self._list_by_param_values_and_assert(params)
+        self._list_by_param_values_and_assert(**params)
 
         # Verify list snapshots by status filter
         params = {'status': 'available'}
-        self._list_by_param_values_and_assert(params)
+        self._list_by_param_values_and_assert(**params)
 
         # Verify list snapshots by status and display name filter
         params = {'status': 'available',
                   self.name_field: snapshot[self.name_field]}
-        self._list_by_param_values_and_assert(params)
+        self._list_by_param_values_and_assert(**params)
 
     @test.idempotent_id('220a1022-1fcd-4a74-a7bd-6b859156cda2')
     def test_snapshots_list_details_with_params(self):
@@ -157,14 +157,14 @@
 
         # Verify list snapshot details by display_name filter
         params = {self.name_field: snapshot[self.name_field]}
-        self._list_by_param_values_and_assert(params, with_detail=True)
+        self._list_by_param_values_and_assert(with_detail=True, **params)
         # Verify list snapshot details by status filter
         params = {'status': 'available'}
-        self._list_by_param_values_and_assert(params, with_detail=True)
+        self._list_by_param_values_and_assert(with_detail=True, **params)
         # Verify list snapshot details by status and display name filter
         params = {'status': 'available',
                   self.name_field: snapshot[self.name_field]}
-        self._list_by_param_values_and_assert(params, with_detail=True)
+        self._list_by_param_values_and_assert(with_detail=True, **params)
 
     @test.idempotent_id('677863d1-3142-456d-b6ac-9924f667a7f4')
     def test_volume_from_snapshot(self):
diff --git a/tempest/api/volume/test_volumes_snapshots_negative.py b/tempest/api/volume/test_volumes_snapshots_negative.py
index b604360..d46c9b5 100644
--- a/tempest/api/volume/test_volumes_snapshots_negative.py
+++ b/tempest/api/volume/test_volumes_snapshots_negative.py
@@ -37,7 +37,7 @@
         s_name = data_utils.rand_name('snap')
         self.assertRaises(lib_exc.NotFound,
                           self.snapshots_client.create_snapshot,
-                          str(uuid.uuid4()), display_name=s_name)
+                          volume_id=str(uuid.uuid4()), display_name=s_name)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('bb9da53e-d335-4309-9c15-7e76fd5e4d6d')
@@ -46,7 +46,7 @@
         s_name = data_utils.rand_name('snap')
         self.assertRaises(lib_exc.NotFound,
                           self.snapshots_client.create_snapshot,
-                          None, display_name=s_name)
+                          volume_id=None, display_name=s_name)
 
 
 class VolumesV1SnapshotNegativeTestJSON(VolumesV2SnapshotNegativeTestJSON):
diff --git a/tempest/scenario/test_stamp_pattern.py b/tempest/scenario/test_stamp_pattern.py
index faae800..8183ce3 100644
--- a/tempest/scenario/test_stamp_pattern.py
+++ b/tempest/scenario/test_stamp_pattern.py
@@ -67,7 +67,7 @@
     def _create_volume_snapshot(self, volume):
         snapshot_name = data_utils.rand_name('scenario-snapshot')
         snapshot = self.snapshots_client.create_snapshot(
-            volume['id'], display_name=snapshot_name)['snapshot']
+            volume_id=volume['id'], display_name=snapshot_name)['snapshot']
 
         def cleaner():
             self.snapshots_client.delete_snapshot(snapshot['id'])
diff --git a/tempest/services/volume/base/base_snapshots_client.py b/tempest/services/volume/base/base_snapshots_client.py
index fac90e4..fb5a991 100644
--- a/tempest/services/volume/base/base_snapshots_client.py
+++ b/tempest/services/volume/base/base_snapshots_client.py
@@ -29,7 +29,7 @@
 
     create_resp = 200
 
-    def list_snapshots(self, detail=False, params=None):
+    def list_snapshots(self, detail=False, **params):
         """List all the snapshot."""
         url = 'snapshots'
         if detail:
@@ -50,17 +50,13 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def create_snapshot(self, volume_id, **kwargs):
+    def create_snapshot(self, **kwargs):
         """Creates a new snapshot.
 
-        volume_id(Required): id of the volume.
-        force: Create a snapshot even if the volume attached (Default=False)
-        display_name: Optional snapshot Name.
-        display_description: User friendly snapshot description.
+        Available params: see http://developer.openstack.org/
+                              api-ref-blockstorage-v2.html#createSnapshot
         """
-        post_body = {'volume_id': volume_id}
-        post_body.update(kwargs)
-        post_body = json.dumps({'snapshot': post_body})
+        post_body = json.dumps({'snapshot': kwargs})
         resp, body = self.post('snapshots', post_body)
         body = json.loads(body)
         self.expected_success(self.create_resp, resp.status)
@@ -136,13 +132,14 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def update_snapshot_status(self, snapshot_id, status, progress):
+    def update_snapshot_status(self, snapshot_id, **kwargs):
         """Update the specified snapshot's status."""
-        post_body = {
-            'status': status,
-            'progress': progress
-        }
-        post_body = json.dumps({'os-update_snapshot_status': post_body})
+        # TODO(gmann): api-site doesn't contain doc ref
+        # for this API. After fixing the api-site, we need to
+        # add the link here.
+        # Bug https://bugs.launchpad.net/openstack-api-site/+bug/1532645
+
+        post_body = json.dumps({'os-update_snapshot_status': kwargs})
         url = 'snapshots/%s/action' % str(snapshot_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
diff --git a/tempest/stress/cleanup.py b/tempest/stress/cleanup.py
index 5c25e32..5e141e9 100644
--- a/tempest/stress/cleanup.py
+++ b/tempest/stress/cleanup.py
@@ -84,7 +84,7 @@
     # volume deletion may block
 
     _, snaps = admin_manager.snapshots_client.list_snapshots(
-        params={"all_tenants": True})['snapshots']
+        all_tenants=True)['snapshots']
     LOG.info("Cleanup::remove %s snapshots" % len(snaps))
     for v in snaps:
         try: