Coverage for manila/tests/api/openstack/test_api_version_request.py: 100%

102 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2026-02-18 22:19 +0000

1# Copyright 2014 IBM Corp. 

2# Copyright 2015 Clinton Knight 

3# All Rights Reserved. 

4# 

5# Licensed under the Apache License, Version 2.0 (the "License"); you may 

6# not use this file except in compliance with the License. You may obtain 

7# a copy of the License at 

8# 

9# http://www.apache.org/licenses/LICENSE-2.0 

10# 

11# Unless required by applicable law or agreed to in writing, software 

12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

14# License for the specific language governing permissions and limitations 

15# under the License. 

16 

17import ddt 

18 

19from manila.api.openstack import api_version_request 

20from manila.api.openstack import versioned_method 

21from manila import exception 

22from manila import test 

23 

24 

25@ddt.ddt 

26class APIVersionRequestTests(test.TestCase): 

27 

28 def test_init(self): 

29 

30 result = api_version_request.APIVersionRequest() 

31 

32 self.assertIsNone(result._ver_major) 

33 self.assertIsNone(result._ver_minor) 

34 self.assertFalse(result._experimental) 

35 

36 def test_min_version(self): 

37 

38 self.assertEqual( 

39 api_version_request.APIVersionRequest( 

40 api_version_request._MIN_API_VERSION), 

41 api_version_request.min_api_version()) 

42 

43 def test_max_api_version(self): 

44 

45 self.assertEqual( 

46 api_version_request.APIVersionRequest( 

47 api_version_request._MAX_API_VERSION), 

48 api_version_request.max_api_version()) 

49 

50 @ddt.data( 

51 ('1.1', 1, 1), 

52 ('2.10', 2, 10), 

53 ('5.234', 5, 234), 

54 ('12.5', 12, 5), 

55 ('2.0', 2, 0), 

56 ('2.200', 2, 200) 

57 ) 

58 @ddt.unpack 

59 def test_valid_version_strings(self, version_string, major, minor): 

60 

61 request = api_version_request.APIVersionRequest(version_string) 

62 

63 self.assertEqual(major, request._ver_major) 

64 self.assertEqual(minor, request._ver_minor) 

65 

66 def test_null_version(self): 

67 

68 v = api_version_request.APIVersionRequest() 

69 

70 self.assertTrue(v.is_null()) 

71 

72 @ddt.data('2', '200', '2.1.4', '200.23.66.3', '5 .3', '5. 3', 

73 '5.03', '02.1', '2.001', '', ' 2.1', '2.1 ') 

74 def test_invalid_version_strings(self, version_string): 

75 

76 self.assertRaises(exception.InvalidAPIVersionString, 

77 api_version_request.APIVersionRequest, 

78 version_string) 

79 

80 def test_cmpkey(self): 

81 request = api_version_request.APIVersionRequest('1.2') 

82 self.assertEqual((1, 2), request._cmpkey()) 

83 

84 @ddt.data(True, False) 

85 def test_experimental_property(self, experimental): 

86 

87 request = api_version_request.APIVersionRequest() 

88 request.experimental = experimental 

89 

90 self.assertEqual(experimental, request.experimental) 

91 

92 def test_experimental_property_value_error(self): 

93 

94 request = api_version_request.APIVersionRequest() 

95 

96 def set_non_boolean(): 

97 request.experimental = 'non_bool_value' 

98 

99 self.assertRaises(exception.InvalidParameterValue, set_non_boolean) 

100 

101 def test_version_comparisons(self): 

102 v1 = api_version_request.APIVersionRequest('2.0') 

103 v2 = api_version_request.APIVersionRequest('2.5') 

104 v3 = api_version_request.APIVersionRequest('5.23') 

105 v4 = api_version_request.APIVersionRequest('2.0') 

106 v_null = api_version_request.APIVersionRequest() 

107 

108 self.assertTrue(v1 < v2) 

109 self.assertTrue(v1 <= v2) 

110 self.assertTrue(v3 > v2) 

