python-openstackclient 8.1.0__py3-none-any.whl → 8.3.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 (241) hide show
  1. openstackclient/api/compute_v2.py +2 -2
  2. openstackclient/api/object_store_v1.py +4 -1
  3. openstackclient/api/volume_v2.py +60 -0
  4. openstackclient/api/volume_v3.py +60 -0
  5. openstackclient/command.py +27 -0
  6. openstackclient/common/availability_zone.py +1 -1
  7. openstackclient/common/clientmanager.py +59 -21
  8. openstackclient/common/configuration.py +1 -1
  9. openstackclient/common/extension.py +1 -1
  10. openstackclient/common/limits.py +1 -1
  11. openstackclient/common/module.py +4 -2
  12. openstackclient/common/project_cleanup.py +10 -8
  13. openstackclient/common/quota.py +23 -6
  14. openstackclient/common/versions.py +1 -2
  15. openstackclient/compute/v2/agent.py +1 -1
  16. openstackclient/compute/v2/aggregate.py +6 -5
  17. openstackclient/compute/v2/console.py +5 -3
  18. openstackclient/compute/v2/console_connection.py +1 -1
  19. openstackclient/compute/v2/flavor.py +15 -2
  20. openstackclient/compute/v2/host.py +1 -1
  21. openstackclient/compute/v2/hypervisor.py +1 -1
  22. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  23. openstackclient/compute/v2/keypair.py +1 -1
  24. openstackclient/compute/v2/server.py +77 -30
  25. openstackclient/compute/v2/server_backup.py +1 -1
  26. openstackclient/compute/v2/server_event.py +1 -1
  27. openstackclient/compute/v2/server_group.py +4 -2
  28. openstackclient/compute/v2/server_image.py +1 -1
  29. openstackclient/compute/v2/server_migration.py +1 -1
  30. openstackclient/compute/v2/server_volume.py +1 -1
  31. openstackclient/compute/v2/service.py +1 -1
  32. openstackclient/compute/v2/usage.py +6 -4
  33. openstackclient/identity/common.py +10 -14
  34. openstackclient/identity/v2_0/catalog.py +3 -2
  35. openstackclient/identity/v2_0/ec2creds.py +1 -1
  36. openstackclient/identity/v2_0/endpoint.py +1 -1
  37. openstackclient/identity/v2_0/project.py +17 -7
  38. openstackclient/identity/v2_0/role.py +1 -1
  39. openstackclient/identity/v2_0/role_assignment.py +3 -3
  40. openstackclient/identity/v2_0/service.py +1 -1
  41. openstackclient/identity/v2_0/token.py +1 -1
  42. openstackclient/identity/v2_0/user.py +2 -2
  43. openstackclient/identity/v3/access_rule.py +16 -4
  44. openstackclient/identity/v3/application_credential.py +116 -95
  45. openstackclient/identity/v3/catalog.py +3 -3
  46. openstackclient/identity/v3/consumer.py +1 -1
  47. openstackclient/identity/v3/credential.py +1 -1
  48. openstackclient/identity/v3/domain.py +15 -10
  49. openstackclient/identity/v3/ec2creds.py +1 -1
  50. openstackclient/identity/v3/endpoint.py +33 -12
  51. openstackclient/identity/v3/endpoint_group.py +1 -1
  52. openstackclient/identity/v3/federation_protocol.py +1 -1
  53. openstackclient/identity/v3/group.py +11 -5
  54. openstackclient/identity/v3/identity_provider.py +12 -10
  55. openstackclient/identity/v3/implied_role.py +1 -1
  56. openstackclient/identity/v3/limit.py +1 -1
  57. openstackclient/identity/v3/mapping.py +1 -1
  58. openstackclient/identity/v3/policy.py +1 -1
  59. openstackclient/identity/v3/project.py +34 -22
  60. openstackclient/identity/v3/region.py +1 -1
  61. openstackclient/identity/v3/registered_limit.py +16 -11
  62. openstackclient/identity/v3/role.py +27 -41
  63. openstackclient/identity/v3/role_assignment.py +12 -23
  64. openstackclient/identity/v3/service.py +1 -1
  65. openstackclient/identity/v3/service_provider.py +1 -1
  66. openstackclient/identity/v3/tag.py +3 -2
  67. openstackclient/identity/v3/token.py +3 -2
  68. openstackclient/identity/v3/trust.py +4 -2
  69. openstackclient/identity/v3/unscoped_saml.py +1 -1
  70. openstackclient/identity/v3/user.py +22 -13
  71. openstackclient/image/v1/image.py +35 -17
  72. openstackclient/image/v2/cache.py +11 -7
  73. openstackclient/image/v2/image.py +62 -12
  74. openstackclient/image/v2/info.py +1 -1
  75. openstackclient/image/v2/metadef_namespaces.py +1 -1
  76. openstackclient/image/v2/metadef_objects.py +9 -3
  77. openstackclient/image/v2/metadef_properties.py +11 -3
  78. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  79. openstackclient/image/v2/metadef_resource_types.py +1 -1
  80. openstackclient/image/v2/task.py +1 -1
  81. openstackclient/network/common.py +10 -9
  82. openstackclient/network/v2/address_group.py +4 -3
  83. openstackclient/network/v2/address_scope.py +8 -6
  84. openstackclient/network/v2/default_security_group_rule.py +9 -8
  85. openstackclient/network/v2/floating_ip.py +16 -9
  86. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  87. openstackclient/network/v2/ip_availability.py +7 -4
  88. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  89. openstackclient/network/v2/local_ip.py +13 -7
  90. openstackclient/network/v2/local_ip_association.py +7 -4
  91. openstackclient/network/v2/ndp_proxy.py +13 -6
  92. openstackclient/network/v2/network.py +33 -16
  93. openstackclient/network/v2/network_agent.py +5 -5
  94. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  95. openstackclient/network/v2/network_flavor.py +1 -1
  96. openstackclient/network/v2/network_flavor_profile.py +1 -1
  97. openstackclient/network/v2/network_meter.py +1 -1
  98. openstackclient/network/v2/network_meter_rule.py +1 -1
  99. openstackclient/network/v2/network_qos_policy.py +7 -5
  100. openstackclient/network/v2/network_qos_rule.py +1 -1
  101. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  102. openstackclient/network/v2/network_rbac.py +8 -5
  103. openstackclient/network/v2/network_segment.py +2 -2
  104. openstackclient/network/v2/network_segment_range.py +13 -6
  105. openstackclient/network/v2/network_service_provider.py +1 -1
  106. openstackclient/network/v2/network_trunk.py +65 -42
  107. openstackclient/network/v2/port.py +38 -20
  108. openstackclient/network/v2/router.py +19 -8
  109. openstackclient/network/v2/security_group.py +52 -7
  110. openstackclient/network/v2/security_group_rule.py +27 -4
  111. openstackclient/network/v2/subnet.py +17 -18
  112. openstackclient/network/v2/subnet_pool.py +11 -9
  113. openstackclient/network/v2/taas/__init__.py +0 -0
  114. openstackclient/network/v2/taas/tap_flow.py +245 -0
  115. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  116. openstackclient/network/v2/taas/tap_service.py +211 -0
  117. openstackclient/object/v1/account.py +1 -1
  118. openstackclient/object/v1/container.py +1 -1
  119. openstackclient/object/v1/object.py +1 -1
  120. openstackclient/shell.py +18 -8
  121. openstackclient/tests/functional/identity/v3/test_access_rule.py +1 -1
  122. openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
  123. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  124. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  125. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  126. openstackclient/tests/functional/image/v2/test_image.py +36 -14
  127. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  128. openstackclient/tests/functional/volume/v2/test_volume.py +1 -1
  129. openstackclient/tests/functional/volume/v3/test_volume.py +2 -2
  130. openstackclient/tests/unit/api/test_volume_v2.py +124 -0
  131. openstackclient/tests/unit/api/test_volume_v3.py +124 -0
  132. openstackclient/tests/unit/common/test_command.py +1 -1
  133. openstackclient/tests/unit/common/test_extension.py +2 -3
  134. openstackclient/tests/unit/common/test_module.py +14 -7
  135. openstackclient/tests/unit/common/test_quota.py +20 -0
  136. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  137. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  138. openstackclient/tests/unit/compute/v2/test_flavor.py +160 -177
  139. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  140. openstackclient/tests/unit/compute/v2/test_server.py +406 -81
  141. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  142. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  143. openstackclient/tests/unit/fakes.py +35 -134
  144. openstackclient/tests/unit/identity/test_common.py +100 -0
  145. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  146. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  147. openstackclient/tests/unit/identity/v3/test_application_credential.py +50 -44
  148. openstackclient/tests/unit/identity/v3/test_domain.py +3 -3
  149. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  150. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  151. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  152. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  153. openstackclient/tests/unit/identity/v3/test_project.py +31 -54
  154. openstackclient/tests/unit/identity/v3/test_registered_limit.py +2 -2
  155. openstackclient/tests/unit/identity/v3/test_role.py +3 -90
  156. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  157. openstackclient/tests/unit/image/v1/test_image.py +47 -0
  158. openstackclient/tests/unit/image/v2/test_image.py +190 -9
  159. openstackclient/tests/unit/image/v2/test_metadef_objects.py +22 -0
  160. openstackclient/tests/unit/image/v2/test_metadef_properties.py +24 -10
  161. openstackclient/tests/unit/network/test_common.py +9 -13
  162. openstackclient/tests/unit/network/v2/fakes.py +1 -0
  163. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  164. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  165. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  166. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  167. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  168. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  169. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  170. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  171. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  172. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  173. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  174. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  175. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  176. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -23
  177. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  178. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  179. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  180. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  181. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  182. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  183. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  184. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  185. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  186. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  187. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  188. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  189. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  190. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  191. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  192. openstackclient/tests/unit/network/v2/test_port.py +113 -84
  193. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  194. openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -26
  195. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +66 -18
  196. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  197. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  198. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  199. openstackclient/tests/unit/volume/v2/test_volume.py +358 -305
  200. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  201. openstackclient/tests/unit/volume/v3/test_volume.py +443 -415
  202. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  203. openstackclient/volume/client.py +7 -17
  204. openstackclient/volume/v2/backup_record.py +1 -1
  205. openstackclient/volume/v2/consistency_group.py +1 -1
  206. openstackclient/volume/v2/consistency_group_snapshot.py +1 -1
  207. openstackclient/volume/v2/qos_specs.py +1 -1
  208. openstackclient/volume/v2/service.py +2 -2
  209. openstackclient/volume/v2/volume.py +80 -54
  210. openstackclient/volume/v2/volume_backend.py +1 -1
  211. openstackclient/volume/v2/volume_backup.py +5 -3
  212. openstackclient/volume/v2/volume_host.py +1 -2
  213. openstackclient/volume/v2/volume_snapshot.py +2 -2
  214. openstackclient/volume/v2/volume_transfer_request.py +1 -1
  215. openstackclient/volume/v2/volume_type.py +11 -6
  216. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  217. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  218. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  219. openstackclient/volume/v3/block_storage_manage.py +1 -1
  220. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  221. openstackclient/volume/v3/service.py +2 -2
  222. openstackclient/volume/v3/volume.py +104 -77
  223. openstackclient/volume/v3/volume_attachment.py +6 -5
  224. openstackclient/volume/v3/volume_backup.py +18 -3
  225. openstackclient/volume/v3/volume_group.py +2 -2
  226. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  227. openstackclient/volume/v3/volume_group_type.py +1 -1
  228. openstackclient/volume/v3/volume_message.py +1 -1
  229. openstackclient/volume/v3/volume_snapshot.py +2 -2
  230. openstackclient/volume/v3/volume_transfer_request.py +1 -1
  231. openstackclient/volume/v3/volume_type.py +15 -9
  232. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/METADATA +19 -17
  233. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/RECORD +239 -224
  234. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/WHEEL +1 -1
  235. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/entry_points.txt +15 -0
  236. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/AUTHORS +15 -0
  237. python_openstackclient-8.3.0.dist-info/pbr.json +1 -0
  238. openstackclient/tests/unit/common/test_logs.py +0 -221
  239. python_openstackclient-8.1.0.dist-info/pbr.json +0 -1
  240. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/LICENSE +0 -0
  241. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/top_level.txt +0 -0
