python-openstackclient 6.3.0__py3-none-any.whl → 6.5.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 (162) hide show
  1. openstackclient/common/availability_zone.py +4 -4
  2. openstackclient/common/pagination.py +82 -0
  3. openstackclient/compute/v2/flavor.py +2 -16
  4. openstackclient/compute/v2/hypervisor.py +2 -21
  5. openstackclient/compute/v2/keypair.py +2 -9
  6. openstackclient/compute/v2/server.py +220 -131
  7. openstackclient/compute/v2/server_event.py +30 -19
  8. openstackclient/compute/v2/server_group.py +2 -23
  9. openstackclient/compute/v2/server_migration.py +2 -22
  10. openstackclient/compute/v2/usage.py +4 -6
  11. openstackclient/identity/v3/mapping.py +25 -3
  12. openstackclient/identity/v3/policy.py +3 -1
  13. openstackclient/image/v2/cache.py +218 -0
  14. openstackclient/image/v2/image.py +40 -17
  15. openstackclient/image/v2/metadef_namespaces.py +25 -21
  16. openstackclient/image/v2/metadef_objects.py +189 -0
  17. openstackclient/image/v2/metadef_properties.py +284 -0
  18. openstackclient/network/utils.py +100 -0
  19. openstackclient/network/v2/default_security_group_rule.py +418 -0
  20. openstackclient/network/v2/local_ip_association.py +1 -1
  21. openstackclient/network/v2/ndp_proxy.py +7 -3
  22. openstackclient/network/v2/network.py +2 -2
  23. openstackclient/network/v2/port.py +65 -19
  24. openstackclient/network/v2/security_group_rule.py +18 -111
  25. openstackclient/network/v2/subnet.py +1 -0
  26. openstackclient/object/v1/container.py +2 -12
  27. openstackclient/object/v1/object.py +2 -11
  28. openstackclient/tests/functional/base.py +13 -6
  29. openstackclient/tests/functional/identity/v3/test_role.py +11 -3
  30. openstackclient/tests/functional/network/v2/common.py +7 -1
  31. openstackclient/tests/functional/network/v2/test_address_group.py +2 -4
  32. openstackclient/tests/functional/network/v2/test_address_scope.py +0 -6
  33. openstackclient/tests/functional/network/v2/test_default_security_group_rule.py +67 -0
  34. openstackclient/tests/functional/network/v2/test_floating_ip.py +3 -6
  35. openstackclient/tests/functional/network/v2/test_ip_availability.py +3 -8
  36. openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +3 -4
  37. openstackclient/tests/functional/network/v2/test_local_ip.py +2 -4
  38. openstackclient/tests/functional/network/v2/test_network.py +18 -17
  39. openstackclient/tests/functional/network/v2/test_network_agent.py +24 -21
  40. openstackclient/tests/functional/network/v2/test_network_flavor.py +0 -6
  41. openstackclient/tests/functional/network/v2/test_network_flavor_profile.py +0 -6
  42. openstackclient/tests/functional/network/v2/test_network_meter.py +6 -6
  43. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +7 -8
  44. openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +1 -3
  45. openstackclient/tests/functional/network/v2/test_network_qos_policy.py +4 -4
  46. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +16 -20
  47. openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py +4 -4
  48. openstackclient/tests/functional/network/v2/test_network_rbac.py +1 -4
  49. openstackclient/tests/functional/network/v2/test_network_segment.py +7 -12
  50. openstackclient/tests/functional/network/v2/test_network_segment_range.py +3 -4
  51. openstackclient/tests/functional/network/v2/test_network_service_provider.py +2 -4
  52. openstackclient/tests/functional/network/v2/test_network_trunk.py +3 -3
  53. openstackclient/tests/functional/network/v2/test_port.py +2 -8
  54. openstackclient/tests/functional/network/v2/test_router.py +0 -6
  55. openstackclient/tests/functional/network/v2/test_security_group.py +1 -4
  56. openstackclient/tests/functional/network/v2/test_security_group_rule.py +1 -4
  57. openstackclient/tests/functional/network/v2/test_subnet.py +4 -22
  58. openstackclient/tests/functional/network/v2/test_subnet_pool.py +0 -6
  59. openstackclient/tests/unit/common/test_availability_zone.py +28 -30
  60. openstackclient/tests/unit/common/test_extension.py +1 -4
  61. openstackclient/tests/unit/common/test_limits.py +2 -4
  62. openstackclient/tests/unit/common/test_project_cleanup.py +3 -10
  63. openstackclient/tests/unit/common/test_quota.py +18 -24
  64. openstackclient/tests/unit/compute/v2/fakes.py +24 -11
  65. openstackclient/tests/unit/compute/v2/test_agent.py +1 -1
  66. openstackclient/tests/unit/compute/v2/test_aggregate.py +62 -72
  67. openstackclient/tests/unit/compute/v2/test_console.py +18 -30
  68. openstackclient/tests/unit/compute/v2/test_flavor.py +85 -89
  69. openstackclient/tests/unit/compute/v2/test_host.py +12 -19
  70. openstackclient/tests/unit/compute/v2/test_hypervisor.py +23 -25
  71. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -6
  72. openstackclient/tests/unit/compute/v2/test_keypair.py +25 -39
  73. openstackclient/tests/unit/compute/v2/test_server.py +316 -365
  74. openstackclient/tests/unit/compute/v2/test_server_backup.py +5 -17
  75. openstackclient/tests/unit/compute/v2/test_server_event.py +23 -25
  76. openstackclient/tests/unit/compute/v2/test_server_group.py +41 -33
  77. openstackclient/tests/unit/compute/v2/test_server_image.py +6 -18
  78. openstackclient/tests/unit/compute/v2/test_server_migration.py +45 -45
  79. openstackclient/tests/unit/compute/v2/test_server_volume.py +15 -31
  80. openstackclient/tests/unit/compute/v2/test_service.py +51 -56
  81. openstackclient/tests/unit/compute/v2/test_usage.py +10 -13
  82. openstackclient/tests/unit/fakes.py +4 -0
  83. openstackclient/tests/unit/identity/v3/test_mappings.py +9 -4
  84. openstackclient/tests/unit/identity/v3/test_trust.py +0 -2
  85. openstackclient/tests/unit/image/v1/fakes.py +2 -1
  86. openstackclient/tests/unit/image/v1/test_image.py +1 -1
  87. openstackclient/tests/unit/image/v2/fakes.py +82 -0
  88. openstackclient/tests/unit/image/v2/test_cache.py +214 -0
  89. openstackclient/tests/unit/image/v2/test_image.py +62 -4
  90. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +5 -19
  91. openstackclient/tests/unit/image/v2/test_metadef_objects.py +162 -0
  92. openstackclient/tests/unit/image/v2/test_metadef_properties.py +227 -0
  93. openstackclient/tests/unit/integ/cli/test_shell.py +0 -2
  94. openstackclient/tests/unit/network/test_common.py +3 -3
  95. openstackclient/tests/unit/network/v2/fakes.py +1 -0
  96. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +1133 -0
  97. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +5 -13
  98. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -9
  99. openstackclient/tests/unit/network/v2/test_network.py +33 -0
  100. openstackclient/tests/unit/network/v2/test_network_compute.py +5 -11
  101. openstackclient/tests/unit/network/v2/test_network_trunk.py +6 -8
  102. openstackclient/tests/unit/network/v2/test_port.py +83 -38
  103. openstackclient/tests/unit/network/v2/test_security_group_compute.py +7 -15
  104. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +19 -27
  105. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +3 -6
  106. openstackclient/tests/unit/network/v2/test_subnet.py +92 -0
  107. openstackclient/tests/unit/network/v2/test_subnet_pool.py +11 -13
  108. openstackclient/tests/unit/test_shell.py +1 -7
  109. openstackclient/tests/unit/utils.py +10 -4
  110. openstackclient/tests/unit/volume/v1/fakes.py +7 -1
  111. openstackclient/tests/unit/volume/v1/test_qos_specs.py +2 -2
  112. openstackclient/tests/unit/volume/v1/test_service.py +1 -1
  113. openstackclient/tests/unit/volume/v1/test_transfer_request.py +2 -2
  114. openstackclient/tests/unit/volume/v1/test_type.py +2 -4
  115. openstackclient/tests/unit/volume/v1/test_volume.py +5 -7
  116. openstackclient/tests/unit/volume/v1/test_volume_backup.py +4 -4
  117. openstackclient/tests/unit/volume/v2/fakes.py +32 -12
  118. openstackclient/tests/unit/volume/v2/test_backup_record.py +1 -1
  119. openstackclient/tests/unit/volume/v2/test_consistency_group.py +4 -6
  120. openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +2 -4
  121. openstackclient/tests/unit/volume/v2/test_qos_specs.py +2 -2
  122. openstackclient/tests/unit/volume/v2/test_service.py +1 -1
  123. openstackclient/tests/unit/volume/v2/test_volume.py +78 -16
  124. openstackclient/tests/unit/volume/v2/test_volume_backend.py +10 -22
  125. openstackclient/tests/unit/volume/v2/test_volume_backup.py +76 -89
  126. openstackclient/tests/unit/volume/v2/test_volume_host.py +1 -1
  127. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +5 -7
  128. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +4 -8
  129. openstackclient/tests/unit/volume/v2/test_volume_type.py +164 -24
  130. openstackclient/tests/unit/volume/v3/fakes.py +91 -15
  131. openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +3 -7
  132. openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +11 -31
  133. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +6 -16
  134. openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +219 -157
  135. openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +32 -23
  136. openstackclient/tests/unit/volume/v3/test_volume.py +50 -48
  137. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +17 -47
  138. openstackclient/tests/unit/volume/v3/test_volume_group.py +23 -65
  139. openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +88 -77
  140. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +14 -42
  141. openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -28
  142. openstackclient/volume/v1/volume.py +2 -14
  143. openstackclient/volume/v2/volume.py +30 -15
  144. openstackclient/volume/v2/volume_backend.py +10 -18
  145. openstackclient/volume/v2/volume_backup.py +18 -15
  146. openstackclient/volume/v2/volume_snapshot.py +2 -12
  147. openstackclient/volume/v2/volume_type.py +211 -14
  148. openstackclient/volume/v3/block_storage_manage.py +72 -11
  149. openstackclient/volume/v3/block_storage_resource_filter.py +33 -11
  150. openstackclient/volume/v3/volume_attachment.py +2 -14
  151. openstackclient/volume/v3/volume_group_snapshot.py +27 -27
  152. openstackclient/volume/v3/volume_message.py +2 -13
  153. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/AUTHORS +11 -0
  154. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/METADATA +6 -5
  155. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/RECORD +160 -151
  156. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/entry_points.txt +23 -5
  157. python_openstackclient-6.5.0.dist-info/pbr.json +1 -0
  158. openstackclient/tests/unit/common/test_parseractions.py +0 -233
  159. python_openstackclient-6.3.0.dist-info/pbr.json +0 -1
  160. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/LICENSE +0 -0
  161. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/WHEEL +0 -0
  162. {python_openstackclient-6.3.0.dist-info → python_openstackclient-6.5.0.dist-info}/top_level.txt +0 -0
