python-openstackclient 7.4.0__py3-none-any.whl → 8.1.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 (264) 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 +7 -5
  9. openstackclient/compute/v2/agent.py +5 -5
  10. openstackclient/compute/v2/aggregate.py +17 -15
  11. openstackclient/compute/v2/console.py +10 -4
  12. openstackclient/compute/v2/console_connection.py +48 -0
  13. openstackclient/compute/v2/flavor.py +14 -18
  14. openstackclient/compute/v2/host.py +3 -3
  15. openstackclient/compute/v2/hypervisor.py +10 -4
  16. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  17. openstackclient/compute/v2/keypair.py +18 -13
  18. openstackclient/compute/v2/server.py +144 -121
  19. openstackclient/compute/v2/server_backup.py +1 -1
  20. openstackclient/compute/v2/server_event.py +8 -17
  21. openstackclient/compute/v2/server_group.py +6 -6
  22. openstackclient/compute/v2/server_image.py +1 -1
  23. openstackclient/compute/v2/server_migration.py +6 -6
  24. openstackclient/compute/v2/server_volume.py +4 -4
  25. openstackclient/compute/v2/service.py +9 -13
  26. openstackclient/compute/v2/usage.py +4 -6
  27. openstackclient/identity/client.py +2 -4
  28. openstackclient/identity/common.py +95 -17
  29. openstackclient/identity/v2_0/ec2creds.py +4 -3
  30. openstackclient/identity/v2_0/endpoint.py +12 -10
  31. openstackclient/identity/v2_0/project.py +6 -6
  32. openstackclient/identity/v2_0/role.py +1 -1
  33. openstackclient/identity/v2_0/service.py +7 -7
  34. openstackclient/identity/v2_0/user.py +6 -21
  35. openstackclient/identity/v3/access_rule.py +2 -5
  36. openstackclient/identity/v3/application_credential.py +2 -2
  37. openstackclient/identity/v3/consumer.py +4 -3
  38. openstackclient/identity/v3/credential.py +6 -7
  39. openstackclient/identity/v3/domain.py +63 -44
  40. openstackclient/identity/v3/ec2creds.py +4 -3
  41. openstackclient/identity/v3/endpoint.py +104 -88
  42. openstackclient/identity/v3/endpoint_group.py +1 -1
  43. openstackclient/identity/v3/group.py +116 -72
  44. openstackclient/identity/v3/identity_provider.py +1 -2
  45. openstackclient/identity/v3/limit.py +4 -9
  46. openstackclient/identity/v3/mapping.py +4 -3
  47. openstackclient/identity/v3/policy.py +5 -8
  48. openstackclient/identity/v3/project.py +23 -6
  49. openstackclient/identity/v3/region.py +2 -5
  50. openstackclient/identity/v3/registered_limit.py +4 -8
  51. openstackclient/identity/v3/role.py +15 -16
  52. openstackclient/identity/v3/service.py +8 -8
  53. openstackclient/identity/v3/service_provider.py +3 -6
  54. openstackclient/identity/v3/tag.py +2 -2
  55. openstackclient/identity/v3/token.py +1 -2
  56. openstackclient/identity/v3/trust.py +74 -25
  57. openstackclient/identity/v3/user.py +47 -11
  58. openstackclient/image/client.py +7 -5
  59. openstackclient/image/v1/image.py +11 -15
  60. openstackclient/image/v2/cache.py +2 -4
  61. openstackclient/image/v2/image.py +41 -48
  62. openstackclient/image/v2/metadef_namespaces.py +4 -3
  63. openstackclient/image/v2/metadef_resource_type_association.py +1 -2
  64. openstackclient/image/v2/metadef_resource_types.py +1 -2
  65. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +9 -1370
  66. openstackclient/network/client.py +4 -16
  67. openstackclient/network/common.py +16 -12
  68. openstackclient/network/utils.py +3 -3
  69. openstackclient/network/v2/address_group.py +5 -9
  70. openstackclient/network/v2/address_scope.py +2 -3
  71. openstackclient/network/v2/default_security_group_rule.py +1 -2
  72. openstackclient/network/v2/floating_ip.py +69 -47
  73. openstackclient/network/v2/floating_ip_port_forwarding.py +7 -7
  74. openstackclient/network/v2/ip_availability.py +1 -2
  75. openstackclient/network/v2/l3_conntrack_helper.py +8 -12
  76. openstackclient/network/v2/local_ip.py +24 -26
  77. openstackclient/network/v2/local_ip_association.py +4 -5
  78. openstackclient/network/v2/ndp_proxy.py +9 -10
  79. openstackclient/network/v2/network.py +12 -16
  80. openstackclient/network/v2/network_agent.py +29 -37
  81. openstackclient/network/v2/network_auto_allocated_topology.py +4 -5
  82. openstackclient/network/v2/network_flavor.py +1 -1
  83. openstackclient/network/v2/network_flavor_profile.py +5 -5
  84. openstackclient/network/v2/network_meter.py +3 -3
  85. openstackclient/network/v2/network_meter_rule.py +5 -8
  86. openstackclient/network/v2/network_qos_policy.py +4 -4
  87. openstackclient/network/v2/network_qos_rule.py +7 -16
  88. openstackclient/network/v2/network_rbac.py +4 -4
  89. openstackclient/network/v2/network_segment.py +6 -7
  90. openstackclient/network/v2/network_segment_range.py +16 -20
  91. openstackclient/network/v2/network_trunk.py +24 -16
  92. openstackclient/network/v2/port.py +28 -29
  93. openstackclient/network/v2/router.py +53 -42
  94. openstackclient/network/v2/security_group.py +13 -19
  95. openstackclient/network/v2/security_group_rule.py +10 -11
  96. openstackclient/network/v2/subnet.py +31 -30
  97. openstackclient/network/v2/subnet_pool.py +4 -4
  98. openstackclient/object/client.py +2 -3
  99. openstackclient/object/v1/container.py +2 -3
  100. openstackclient/object/v1/object.py +2 -9
  101. openstackclient/shell.py +22 -5
  102. openstackclient/tests/functional/base.py +7 -3
  103. openstackclient/tests/functional/common/test_quota.py +3 -1
  104. openstackclient/tests/functional/compute/v2/common.py +12 -6
  105. openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
  106. openstackclient/tests/functional/compute/v2/test_server.py +2 -3
  107. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  108. openstackclient/tests/functional/identity/v2/test_user.py +1 -1
  109. openstackclient/tests/functional/identity/v3/common.py +3 -8
  110. openstackclient/tests/functional/identity/v3/test_application_credential.py +10 -10
  111. openstackclient/tests/functional/identity/v3/test_endpoint.py +3 -3
  112. openstackclient/tests/functional/identity/v3/test_group.py +3 -3
  113. openstackclient/tests/functional/identity/v3/test_idp.py +3 -7
  114. openstackclient/tests/functional/identity/v3/test_limit.py +4 -4
  115. openstackclient/tests/functional/identity/v3/test_project.py +5 -14
  116. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  117. openstackclient/tests/functional/identity/v3/test_registered_limit.py +3 -3
  118. openstackclient/tests/functional/identity/v3/test_role.py +1 -1
  119. openstackclient/tests/functional/identity/v3/test_role_assignment.py +13 -31
  120. openstackclient/tests/functional/identity/v3/test_service_provider.py +3 -7
  121. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  122. openstackclient/tests/functional/network/v2/common.py +7 -3
  123. openstackclient/tests/functional/network/v2/test_address_group.py +4 -0
  124. openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +15 -11
  125. openstackclient/tests/functional/network/v2/test_local_ip.py +4 -0
  126. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +2 -2
  127. openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +2 -3
  128. openstackclient/tests/functional/network/v2/test_network_rbac.py +2 -2
  129. openstackclient/tests/functional/network/v2/test_network_trunk.py +1 -1
  130. openstackclient/tests/functional/network/v2/test_port.py +17 -7
  131. openstackclient/tests/functional/network/v2/test_router.py +42 -0
  132. openstackclient/tests/functional/network/v2/test_subnet_pool.py +4 -0
  133. openstackclient/tests/unit/api/test_compute_v2.py +67 -87
  134. openstackclient/tests/unit/common/test_availability_zone.py +6 -14
  135. openstackclient/tests/unit/common/test_command.py +1 -1
  136. openstackclient/tests/unit/common/test_extension.py +5 -7
  137. openstackclient/tests/unit/common/test_limits.py +1 -1
  138. openstackclient/tests/unit/common/test_project_cleanup.py +5 -6
  139. openstackclient/tests/unit/common/test_quota.py +51 -28
  140. openstackclient/tests/unit/compute/v2/fakes.py +85 -315
  141. openstackclient/tests/unit/compute/v2/test_agent.py +16 -16
  142. openstackclient/tests/unit/compute/v2/test_aggregate.py +56 -60
  143. openstackclient/tests/unit/compute/v2/test_console.py +34 -17
  144. openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
  145. openstackclient/tests/unit/compute/v2/test_flavor.py +72 -72
  146. openstackclient/tests/unit/compute/v2/test_host.py +8 -8
  147. openstackclient/tests/unit/compute/v2/test_hypervisor.py +22 -30
  148. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  149. openstackclient/tests/unit/compute/v2/test_keypair.py +36 -29
  150. openstackclient/tests/unit/compute/v2/test_server.py +693 -606
  151. openstackclient/tests/unit/compute/v2/test_server_backup.py +36 -77
  152. openstackclient/tests/unit/compute/v2/test_server_event.py +18 -20
  153. openstackclient/tests/unit/compute/v2/test_server_group.py +25 -31
  154. openstackclient/tests/unit/compute/v2/test_server_image.py +37 -78
  155. openstackclient/tests/unit/compute/v2/test_server_migration.py +41 -41
  156. openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -12
  157. openstackclient/tests/unit/compute/v2/test_service.py +39 -45
  158. openstackclient/tests/unit/compute/v2/test_usage.py +5 -5
  159. openstackclient/tests/unit/identity/v2_0/fakes.py +1 -1
  160. openstackclient/tests/unit/identity/v3/test_access_rule.py +1 -3
  161. openstackclient/tests/unit/identity/v3/test_application_credential.py +48 -26
  162. openstackclient/tests/unit/identity/v3/test_domain.py +115 -105
  163. openstackclient/tests/unit/identity/v3/test_endpoint.py +167 -172
  164. openstackclient/tests/unit/identity/v3/test_group.py +353 -202
  165. openstackclient/tests/unit/identity/v3/test_mappings.py +2 -2
  166. openstackclient/tests/unit/identity/v3/test_project.py +16 -0
  167. openstackclient/tests/unit/identity/v3/test_trust.py +5 -2
  168. openstackclient/tests/unit/identity/v3/test_user.py +102 -6
  169. openstackclient/tests/unit/image/v1/fakes.py +2 -2
  170. openstackclient/tests/unit/image/v1/test_image.py +8 -9
  171. openstackclient/tests/unit/image/v2/test_image.py +84 -46
  172. openstackclient/tests/unit/integ/cli/test_shell.py +1 -2
  173. openstackclient/tests/unit/network/test_common.py +2 -2
  174. openstackclient/tests/unit/network/v2/fakes.py +405 -485
  175. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +8 -14
  176. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +62 -54
  177. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -1
  178. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
  179. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +1 -3
  180. openstackclient/tests/unit/network/v2/test_network.py +4 -4
  181. openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
  182. openstackclient/tests/unit/network/v2/test_network_compute.py +11 -11
  183. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
  184. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
  185. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
  186. openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
  187. openstackclient/tests/unit/network/v2/test_network_trunk.py +2 -2
  188. openstackclient/tests/unit/network/v2/test_port.py +21 -22
  189. openstackclient/tests/unit/network/v2/test_router.py +130 -51
  190. openstackclient/tests/unit/network/v2/test_security_group_compute.py +11 -19
  191. openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -27
  192. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +15 -17
  193. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +33 -39
  194. openstackclient/tests/unit/object/v1/test_object_all.py +4 -3
  195. openstackclient/tests/unit/test_shell.py +16 -13
  196. openstackclient/tests/unit/volume/v2/fakes.py +1 -2
  197. openstackclient/tests/unit/volume/v2/test_service.py +57 -91
  198. openstackclient/tests/unit/volume/v2/test_volume.py +109 -106
  199. openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
  200. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
  201. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +1 -1
  202. openstackclient/tests/unit/volume/v3/fakes.py +2 -8
  203. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
  204. openstackclient/tests/unit/volume/v3/test_service.py +221 -141
  205. openstackclient/tests/unit/volume/v3/test_volume.py +131 -120
  206. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +4 -4
  207. openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
  208. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +683 -49
  209. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +1 -1
  210. openstackclient/volume/client.py +1 -3
  211. openstackclient/volume/v2/consistency_group.py +4 -8
  212. openstackclient/volume/v2/consistency_group_snapshot.py +1 -2
  213. openstackclient/volume/v2/qos_specs.py +1 -2
  214. openstackclient/volume/v2/service.py +41 -38
  215. openstackclient/volume/v2/volume.py +71 -53
  216. openstackclient/volume/v2/volume_backup.py +15 -10
  217. openstackclient/volume/v2/volume_snapshot.py +129 -93
  218. openstackclient/volume/v2/volume_transfer_request.py +0 -3
  219. openstackclient/volume/v2/volume_type.py +10 -21
  220. openstackclient/volume/v3/block_storage_cluster.py +3 -3
  221. openstackclient/volume/v3/block_storage_log_level.py +22 -28
  222. openstackclient/volume/v3/block_storage_manage.py +1 -3
  223. openstackclient/volume/v3/service.py +105 -14
  224. openstackclient/volume/v3/volume.py +218 -58
  225. openstackclient/volume/v3/volume_attachment.py +3 -2
  226. openstackclient/volume/v3/volume_backup.py +31 -27
  227. openstackclient/volume/v3/volume_group.py +2 -1
  228. openstackclient/volume/v3/volume_group_snapshot.py +2 -1
  229. openstackclient/volume/v3/volume_snapshot.py +489 -13
  230. openstackclient/volume/v3/volume_type.py +10 -21
  231. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/AUTHORS +11 -0
  232. python_openstackclient-8.1.0.dist-info/METADATA +264 -0
  233. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/RECORD +238 -259
  234. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/WHEEL +1 -1
  235. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/entry_points.txt +7 -47
  236. python_openstackclient-8.1.0.dist-info/pbr.json +1 -0
  237. openstackclient/tests/functional/volume/v1/__init__.py +0 -0
  238. openstackclient/tests/functional/volume/v1/common.py +0 -35
  239. openstackclient/tests/functional/volume/v1/test_qos.py +0 -100
  240. openstackclient/tests/functional/volume/v1/test_service.py +0 -76
  241. openstackclient/tests/functional/volume/v1/test_snapshot.py +0 -232
  242. openstackclient/tests/functional/volume/v1/test_transfer_request.py +0 -111
  243. openstackclient/tests/functional/volume/v1/test_volume.py +0 -228
  244. openstackclient/tests/functional/volume/v1/test_volume_type.py +0 -213
  245. openstackclient/tests/unit/volume/v1/__init__.py +0 -0
  246. openstackclient/tests/unit/volume/v1/fakes.py +0 -615
  247. openstackclient/tests/unit/volume/v1/test_qos_specs.py +0 -471
  248. openstackclient/tests/unit/volume/v1/test_service.py +0 -295
  249. openstackclient/tests/unit/volume/v1/test_transfer_request.py +0 -380
  250. openstackclient/tests/unit/volume/v1/test_type.py +0 -633
  251. openstackclient/tests/unit/volume/v1/test_volume.py +0 -1447
  252. openstackclient/tests/unit/volume/v1/test_volume_backup.py +0 -435
  253. openstackclient/volume/v1/__init__.py +0 -0
  254. openstackclient/volume/v1/qos_specs.py +0 -377
  255. openstackclient/volume/v1/service.py +0 -136
  256. openstackclient/volume/v1/volume.py +0 -734
  257. openstackclient/volume/v1/volume_backup.py +0 -302
  258. openstackclient/volume/v1/volume_snapshot.py +0 -433
  259. openstackclient/volume/v1/volume_transfer_request.py +0 -200
  260. openstackclient/volume/v1/volume_type.py +0 -520
  261. python_openstackclient-7.4.0.dist-info/METADATA +0 -172
  262. python_openstackclient-7.4.0.dist-info/pbr.json +0 -1
  263. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/LICENSE +0 -0
  264. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/top_level.txt +0 -0
