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

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. 

15 

16from unittest import mock 

17 

18import ddt 

19import webob 

20 

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 

30 

31 

32@ddt.ddt 

33class ShareAccessesMetadataAPITest(test.TestCase): 

34 

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 

40 

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']) 

56 

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) 

65 

66 show_result = self.access_controller.show(url, self.access['id']) 

67 

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']) 

71 

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) 

76 

77 self.controller.delete(url, self.access['id'], 'test_key3') 

78 show_result = self.access_controller.show(url, self.access['id']) 

79 

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']) 

83 

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'}}) 

90 

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'}}) 

97 

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}) 

109 

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') 

119 

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'}}) 

127 

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')