@@ -16,12 +16,13 @@ from unittest import mock
16
16
 
17
17
  from openstack.compute.v2 import flavor as _flavor
18
18
  from openstack import exceptions as sdk_exceptions
19
+ from openstack.identity.v3 import project as _project
20
+ from openstack.test import fakes as sdk_fakes
19
21
  from osc_lib.cli import format_columns
20
22
  from osc_lib import exceptions
21
23
 
22
24
  from openstackclient.compute.v2 import flavor
23
25
  from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
24
- from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
25
26
  from openstackclient.tests.unit import utils as tests_utils
26
27
 
27
28
 
@@ -34,59 +35,60 @@ class TestFlavor(compute_fakes.TestComputev2):
34
35
 
35
36
 
36
37
  class TestFlavorCreate(TestFlavor):
37
- flavor = compute_fakes.create_one_flavor(attrs={'links': 'flavor-links'})
38
- project = identity_fakes.FakeProject.create_one_project()
39
-
40
- columns = (
41
- 'OS-FLV-DISABLED:disabled',
42
- 'OS-FLV-EXT-DATA:ephemeral',
43
- 'description',
44
- 'disk',
45
- 'id',
46
- 'name',
47
- 'os-flavor-access:is_public',
48
- 'properties',
49
- 'ram',
50
- 'rxtx_factor',
51
- 'swap',
52
- 'vcpus',
53
- )
54
-
55
- data = (
56
- flavor.is_disabled,
57
- flavor.ephemeral,
58
- flavor.description,
59
- flavor.disk,
60
- flavor.id,
61
- flavor.name,
62
- flavor.is_public,
63
- format_columns.DictColumn(flavor.extra_specs),
64
- flavor.ram,
65
- flavor.rxtx_factor,
66
- flavor.swap,
67
- flavor.vcpus,
68
- )
69
- data_private = (
70
- flavor.is_disabled,
71
- flavor.ephemeral,
72
- flavor.description,
73
- flavor.disk,
74
- flavor.id,
75
- flavor.name,
76
- False,
77
- format_columns.DictColumn(flavor.extra_specs),
78
- flavor.ram,
79
- flavor.rxtx_factor,
80
- flavor.swap,
81
- flavor.vcpus,
82
- )
83
-
84
38
  def setUp(self):