@@ -11,12 +11,10 @@
11
11
  # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
12
  # License for the specific language governing permissions and limitations
13
13
  # under the License.
14
- #
15
14
 
16
15
  from unittest import mock
17
16
  from unittest.mock import call
18
17
 
19
- from novaclient import api_versions
20
18
  from openstack import utils as sdk_utils
21
19
  from osc_lib import exceptions
22
20
 
@@ -24,22 +22,13 @@ from openstackclient.compute.v2 import service
24
22
  from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
25
23
 
26
24
 
27
- class TestService(compute_fakes.TestComputev2):
28
- def setUp(self):
29
- super(TestService, self).setUp()
30
-
31
- self.app.client_manager.sdk_connection = mock.Mock()
32
- self.app.client_manager.sdk_connection.compute = mock.Mock()
33
- self.sdk_client = self.app.client_manager.sdk_connection.compute
34
-
35
-
36
- class TestServiceDelete(TestService):
25
+ class TestServiceDelete(compute_fakes.TestComputev2):
37
26
  services = compute_fakes.create_services(count=2)
38
27
 
39
28
  def setUp(self):
40
29
  super(TestServiceDelete, self).setUp()
41
30
 
42
- self.sdk_client.delete_service.return_value = None
31
+ self.compute_sdk_client.delete_service.return_value = None
43
32
 