@@ -1,295 +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 osc_lib import exceptions
16
-
17
- from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
18
- from openstackclient.volume.v1 import service
19
-
20
-
21
- class TestService(volume_fakes.TestVolumev1):
22
- def setUp(self):
23
- super().setUp()
24
-
25
- # Get a shortcut to the ServiceManager Mock
26
- self.service_mock = self.volume_client.services
27
- self.service_mock.reset_mock()
28
-
29
-
30
- class TestServiceList(TestService):
31
- # The service to be listed
32
- services = volume_fakes.create_one_service()
33
-
34
- def setUp(self):
35
- super().setUp()
36
-
37
- self.service_mock.list.return_value = [self.services]
38
-
39
- # Get the command object to test
40
- self.cmd = service.ListService(self.app, None)
41
-
42
- def test_service_list(self):
43
- arglist = [
44
- '--host',
45
- self.services.host,
46
- '--service',
47
- self.services.binary,
48
- ]
49
- verifylist = [
50
- ('host', self.services.host),
51
- ('service', self.services.binary),
52
- ]
53
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
54
-
55
- # In base command class Lister in cliff, abstract method take_action()
56
- # returns a tuple containing the column names and an iterable
57
- # containing the data to be listed.
58
- columns, data = self.cmd.take_action(parsed_args)
59
-
60
- expected_columns = [
61
- 'Binary',
62
- 'Host',
63
- 'Zone',
64
- 'Status',
65
- 'State',
66
- 'Updated At',
67
- ]
68
-
69
- # confirming if all expected columns are present in the result.
70
- self.assertEqual(expected_columns, columns)
71
-
72
- datalist = (
73
- (
74
- self.services.binary,
75
- self.services.host,
76
- self.services.zone,
77
- self.services.status,
78
- self.services.state,
79
- self.services.updated_at,
80
- ),
81
- )
82
-
83
- # confirming if all expected values are present in the result.
84
- self.assertEqual(datalist, tuple(data))
85
-
86
- # checking if proper call was made to list services
87
- self.service_mock.list.assert_called_with(
88
- self.services.host,
89
- self.services.binary,
90
- )
91
-
92
- # checking if prohibited columns are present in output
93
- self.assertNotIn("Disabled Reason", columns)
94
- self.assertNotIn(self.services.disabled_reason, tuple(data))
95
-
96
- def test_service_list_with_long_option(self):
97
- arglist = [
98
- '--host',
99
- self.services.host,
100
- '--service',
101
- self.services.binary,
102
- '--long',
103
- ]
104
- verifylist = [
105
- ('host', self.services.host),
106
- ('service', self.services.binary),
107
- ('long', True),
108
- ]
109
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
110
-
111
- # In base command class Lister in cliff, abstract method take_action()
112
- # returns a tuple containing the column names and an iterable
113
- # containing the data to be listed.
114
- columns, data = self.cmd.take_action(parsed_args)
115
-
116
- expected_columns = [
117
- 'Binary',
118
- 'Host',
119
- 'Zone',
120
- 'Status',
121
- 'State',
122
- 'Updated At',
123
- 'Disabled Reason',
124
- ]
125
-
126
- # confirming if all expected columns are present in the result.
127
- self.assertEqual(expected_columns, columns)
128
-
129
- datalist = (
130
- (
131
- self.services.binary,
132
- self.services.host,
133
- self.services.zone,
134
- self.services.status,
135
- self.services.state,
136
- self.services.updated_at,
137
- self.services.disabled_reason,
138
- ),
139
- )
140
-
141
- # confirming if all expected values are present in the result.
142
- self.assertEqual(datalist, tuple(data))
143
-
144
- self.service_mock.list.assert_called_with(
145
- self.services.host,
146
- self.services.binary,
147
- )
148
-
149
-
150
- class TestServiceSet(TestService):
151
- service = volume_fakes.create_one_service()
152
-
153
- def setUp(self):
154
- super().setUp()
155
-
156
- self.service_mock.enable.return_value = self.service
157
- self.service_mock.disable.return_value = self.service
158
- self.service_mock.disable_log_reason.return_value = self.service
159
-
160
- self.cmd = service.SetService(self.app, None)
161
-
162
- def test_service_set_nothing(self):
163
- arglist = [
164
- self.service.host,
165
- self.service.binary,
166
- ]
167
- verifylist = [
168
- ('host', self.service.host),
169
- ('service', self.service.binary),
170
- ]
171
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
172
- result = self.cmd.take_action(parsed_args)
173
-
174
- self.service_mock.enable.assert_not_called()
175
- self.service_mock.disable.assert_not_called()
176
- self.service_mock.disable_log_reason.assert_not_called()
177
- self.assertIsNone(result)
178
-
179
- def test_service_set_enable(self):
180
- arglist = [
181
- '--enable',
182
- self.service.host,
183
- self.service.binary,
184
- ]
185
- verifylist = [
186
- ('enable', True),
187
- ('host', self.service.host),
188
- ('service', self.service.binary),
189
- ]
190
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
191
-
192
- result = self.cmd.take_action(parsed_args)
193
-
194
- self.service_mock.enable.assert_called_with(
195
- self.service.host, self.service.binary
196
- )
197
- self.service_mock.disable.assert_not_called()
198
- self.service_mock.disable_log_reason.assert_not_called()
199
- self.assertIsNone(result)
200
-
201
- def test_service_set_disable(self):
202
- arglist = [
203
- '--disable',
204
- self.service.host,
205
- self.service.binary,
206
- ]
207
- verifylist = [
208
- ('disable', True),
209
- ('host', self.service.host),
210
- ('service', self.service.binary),
211
- ]
212
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
213
-
214
- result = self.cmd.take_action(parsed_args)
215
-
216
- self.service_mock.disable.assert_called_with(
217
- self.service.host, self.service.binary
218
- )
219
- self.service_mock.enable.assert_not_called()
220
- self.service_mock.disable_log_reason.assert_not_called()
221
- self.assertIsNone(result)
222
-
223
- def test_service_set_disable_with_reason(self):
224
- reason = 'earthquake'
225
- arglist = [
226
- '--disable',
227
- '--disable-reason',
228
- reason,
229
- self.service.host,
230
- self.service.binary,
231
- ]
232
- verifylist = [
233
- ('disable', True),
234
- ('disable_reason', reason),
235
- ('host', self.service.host),
236
- ('service', self.service.binary),
237
- ]
238
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
239
-
240
- result = self.cmd.take_action(parsed_args)
241
-
242
- self.service_mock.disable_log_reason.assert_called_with(
243
- self.service.host, self.service.binary, reason
244
- )
245
- self.assertIsNone(result)
246
-
247
- def test_service_set_only_with_disable_reason(self):
248
- reason = 'earthquake'
249
- arglist = [
250
- '--disable-reason',
251
- reason,
252
- self.service.host,
253
- self.service.binary,
254
- ]
255
- verifylist = [
256
- ('disable_reason', reason),
257
- ('host', self.service.host),
258
- ('service', self.service.binary),
259
- ]
260
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
261
- try:
262
- self.cmd.take_action(parsed_args)
263
- self.fail("CommandError should be raised.")
264
- except exceptions.CommandError as e:
265
- self.assertEqual(
266
- "Cannot specify option --disable-reason without "
267
- "--disable specified.",
268
- str(e),
269
- )
270
-
271
- def test_service_set_enable_with_disable_reason(self):
272
- reason = 'earthquake'
273
- arglist = [
274
- '--enable',
275
- '--disable-reason',
276
- reason,
277
- self.service.host,
278
- self.service.binary,
279
- ]
280
- verifylist = [
281
- ('enable', True),
282
- ('disable_reason', reason),
283
- ('host', self.service.host),
284
- ('service', self.service.binary),
285
- ]
286
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
287
- try:
288
- self.cmd.take_action(parsed_args)
289
- self.fail("CommandError should be raised.")
290
- except exceptions.CommandError as e:
291
- self.assertEqual(
292
- "Cannot specify option --disable-reason without "
293
- "--disable specified.",
294
- str(e),
295
- )
@@ -1,380 +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_transfer_request
23
-
24
-
25
- class TestTransfer(volume_fakes.TestVolumev1):
26
- def setUp(self):
27
- super().setUp()
28
-
29
- # Get a shortcut to the TransferManager Mock
30
- self.transfer_mock = self.volume_client.transfers
31
- self.transfer_mock.reset_mock()
32
-
33
- # Get a shortcut to the VolumeManager Mock
34
- self.volumes_mock = self.volume_client.volumes
35
- self.volumes_mock.reset_mock()
36
-
37
-
38
- class TestTransferAccept(TestTransfer):
39
- columns = (
40
- 'id',
41
- 'name',
42
- 'volume_id',
43
- )
44
-
45
- def setUp(self):
46
- super().setUp()
47
-
48
- self.volume_transfer = volume_fakes.create_one_transfer()
49
- self.data = (
50
- self.volume_transfer.id,
51
- self.volume_transfer.name,
52
- self.volume_transfer.volume_id,
53
- )
54
-
55
- self.transfer_mock.get.return_value = self.volume_transfer
56
- self.transfer_mock.accept.return_value = self.volume_transfer
57
-
58
- # Get the command object to test
59
- self.cmd = volume_transfer_request.AcceptTransferRequest(
60
- self.app, None
61
- )
62
-
63
- def test_transfer_accept(self):
64
- arglist = [
65
- '--auth-key',
66
- 'key_value',
67
- self.volume_transfer.id,
68
- ]
69
- verifylist = [
70
- ('transfer_request', self.volume_transfer.id),
71
- ('auth_key', 'key_value'),
72
- ]
73
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
74
-
75
- columns, data = self.cmd.take_action(parsed_args)
76
-
77
- self.transfer_mock.get.assert_called_once_with(
78
- self.volume_transfer.id,
79
- )
80
- self.transfer_mock.accept.assert_called_once_with(
81
- self.volume_transfer.id,
82
- 'key_value',
83
- )
84
- self.assertEqual(self.columns, columns)
85
- self.assertEqual(self.data, data)
86
-
87
- def test_transfer_accept_no_option(self):
88
- arglist = [
89
- self.volume_transfer.id,
90
- ]
91
- verifylist = [
92
- ('transfer_request', self.volume_transfer.id),
93
- ]
94
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
95
-
96
- self.assertRaises(
97
- exceptions.CommandError,
98
- self.cmd.take_action,
99
- parsed_args,
100
- )
101
-
102
-
103
- class TestTransferCreate(TestTransfer):
104
- volume = volume_fakes.create_one_volume()
105
-
106
- columns = (
107
- 'auth_key',
108
- 'created_at',
109
- 'id',
110
- 'name',
111
- 'volume_id',
112
- )
113
-
114
- def setUp(self):
115
- super().setUp()
116
-
117
- self.volume_transfer = volume_fakes.create_one_transfer(
118
- attrs={
119
- 'volume_id': self.volume.id,
120
- 'auth_key': 'key',
121
- 'created_at': 'time',
122
- },
123
- )
124
- self.data = (
125
- self.volume_transfer.auth_key,
126
- self.volume_transfer.created_at,
127
- self.volume_transfer.id,
128
- self.volume_transfer.name,
129
- self.volume_transfer.volume_id,
130
- )
131
-
132
- self.transfer_mock.create.return_value = self.volume_transfer
133
- self.volumes_mock.get.return_value = self.volume
134
-
135
- # Get the command object to test
136
- self.cmd = volume_transfer_request.CreateTransferRequest(
137
- self.app, None
138
- )
139
-
140
- def test_transfer_create_without_name(self):
141
- arglist = [
142
- self.volume.id,
143
- ]
144
- verifylist = [
145
- ('volume', self.volume.id),
146
- ]
147
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
148
-
149
- columns, data = self.cmd.take_action(parsed_args)
150
-
151
- self.transfer_mock.create.assert_called_once_with(self.volume.id, None)
152
- self.assertEqual(self.columns, columns)
153
- self.assertEqual(self.data, data)
154
-
155
- def test_transfer_create_with_name(self):
156
- arglist = [
157
- '--name',
158
- self.volume_transfer.name,
159
- self.volume.id,
160
- ]
161
- verifylist = [
162
- ('name', self.volume_transfer.name),
163
- ('volume', self.volume.id),
164
- ]
165
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
166
-
167
- columns, data = self.cmd.take_action(parsed_args)
168
-
169
- self.transfer_mock.create.assert_called_once_with(
170
- self.volume.id,
171
- self.volume_transfer.name,
172
- )
173
- self.assertEqual(self.columns, columns)
174
- self.assertEqual(self.data, data)
175
-
176
-
177
- class TestTransferDelete(TestTransfer):
178
- volume_transfers = volume_fakes.create_transfers(count=2)
179
-
180
- def setUp(self):
181
- super().setUp()
182
-
183
- self.transfer_mock.get = volume_fakes.get_transfers(
184
- self.volume_transfers,
185
- )
186
- self.transfer_mock.delete.return_value = None
187
-
188
- # Get the command object to mock
189
- self.cmd = volume_transfer_request.DeleteTransferRequest(
190
- self.app, None
191
- )
192
-
193
- def test_transfer_delete(self):
194
- arglist = [self.volume_transfers[0].id]
195
- verifylist = [("transfer_request", [self.volume_transfers[0].id])]
196
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
197
-
198
- result = self.cmd.take_action(parsed_args)
199
-
200
- self.transfer_mock.delete.assert_called_with(
201
- self.volume_transfers[0].id
202
- )
203
- self.assertIsNone(result)
204
-
205
- def test_delete_multiple_transfers(self):
206
- arglist = []
207
- for v in self.volume_transfers:
208
- arglist.append(v.id)
209
- verifylist = [
210
- ('transfer_request', arglist),
211
- ]
212
-
213
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
214
- result = self.cmd.take_action(parsed_args)
215
-
216
- calls = []
217
- for v in self.volume_transfers:
218
- calls.append(call(v.id))
219
- self.transfer_mock.delete.assert_has_calls(calls)
220
- self.assertIsNone(result)
221
-
222
- def test_delete_multiple_transfers_with_exception(self):
223
- arglist = [
224
- self.volume_transfers[0].id,
225
- 'unexist_transfer',
226
- ]
227
- verifylist = [
228
- ('transfer_request', arglist),
229
- ]
230
-
231
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
232
-
233
- find_mock_result = [self.volume_transfers[0], exceptions.CommandError]
234
- with mock.patch.object(
235
- utils, 'find_resource', side_effect=find_mock_result
236
- ) as find_mock:
237
- try:
238
- self.cmd.take_action(parsed_args)
239
- self.fail('CommandError should be raised.')
240
- except exceptions.CommandError as e:
241
- self.assertEqual(
242
- '1 of 2 volume transfer requests failed ' 'to delete',
243
- str(e),
244
- )
245
-
246
- find_mock.assert_any_call(
247
- self.transfer_mock, self.volume_transfers[0].id
248
- )
249
- find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer')
250
-
251
- self.assertEqual(2, find_mock.call_count)
252
- self.transfer_mock.delete.assert_called_once_with(
253
- self.volume_transfers[0].id,
254
- )
255
-
256
-
257
- class TestTransferList(TestTransfer):
258
- # The Transfers to be listed
259
- volume_transfers = volume_fakes.create_one_transfer()
260
-
261
- def setUp(self):
262
- super().setUp()
263
-
264
- self.transfer_mock.list.return_value = [self.volume_transfers]
265
-
266
- # Get the command object to test
267
- self.cmd = volume_transfer_request.ListTransferRequest(self.app, None)
268
-
269
- def test_transfer_list_without_argument(self):
270
- arglist = []
271
- verifylist = []
272
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
273
-
274
- # In base command class Lister in cliff, abstract method take_action()
275
- # returns a tuple containing the column names and an iterable
276
- # containing the data to be listed.
277
- columns, data = self.cmd.take_action(parsed_args)
278
-
279
- expected_columns = [
280
- 'ID',
281
- 'Name',
282
- 'Volume',
283
- ]
284
-
285
- # confirming if all expected columns are present in the result.
286
- self.assertEqual(expected_columns, columns)
287
-
288
- datalist = (
289
- (
290
- self.volume_transfers.id,
291
- self.volume_transfers.name,
292
- self.volume_transfers.volume_id,
293
- ),
294
- )
295
-
296
- # confirming if all expected values are present in the result.
297
- self.assertEqual(datalist, tuple(data))
298
-
299
- # checking if proper call was made to list volume_transfers
300
- self.transfer_mock.list.assert_called_with(
301
- detailed=True, search_opts={'all_tenants': 0}
302
- )
303
-
304
- def test_transfer_list_with_argument(self):
305
- arglist = ["--all-projects"]
306
- verifylist = [("all_projects", True)]
307
-
308
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
309
-
310
- # In base command class Lister in cliff, abstract method take_action()
311
- # returns a tuple containing the column names and an iterable
312
- # containing the data to be listed.
313
- columns, data = self.cmd.take_action(parsed_args)
314
-
315
- expected_columns = [
316
- 'ID',
317
- 'Name',
318
- 'Volume',
319
- ]
320
-
321
- # confirming if all expected columns are present in the result.
322
- self.assertEqual(expected_columns, columns)
323
-
324
- datalist = (
325
- (
326
- self.volume_transfers.id,
327
- self.volume_transfers.name,
328
- self.volume_transfers.volume_id,
329
- ),
330
- )
331
-
332
- # confirming if all expected values are present in the result.
333
- self.assertEqual(datalist, tuple(data))
334
-
335
- # checking if proper call was made to list volume_transfers
336
- self.transfer_mock.list.assert_called_with(
337
- detailed=True, search_opts={'all_tenants': 1}
338
- )
339
-
340
-
341
- class TestTransferShow(TestTransfer):
342
- columns = (
343
- 'created_at',
344
- 'id',
345
- 'name',
346
- 'volume_id',
347
- )
348
-
349
- def setUp(self):
350
- super().setUp()
351
-
352
- self.volume_transfer = volume_fakes.create_one_transfer(
353
- attrs={'created_at': 'time'}
354
- )
355
- self.data = (
356
- self.volume_transfer.created_at,
357
- self.volume_transfer.id,
358
- self.volume_transfer.name,
359
- self.volume_transfer.volume_id,
360
- )
361
-
362
- self.transfer_mock.get.return_value = self.volume_transfer
363
-
364
- # Get the command object to test
365
- self.cmd = volume_transfer_request.ShowTransferRequest(self.app, None)
366
-
367
- def test_transfer_show(self):
368
- arglist = [
369
- self.volume_transfer.id,
370
- ]
371
- verifylist = [
372
- ('transfer_request', self.volume_transfer.id),
373
- ]
374
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
375
-
376
- columns, data = self.cmd.take_action(parsed_args)
377
-
378
- self.transfer_mock.get.assert_called_once_with(self.volume_transfer.id)
379
- self.assertEqual(self.columns, columns)
380
- self.assertEqual(self.data, data)