85
39
  super().setUp()
86
40
 
87
- # Return a project
41
+ self.flavor = sdk_fakes.generate_fake_resource(
42
+ _flavor.Flavor, links='flavor-links'
43
+ )
44
+ self.project = sdk_fakes.generate_fake_resource(_project.Project)
45
+
46
+ self.columns = (
47
+ 'OS-FLV-DISABLED:disabled',
48
+ 'OS-FLV-EXT-DATA:ephemeral',
49
+ 'description',
50
+ 'disk',
51
+ 'id',
52
+ 'name',
53
+ 'os-flavor-access:is_public',
54
+ 'properties',
55
+ 'ram',
56
+ 'rxtx_factor',
57
+ 'swap',
58
+ 'vcpus',
59
+ )
60
+ self.data = (
61
+ self.flavor.is_disabled,
62
+ self.flavor.ephemeral,
63
+ self.flavor.description,
64
+ self.flavor.disk,
65
+ self.flavor.id,
66
+ self.flavor.name,
67
+ self.flavor.is_public,
68
+ format_columns.DictColumn(self.flavor.extra_specs),
69
+ self.flavor.ram,
70
+ self.flavor.rxtx_factor,
71
+ self.flavor.swap,
72
+ self.flavor.vcpus,
73
+ )
74
+ self.data_private = (
75
+ self.flavor.is_disabled,
76
+ self.flavor.ephemeral,
77
+ self.flavor.description,
78
+ self.flavor.disk,
79
+ self.flavor.id,
80
+ self.flavor.name,
81
+ False,
82
+ format_columns.DictColumn(self.flavor.extra_specs),
83
+ self.flavor.ram,
84
+ self.flavor.rxtx_factor,
85
+ self.flavor.swap,
86
+ self.flavor.vcpus,
87
+ )
88
+
88
89
  self.projects_mock.get.return_value = self.project