44
33
  # Get the command object to test
45
34
  self.cmd = service.DeleteService(self.app, None)
@@ -55,7 +44,7 @@ class TestServiceDelete(TestService):
55
44
 
56
45
  result = self.cmd.take_action(parsed_args)
57
46
 
58
- self.sdk_client.delete_service.assert_called_with(
47
+ self.compute_sdk_client.delete_service.assert_called_with(
59
48
  self.services[0].binary, ignore_missing=False
60
49
  )
61
50
  self.assertIsNone(result)
@@ -74,7 +63,7 @@ class TestServiceDelete(TestService):
74
63
  calls = []
75
64
  for s in self.services:
76
65
  calls.append(call(s.binary, ignore_missing=False))
77
- self.sdk_client.delete_service.assert_has_calls(calls)
66
+ self.compute_sdk_client.delete_service.assert_has_calls(calls)
78
67
  self.assertIsNone(result)
79
68
 
80
69
  def test_multi_services_delete_with_exception(self):
@@ -86,7 +75,7 @@ class TestServiceDelete(TestService):
86
75
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
87
76
 
88
77
  delete_mock_result = [None, exceptions.CommandError]
89
- self.sdk_client.delete_service = mock.Mock(
78
+ self.compute_sdk_client.delete_service = mock.Mock(
90
79
  side_effect=delete_mock_result
91
80
  )
92
81
 
@@ -98,15 +87,15 @@ class TestServiceDelete(TestService):
98
87
  '1 of 2 compute services failed to delete.', str(e)
99
88
  )
100
89
 
101
- self.sdk_client.delete_service.assert_any_call(
90
+ self.compute_sdk_client.delete_service.assert_any_call(
102
91
  self.services[0].binary, ignore_missing=False
103
92
  )
104
- self.sdk_client.delete_service.assert_any_call(
93
+ self.compute_sdk_client.delete_service.assert_any_call(
105
94
  'unexist_service', ignore_missing=False
106
95
  )
107
96
 
108
97
 
109
- class TestServiceList(TestService):
98
+ class TestServiceList(compute_fakes.TestComputev2):
110
99
  service = compute_fakes.create_one_service()
111
100
 
112
101
  columns = (
@@ -136,7 +125,7 @@ class TestServiceList(TestService):
136
125
  def setUp(self):
137
126
  super(TestServiceList, self).setUp()
138
127
 
139
- self.sdk_client.services.return_value = [self.service]
128
+ self.compute_sdk_client.services.return_value = [self.service]
140
129
 
141
130
  # Get the command object to test
142
131
  self.cmd = service.ListService(self.app, None)
@@ -159,7 +148,7 @@ class TestServiceList(TestService):
159
148
  # containing the data to be listed.
160
149
  columns, data = self.cmd.take_action(parsed_args)
161
150
 
162
- self.sdk_client.services.assert_called_with(
151
+ self.compute_sdk_client.services.assert_called_with(
163
152
  host=self.service.host,
164
153
  binary=self.service.binary,
165
154
  )
@@ -190,7 +179,7 @@ class TestServiceList(TestService):
190
179
  # containing the data to be listed.
191
180
  columns, data = self.cmd.take_action(parsed_args)
192
181
 
193
- self.sdk_client.services.assert_called_with(
182
+ self.compute_sdk_client.services.assert_called_with(
194
183
  host=self.service.host,
195
184
  binary=self.service.binary,
196
185
  )
@@ -215,16 +204,13 @@ class TestServiceList(TestService):
215
204
  ('long', True),
216
205
  ]
217
206
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
218
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
219
- '2.11'
220
- )
221
207
 
222
208
  # In base command class Lister in cliff, abstract method take_action()
223
209
  # returns a tuple containing the column names and an iterable
224
210
  # containing the data to be listed.
225
211
  columns, data = self.cmd.take_action(parsed_args)
226
212
 
227
- self.sdk_client.services.assert_called_with(
213
+ self.compute_sdk_client.services.assert_called_with(
228
214
  host=self.service.host,
229
215
  binary=self.service.binary,
230
216
  )
@@ -237,14 +223,14 @@ class TestServiceList(TestService):
237
223
  self.assertEqual(data_long, list(data))
238
224
 
239
225
 
240
- class TestServiceSet(TestService):
226
+ class TestServiceSet(compute_fakes.TestComputev2):
241
227
  def setUp(self):
242
228
  super(TestServiceSet, self).setUp()
243
229
 
244
230
  self.service = compute_fakes.create_one_service()
245
231
 
246
- self.sdk_client.enable_service.return_value = self.service
247
- self.sdk_client.disable_service.return_value = self.service
232
+ self.compute_sdk_client.enable_service.return_value = self.service
233
+ self.compute_sdk_client.disable_service.return_value = self.service
248
234
 
249
235
  self.cmd = service.SetService(self.app, None)
250
236
 
@@ -262,8 +248,8 @@ class TestServiceSet(TestService):
262
248
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
263
249
  result = self.cmd.take_action(parsed_args)
264
250
 
265
- self.sdk_client.enable_service.assert_not_called()
266
- self.sdk_client.disable_service.assert_not_called()
251
+ self.compute_sdk_client.enable_service.assert_not_called()
252
+ self.compute_sdk_client.disable_service.assert_not_called()
267
253
  self.assertIsNone(result)
268
254
 
269
255
  @mock.patch.object(sdk_utils, 'supports_microversion')
@@ -283,7 +269,7 @@ class TestServiceSet(TestService):
283
269
 
284
270
  result = self.cmd.take_action(parsed_args)
285
271
 
286
- self.sdk_client.enable_service.assert_called_with(
272
+ self.compute_sdk_client.enable_service.assert_called_with(
287
273
  None, self.service.host, self.service.binary
288
274
  )
289
275
  self.assertIsNone(result)
@@ -305,7 +291,7 @@ class TestServiceSet(TestService):
305
291
 
306
292
  result = self.cmd.take_action(parsed_args)
307
293
 
308
- self.sdk_client.disable_service.assert_called_with(
294
+ self.compute_sdk_client.disable_service.assert_called_with(
309
295
  None, self.service.host, self.service.binary, None
310
296
  )
311
297
  self.assertIsNone(result)
@@ -331,7 +317,7 @@ class TestServiceSet(TestService):
331
317
 
332
318
  result = self.cmd.take_action(parsed_args)
333
319
 
334
- self.sdk_client.disable_service.assert_called_with(
320
+ self.compute_sdk_client.disable_service.assert_called_with(
335
321
  None, self.service.host, self.service.binary, reason
336
322
  )
337
323
  self.assertIsNone(result)
@@ -405,11 +391,11 @@ class TestServiceSet(TestService):
405
391
  ]
406
392
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
407
393
  result = self.cmd.take_action(parsed_args)
408
- self.sdk_client.update_service_forced_down.assert_called_once_with(
394
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
409
395
  None, self.service.host, self.service.binary, False
410
396
  )
411
- self.assertNotCalled(self.sdk_client.enable_service)
412
- self.assertNotCalled(self.sdk_client.disable_service)
397
+ self.assertNotCalled(self.compute_sdk_client.enable_service)
398
+ self.assertNotCalled(self.compute_sdk_client.disable_service)
413
399
  self.assertIsNone(result)
414
400
 
415
401
  @mock.patch.object(sdk_utils, 'supports_microversion')
@@ -427,11 +413,11 @@ class TestServiceSet(TestService):
427
413
  ]
428
414
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
429
415
  result = self.cmd.take_action(parsed_args)
430
- self.sdk_client.update_service_forced_down.assert_called_once_with(
416
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
431
417
  None, self.service.host, self.service.binary, True
432
418
  )
433
- self.assertNotCalled(self.sdk_client.enable_service)
434
- self.assertNotCalled(self.sdk_client.disable_service)
419
+ self.assertNotCalled(self.compute_sdk_client.enable_service)
420
+ self.assertNotCalled(self.compute_sdk_client.disable_service)
435
421
  self.assertIsNone(result)
436
422
 
437
423
  @mock.patch.object(sdk_utils, 'supports_microversion')
@@ -451,10 +437,10 @@ class TestServiceSet(TestService):
451
437
  ]
452
438
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
453
439
  result = self.cmd.take_action(parsed_args)
454
- self.sdk_client.enable_service.assert_called_once_with(
440
+ self.compute_sdk_client.enable_service.assert_called_once_with(
455
441
  None, self.service.host, self.service.binary
456
442
  )
457
- self.sdk_client.update_service_forced_down.assert_called_once_with(
443
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
458
444
  None, self.service.host, self.service.binary, True
459
445
  )
460
446
  self.assertIsNone(result)
@@ -477,12 +463,12 @@ class TestServiceSet(TestService):
477
463
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
478
464
 
479
465
  with mock.patch.object(
480
- self.sdk_client, 'enable_service', side_effect=Exception()
466
+ self.compute_sdk_client, 'enable_service', side_effect=Exception()
481
467
  ):
482
468
  self.assertRaises(
483
469
  exceptions.CommandError, self.cmd.take_action, parsed_args
484
470
  )
485
- self.sdk_client.update_service_forced_down.assert_called_once_with(
471
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
486
472
  None, self.service.host, self.service.binary, True
487
473
  )
488
474
 
@@ -505,12 +491,14 @@ class TestServiceSet(TestService):
505
491
  ]
506
492
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
507
493
  service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
508
- self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
494
+ self.compute_sdk_client.services.return_value = [
495
+ mock.Mock(id=service_id)
496
+ ]
509
497
  result = self.cmd.take_action(parsed_args)
510
- self.sdk_client.disable_service.assert_called_once_with(
498
+ self.compute_sdk_client.disable_service.assert_called_once_with(
511
499
  service_id, self.service.host, self.service.binary, None
512
500
  )
513
- self.sdk_client.update_service_forced_down.assert_called_once_with(
501
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
514
502
  service_id, self.service.host, self.service.binary, True
515
503
  )
516
504
  self.assertIsNone(result)
@@ -536,9 +524,11 @@ class TestServiceSet(TestService):
536
524
  ]
537
525
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
538
526
  service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
539
- self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
527
+ self.compute_sdk_client.services.return_value = [
528
+ mock.Mock(id=service_id)
529
+ ]
540
530
  result = self.cmd.take_action(parsed_args)
541
- self.sdk_client.disable_service.assert_called_once_with(
531
+ self.compute_sdk_client.disable_service.assert_called_once_with(
542
532
  service_id, self.service.host, self.service.binary, reason
543
533
  )
544
534
  self.assertIsNone(result)
@@ -562,23 +552,25 @@ class TestServiceSet(TestService):
562
552
  ]
563
553
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
564
554
  service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
565
- self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
555
+ self.compute_sdk_client.services.return_value = [
556
+ mock.Mock(id=service_id)
557
+ ]
566
558
  result = self.cmd.take_action(parsed_args)
567
- self.sdk_client.enable_service.assert_called_once_with(
559
+ self.compute_sdk_client.enable_service.assert_called_once_with(
568
560
  service_id, self.service.host, self.service.binary
569
561
  )
570
- self.sdk_client.update_service_forced_down.assert_called_once_with(
562
+ self.compute_sdk_client.update_service_forced_down.assert_called_once_with(
571
563
  service_id, self.service.host, self.service.binary, False
572
564
  )
573
565
  self.assertIsNone(result)
574
566
 
575
567
  def test_service_set_find_service_by_host_and_binary_no_results(self):
576
568
  # Tests that no compute services are found by host and binary.
577
- self.sdk_client.services.return_value = []
569
+ self.compute_sdk_client.services.return_value = []
578
570
  ex = self.assertRaises(
579
571
  exceptions.CommandError,
580
572
  self.cmd._find_service_by_host_and_binary,
581
- self.sdk_client,
573
+ self.compute_sdk_client,
582
574
  'fake-host',
583
575
  'nova-compute',
584
576
  )
@@ -590,11 +582,14 @@ class TestServiceSet(TestService):
590
582
 
591
583
  def test_service_set_find_service_by_host_and_binary_many_results(self):
592
584
  # Tests that more than one compute service is found by host and binary.
593
- self.sdk_client.services.return_value = [mock.Mock(), mock.Mock()]
585
+ self.compute_sdk_client.services.return_value = [
586
+ mock.Mock(),
587
+ mock.Mock(),
588
+ ]
594
589
  ex = self.assertRaises(
595
590
  exceptions.CommandError,
596
591
  self.cmd._find_service_by_host_and_binary,
597
- self.sdk_client,
592
+ self.compute_sdk_client,
598
593
  'fake-host',
599
594
  'nova-compute',
600
595
  )
@@ -11,6 +11,7 @@
11
11
  # under the License.
12
12
  #
13
13
 
14
+ import datetime
14
15
  from unittest import mock
15
16
 
16
17
  from openstackclient.compute.v2 import usage as usage_cmds
@@ -22,10 +23,6 @@ class TestUsage(compute_fakes.TestComputev2):
22
23
  def setUp(self):
23
24
  super(TestUsage, self).setUp()
24
25
 
25
- self.app.client_manager.sdk_connection = mock.Mock()
26
- self.app.client_manager.sdk_connection.compute = mock.Mock()
27
- self.sdk_client = self.app.client_manager.sdk_connection.compute
28
-
29
26
  self.projects_mock = self.app.client_manager.identity.projects
30
27
  self.projects_mock.reset_mock()
31
28
 
@@ -58,7 +55,7 @@ class TestUsageList(TestUsage):
58
55
  def setUp(self):
59
56
  super(TestUsageList, self).setUp()
60
57
 
61
- self.sdk_client.usages.return_value = self.usages
58
+ self.compute_sdk_client.usages.return_value = self.usages
62
59
 
63
60
  self.projects_mock.list.return_value = [self.project]
64
61
  # Get the command object to test
@@ -97,9 +94,9 @@ class TestUsageList(TestUsage):
97
94
  columns, data = self.cmd.take_action(parsed_args)
98
95
 
99
96
  self.projects_mock.list.assert_called_with()
100
- self.sdk_client.usages.assert_called_with(
101
- start='2016-11-11T00:00:00',
102
- end='2016-12-20T00:00:00',
97
+ self.compute_sdk_client.usages.assert_called_with(
98
+ start=datetime.datetime(2016, 11, 11, 0, 0),
99
+ end=datetime.datetime(2016, 12, 20, 0, 0),
103
100
  detailed=True,
104
101
  )
105
102
 
@@ -118,7 +115,7 @@ class TestUsageList(TestUsage):
118
115
  columns, data = self.cmd.take_action(parsed_args)
119
116
 
120
117
  self.projects_mock.list.assert_called_with()
121
- self.sdk_client.usages.assert_has_calls(
118
+ self.compute_sdk_client.usages.assert_has_calls(
122
119
  [mock.call(start=mock.ANY, end=mock.ANY, detailed=True)]
123
120
  )
124
121
  self.assertCountEqual(self.columns, columns)
@@ -149,7 +146,7 @@ class TestUsageShow(TestUsage):
149
146
  def setUp(self):
150
147
  super(TestUsageShow, self).setUp()
151
148
 
152
- self.sdk_client.get_usage.return_value = self.usage
149
+ self.compute_sdk_client.get_usage.return_value = self.usage
153
150
 
154
151
  self.projects_mock.get.return_value = self.project
155
152
  # Get the command object to test
@@ -192,10 +189,10 @@ class TestUsageShow(TestUsage):
192
189
 
193
190
  columns, data = self.cmd.take_action(parsed_args)
194
191
 
195
- self.sdk_client.get_usage.assert_called_with(
192
+ self.compute_sdk_client.get_usage.assert_called_with(
196
193
  project=self.project.id,
197
- start='2016-11-11T00:00:00',
198
- end='2016-12-20T00:00:00',
194
+ start=datetime.datetime(2016, 11, 11, 0, 0),
195
+ end=datetime.datetime(2016, 12, 20, 0, 0),
199
196
  )
200
197
 
201
198
  self.assertEqual(self.columns, columns)
@@ -115,12 +115,16 @@ class FakeClientManager(object):
115
115
  self.object_store = None
116
116
  self.volume = None
117
117
  self.network = None
118
+ self.sdk_connection = mock.Mock()
119
+
118
120
  self.session = None
119
121
  self.auth_ref = None
120
122
  self.auth_plugin_name = None
123
+
121
124
  self.network_endpoint_enabled = True
122
125
  self.compute_endpoint_enabled = True
123
126
  self.volume_endpoint_enabled = True
127
+
124
128
  # The source of configuration. This is either 'cloud_config' (a
125
129
  # clouds.yaml file) or 'global_env' ('OS_'-prefixed envvars)
126
130
  self.configuration_type = 'cloud_config'
@@ -63,6 +63,7 @@ class TestMappingCreate(TestMapping):
63
63
  self.mapping_mock.create.assert_called_with(
64
64
  mapping_id=identity_fakes.mapping_id,
65
65
  rules=identity_fakes.MAPPING_RULES,
66
+ schema_version=None,
66
67
  )
67
68
 
68
69
  collist = ('id', 'rules')
@@ -106,12 +107,12 @@ class TestMappingList(TestMapping):
106
107
  self.mapping_mock.list.return_value = [
107
108
  fakes.FakeResource(
108
109
  None,
109
- {'id': identity_fakes.mapping_id},
110
+ {'id': identity_fakes.mapping_id, 'schema_version': '1.0'},
110
111
  loaded=True,
111
112
  ),
112
113
  fakes.FakeResource(
113
114
  None,
114
- {'id': 'extra_mapping'},
115
+ {'id': 'extra_mapping', 'schema_version': '2.0'},
115
116
  loaded=True,
116
117
  ),
117
118
  ]
@@ -128,10 +129,13 @@ class TestMappingList(TestMapping):
128
129
 
129
130
  self.mapping_mock.list.assert_called_with()
130
131
 
131
- collist = ('ID',)
132
+ collist = ('ID', 'schema_version')
132
133
  self.assertEqual(collist, columns)
133
134
 
134
- datalist = [(identity_fakes.mapping_id,), ('extra_mapping',)]
135
+ datalist = [
136
+ (identity_fakes.mapping_id, '1.0'),
137
+ ('extra_mapping', '2.0'),
138
+ ]
135
139
  self.assertEqual(datalist, data)
136
140
 
137
141
 
@@ -173,6 +177,7 @@ class TestMappingSet(TestMapping):
173
177
  self.mapping_mock.update.assert_called_with(
174
178
  mapping=identity_fakes.mapping_id,
175
179
  rules=identity_fakes.MAPPING_RULES_2,
180
+ schema_version=None,
176
181
  )
177
182
 
178
183
  self.assertIsNone(result)
@@ -294,7 +294,6 @@ class TestTrustList(TestTrust):
294
294
  # containing the data to be listed.
295
295
  columns, data = self.cmd.take_action(parsed_args)
296
296
 
297
- print(self.trusts_mock.list.call_args_list)
298
297
  self.trusts_mock.list.assert_any_call(
299
298
  trustee_user=self.users_mock.get(),
300
299
  trustor_user=None,
@@ -335,7 +334,6 @@ class TestTrustList(TestTrust):
335
334
  # containing the data to be listed.
336
335
  columns, data = self.cmd.take_action(parsed_args)
337
336
 
338
- print(self.trusts_mock.list.call_args_list)
339
337
  self.trusts_mock.list.assert_any_call(
340
338
  trustor_user=self.users_mock.get(),
341
339
  trustee_user=None,
@@ -39,13 +39,14 @@ class TestImagev1(FakeClientMixin, utils.TestCommand):
39
39
  endpoint=fakes.AUTH_URL,
40
40
  token=fakes.AUTH_TOKEN,
41
41
  )
42
+ self.volume_client = self.app.client_manager.volume
42
43
 
43
44
 
44
45
  def create_one_image(attrs=None):
45
46
  """Create a fake image.
46
47
 
47
48
  :param Dictionary attrs:
48
- A dictionary with all attrbutes of image
49
+ A dictionary with all attributes of image
49
50
  :return:
50
51
  A FakeResource object with id, name, owner, protected,
51
52
  visibility and tags attrs
@@ -593,7 +593,7 @@ class TestImageSet(image_fakes.TestImagev1):
593
593
 
594
594
  def test_image_update_volume(self):
595
595
  # Set up VolumeManager Mock
596
- volumes_mock = self.app.client_manager.volume.volumes
596
+ volumes_mock = self.volume_client.volumes
597
597
  volumes_mock.reset_mock()
598
598
  volumes_mock.get.return_value = fakes.FakeResource(
599
599
  None,
@@ -17,9 +17,12 @@ from unittest import mock
17
17
  import uuid
18
18
 
19
19
  from openstack.image.v2 import _proxy
20
+ from openstack.image.v2 import cache
20
21
  from openstack.image.v2 import image
21
22
  from openstack.image.v2 import member
22
23
  from openstack.image.v2 import metadef_namespace
24
+ from openstack.image.v2 import metadef_object
25
+ from openstack.image.v2 import metadef_property
23
26
  from openstack.image.v2 import metadef_resource_type
24
27
  from openstack.image.v2 import service_info as _service_info
25
28
  from openstack.image.v2 import task
@@ -238,6 +241,28 @@ def create_tasks(attrs=None, count=2):
238
241
  return tasks
239
242
 
240
243
 
244
+ def create_cache(attrs=None):
245
+ attrs = attrs or {}
246
+ cache_info = {
247
+ 'cached_images': [
248
+ {
249
+ 'hits': 0,
250
+ 'image_id': '1a56983c-f71f-490b-a7ac-6b321a18935a',
251
+ 'last_accessed': 1671699579.444378,
252
+ 'last_modified': 1671699579.444378,
253
+ 'size': 0,
254
+ },
255
+ ],
256
+ 'queued_images': [
257
+ '3a4560a1-e585-443e-9b39-553b46ec92d1',
258
+ '6f99bf80-2ee6-47cf-acfe-1f1fabb7e810',
259
+ ],
260
+ }
261
+ cache_info.update(attrs)
262
+
263
+ return cache.Cache(**cache_info)
264
+
265
+
241
266
  def create_one_metadef_namespace(attrs=None):
242
267
  """Create a fake MetadefNamespace member.
243
268
 
@@ -263,6 +288,20 @@ def create_one_metadef_namespace(attrs=None):
263
288
  return metadef_namespace.MetadefNamespace(**metadef_namespace_list)
264
289
 
265
290
 
291
+ def create_one_metadef_property(attrs=None):
292
+ attrs = attrs or {}
293
+
294
+ metadef_property_list = {
295
+ 'name': 'cpu_cores',
296
+ 'title': 'vCPU Cores',
297
+ 'type': 'integer',
298
+ }
299
+
300
+ # Overwrite default attributes if there are some attributes set
301
+ metadef_property_list.update(attrs)
302
+ return metadef_property.MetadefProperty(**metadef_property_list)
303
+
304
+
266
305
  def create_one_resource_type(attrs=None):
267
306
  """Create a fake MetadefResourceType member.
268
307
 
@@ -299,3 +338,46 @@ def create_resource_types(attrs=None, count=2):
299
338
  metadef_resource_types.append(create_one_resource_type(attrs))
300
339
 
301
340
  return metadef_resource_types
341
+
342
+
343
+ def create_one_metadef_object(attrs=None):
344
+ """Create a fake MetadefNamespace member.
345
+
346
+ :param attrs: A dictionary with all attributes of metadef_namespace member
347
+ :type attrs: dict
348
+ :return: a list of MetadefNamespace objects
349
+ :rtype: list of `metadef_namespace.MetadefNamespace`
350
+ """
351
+ attrs = attrs or {}
352
+
353
+ metadef_objects_list = {
354
+ 'created_at': '2014-09-19T18:20:56Z',
355
+ 'description': 'The CPU limits with control parameters.',
356
+ 'name': 'CPU Limits',
357
+ 'properties': {
358
+ 'quota:cpu_period': {
359
+ 'description': 'The enforcement interval',
360
+ 'maximum': 1000000,
361
+ 'minimum': 1000,
362
+ 'title': 'Quota: CPU Period',
363
+ 'type': 'integer',
364
+ },
365
+ 'quota:cpu_quota': {
366
+ 'description': 'The maximum allowed bandwidth',
367
+ 'title': 'Quota: CPU Quota',
368
+ 'type': 'integer',
369
+ },
370
+ 'quota:cpu_shares': {
371
+ 'description': 'The proportional weighted',
372
+ 'title': 'Quota: CPU Shares',
373
+ 'type': 'integer',
374
+ },
375
+ },
376
+ 'required': [],
377
+ 'schema': '/v2/schemas/metadefs/object',
378
+ 'updated_at': '2014-09-19T18:20:56Z',
379
+ }
380
+
381
+ # Overwrite default attributes if there are some attributes set
382
+ metadef_objects_list.update(attrs)
383
+ return metadef_object.MetadefObject(**metadef_objects_list)