111 self.assertTrue(v3 >= v2) 

112 self.assertTrue(v1 != v2) 

113 self.assertTrue(v1 == v4) 

114 self.assertTrue(v1 != v_null) 

115 self.assertTrue(v_null == v_null) 

116 self.assertFalse(v1 == '2.0') 

117 

118 def test_version_matches(self): 

119 v1 = api_version_request.APIVersionRequest('2.0') 

120 v2 = api_version_request.APIVersionRequest('2.5') 

121 v3 = api_version_request.APIVersionRequest('2.45') 

122 v4 = api_version_request.APIVersionRequest('3.3') 

123 v5 = api_version_request.APIVersionRequest('3.23') 

124 v6 = api_version_request.APIVersionRequest('2.0') 

125 v7 = api_version_request.APIVersionRequest('3.3') 

126 v8 = api_version_request.APIVersionRequest('4.0') 

127 v_null = api_version_request.APIVersionRequest() 

128 

129 self.assertTrue(v2.matches(v1, v3)) 

130 self.assertTrue(v2.matches(v1, v_null)) 

131 self.assertTrue(v1.matches(v6, v2)) 

132 self.assertTrue(v4.matches(v2, v7)) 

133 self.assertTrue(v4.matches(v_null, v7)) 

134 self.assertTrue(v4.matches(v_null, v8)) 

135 self.assertFalse(v1.matches(v2, v3)) 

136 self.assertFalse(v5.matches(v2, v4)) 

137 self.assertFalse(v2.matches(v3, v1)) 

138 self.assertTrue(v1.matches(v_null, v_null)) 

139 

140 self.assertRaises(ValueError, v_null.matches, v1, v3) 

141 

142 def test_version_matches_experimental_request(self): 

143 

144 experimental_request = api_version_request.APIVersionRequest('2.0') 

145 experimental_request.experimental = True 

146 

147 non_experimental_request = api_version_request.APIVersionRequest('2.0') 

148 

149 experimental_function = versioned_method.VersionedMethod( 

150 'experimental_function', 

151 api_version_request.APIVersionRequest('2.0'), 

152 api_version_request.APIVersionRequest('2.1'), 

153 True, 

154 None) 

155 

156 non_experimental_function = versioned_method.VersionedMethod( 

157 'non_experimental_function', 

158 api_version_request.APIVersionRequest('2.0'), 

159 api_version_request.APIVersionRequest('2.1'), 

160 False, 

161 None) 

162 

163 self.assertTrue(experimental_request.matches_versioned_method( 

164 experimental_function)) 

165 self.assertTrue(experimental_request.matches_versioned_method( 

166 non_experimental_function)) 

167 self.assertTrue(non_experimental_request.matches_versioned_method( 

168 non_experimental_function)) 

169 self.assertFalse(non_experimental_request.matches_versioned_method( 

170 experimental_function)) 

171 

172 def test_matches_versioned_method(self): 

173 

174 request = api_version_request.APIVersionRequest('2.0') 

175 

176 self.assertRaises(exception.InvalidParameterValue, 

177 request.matches_versioned_method, 

178 'fake_method') 

179 

180 def test_get_string(self): 

181 v1_string = '3.23' 

182 v1 = api_version_request.APIVersionRequest(v1_string) 

183 self.assertEqual(v1_string, v1.get_string()) 

184 

185 self.assertRaises(ValueError, 

186 api_version_request.APIVersionRequest().get_string) 

187 

188 @ddt.data(('1', '0', False), ('1', '1', False), ('1', '0', True)) 

189 @ddt.unpack 

190 def test_str(self, major, minor, experimental): 

191 request_input = '%s.%s' % (major, minor) 

192 request = api_version_request.APIVersionRequest( 

193 request_input, experimental=experimental) 

194 request_string = str(request) 

195 

196 self.assertEqual('API Version Request ' 

197 'Major: %s, Minor: %s, Experimental: %s' % 

198 (major, minor, experimental), request_string)