Coverage for manila/tests/api/v2/test_availability_zones.py: 100%

47 statements  

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

1# Copyright (c) 2015 Mirantis inc. 

2# 

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

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

5# a copy of the License at 

6# 

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

8# 

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

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

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

12# License for the specific language governing permissions and limitations 

13# under the License. 

14 

15from unittest import mock 

16 

17import ddt 

18from oslo_utils.fixture import uuidsentinel as uuids 

19 

20from manila.api.v2 import availability_zones 

21from manila import context 

22from manila import exception 

23from manila import policy 

24from manila import test 

25from manila.tests.api import fakes 

26 

27 

28@ddt.ddt 

29class AvailabilityZonesAPITest(test.TestCase): 

30 

31 @ddt.data( 

32 availability_zones.AvailabilityZoneControllerLegacy, 

33 availability_zones.AvailabilityZoneController, 

34 ) 

35 def test_instantiate_controller(self, controller): 

36 az_controller = controller() 

37 

38 self.assertTrue(hasattr(az_controller, "resource_name")) 

39 self.assertEqual("availability_zone", az_controller.resource_name) 

40 self.assertTrue(hasattr(az_controller, "_view_builder")) 

41 self.assertTrue(hasattr(az_controller._view_builder, "detail_list")) 

42 

43 @ddt.data( 

44 ('1.0', availability_zones.AvailabilityZoneControllerLegacy), 

45 ('2.0', availability_zones.AvailabilityZoneControllerLegacy), 

46 ('2.6', availability_zones.AvailabilityZoneControllerLegacy), 

47 ('2.7', availability_zones.AvailabilityZoneController), 

48 ) 

49 @ddt.unpack 

50 def test_index(self, version, controller): 

51 azs = [ 

52 { 

53 "id": uuids.fake_id1, 

54 "name": "fake_name1", 

55 "created_at": "2023-05-03T13:10:50.000000", 

56 "updated_at": None, 

57 }, 

58 { 

59 "id": uuids.fake_id2, 

60 "name": "fake_name2", 

61 "created_at": "2023-05-03T13:10:50.000000", 

62 "updated_at": "2023-05-04T23:56:01.000000", 

63 "deleted": "False", 

64 "redundant_key": "redundant_value", 

65 }, 

66 ] 

67 mock_policy_check = self.mock_object(policy, 'check_policy') 

68 self.mock_object(availability_zones.db, 'availability_zone_get_all', 

69 mock.Mock(return_value=azs)) 

70 az_controller = controller() 

71 ctxt = context.RequestContext("admin", "fake", True) 

72 req = fakes.HTTPRequest.blank('/shares', version=version) 

73 req.environ['manila.context'] = ctxt 

74 

75 result = az_controller.index(req) 

76 

77 (availability_zones.db.availability_zone_get_all. 

78 assert_called_once_with(ctxt)) 

79 mock_policy_check.assert_called_once_with( 

80 ctxt, controller.resource_name, 'index') 

81 self.assertIsInstance(result, dict) 

82 self.assertEqual(["availability_zones"], list(result.keys())) 

83 self.assertIsInstance(result["availability_zones"], list) 

84 self.assertEqual(2, len(result["availability_zones"])) 

85 self.assertIn(azs[0], result["availability_zones"]) 

86 azs[1].pop("deleted") 

87 azs[1].pop("redundant_key") 

88 self.assertIn(azs[1], result["availability_zones"]) 

89 

90 @ddt.data( 

91 ('1.0', availability_zones.AvailabilityZoneController), 

92 ('2.0', availability_zones.AvailabilityZoneController), 

93 ('2.6', availability_zones.AvailabilityZoneController), 

94 ('2.7', availability_zones.AvailabilityZoneControllerLegacy), 

95 ) 

96 @ddt.unpack 

97 def test_index_with_unsupported_versions(self, version, controller): 

98 ctxt = context.RequestContext("admin", "fake", True) 

99 req = fakes.HTTPRequest.blank('/shares', version=version) 

100 req.environ['manila.context'] = ctxt 

101 az_controller = controller() 

102 

103 self.assertRaises( 

104 exception.VersionNotFoundForAPIMethod, az_controller.index, req)