python-openstackclient 7.3.1__py3-none-any.whl → 8.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. openstackclient/common/availability_zone.py +3 -6
  2. openstackclient/common/clientmanager.py +2 -1
  3. openstackclient/common/envvars.py +57 -0
  4. openstackclient/common/extension.py +3 -11
  5. openstackclient/common/limits.py +1 -1
  6. openstackclient/common/project_cleanup.py +3 -2
  7. openstackclient/common/quota.py +54 -28
  8. openstackclient/compute/client.py +2 -5
  9. openstackclient/compute/v2/agent.py +5 -5
  10. openstackclient/compute/v2/aggregate.py +17 -15
  11. openstackclient/compute/v2/console.py +3 -4
  12. openstackclient/compute/v2/flavor.py +14 -18
  13. openstackclient/compute/v2/host.py +3 -3
  14. openstackclient/compute/v2/hypervisor.py +10 -4
  15. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  16. openstackclient/compute/v2/keypair.py +8 -10
  17. openstackclient/compute/v2/server.py +70 -112
  18. openstackclient/compute/v2/server_backup.py +1 -1
  19. openstackclient/compute/v2/server_event.py +7 -16
  20. openstackclient/compute/v2/server_group.py +6 -6
  21. openstackclient/compute/v2/server_image.py +1 -1
  22. openstackclient/compute/v2/server_migration.py +6 -6
  23. openstackclient/compute/v2/server_volume.py +4 -4
  24. openstackclient/compute/v2/service.py +9 -13
  25. openstackclient/compute/v2/usage.py +4 -6
  26. openstackclient/identity/client.py +2 -4
  27. openstackclient/identity/common.py +16 -17
  28. openstackclient/identity/v2_0/ec2creds.py +4 -3
  29. openstackclient/identity/v2_0/endpoint.py +12 -10
  30. openstackclient/identity/v2_0/project.py +6 -6
  31. openstackclient/identity/v2_0/role.py +1 -1
  32. openstackclient/identity/v2_0/service.py +7 -7
  33. openstackclient/identity/v2_0/user.py +6 -21
  34. openstackclient/identity/v3/access_rule.py +2 -5
  35. openstackclient/identity/v3/consumer.py +4 -3
  36. openstackclient/identity/v3/credential.py +8 -9
  37. openstackclient/identity/v3/domain.py +1 -1
  38. openstackclient/identity/v3/ec2creds.py +4 -3
  39. openstackclient/identity/v3/endpoint.py +104 -88
  40. openstackclient/identity/v3/endpoint_group.py +1 -1
  41. openstackclient/identity/v3/group.py +3 -4
  42. openstackclient/identity/v3/identity_provider.py +1 -2
  43. openstackclient/identity/v3/limit.py +4 -9
  44. openstackclient/identity/v3/mapping.py +4 -3
  45. openstackclient/identity/v3/policy.py +5 -8
  46. openstackclient/identity/v3/project.py +6 -6
  47. openstackclient/identity/v3/region.py +2 -5
  48. openstackclient/identity/v3/registered_limit.py +4 -8
  49. openstackclient/identity/v3/role.py +15 -16
  50. openstackclient/identity/v3/service.py +8 -8
  51. openstackclient/identity/v3/service_provider.py +3 -6
  52. openstackclient/identity/v3/tag.py +2 -2
  53. openstackclient/identity/v3/token.py +1 -2
  54. openstackclient/identity/v3/trust.py +74 -25
  55. openstackclient/identity/v3/user.py +9 -6
  56. openstackclient/image/client.py +2 -5
  57. openstackclient/image/v1/image.py +11 -15
  58. openstackclient/image/v2/cache.py +2 -4
  59. openstackclient/image/v2/image.py +30 -37
  60. openstackclient/image/v2/metadef_namespaces.py +4 -3
  61. openstackclient/image/v2/metadef_resource_type_association.py +1 -2
  62. openstackclient/image/v2/metadef_resource_types.py +1 -2
  63. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +9 -1370
  64. openstackclient/network/client.py +4 -10
  65. openstackclient/network/common.py +16 -12
  66. openstackclient/network/utils.py +3 -3
  67. openstackclient/network/v2/address_group.py +5 -9
  68. openstackclient/network/v2/address_scope.py +2 -3
  69. openstackclient/network/v2/default_security_group_rule.py +1 -2
  70. openstackclient/network/v2/floating_ip.py +14 -21
  71. openstackclient/network/v2/floating_ip_port_forwarding.py +7 -7
  72. openstackclient/network/v2/ip_availability.py +1 -2
  73. openstackclient/network/v2/l3_conntrack_helper.py +8 -12
  74. openstackclient/network/v2/local_ip.py +24 -26
  75. openstackclient/network/v2/local_ip_association.py +4 -5
  76. openstackclient/network/v2/ndp_proxy.py +9 -10
  77. openstackclient/network/v2/network.py +12 -16
  78. openstackclient/network/v2/network_agent.py +29 -37
  79. openstackclient/network/v2/network_auto_allocated_topology.py +4 -5
  80. openstackclient/network/v2/network_flavor.py +1 -1
  81. openstackclient/network/v2/network_flavor_profile.py +5 -5
  82. openstackclient/network/v2/network_meter.py +3 -3
  83. openstackclient/network/v2/network_meter_rule.py +5 -8
  84. openstackclient/network/v2/network_qos_policy.py +4 -4
  85. openstackclient/network/v2/network_qos_rule.py +4 -5
  86. openstackclient/network/v2/network_rbac.py +4 -4
  87. openstackclient/network/v2/network_segment.py +6 -7
  88. openstackclient/network/v2/network_segment_range.py +16 -20
  89. openstackclient/network/v2/network_trunk.py +24 -16
  90. openstackclient/network/v2/port.py +42 -31
  91. openstackclient/network/v2/router.py +55 -41
  92. openstackclient/network/v2/security_group.py +8 -15
  93. openstackclient/network/v2/security_group_rule.py +9 -10
  94. openstackclient/network/v2/subnet.py +31 -30
  95. openstackclient/network/v2/subnet_pool.py +4 -4
  96. openstackclient/object/client.py +2 -3
  97. openstackclient/object/v1/container.py +2 -3
  98. openstackclient/object/v1/object.py +2 -9
  99. openstackclient/shell.py +22 -5
  100. openstackclient/tests/functional/base.py +2 -2
  101. openstackclient/tests/functional/common/test_quota.py +3 -1
  102. openstackclient/tests/functional/compute/v2/common.py +12 -6
  103. openstackclient/tests/functional/compute/v2/test_server.py +2 -3
  104. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  105. openstackclient/tests/functional/identity/v2/test_user.py +1 -1
  106. openstackclient/tests/functional/identity/v3/common.py +3 -8
  107. openstackclient/tests/functional/identity/v3/test_application_credential.py +10 -10
  108. openstackclient/tests/functional/identity/v3/test_endpoint.py +3 -3
  109. openstackclient/tests/functional/identity/v3/test_group.py +3 -3
  110. openstackclient/tests/functional/identity/v3/test_idp.py +3 -7
  111. openstackclient/tests/functional/identity/v3/test_limit.py +4 -4
  112. openstackclient/tests/functional/identity/v3/test_project.py +5 -14
  113. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  114. openstackclient/tests/functional/identity/v3/test_registered_limit.py +3 -3
  115. openstackclient/tests/functional/identity/v3/test_role.py +1 -1
  116. openstackclient/tests/functional/identity/v3/test_role_assignment.py +13 -31
  117. openstackclient/tests/functional/identity/v3/test_service_provider.py +3 -7
  118. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  119. openstackclient/tests/functional/network/v2/common.py +7 -3
  120. openstackclient/tests/functional/network/v2/test_address_group.py +4 -0
  121. openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +15 -11
  122. openstackclient/tests/functional/network/v2/test_local_ip.py +4 -0
  123. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +2 -2
  124. openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +2 -3
  125. openstackclient/tests/functional/network/v2/test_network_rbac.py +2 -2
  126. openstackclient/tests/functional/network/v2/test_network_trunk.py +1 -1
  127. openstackclient/tests/functional/network/v2/test_port.py +17 -7
  128. openstackclient/tests/functional/network/v2/test_router.py +42 -0
  129. openstackclient/tests/functional/network/v2/test_subnet_pool.py +4 -0
  130. openstackclient/tests/unit/api/test_compute_v2.py +67 -87
  131. openstackclient/tests/unit/common/test_availability_zone.py +6 -14
  132. openstackclient/tests/unit/common/test_command.py +1 -1
  133. openstackclient/tests/unit/common/test_extension.py +5 -7
  134. openstackclient/tests/unit/common/test_limits.py +1 -1
  135. openstackclient/tests/unit/common/test_project_cleanup.py +5 -6
  136. openstackclient/tests/unit/common/test_quota.py +51 -28
  137. openstackclient/tests/unit/compute/v2/fakes.py +4 -10
  138. openstackclient/tests/unit/compute/v2/test_agent.py +16 -16
  139. openstackclient/tests/unit/compute/v2/test_aggregate.py +56 -60
  140. openstackclient/tests/unit/compute/v2/test_console.py +16 -16
  141. openstackclient/tests/unit/compute/v2/test_flavor.py +71 -71
  142. openstackclient/tests/unit/compute/v2/test_host.py +8 -8
  143. openstackclient/tests/unit/compute/v2/test_hypervisor.py +22 -30
  144. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  145. openstackclient/tests/unit/compute/v2/test_keypair.py +24 -24
  146. openstackclient/tests/unit/compute/v2/test_server.py +524 -560
  147. openstackclient/tests/unit/compute/v2/test_server_backup.py +5 -7
  148. openstackclient/tests/unit/compute/v2/test_server_event.py +16 -18
  149. openstackclient/tests/unit/compute/v2/test_server_group.py +25 -31
  150. openstackclient/tests/unit/compute/v2/test_server_image.py +6 -8
  151. openstackclient/tests/unit/compute/v2/test_server_migration.py +37 -37
  152. openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -12
  153. openstackclient/tests/unit/compute/v2/test_service.py +39 -45
  154. openstackclient/tests/unit/compute/v2/test_usage.py +5 -5
  155. openstackclient/tests/unit/identity/v2_0/fakes.py +1 -1
  156. openstackclient/tests/unit/identity/v3/test_access_rule.py +1 -3
  157. openstackclient/tests/unit/identity/v3/test_application_credential.py +1 -1
  158. openstackclient/tests/unit/identity/v3/test_credential.py +4 -4
  159. openstackclient/tests/unit/identity/v3/test_endpoint.py +167 -172
  160. openstackclient/tests/unit/identity/v3/test_mappings.py +2 -2
  161. openstackclient/tests/unit/identity/v3/test_trust.py +5 -2
  162. openstackclient/tests/unit/identity/v3/test_user.py +16 -0
  163. openstackclient/tests/unit/image/v1/fakes.py +2 -2
  164. openstackclient/tests/unit/image/v2/test_image.py +39 -1
  165. openstackclient/tests/unit/integ/cli/test_shell.py +1 -2
  166. openstackclient/tests/unit/network/test_common.py +2 -2
  167. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +8 -14
  168. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +49 -35
  169. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -1
  170. openstackclient/tests/unit/network/v2/test_network_compute.py +11 -11
  171. openstackclient/tests/unit/network/v2/test_network_trunk.py +2 -2
  172. openstackclient/tests/unit/network/v2/test_port.py +33 -5
  173. openstackclient/tests/unit/network/v2/test_router.py +120 -7
  174. openstackclient/tests/unit/network/v2/test_security_group_compute.py +11 -19
  175. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +14 -14
  176. openstackclient/tests/unit/object/v1/test_object_all.py +4 -3
  177. openstackclient/tests/unit/test_shell.py +16 -13
  178. openstackclient/tests/unit/volume/v2/test_volume.py +1 -1
  179. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +1 -1
  180. openstackclient/tests/unit/volume/v3/fakes.py +2 -8
  181. openstackclient/tests/unit/volume/v3/test_volume.py +1 -1
  182. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -3
  183. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +1 -2
  184. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +1 -1
  185. openstackclient/volume/client.py +1 -3
  186. openstackclient/volume/v2/consistency_group.py +4 -8
  187. openstackclient/volume/v2/consistency_group_snapshot.py +1 -2
  188. openstackclient/volume/v2/qos_specs.py +1 -2
  189. openstackclient/volume/v2/volume.py +8 -16
  190. openstackclient/volume/v2/volume_backup.py +6 -7
  191. openstackclient/volume/v2/volume_snapshot.py +8 -9
  192. openstackclient/volume/v2/volume_transfer_request.py +0 -3
  193. openstackclient/volume/v2/volume_type.py +10 -21
  194. openstackclient/volume/v3/block_storage_cluster.py +3 -3
  195. openstackclient/volume/v3/block_storage_manage.py +1 -3
  196. openstackclient/volume/v3/volume.py +18 -19
  197. openstackclient/volume/v3/volume_attachment.py +3 -2
  198. openstackclient/volume/v3/volume_backup.py +7 -8
  199. openstackclient/volume/v3/volume_group.py +2 -1
  200. openstackclient/volume/v3/volume_group_snapshot.py +2 -1
  201. openstackclient/volume/v3/volume_snapshot.py +4 -3
  202. openstackclient/volume/v3/volume_type.py +10 -21
  203. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/AUTHORS +4 -0
  204. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/METADATA +7 -13
  205. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/RECORD +210 -233
  206. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/WHEEL +1 -1
  207. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/entry_points.txt +0 -41
  208. python_openstackclient-8.0.0.dist-info/pbr.json +1 -0
  209. openstackclient/tests/functional/volume/v1/__init__.py +0 -0
  210. openstackclient/tests/functional/volume/v1/common.py +0 -35
  211. openstackclient/tests/functional/volume/v1/test_qos.py +0 -100
  212. openstackclient/tests/functional/volume/v1/test_service.py +0 -76
  213. openstackclient/tests/functional/volume/v1/test_snapshot.py +0 -232
  214. openstackclient/tests/functional/volume/v1/test_transfer_request.py +0 -111
  215. openstackclient/tests/functional/volume/v1/test_volume.py +0 -228
  216. openstackclient/tests/functional/volume/v1/test_volume_type.py +0 -213
  217. openstackclient/tests/unit/volume/v1/__init__.py +0 -0
  218. openstackclient/tests/unit/volume/v1/fakes.py +0 -615
  219. openstackclient/tests/unit/volume/v1/test_qos_specs.py +0 -471
  220. openstackclient/tests/unit/volume/v1/test_service.py +0 -295
  221. openstackclient/tests/unit/volume/v1/test_transfer_request.py +0 -380
  222. openstackclient/tests/unit/volume/v1/test_type.py +0 -633
  223. openstackclient/tests/unit/volume/v1/test_volume.py +0 -1447
  224. openstackclient/tests/unit/volume/v1/test_volume_backup.py +0 -435
  225. openstackclient/volume/v1/__init__.py +0 -0
  226. openstackclient/volume/v1/qos_specs.py +0 -377
  227. openstackclient/volume/v1/service.py +0 -136
  228. openstackclient/volume/v1/volume.py +0 -734
  229. openstackclient/volume/v1/volume_backup.py +0 -302
  230. openstackclient/volume/v1/volume_snapshot.py +0 -433
  231. openstackclient/volume/v1/volume_transfer_request.py +0 -200
  232. openstackclient/volume/v1/volume_type.py +0 -520
  233. python_openstackclient-7.3.1.dist-info/pbr.json +0 -1
  234. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/LICENSE +0 -0
  235. {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/top_level.txt +0 -0
@@ -1,435 +0,0 @@
1
- #
2
- # Licensed under the Apache License, Version 2.0 (the "License"); you may
3
- # not use this file except in compliance with the License. You may obtain
4
- # a copy of the License at
5
- #
6
- # http://www.apache.org/licenses/LICENSE-2.0
7
- #
8
- # Unless required by applicable law or agreed to in writing, software
9
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11
- # License for the specific language governing permissions and limitations
12
- # under the License.
13
- #
14
-
15
- from unittest import mock
16
- from unittest.mock import call
17
-
18
- from osc_lib import exceptions
19
- from osc_lib import utils
20
-
21
- from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
22
- from openstackclient.volume.v1 import volume_backup
23
-
24
-
25
- class TestBackup(volume_fakes.TestVolumev1):
26
- def setUp(self):
27
- super().setUp()
28
-
29
- self.backups_mock = self.volume_client.backups
30
- self.backups_mock.reset_mock()
31
- self.volumes_mock = self.volume_client.volumes
32
- self.volumes_mock.reset_mock()
33
- self.snapshots_mock = self.volume_client.volume_snapshots
34
- self.snapshots_mock.reset_mock()
35
- self.restores_mock = self.volume_client.restores
36
- self.restores_mock.reset_mock()
37
-
38
-
39
- class TestBackupCreate(TestBackup):
40
- volume = volume_fakes.create_one_volume()
41
-
42
- columns = (
43
- 'availability_zone',
44
- 'container',
45
- 'description',
46
- 'id',
47
- 'name',
48
- 'object_count',
49
- 'size',
50
- 'snapshot_id',
51
- 'status',
52
- 'volume_id',
53
- )
54
-
55
- def setUp(self):
56
- super().setUp()
57
- self.new_backup = volume_fakes.create_one_backup(
58
- attrs={'volume_id': self.volume.id},
59
- )
60
- self.data = (
61
- self.new_backup.availability_zone,
62
- self.new_backup.container,
63
- self.new_backup.description,
64
- self.new_backup.id,
65
- self.new_backup.name,
66
- self.new_backup.object_count,
67
- self.new_backup.size,
68
- self.new_backup.snapshot_id,
69
- self.new_backup.status,
70
- self.new_backup.volume_id,
71
- )
72
- self.volumes_mock.get.return_value = self.volume
73
- self.backups_mock.create.return_value = self.new_backup
74
-
75
- # Get the command object to test
76
- self.cmd = volume_backup.CreateVolumeBackup(self.app, None)
77
-
78
- def test_backup_create(self):
79
- arglist = [
80
- "--name",
81
- self.new_backup.name,
82
- "--description",
83
- self.new_backup.description,
84
- "--container",
85
- self.new_backup.container,
86
- self.new_backup.volume_id,
87
- ]
88
- verifylist = [
89
- ("name", self.new_backup.name),
90
- ("description", self.new_backup.description),
91
- ("container", self.new_backup.container),
92
- ("volume", self.new_backup.volume_id),
93
- ]
94
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
95
-
96
- columns, data = self.cmd.take_action(parsed_args)
97
-
98
- self.backups_mock.create.assert_called_with(
99
- self.new_backup.volume_id,
100
- self.new_backup.container,
101
- self.new_backup.name,
102
- self.new_backup.description,
103
- )
104
- self.assertEqual(self.columns, columns)
105
- self.assertCountEqual(self.data, data)
106
-
107
- def test_backup_create_without_name(self):
108
- arglist = [
109
- "--description",
110
- self.new_backup.description,
111
- "--container",
112
- self.new_backup.container,
113
- self.new_backup.volume_id,
114
- ]
115
- verifylist = [
116
- ("description", self.new_backup.description),
117
- ("container", self.new_backup.container),
118
- ("volume", self.new_backup.volume_id),
119
- ]
120
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
121
-
122
- columns, data = self.cmd.take_action(parsed_args)
123
-
124
- self.backups_mock.create.assert_called_with(
125
- self.new_backup.volume_id,
126
- self.new_backup.container,
127
- None,
128
- self.new_backup.description,
129
- )
130
- self.assertEqual(self.columns, columns)
131
- self.assertCountEqual(self.data, data)
132
-
133
-
134
- class TestBackupDelete(TestBackup):
135
- backups = volume_fakes.create_backups(count=2)
136
-
137
- def setUp(self):
138
- super().setUp()
139
-
140
- self.backups_mock.get = volume_fakes.get_backups(self.backups)
141
- self.backups_mock.delete.return_value = None
142
-
143
- # Get the command object to mock
144
- self.cmd = volume_backup.DeleteVolumeBackup(self.app, None)
145
-
146
- def test_backup_delete(self):
147
- arglist = [self.backups[0].id]
148
- verifylist = [("backups", [self.backups[0].id])]
149
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
150
-
151
- result = self.cmd.take_action(parsed_args)
152
-
153
- self.backups_mock.delete.assert_called_with(self.backups[0].id)
154
- self.assertIsNone(result)
155
-
156
- def test_delete_multiple_backups(self):
157
- arglist = []
158
- for b in self.backups:
159
- arglist.append(b.id)
160
- verifylist = [
161
- ('backups', arglist),
162
- ]
163
-
164
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
165
- result = self.cmd.take_action(parsed_args)
166
-
167
- calls = []
168
- for b in self.backups:
169
- calls.append(call(b.id))
170
- self.backups_mock.delete.assert_has_calls(calls)
171
- self.assertIsNone(result)
172
-
173
- def test_delete_multiple_backups_with_exception(self):
174
- arglist = [
175
- self.backups[0].id,
176
- 'unexist_backup',
177
- ]
178
- verifylist = [
179
- ('backups', arglist),
180
- ]
181
-
182
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
183
-
184
- find_mock_result = [self.backups[0], exceptions.CommandError]
185
- with mock.patch.object(
186
- utils, 'find_resource', side_effect=find_mock_result
187
- ) as find_mock:
188
- try:
189
- self.cmd.take_action(parsed_args)
190
- self.fail('CommandError should be raised.')
191
- except exceptions.CommandError as e:
192
- self.assertEqual('1 of 2 backups failed to delete.', str(e))
193
-
194
- find_mock.assert_any_call(self.backups_mock, self.backups[0].id)
195
- find_mock.assert_any_call(self.backups_mock, 'unexist_backup')
196
-
197
- self.assertEqual(2, find_mock.call_count)
198
- self.backups_mock.delete.assert_called_once_with(
199
- self.backups[0].id,
200
- )
201
-
202
-
203
- class TestBackupList(TestBackup):
204
- volume = volume_fakes.create_one_volume()
205
- backups = volume_fakes.create_backups(
206
- attrs={'volume_id': volume.display_name},
207
- count=3,
208
- )
209
-
210
- columns = [
211
- 'ID',
212
- 'Name',
213
- 'Description',
214
- 'Status',
215
- 'Size',
216
- ]
217
- columns_long = columns + [
218
- 'Availability Zone',
219
- 'Volume',
220
- 'Container',
221
- ]
222
-
223
- data = []
224
- for b in backups:
225
- data.append(
226
- (
227
- b.id,
228
- b.name,
229
- b.description,
230
- b.status,
231
- b.size,
232
- )
233
- )
234
- data_long = []
235
- for b in backups:
236
- data_long.append(
237
- (
238
- b.id,
239
- b.name,
240
- b.description,
241
- b.status,
242
- b.size,
243
- b.availability_zone,
244
- volume_backup.VolumeIdColumn(b.volume_id),
245
- b.container,
246
- )
247
- )
248
-
249
- def setUp(self):
250
- super().setUp()
251
-
252
- self.volumes_mock.list.return_value = [self.volume]
253
- self.backups_mock.list.return_value = self.backups
254
- self.volumes_mock.get.return_value = self.volume
255
- # Get the command to test
256
- self.cmd = volume_backup.ListVolumeBackup(self.app, None)
257
-
258
- def test_backup_list_without_options(self):
259
- arglist = []
260
- verifylist = [
261
- ("long", False),
262
- ("name", None),
263
- ("status", None),
264
- ("volume", None),
265
- ('all_projects', False),
266
- ]
267
-
268
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
269
- columns, data = self.cmd.take_action(parsed_args)
270
-
271
- search_opts = {
272
- "name": None,
273
- "status": None,
274
- "volume_id": None,
275
- "all_tenants": False,
276
- }
277
- self.volumes_mock.get.assert_not_called()
278
- self.backups_mock.list.assert_called_with(
279
- search_opts=search_opts,
280
- )
281
- self.assertEqual(self.columns, columns)
282
- self.assertCountEqual(self.data, list(data))
283
-
284
- def test_backup_list_with_options(self):
285
- arglist = [
286
- "--long",
287
- "--name",
288
- self.backups[0].name,
289
- "--status",
290
- "error",
291
- "--volume",
292
- self.volume.id,
293
- "--all-projects",
294
- ]
295
- verifylist = [
296
- ("long", True),
297
- ("name", self.backups[0].name),
298
- ("status", "error"),
299
- ("volume", self.volume.id),
300
- ('all_projects', True),
301
- ]
302
-
303
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
304
- columns, data = self.cmd.take_action(parsed_args)
305
-
306
- search_opts = {
307
- "name": self.backups[0].name,
308
- "status": "error",
309
- "volume_id": self.volume.id,
310
- "all_tenants": True,
311
- }
312
- self.volumes_mock.get.assert_called_once_with(self.volume.id)
313
- self.backups_mock.list.assert_called_with(
314
- search_opts=search_opts,
315
- )
316
- self.assertEqual(self.columns_long, columns)
317
- self.assertCountEqual(self.data_long, list(data))
318
-
319
-
320
- class TestBackupRestore(TestBackup):
321
- volume = volume_fakes.create_one_volume()
322
- backup = volume_fakes.create_one_backup(
323
- attrs={'volume_id': volume.id},
324
- )
325
-
326
- def setUp(self):
327
- super().setUp()
328
-
329
- self.backups_mock.get.return_value = self.backup
330
- self.volumes_mock.get.return_value = self.volume
331
- self.restores_mock.restore.return_value = (
332
- volume_fakes.create_one_volume(
333
- {'id': self.volume['id']},
334
- )
335
- )
336
- # Get the command object to mock
337
- self.cmd = volume_backup.RestoreVolumeBackup(self.app, None)
338
-
339
- def test_backup_restore(self):
340
- arglist = [
341
- self.backup.id,
342
- ]
343
- verifylist = [
344
- ("backup", self.backup.id),
345
- ("volume", None),
346
- ]
347
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
348
-
349
- result = self.cmd.take_action(parsed_args)
350
- self.restores_mock.restore.assert_called_with(self.backup.id, None)
351
- self.assertIsNotNone(result)
352
-
353
- def test_backup_restore_with_existing_volume(self):
354
- arglist = [
355
- self.backup.id,
356
- self.backup.volume_id,
357
- ]
358
- verifylist = [
359
- ("backup", self.backup.id),
360
- ("volume", self.backup.volume_id),
361
- ]
362
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
363
-
364
- result = self.cmd.take_action(parsed_args)
365
- self.restores_mock.restore.assert_called_with(
366
- self.backup.id,
367
- self.backup.volume_id,
368
- )
369
- self.assertIsNotNone(result)
370
-
371
- def test_backup_restore_with_invalid_volume(self):
372
- arglist = [
373
- self.backup.id,
374
- "unexist_volume",
375
- ]
376
- verifylist = [
377
- ("backup", self.backup.id),
378
- ("volume", "unexist_volume"),
379
- ]
380
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
381
- with mock.patch.object(
382
- utils,
383
- 'find_resource',
384
- side_effect=exceptions.CommandError(),
385
- ):
386
- self.assertRaises(
387
- exceptions.CommandError,
388
- self.cmd.take_action,
389
- parsed_args,
390
- )
391
-
392
-
393
- class TestBackupShow(TestBackup):
394
- columns = (
395
- 'availability_zone',
396
- 'container',
397
- 'description',
398
- 'id',
399
- 'name',
400
- 'object_count',
401
- 'size',
402
- 'snapshot_id',
403
- 'status',
404
- 'volume_id',
405
- )
406
-
407
- def setUp(self):
408
- super().setUp()
409
- self.backup = volume_fakes.create_one_backup()
410
- self.data = (
411
- self.backup.availability_zone,
412
- self.backup.container,
413
- self.backup.description,
414
- self.backup.id,
415
- self.backup.name,
416
- self.backup.object_count,
417
- self.backup.size,
418
- self.backup.snapshot_id,
419
- self.backup.status,
420
- self.backup.volume_id,
421
- )
422
- self.backups_mock.get.return_value = self.backup
423
- # Get the command object to test
424
- self.cmd = volume_backup.ShowVolumeBackup(self.app, None)
425
-
426
- def test_backup_show(self):
427
- arglist = [self.backup.id]
428
- verifylist = [("backup", self.backup.id)]
429
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
430
-
431
- columns, data = self.cmd.take_action(parsed_args)
432
- self.backups_mock.get.assert_called_with(self.backup.id)
433
-
434
- self.assertEqual(self.columns, columns)
435
- self.assertCountEqual(self.data, data)
File without changes