python-openstackclient 10.0.0__py3-none-any.whl → 10.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 (203) hide show
  1. openstackclient/common/availability_zone.py +1 -1
  2. openstackclient/common/module.py +21 -27
  3. openstackclient/common/pagination.py +42 -4
  4. openstackclient/common/project_cleanup.py +1 -2
  5. openstackclient/common/quota.py +9 -5
  6. openstackclient/compute/v2/flavor.py +3 -1
  7. openstackclient/compute/v2/hypervisor.py +2 -0
  8. openstackclient/compute/v2/keypair.py +6 -2
  9. openstackclient/compute/v2/server.py +21 -12
  10. openstackclient/compute/v2/server_event.py +8 -1
  11. openstackclient/compute/v2/server_group.py +2 -0
  12. openstackclient/compute/v2/server_migration.py +3 -0
  13. openstackclient/compute/v2/server_volume.py +3 -1
  14. openstackclient/compute/v2/service.py +3 -1
  15. openstackclient/compute/v2/usage.py +2 -2
  16. openstackclient/identity/common.py +5 -1
  17. openstackclient/identity/v3/access_rule.py +6 -0
  18. openstackclient/identity/v3/application_credential.py +10 -3
  19. openstackclient/identity/v3/credential.py +4 -2
  20. openstackclient/identity/v3/domain.py +4 -2
  21. openstackclient/identity/v3/endpoint.py +57 -45
  22. openstackclient/identity/v3/federation_protocol.py +7 -5
  23. openstackclient/identity/v3/group.py +11 -10
  24. openstackclient/identity/v3/identity_provider.py +4 -1
  25. openstackclient/identity/v3/limit.py +5 -2
  26. openstackclient/identity/v3/mapping.py +36 -19
  27. openstackclient/identity/v3/project.py +18 -5
  28. openstackclient/identity/v3/region.py +4 -2
  29. openstackclient/identity/v3/registered_limit.py +3 -2
  30. openstackclient/identity/v3/role.py +2 -1
  31. openstackclient/identity/v3/role_assignment.py +3 -2
  32. openstackclient/identity/v3/service.py +4 -2
  33. openstackclient/identity/v3/service_provider.py +4 -2
  34. openstackclient/identity/v3/trust.py +8 -5
  35. openstackclient/identity/v3/user.py +38 -11
  36. openstackclient/image/v2/cache.py +2 -2
  37. openstackclient/image/v2/image.py +15 -9
  38. openstackclient/image/v2/metadef_namespaces.py +11 -10
  39. openstackclient/image/v2/metadef_objects.py +5 -5
  40. openstackclient/image/v2/metadef_properties.py +7 -4
  41. openstackclient/image/v2/task.py +11 -22
  42. openstackclient/network/utils.py +0 -41
  43. openstackclient/network/v2/address_group.py +13 -1
  44. openstackclient/network/v2/address_scope.py +13 -8
  45. openstackclient/network/v2/bgpvpn/bgpvpn.py +33 -19
  46. openstackclient/network/v2/bgpvpn/network_association.py +25 -13
  47. openstackclient/network/v2/bgpvpn/port_association.py +35 -21
  48. openstackclient/network/v2/bgpvpn/router_association.py +27 -14
  49. openstackclient/network/v2/default_security_group_rule.py +14 -6
  50. openstackclient/network/v2/floating_ip.py +12 -4
  51. openstackclient/network/v2/floating_ip_port_forwarding.py +12 -2
  52. openstackclient/network/v2/fwaas/group.py +34 -1
  53. openstackclient/network/v2/fwaas/rule.py +39 -3
  54. openstackclient/network/v2/ip_availability.py +13 -4
  55. openstackclient/network/v2/l3_conntrack_helper.py +14 -1
  56. openstackclient/network/v2/local_ip.py +4 -1
  57. openstackclient/network/v2/local_ip_association.py +4 -1
  58. openstackclient/network/v2/ndp_proxy.py +4 -1
  59. openstackclient/network/v2/network.py +87 -20
  60. openstackclient/network/v2/network_agent.py +32 -10
  61. openstackclient/network/v2/network_auto_allocated_topology.py +6 -5
  62. openstackclient/network/v2/network_flavor.py +19 -6
  63. openstackclient/network/v2/network_flavor_profile.py +20 -6
  64. openstackclient/network/v2/network_meter.py +19 -6
  65. openstackclient/network/v2/network_meter_rule.py +20 -2
  66. openstackclient/network/v2/network_qos_policy.py +15 -7
  67. openstackclient/network/v2/network_qos_rule.py +16 -1
  68. openstackclient/network/v2/network_qos_rule_type.py +16 -5
  69. openstackclient/network/v2/network_rbac.py +12 -5
  70. openstackclient/network/v2/network_segment.py +13 -1
  71. openstackclient/network/v2/network_segment_range.py +15 -3
  72. openstackclient/network/v2/network_trunk.py +4 -1
  73. openstackclient/network/v2/port.py +88 -12
  74. openstackclient/network/v2/router.py +27 -16
  75. openstackclient/network/v2/security_group.py +18 -49
  76. openstackclient/network/v2/security_group_rule.py +18 -5
  77. openstackclient/network/v2/subnet.py +15 -7
  78. openstackclient/network/v2/subnet_pool.py +13 -8
  79. openstackclient/network/v2/taas/tap_flow.py +13 -3
  80. openstackclient/network/v2/taas/tap_mirror.py +7 -4
  81. openstackclient/network/v2/taas/tap_service.py +4 -1
  82. openstackclient/object/v1/container.py +3 -1
  83. openstackclient/object/v1/object.py +3 -1
  84. openstackclient/tests/functional/identity/v3/common.py +34 -0
  85. openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
  86. openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
  87. openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
  88. openstackclient/tests/unit/common/test_limits.py +1 -1
  89. openstackclient/tests/unit/common/test_module.py +77 -44
  90. openstackclient/tests/unit/common/test_quota.py +9 -0
  91. openstackclient/tests/unit/compute/v2/fakes.py +1 -57
  92. openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
  93. openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
  94. openstackclient/tests/unit/compute/v2/test_console.py +2 -2
  95. openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
  96. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -1
  97. openstackclient/tests/unit/compute/v2/test_host.py +3 -3
  98. openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
  99. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
  100. openstackclient/tests/unit/compute/v2/test_keypair.py +1 -1
  101. openstackclient/tests/unit/compute/v2/test_server.py +15 -15
  102. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  103. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  104. openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
  105. openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
  106. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  107. openstackclient/tests/unit/compute/v2/test_server_share.py +4 -4
  108. openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
  109. openstackclient/tests/unit/compute/v2/test_service.py +3 -3
  110. openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
  111. openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
  112. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
  113. openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
  114. openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
  115. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
  116. openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
  117. openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
  118. openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
  119. openstackclient/tests/unit/identity/v3/fakes.py +5 -38
  120. openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
  121. openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
  122. openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
  123. openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
  124. openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
  125. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
  126. openstackclient/tests/unit/identity/v3/test_group.py +8 -8
  127. openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
  128. openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
  129. openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
  130. openstackclient/tests/unit/identity/v3/test_project.py +28 -5
  131. openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
  132. openstackclient/tests/unit/identity/v3/test_region.py +5 -5
  133. openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
  134. openstackclient/tests/unit/identity/v3/test_role.py +8 -8
  135. openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
  136. openstackclient/tests/unit/identity/v3/test_service.py +5 -5
  137. openstackclient/tests/unit/identity/v3/test_token.py +2 -2
  138. openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
  139. openstackclient/tests/unit/identity/v3/test_user.py +73 -6
  140. openstackclient/tests/unit/network/v2/fakes.py +5 -77
  141. openstackclient/tests/unit/network/v2/fwaas/test_group.py +28 -2
  142. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +28 -3
  143. openstackclient/tests/unit/network/v2/test_address_group.py +24 -0
  144. openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
  145. openstackclient/tests/unit/network/v2/test_floating_ip.py +24 -0
  146. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +24 -0
  147. openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
  148. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
  149. openstackclient/tests/unit/network/v2/test_network.py +74 -12
  150. openstackclient/tests/unit/network/v2/test_network_agent.py +50 -1
  151. openstackclient/tests/unit/network/v2/test_network_flavor.py +24 -0
  152. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
  153. openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
  154. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +24 -0
  155. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
  156. openstackclient/tests/unit/network/v2/test_network_rbac.py +24 -0
  157. openstackclient/tests/unit/network/v2/test_network_segment.py +24 -0
  158. openstackclient/tests/unit/network/v2/test_network_segment_range.py +24 -0
  159. openstackclient/tests/unit/network/v2/test_port.py +166 -0
  160. openstackclient/tests/unit/network/v2/test_router.py +28 -7
  161. openstackclient/tests/unit/network/v2/test_security_group.py +22 -0
  162. openstackclient/tests/unit/network/v2/test_security_group_rule.py +25 -0
  163. openstackclient/tests/unit/network/v2/test_subnet.py +28 -4
  164. openstackclient/tests/unit/network/v2/test_subnet_pool.py +24 -0
  165. openstackclient/tests/unit/volume/v2/fakes.py +20 -140
  166. openstackclient/tests/unit/volume/v2/test_volume_backup.py +5 -9
  167. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +6 -0
  168. openstackclient/tests/unit/volume/v3/fakes.py +204 -100
  169. openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
  170. openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
  171. openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
  172. openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
  173. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +2 -0
  174. openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
  175. openstackclient/tests/unit/volume/v3/test_volume_backup.py +5 -9
  176. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
  177. openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
  178. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +6 -0
  179. openstackclient/volume/v2/volume.py +4 -2
  180. openstackclient/volume/v2/volume_backup.py +2 -3
  181. openstackclient/volume/v2/volume_snapshot.py +3 -4
  182. openstackclient/volume/v3/backup_record.py +94 -0
  183. openstackclient/volume/v3/consistency_group.py +400 -0
  184. openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
  185. openstackclient/volume/v3/qos_specs.py +389 -0
  186. openstackclient/volume/v3/volume.py +4 -2
  187. openstackclient/volume/v3/volume_attachment.py +5 -1
  188. openstackclient/volume/v3/volume_backend.py +130 -0
  189. openstackclient/volume/v3/volume_backup.py +2 -3
  190. openstackclient/volume/v3/volume_group_snapshot.py +4 -6
  191. openstackclient/volume/v3/volume_group_type.py +1 -1
  192. openstackclient/volume/v3/volume_host.py +74 -0
  193. openstackclient/volume/v3/volume_message.py +3 -1
  194. openstackclient/volume/v3/volume_snapshot.py +2 -1
  195. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +3 -4
  196. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/RECORD +202 -188
  197. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +24 -24
  198. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +5 -0
  199. python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
  200. python_openstackclient-10.0.0.dist-info/pbr.json +0 -1
  201. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +0 -0
  202. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
  203. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,354 @@
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
+ from unittest.mock import call
15
+
16
+ from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
17
+ from openstackclient.volume.v3 import consistency_group_snapshot
18
+
19
+
20
+ class TestConsistencyGroupSnapshot(volume_fakes.TestVolume):
21
+ def setUp(self):
22
+ super().setUp()
23
+
24
+ # Get a shortcut to the TransferManager Mock
25
+ self.cgsnapshots_mock = self.volume_client.cgsnapshots
26
+ self.cgsnapshots_mock.reset_mock()
27
+ self.consistencygroups_mock = self.volume_client.consistencygroups
28
+ self.consistencygroups_mock.reset_mock()
29
+
30
+
31
+ class TestConsistencyGroupSnapshotCreate(TestConsistencyGroupSnapshot):
32
+ _consistency_group_snapshot = (
33
+ volume_fakes.create_one_consistency_group_snapshot()
34
+ )
35
+ consistency_group = volume_fakes.create_one_consistency_group()
36
+
37
+ columns = (
38
+ 'consistencygroup_id',
39
+ 'created_at',
40
+ 'description',
41
+ 'id',
42
+ 'name',
43
+ 'status',
44
+ )
45
+ data = (
46
+ _consistency_group_snapshot.consistencygroup_id,
47
+ _consistency_group_snapshot.created_at,
48
+ _consistency_group_snapshot.description,
49
+ _consistency_group_snapshot.id,
50
+ _consistency_group_snapshot.name,
51
+ _consistency_group_snapshot.status,
52
+ )
53
+
54
+ def setUp(self):
55
+ super().setUp()
56
+ self.cgsnapshots_mock.create.return_value = (
57
+ self._consistency_group_snapshot
58
+ )
59
+ self.consistencygroups_mock.get.return_value = self.consistency_group
60
+
61
+ # Get the command object to test
62
+ self.cmd = consistency_group_snapshot.CreateConsistencyGroupSnapshot(
63
+ self.app, None
64
+ )
65
+
66
+ def test_consistency_group_snapshot_create(self):
67
+ arglist = [
68
+ '--consistency-group',
69
+ self.consistency_group.id,
70
+ '--description',
71
+ self._consistency_group_snapshot.description,
72
+ self._consistency_group_snapshot.name,
73
+ ]
74
+ verifylist = [
75
+ ('consistency_group', self.consistency_group.id),
76
+ ('description', self._consistency_group_snapshot.description),
77
+ ('snapshot_name', self._consistency_group_snapshot.name),
78
+ ]
79
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
80
+
81
+ columns, data = self.cmd.take_action(parsed_args)
82
+
83
+ self.consistencygroups_mock.get.assert_called_once_with(
84
+ self.consistency_group.id
85
+ )
86
+ self.cgsnapshots_mock.create.assert_called_once_with(
87
+ self.consistency_group.id,
88
+ name=self._consistency_group_snapshot.name,
89
+ description=self._consistency_group_snapshot.description,
90
+ )
91
+
92
+ self.assertEqual(self.columns, columns)
93
+ self.assertEqual(self.data, data)
94
+
95
+ def test_consistency_group_snapshot_create_no_consistency_group(self):
96
+ arglist = [
97
+ '--description',
98
+ self._consistency_group_snapshot.description,
99
+ self._consistency_group_snapshot.name,
100
+ ]
101
+ verifylist = [
102
+ ('description', self._consistency_group_snapshot.description),
103
+ ('snapshot_name', self._consistency_group_snapshot.name),
104
+ ]
105
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
106
+
107
+ columns, data = self.cmd.take_action(parsed_args)
108
+
109
+ self.consistencygroups_mock.get.assert_called_once_with(
110
+ self._consistency_group_snapshot.name
111
+ )
112
+ self.cgsnapshots_mock.create.assert_called_once_with(
113
+ self.consistency_group.id,
114
+ name=self._consistency_group_snapshot.name,
115
+ description=self._consistency_group_snapshot.description,
116
+ )
117
+
118
+ self.assertEqual(self.columns, columns)
119
+ self.assertEqual(self.data, data)
120
+
121
+
122
+ class TestConsistencyGroupSnapshotDelete(TestConsistencyGroupSnapshot):
123
+ consistency_group_snapshots = (
124
+ volume_fakes.create_consistency_group_snapshots(count=2)
125
+ )
126
+
127
+ def setUp(self):
128
+ super().setUp()
129
+
130
+ self.cgsnapshots_mock.get = (
131
+ volume_fakes.get_consistency_group_snapshots(
132
+ self.consistency_group_snapshots
133
+ )
134
+ )
135
+ self.cgsnapshots_mock.delete.return_value = None
136
+
137
+ # Get the command object to mock
138
+ self.cmd = consistency_group_snapshot.DeleteConsistencyGroupSnapshot(
139
+ self.app, None
140
+ )
141
+
142
+ def test_consistency_group_snapshot_delete(self):
143
+ arglist = [self.consistency_group_snapshots[0].id]
144
+ verifylist = [
145
+ (
146
+ "consistency_group_snapshot",
147
+ [self.consistency_group_snapshots[0].id],
148
+ )
149
+ ]
150
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
151
+
152
+ result = self.cmd.take_action(parsed_args)
153
+
154
+ self.cgsnapshots_mock.delete.assert_called_once_with(
155
+ self.consistency_group_snapshots[0].id
156
+ )
157
+ self.assertIsNone(result)
158
+
159
+ def test_multiple_consistency_group_snapshots_delete(self):
160
+ arglist = []
161
+ for c in self.consistency_group_snapshots:
162
+ arglist.append(c.id)
163
+ verifylist = [
164
+ ('consistency_group_snapshot', arglist),
165
+ ]
166
+
167
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
168
+ result = self.cmd.take_action(parsed_args)
169
+
170
+ calls = []
171
+ for c in self.consistency_group_snapshots:
172
+ calls.append(call(c.id))
173
+ self.cgsnapshots_mock.delete.assert_has_calls(calls)
174
+ self.assertIsNone(result)
175
+
176
+
177
+ class TestConsistencyGroupSnapshotList(TestConsistencyGroupSnapshot):
178
+ consistency_group_snapshots = (
179
+ volume_fakes.create_consistency_group_snapshots(count=2)
180
+ )
181
+ consistency_group = volume_fakes.create_one_consistency_group()
182
+
183
+ columns = [
184
+ 'ID',
185
+ 'Status',
186
+ 'Name',
187
+ ]
188
+ columns_long = [
189
+ 'ID',
190
+ 'Status',
191
+ 'ConsistencyGroup ID',
192
+ 'Name',
193
+ 'Description',
194
+ 'Created At',
195
+ ]
196
+ data = []
197
+ for c in consistency_group_snapshots:
198
+ data.append(
199
+ (
200
+ c.id,
201
+ c.status,
202
+ c.name,
203
+ )
204
+ )
205
+ data_long = []
206
+ for c in consistency_group_snapshots:
207
+ data_long.append(
208
+ (
209
+ c.id,
210
+ c.status,
211
+ c.consistencygroup_id,
212
+ c.name,
213
+ c.description,
214
+ c.created_at,
215
+ )
216
+ )
217
+
218
+ def setUp(self):
219
+ super().setUp()
220
+
221
+ self.cgsnapshots_mock.list.return_value = (
222
+ self.consistency_group_snapshots
223
+ )
224
+ self.consistencygroups_mock.get.return_value = self.consistency_group
225
+ # Get the command to test
226
+ self.cmd = consistency_group_snapshot.ListConsistencyGroupSnapshot(
227
+ self.app, None
228
+ )
229
+
230
+ def test_consistency_group_snapshot_list_without_options(self):
231
+ arglist = []
232
+ verifylist = [
233
+ ("all_projects", False),
234
+ ("long", False),
235
+ ("status", None),
236
+ ("consistency_group", None),
237
+ ]
238
+
239
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
240
+ columns, data = self.cmd.take_action(parsed_args)
241
+
242
+ search_opts = {
243
+ 'all_tenants': False,
244
+ 'status': None,
245
+ 'consistencygroup_id': None,
246
+ }
247
+ self.cgsnapshots_mock.list.assert_called_once_with(
248
+ detailed=True, search_opts=search_opts
249
+ )
250
+ self.assertEqual(self.columns, columns)
251
+ self.assertEqual(self.data, list(data))
252
+
253
+ def test_consistency_group_snapshot_list_with_long(self):
254
+ arglist = [
255
+ "--long",
256
+ ]
257
+ verifylist = [
258
+ ("all_projects", False),
259
+ ("long", True),
260
+ ("status", None),
261
+ ("consistency_group", None),
262
+ ]
263
+
264
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
265
+ columns, data = self.cmd.take_action(parsed_args)
266
+
267
+ search_opts = {
268
+ 'all_tenants': False,
269
+ 'status': None,
270
+ 'consistencygroup_id': None,
271
+ }
272
+ self.cgsnapshots_mock.list.assert_called_once_with(
273
+ detailed=True, search_opts=search_opts
274
+ )
275
+ self.assertEqual(self.columns_long, columns)
276
+ self.assertEqual(self.data_long, list(data))
277
+
278
+ def test_consistency_group_snapshot_list_with_options(self):
279
+ arglist = [
280
+ "--all-project",
281
+ "--status",
282
+ self.consistency_group_snapshots[0].status,
283
+ "--consistency-group",
284
+ self.consistency_group.id,
285
+ ]
286
+ verifylist = [
287
+ ("all_projects", True),
288
+ ("long", False),
289
+ ("status", self.consistency_group_snapshots[0].status),
290
+ ("consistency_group", self.consistency_group.id),
291
+ ]
292
+
293
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
294
+ columns, data = self.cmd.take_action(parsed_args)
295
+
296
+ search_opts = {
297
+ 'all_tenants': True,
298
+ 'status': self.consistency_group_snapshots[0].status,
299
+ 'consistencygroup_id': self.consistency_group.id,
300
+ }
301
+ self.consistencygroups_mock.get.assert_called_once_with(
302
+ self.consistency_group.id
303
+ )
304
+ self.cgsnapshots_mock.list.assert_called_once_with(
305
+ detailed=True, search_opts=search_opts
306
+ )
307
+ self.assertEqual(self.columns, columns)
308
+ self.assertEqual(self.data, list(data))
309
+
310
+
311
+ class TestConsistencyGroupSnapshotShow(TestConsistencyGroupSnapshot):
312
+ _consistency_group_snapshot = (
313
+ volume_fakes.create_one_consistency_group_snapshot()
314
+ )
315
+
316
+ columns = (
317
+ 'consistencygroup_id',
318
+ 'created_at',
319
+ 'description',
320
+ 'id',
321
+ 'name',
322
+ 'status',
323
+ )
324
+ data = (
325
+ _consistency_group_snapshot.consistencygroup_id,
326
+ _consistency_group_snapshot.created_at,
327
+ _consistency_group_snapshot.description,
328
+ _consistency_group_snapshot.id,
329
+ _consistency_group_snapshot.name,
330
+ _consistency_group_snapshot.status,
331
+ )
332
+
333
+ def setUp(self):
334
+ super().setUp()
335
+
336
+ self.cgsnapshots_mock.get.return_value = (
337
+ self._consistency_group_snapshot
338
+ )
339
+ self.cmd = consistency_group_snapshot.ShowConsistencyGroupSnapshot(
340
+ self.app, None
341
+ )
342
+
343
+ def test_consistency_group_snapshot_show(self):
344
+ arglist = [self._consistency_group_snapshot.id]
345
+ verifylist = [
346
+ ("consistency_group_snapshot", self._consistency_group_snapshot.id)
347
+ ]
348
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
349
+ columns, data = self.cmd.take_action(parsed_args)
350
+ self.cgsnapshots_mock.get.assert_called_once_with(
351
+ self._consistency_group_snapshot.id
352
+ )
353
+ self.assertEqual(self.columns, columns)
354
+ self.assertEqual(self.data, data)