89
90
  self.compute_client.create_flavor.return_value = self.flavor
91
+
90
92
  self.cmd = flavor.CreateFlavor(self.app, None)
91
93
 
92
94
  def test_flavor_create_default_options(self):
@@ -233,7 +235,7 @@ class TestFlavorCreate(TestFlavor):
233
235
  ('vcpus', self.flavor.vcpus),
234
236
  ('rxtx_factor', self.flavor.rxtx_factor),
235
237
  ('public', False),
236
- ('description', 'description'),
238
+ ('description', self.flavor.description),
237
239
  ('project', self.project.id),
238
240
  ('properties', {'key1': 'value1', 'key2': 'value2'}),
239
241
  ('name', self.flavor.name),
@@ -245,7 +247,7 @@ class TestFlavorCreate(TestFlavor):
245
247
  'ram': self.flavor.ram,
246
248
  'vcpus': self.flavor.vcpus,
247
249
  'disk': self.flavor.disk,
248
- 'id': 'auto',
250
+ 'id': None,
249
251
  'ephemeral': self.flavor.ephemeral,
250
252
  'swap': self.flavor.swap,
251
253
  'rxtx_factor': self.flavor.rxtx_factor,
@@ -328,7 +330,7 @@ class TestFlavorCreate(TestFlavor):
328
330
  str(self.flavor.vcpus),
