Coverage for manila/tests/api/v2/test_share_access_metadata.py: 100%
65 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
1# Copyright (c) 2018 Huawei Inc.
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
16from unittest import mock
18import ddt
19import webob
21from manila.api.v2 import share_access_metadata
22from manila.api.v2 import share_accesses
23from manila import context
24from manila import exception
25from manila import policy
26from manila import test
27from manila.tests.api import fakes
28from manila.tests import db_utils
29from oslo_utils import uuidutils
32@ddt.ddt
33class ShareAccessesMetadataAPITest(test.TestCase):
35 def _get_request(self, version="2.45", use_admin_context=True):
36 req = fakes.HTTPRequest.blank(
37 '/v2/share-access-rules',
38 version=version, use_admin_context=use_admin_context)
39 return req
41 def setUp(self):
42 super(ShareAccessesMetadataAPITest, self).setUp()
43 self.controller = (
44 share_access_metadata.ShareAccessMetadataController())
45 self.access_controller = (
46 share_accesses.ShareAccessesController())
47 self.resource_name = self.controller.resource_name
48 self.admin_context = context.RequestContext('admin', 'fake', True)
49 self.member_context = context.RequestContext('fake', 'fake')
50 self.mock_policy_check = self.mock_object(
51 policy, 'check_policy', mock.Mock(return_value=True))
52 self.share = db_utils.create_share()
53 self.access = db_utils.create_share_access(
54 id=uuidutils.generate_uuid(),
55 share_id=self.share['id'])
57 @ddt.data({'body': {'metadata': {'key1': 'v1'}}},
58 {'body': {'metadata': {'test_key1': 'test_v1'}}},
59 {'body': {'metadata': {'key1': 'v2'}}})
60 @ddt.unpack
61 def test_update_metadata(self, body):
62 url = self._get_request()
63 update = self.controller.update(url, self.access['id'], body=body)
64 self.assertEqual(body, update)
66 show_result = self.access_controller.show(url, self.access['id'])
68 self.assertEqual(1, len(show_result))
69 self.assertIn(self.access['id'], show_result['access']['id'])
70 self.assertEqual(body['metadata'], show_result['access']['metadata'])
72 def test_delete_metadata(self):
73 body = {'metadata': {'test_key3': 'test_v3'}}
74 url = self._get_request()
75 self.controller.update(url, self.access['id'], body=body)
77 self.controller.delete(url, self.access['id'], 'test_key3')
78 show_result = self.access_controller.show(url, self.access['id'])
80 self.assertEqual(1, len(show_result))
81 self.assertIn(self.access['id'], show_result['access']['id'])
82 self.assertNotIn('test_key3', show_result['access']['metadata'])
84 def test_update_access_metadata_with_access_id_not_found(self):
85 self.assertRaises(
86 webob.exc.HTTPNotFound,
87 self.controller.update,
88 self._get_request(), 'not_exist_access_id',
89 {'metadata': {'key1': 'v1'}})
91 def test_update_access_metadata_with_body_error(self):
92 self.assertRaises(
93 webob.exc.HTTPBadRequest,
94 self.controller.update,
95 self._get_request(), self.access['id'],
96 {'metadata_error': {'key1': 'v1'}})
98 @ddt.data({'metadata': {'key1': 'v1', 'key2': None}},
99 {'metadata': {None: 'v1', 'key2': 'v2'}},
100 {'metadata': {'k' * 256: 'v2'}},
101 {'metadata': {'key1': 'v' * 1024}})
102 @ddt.unpack
103 def test_update_metadata_with_invalid_metadata(self, metadata):
104 self.assertRaises(
105 webob.exc.HTTPBadRequest,
106 self.controller.update,
107 self._get_request(), self.access['id'],
108 {'metadata': metadata})
110 def test_delete_access_metadata_not_found(self):
111 body = {'metadata': {'test_key_exist': 'test_v_exsit'}}
112 update = self.controller.update(
113 self._get_request(), self.access['id'], body=body)
114 self.assertEqual(body, update)
115 self.assertRaises(
116 webob.exc.HTTPNotFound,
117 self.controller.delete,
118 self._get_request(), self.access['id'], 'key1')
120 @ddt.data('1.0', '2.0', '2.8', '2.44')
121 def test_update_metadata_unsupported_version(self, version):
122 self.assertRaises(
123 exception.VersionNotFoundForAPIMethod,
124 self.controller.update,
125 self._get_request(version=version), self.access['id'],
126 {'metadata': {'key1': 'v1'}})
128 @ddt.data('1.0', '2.0', '2.43')
129 def test_delete_metadata_with_unsupported_version(self, version):
130 self.assertRaises(
131 exception.VersionNotFoundForAPIMethod,
132 self.controller.delete,
133 self._get_request(version=version), self.access['id'], 'key1')