diff options
| author | Yuriy Nesenenko <ynesenenko@mirantis.com> | 2016-06-02 16:34:33 +0300 |
|---|---|---|
| committer | Ivan Kolodyazhny <e0ne@e0ne.info> | 2016-09-01 22:53:06 +0300 |
| commit | e15d8e7f0920cb7cd5719d2861dea886bd6f9cb0 (patch) | |
| tree | 081fb5280012400680740eb40eaaf849d2cf4cd0 /cinderclient/tests | |
| parent | 2a9eb37891eeeeb6eea9d8cd492a3a0941ad6066 (diff) | |
| download | python-cinderclient-1.9.0.tar.gz | |
Deleting volume metadata keys with a single request1.9.0
Deleting multiple volume metadata keys with a single request
to improve performance. To delete multiple metadata items without
affecting the remaining ones, just update the metadata items with
the updated complete list of ones (without items to delete)
in the body of the request. This patch uses etags to avoid the
lost update problem with volume metadata. The command isn't changed:
$ cinder metadata volume_id unset k1 k2 k3
Co-Authored-By: Ivan Kolodyazhny <e0ne@e0ne.info>
Depends-On: I575635258c10f299181b8e4cdb51a7ad1f1be764
Implements: blueprint delete-multiple-metadata-keys
Change-Id: I8e18133ffee87c240a7af4b8177683ab99330d9e
Diffstat (limited to 'cinderclient/tests')
| -rw-r--r-- | cinderclient/tests/unit/test_base.py | 2 | ||||
| -rw-r--r-- | cinderclient/tests/unit/v2/fakes.py | 4 | ||||
| -rw-r--r-- | cinderclient/tests/unit/v2/test_volumes.py | 9 | ||||
| -rw-r--r-- | cinderclient/tests/unit/v3/test_shell.py | 15 |
4 files changed, 27 insertions, 3 deletions
diff --git a/cinderclient/tests/unit/test_base.py b/cinderclient/tests/unit/test_base.py index 613d09b..587925a 100644 --- a/cinderclient/tests/unit/test_base.py +++ b/cinderclient/tests/unit/test_base.py @@ -33,6 +33,8 @@ REQUEST_ID = 'req-test-request-id' def create_response_obj_with_header(): resp = Response() resp.headers['x-openstack-request-id'] = REQUEST_ID + resp.headers['Etag'] = 'd5103bf7b26ff0310200d110da3ed186' + resp.status_code = 200 return resp diff --git a/cinderclient/tests/unit/v2/fakes.py b/cinderclient/tests/unit/v2/fakes.py index a70d63c..3c9d028 100644 --- a/cinderclient/tests/unit/v2/fakes.py +++ b/cinderclient/tests/unit/v2/fakes.py @@ -474,6 +474,10 @@ class FakeHTTPClient(base_client.HTTPClient): r = {'volume': self.get_volumes_detail(id=5678)[2]['volumes'][0]} return (200, {}, r) + def get_volumes_1234_metadata(self, **kw): + r = {"metadata": {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}} + return (200, {}, r) + def get_volumes_1234_encryption(self, **kw): r = {'encryption_key_id': 'id'} return (200, {}, r) diff --git a/cinderclient/tests/unit/v2/test_volumes.py b/cinderclient/tests/unit/v2/test_volumes.py index 0fb54ce..fbc85aa 100644 --- a/cinderclient/tests/unit/v2/test_volumes.py +++ b/cinderclient/tests/unit/v2/test_volumes.py @@ -177,9 +177,12 @@ class VolumesTest(utils.TestCase): self._assert_request_id(vol) def test_delete_metadata(self): - keys = ['key1'] - vol = cs.volumes.delete_metadata(1234, keys) - cs.assert_called('DELETE', '/volumes/1234/metadata/key1') + volume = Volume(self, {'id': '1234', 'metadata': { + 'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}}) + keys = ['k1', 'k3'] + vol = cs.volumes.delete_metadata(volume, keys) + cs.assert_called('PUT', '/volumes/1234/metadata', + {'metadata': {'k2': 'v2'}}) self._assert_request_id(vol) def test_extend(self): diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py index a3718fa..e6a1eca 100644 --- a/cinderclient/tests/unit/v3/test_shell.py +++ b/cinderclient/tests/unit/v3/test_shell.py @@ -21,6 +21,7 @@ from requests_mock.contrib import fixture as requests_mock_fixture from cinderclient import client from cinderclient import exceptions from cinderclient import shell +from cinderclient.v3 import volumes from cinderclient.tests.unit import utils from cinderclient.tests.unit.v3 import fakes from cinderclient.tests.unit.fixture_data import keystone_client @@ -376,3 +377,17 @@ class ShellTest(utils.TestCase): '--os-volume-api-version 3.3 message-delete 1234 12345') self.assert_called_anytime('DELETE', '/messages/1234') self.assert_called_anytime('DELETE', '/messages/12345') + + @mock.patch('cinderclient.utils.find_volume') + def test_delete_metadata(self, mock_find_volume): + mock_find_volume.return_value = volumes.Volume(self, + {'id': '1234', + 'metadata': + {'k1': 'v1', + 'k2': 'v2', + 'k3': 'v3'}}, + loaded = True) + expected = {'metadata': {'k2': 'v2'}} + self.run_command('--os-volume-api-version 3.15 ' + 'metadata 1234 unset k1 k3') + self.assert_called('PUT', '/volumes/1234/metadata', body=expected) |