329
331
  '--rxtx-factor',
330
332
  str(self.flavor.rxtx_factor),
331
- '--private',
333
+ '--public',
332
334
  '--description',
333
335
  'fake description',
334
336
  self.flavor.name,
@@ -341,7 +343,7 @@ class TestFlavorCreate(TestFlavor):
341
343
  ('swap', self.flavor.swap),
342
344
  ('vcpus', self.flavor.vcpus),
343
345
  ('rxtx_factor', self.flavor.rxtx_factor),
344
- ('public', False),
346
+ ('public', True),
345
347
  ('description', 'fake description'),
346
348
  ('name', self.flavor.name),
347
349
  ]
@@ -358,14 +360,14 @@ class TestFlavorCreate(TestFlavor):
358
360
  'ephemeral': self.flavor.ephemeral,
359
361
  'swap': self.flavor.swap,
360
362
  'rxtx_factor': self.flavor.rxtx_factor,
361
- 'is_public': self.flavor.is_public,
363
+ 'is_public': True,
362
364
  'description': 'fake description',
363
365
  }
364
366
 
365
367
  self.compute_client.create_flavor.assert_called_once_with(**args)
366
368
 
367
369
  self.assertEqual(self.columns, columns)
368
- self.assertCountEqual(self.data_private, data)
370
+ self.assertCountEqual(self.data, data)
369
371
 
370
372
  def test_flavor_create_with_description_pre_v255(self):
371
373
  self.set_compute_api_version('2.54')
@@ -395,11 +397,13 @@ class TestFlavorCreate(TestFlavor):
395
397
 
396
398
 
397
399
  class TestFlavorDelete(TestFlavor):
398
- flavors = compute_fakes.create_flavors(count=2)
399
-
400
400
  def setUp(self):
401
401
  super().setUp()
402
402
 
403
+ self.flavors = list(
404
+ sdk_fakes.generate_fake_resources(_flavor.Flavor, 2)
405
+ )
406
+
403
407
  self.compute_client.delete_flavor.return_value = None
404
408
 
405
409
  self.cmd = flavor.DeleteFlavor(self.app, None)
@@ -474,51 +478,50 @@ class TestFlavorDelete(TestFlavor):
474
478
 
475
479
 
476
480
  class TestFlavorList(TestFlavor):
