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