477
- _flavor = compute_fakes.create_one_flavor()
478
-
479
- columns = (
480
- 'ID',
481
- 'Name',
482
- 'RAM',
483
- 'Disk',
484
- 'Ephemeral',
485
- 'VCPUs',
486
- 'Is Public',
487
- )
488
- columns_long = columns + ('Swap', 'RXTX Factor', 'Properties')
489
-
490
- data = (
491
- (
492
- _flavor.id,
493
- _flavor.name,
494
- _flavor.ram,
495
- _flavor.disk,
496
- _flavor.ephemeral,
497
- _flavor.vcpus,
498
- _flavor.is_public,
499
- ),
500
- )
501
- data_long = (
502
- data[0]
503
- + (
504
- _flavor.swap,
505
- _flavor.rxtx_factor,
506
- format_columns.DictColumn(_flavor.extra_specs),
507
- ),
508
- )
509
-
510
481
  def setUp(self):
511
482
  super().setUp()
512
483
 
513
- self.api_mock = mock.Mock()
514
- self.api_mock.side_effect = [
515
- [self._flavor],
516
- [],
517
- ]
484
+ self._flavor = sdk_fakes.generate_fake_resource(
485
+ _flavor.Flavor, extra_specs={'property': 'value'}
486
+ )
518
487
 
519
- self.compute_client.flavors = self.api_mock
488
+ self.columns = (
489
+ 'ID',
490
+ 'Name',
491
+ 'RAM',
492
+ 'Disk',
493
+ 'Ephemeral',
494
+ 'VCPUs',
495
+ 'Is Public',
496
+ )
497
+ self.columns_long = self.columns + (
498
+ 'Swap',
499
+ 'RXTX Factor',
500
+ 'Properties',
501
+ )
502
+
503
+ self.data = (
504
+ (
505
+ self._flavor.id,
506
+ self._flavor.name,
507
+ self._flavor.ram,
508
+ self._flavor.disk,
509
+ self._flavor.ephemeral,
510
+ self._flavor.vcpus,
511
+ self._flavor.is_public,
512
+ ),
513
+ )
514
+ self.data_long = (
515
+ self.data[0]
516
+ + (
517
+ self._flavor.swap,
518
+ self._flavor.rxtx_factor,
519
+ format_columns.DictColumn(self._flavor.extra_specs),
520
+ ),
521
+ )
522
+
523
+ self.compute_client.flavors.side_effect = [[self._flavor], []]
520
524
 
521
- # Get the command object to test
522
525
  self.cmd = flavor.ListFlavor(self.app, None)
523
526
 
524
527
  def test_flavor_list_no_options(self):
@@ -653,7 +656,9 @@ class TestFlavorList(TestFlavor):
653
656
 
654
657
  def test_flavor_list_long_no_extra_specs(self):
655
658
  # use flavor with no extra specs for this test
656
- flavor = compute_fakes.create_one_flavor(attrs={"extra_specs": {}})
659
+ flavor = sdk_fakes.generate_fake_resource(
660
+ _flavor.Flavor, extra_specs={}
661
+ )
657
662
  self.data = (
658
663
  (
659
664
  flavor.id,
@@ -673,15 +678,9 @@ class TestFlavorList(TestFlavor):
673
678
  format_columns.DictColumn(flavor.extra_specs),
674
679
  ),
675
680
  )
676
- self.api_mock.side_effect = [
677
- [flavor],
678
- [],
679
- ]
680
681
 
681
- self.compute_client.flavors = self.api_mock
682
- self.compute_client.fetch_flavor_extra_specs = mock.Mock(
683
- return_value=None
684
- )
682
+ self.compute_client.flavors.side_effect = [[flavor], []]
683
+ self.compute_client.fetch_flavor_extra_specs.return_value = None
685
684
 
686
685
  arglist = [
687
686
  '--long',
@@ -744,17 +743,15 @@ class TestFlavorList(TestFlavor):
744
743
 
745
744
 
746
745
  class TestFlavorSet(TestFlavor):
747
- # Return value of self.compute_client.find_flavor().
748
- flavor = compute_fakes.create_one_flavor(
749
- attrs={'os-flavor-access:is_public': False}
750
- )
751
- project = identity_fakes.FakeProject.create_one_project()
752
-
753
746
  def setUp(self):
754
747
  super().setUp()
755
748
 
749
+ self.flavor = sdk_fakes.generate_fake_resource(
750
+ _flavor.Flavor, is_public=False, extra_specs={'property': 'value'}
751
+ )
752
+ self.project = sdk_fakes.generate_fake_resource(_project.Project)
753
+
756
754
  self.compute_client.find_flavor.return_value = self.flavor
757
- # Return a project
758
755
  self.projects_mock.get.return_value = self.project
759
756
  self.cmd = flavor.SetFlavor(self.app, None)
760
757
 
@@ -960,46 +957,42 @@ class TestFlavorSet(TestFlavor):
960
957
 
961
958
 
962
959
  class TestFlavorShow(TestFlavor):
963
- # Return value of self.compute_client.find_flavor().
964
- flavor_access = compute_fakes.create_one_flavor_access()
965
- flavor = compute_fakes.create_one_flavor()
966
-
967
- columns = (
968
- 'OS-FLV-DISABLED:disabled',
969
- 'OS-FLV-EXT-DATA:ephemeral',
970
- 'access_project_ids',
971
- 'description',
972
- 'disk',
973
- 'id',
974
- 'name',
975
- 'os-flavor-access:is_public',
976
- 'properties',
977
- 'ram',
978
- 'rxtx_factor',
979
- 'swap',
980
- 'vcpus',
981
- )
982
-
983
- data = (
984
- flavor.is_disabled,
985
- flavor.ephemeral,
986
- None,
987
- flavor.description,
988
- flavor.disk,
989
- flavor.id,
990
- flavor.name,
991
- flavor.is_public,
992
- format_columns.DictColumn(flavor.extra_specs),
993
- flavor.ram,
994
- flavor.rxtx_factor,
995
- flavor.swap,
996
- flavor.vcpus,
997
- )
998
-
999
960
  def setUp(self):
1000
961
  super().setUp()
1001
962
 
1002
- # Return value of _find_resource()
963
+ self.flavor_access = compute_fakes.create_one_flavor_access()
964
+ self.flavor = sdk_fakes.generate_fake_resource(_flavor.Flavor)
965
+
966
+ self.columns = (
967
+ 'OS-FLV-DISABLED:disabled',
968
+ 'OS-FLV-EXT-DATA:ephemeral',
969
+ 'access_project_ids',
970
+ 'description',
971
+ 'disk',
972
+ 'id',
973
+ 'name',
974
+ 'os-flavor-access:is_public',
975
+ 'properties',
976
+ 'ram',
977
+ 'rxtx_factor',
978
+ 'swap',
979
+ 'vcpus',
980
+ )
981
+ self.data = (
982
+ self.flavor.is_disabled,
983
+ self.flavor.ephemeral,
984
+ None,
985
+ self.flavor.description,
986
+ self.flavor.disk,
987
+ self.flavor.id,
988
+ self.flavor.name,
989
+ self.flavor.is_public,
990
+ format_columns.DictColumn(self.flavor.extra_specs),
991
+ self.flavor.ram,
992
+ self.flavor.rxtx_factor,
993
+ self.flavor.swap,
994
+ self.flavor.vcpus,
995
+ )
1003
996
  self.compute_client.find_flavor.return_value = self.flavor
1004
997
  self.compute_client.get_flavor_access.return_value = [
1005
998
  self.flavor_access
@@ -1035,10 +1028,8 @@ class TestFlavorShow(TestFlavor):
1035
1028
  self.assertCountEqual(self.data, data)
1036
1029
 
1037
1030
  def test_private_flavor_show(self):
1038
- private_flavor = compute_fakes.create_one_flavor(
1039
- attrs={
1040
- 'os-flavor-access:is_public': False,
1041
- }
1031
+ private_flavor = sdk_fakes.generate_fake_resource(
1032
+ _flavor.Flavor, is_public=False
1042
1033
  )
1043
1034
  self.compute_client.find_flavor.return_value = private_flavor
1044
1035
 
@@ -1077,23 +1068,18 @@ class TestFlavorShow(TestFlavor):
1077
1068
 
1078
1069
 
1079
1070
  class TestFlavorUnset(TestFlavor):
1080
- # Return value of self.compute_client.find_flavor().
1081
- flavor = compute_fakes.create_one_flavor(
1082
- attrs={'os-flavor-access:is_public': False}
1083
- )
1084
- project = identity_fakes.FakeProject.create_one_project()
1085
-
1086
1071
  def setUp(self):
1087
1072
  super().setUp()
1088
1073
 
1074
+ self.flavor = sdk_fakes.generate_fake_resource(
1075
+ _flavor.Flavor, is_public=False
1076
+ )
1077
+ self.project = sdk_fakes.generate_fake_resource(_project.Project)
1078
+
1089
1079
  self.compute_client.find_flavor.return_value = self.flavor
1090
- # Return a project
1091
1080
  self.projects_mock.get.return_value = self.project
1092
- self.cmd = flavor.UnsetFlavor(self.app, None)
1093
1081
 
1094
- self.mock_shortcut = (
1095
- self.compute_client.delete_flavor_extra_specs_property
1096
- )
1082
+ self.cmd = flavor.UnsetFlavor(self.app, None)
1097
1083
 
1098
1084
  def test_flavor_unset_property(self):
1099
1085
  arglist = ['--property', 'property', 'baremetal']
@@ -1107,7 +1093,9 @@ class TestFlavorUnset(TestFlavor):
1107
1093
  self.compute_client.find_flavor.assert_called_with(
1108
1094
  parsed_args.flavor, get_extra_specs=True, ignore_missing=False
1109
1095
  )
1110
- self.mock_shortcut.assert_called_with(self.flavor.id, 'property')
1096
+ self.compute_client.delete_flavor_extra_specs_property.assert_called_with(
1097
+ self.flavor.id, 'property'
1098
+ )
1111
1099
  self.compute_client.flavor_remove_tenant_access.assert_not_called()
1112
1100
  self.assertIsNone(result)
1113
1101
 
@@ -1126,21 +1114,16 @@ class TestFlavorUnset(TestFlavor):
1126
1114
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1127
1115
 
1128
1116
  self.cmd.take_action(parsed_args)
1117
+
1129
1118
  self.compute_client.find_flavor.assert_called_with(
1130
1119
  parsed_args.flavor, get_extra_specs=True, ignore_missing=False
1131
1120
  )
1132
- calls = [
1133
- mock.call(self.flavor.id, 'property1'),
1134
- mock.call(self.flavor.id, 'property2'),
1135
- ]
1136
- self.mock_shortcut.assert_has_calls(calls)
1137
-
1138
- # A bit tricky way to ensure we do not unset other properties
1139
- calls.append(mock.call(self.flavor.id, 'property'))
1140
- self.assertRaises(
1141
- AssertionError, self.mock_shortcut.assert_has_calls, calls
1121
+ self.compute_client.delete_flavor_extra_specs_property.assert_has_calls(
1122
+ [
1123
+ mock.call(self.flavor.id, 'property1'),
1124
+ mock.call(self.flavor.id, 'property2'),
1125
+ ]
1142
1126
  )
1143
-
1144
1127
  self.compute_client.flavor_remove_tenant_access.assert_not_called()
1145
1128
 
1146
1129
  def test_flavor_unset_project(self):
@@ -12,20 +12,12 @@
12
12
  # License for the specific language governing permissions and limitations
13
13
  # under the License.
14
14
  #
15
- from unittest import mock
16
15
 
17
16
  from openstackclient.compute.v2 import hypervisor_stats
18
17
  from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
19
18
  from openstackclient.tests.unit import fakes
20
19
 
21
20
 
22
- class TestHypervisorStats(compute_fakes.TestComputev2):
23
- def setUp(self):
24
- super().setUp()
25
-
26
- self.compute_client.get = mock.Mock()
27
-
28
-
29
21
  # Not in fakes.py because hypervisor stats has been deprecated
30
22
 
31
23
 
@@ -61,7 +53,7 @@ def create_one_hypervisor_stats(attrs=None):
61
53
  return stats_info
62
54
 
63
55
 
64
- class TestHypervisorStatsShow(TestHypervisorStats):
56
+ class TestHypervisorStatsShow(compute_fakes.TestComputev2):
65
57
  _stats = create_one_hypervisor_stats()
66
58
 
67
59
  def setUp(self):