python-openstackclient 8.2.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 (226) hide show
  1. openstackclient/api/object_store_v1.py +4 -1
  2. openstackclient/command.py +27 -0
  3. openstackclient/common/availability_zone.py +1 -1
  4. openstackclient/common/clientmanager.py +59 -21
  5. openstackclient/common/configuration.py +1 -1
  6. openstackclient/common/extension.py +1 -1
  7. openstackclient/common/limits.py +1 -1
  8. openstackclient/common/module.py +4 -2
  9. openstackclient/common/project_cleanup.py +10 -8
  10. openstackclient/common/quota.py +23 -6
  11. openstackclient/common/versions.py +1 -2
  12. openstackclient/compute/v2/agent.py +1 -1
  13. openstackclient/compute/v2/aggregate.py +6 -5
  14. openstackclient/compute/v2/console.py +5 -3
  15. openstackclient/compute/v2/console_connection.py +1 -1
  16. openstackclient/compute/v2/flavor.py +1 -1
  17. openstackclient/compute/v2/host.py +1 -1
  18. openstackclient/compute/v2/hypervisor.py +1 -1
  19. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  20. openstackclient/compute/v2/keypair.py +1 -1
  21. openstackclient/compute/v2/server.py +76 -27
  22. openstackclient/compute/v2/server_backup.py +1 -1
  23. openstackclient/compute/v2/server_event.py +1 -1
  24. openstackclient/compute/v2/server_group.py +4 -2
  25. openstackclient/compute/v2/server_image.py +1 -1
  26. openstackclient/compute/v2/server_migration.py +1 -1
  27. openstackclient/compute/v2/server_volume.py +1 -1
  28. openstackclient/compute/v2/service.py +1 -1
  29. openstackclient/compute/v2/usage.py +6 -4
  30. openstackclient/identity/common.py +2 -1
  31. openstackclient/identity/v2_0/catalog.py +3 -2
  32. openstackclient/identity/v2_0/ec2creds.py +1 -1
  33. openstackclient/identity/v2_0/endpoint.py +1 -1
  34. openstackclient/identity/v2_0/project.py +17 -7
  35. openstackclient/identity/v2_0/role.py +1 -1
  36. openstackclient/identity/v2_0/role_assignment.py +3 -3
  37. openstackclient/identity/v2_0/service.py +1 -1
  38. openstackclient/identity/v2_0/token.py +1 -1
  39. openstackclient/identity/v2_0/user.py +2 -2
  40. openstackclient/identity/v3/access_rule.py +16 -4
  41. openstackclient/identity/v3/application_credential.py +30 -10
  42. openstackclient/identity/v3/catalog.py +3 -3
  43. openstackclient/identity/v3/consumer.py +1 -1
  44. openstackclient/identity/v3/credential.py +1 -1
  45. openstackclient/identity/v3/domain.py +10 -4
  46. openstackclient/identity/v3/ec2creds.py +1 -1
  47. openstackclient/identity/v3/endpoint.py +33 -12
  48. openstackclient/identity/v3/endpoint_group.py +1 -1
  49. openstackclient/identity/v3/federation_protocol.py +1 -1
  50. openstackclient/identity/v3/group.py +11 -5
  51. openstackclient/identity/v3/identity_provider.py +12 -10
  52. openstackclient/identity/v3/implied_role.py +1 -1
  53. openstackclient/identity/v3/limit.py +1 -1
  54. openstackclient/identity/v3/mapping.py +1 -1
  55. openstackclient/identity/v3/policy.py +1 -1
  56. openstackclient/identity/v3/project.py +10 -3
  57. openstackclient/identity/v3/region.py +1 -1
  58. openstackclient/identity/v3/registered_limit.py +16 -11
  59. openstackclient/identity/v3/role.py +20 -39
  60. openstackclient/identity/v3/role_assignment.py +12 -23
  61. openstackclient/identity/v3/service.py +1 -1
  62. openstackclient/identity/v3/service_provider.py +1 -1
  63. openstackclient/identity/v3/tag.py +3 -2
  64. openstackclient/identity/v3/token.py +3 -2
  65. openstackclient/identity/v3/trust.py +4 -2
  66. openstackclient/identity/v3/unscoped_saml.py +1 -1
  67. openstackclient/identity/v3/user.py +22 -13
  68. openstackclient/image/v1/image.py +19 -16
  69. openstackclient/image/v2/cache.py +1 -1
  70. openstackclient/image/v2/image.py +14 -11
  71. openstackclient/image/v2/info.py +1 -1
  72. openstackclient/image/v2/metadef_namespaces.py +1 -1
  73. openstackclient/image/v2/metadef_objects.py +1 -1
  74. openstackclient/image/v2/metadef_properties.py +3 -2
  75. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  76. openstackclient/image/v2/metadef_resource_types.py +1 -1
  77. openstackclient/image/v2/task.py +1 -1
  78. openstackclient/network/common.py +10 -9
  79. openstackclient/network/v2/address_group.py +4 -3
  80. openstackclient/network/v2/address_scope.py +8 -6
  81. openstackclient/network/v2/default_security_group_rule.py +9 -8
  82. openstackclient/network/v2/floating_ip.py +16 -9
  83. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  84. openstackclient/network/v2/ip_availability.py +7 -4
  85. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  86. openstackclient/network/v2/local_ip.py +13 -7
  87. openstackclient/network/v2/local_ip_association.py +7 -4
  88. openstackclient/network/v2/ndp_proxy.py +13 -6
  89. openstackclient/network/v2/network.py +33 -16
  90. openstackclient/network/v2/network_agent.py +5 -5
  91. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  92. openstackclient/network/v2/network_flavor.py +1 -1
  93. openstackclient/network/v2/network_flavor_profile.py +1 -1
  94. openstackclient/network/v2/network_meter.py +1 -1
  95. openstackclient/network/v2/network_meter_rule.py +1 -1
  96. openstackclient/network/v2/network_qos_policy.py +7 -5
  97. openstackclient/network/v2/network_qos_rule.py +1 -1
  98. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  99. openstackclient/network/v2/network_rbac.py +8 -5
  100. openstackclient/network/v2/network_segment.py +2 -2
  101. openstackclient/network/v2/network_segment_range.py +13 -6
  102. openstackclient/network/v2/network_service_provider.py +1 -1
  103. openstackclient/network/v2/network_trunk.py +65 -42
  104. openstackclient/network/v2/port.py +22 -20
  105. openstackclient/network/v2/router.py +19 -8
  106. openstackclient/network/v2/security_group.py +10 -6
  107. openstackclient/network/v2/security_group_rule.py +11 -5
  108. openstackclient/network/v2/subnet.py +17 -18
  109. openstackclient/network/v2/subnet_pool.py +11 -9
  110. openstackclient/network/v2/taas/__init__.py +0 -0
  111. openstackclient/network/v2/taas/tap_flow.py +245 -0
  112. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  113. openstackclient/network/v2/taas/tap_service.py +211 -0
  114. openstackclient/object/v1/account.py +1 -1
  115. openstackclient/object/v1/container.py +1 -1
  116. openstackclient/object/v1/object.py +1 -1
  117. openstackclient/shell.py +18 -8
  118. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  119. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  120. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  121. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  122. openstackclient/tests/unit/common/test_command.py +1 -1
  123. openstackclient/tests/unit/common/test_extension.py +2 -3
  124. openstackclient/tests/unit/common/test_module.py +14 -7
  125. openstackclient/tests/unit/common/test_quota.py +20 -0
  126. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  127. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  128. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
  129. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  130. openstackclient/tests/unit/compute/v2/test_server.py +364 -30
  131. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  132. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  133. openstackclient/tests/unit/fakes.py +35 -134
  134. openstackclient/tests/unit/identity/test_common.py +100 -0
  135. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  136. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  137. openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
  138. openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
  139. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  140. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  141. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  142. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  143. openstackclient/tests/unit/identity/v3/test_project.py +1 -1
  144. openstackclient/tests/unit/identity/v3/test_registered_limit.py +2 -2
  145. openstackclient/tests/unit/identity/v3/test_role.py +1 -82
  146. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  147. openstackclient/tests/unit/image/v2/test_image.py +111 -0
  148. openstackclient/tests/unit/network/test_common.py +9 -13
  149. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  150. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  151. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  152. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  153. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  154. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  155. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  156. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  157. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  158. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  159. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  160. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  161. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  162. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
  163. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  164. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  165. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  166. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  167. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  168. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  169. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  170. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  171. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  172. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  173. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  174. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  175. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  176. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  177. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  178. openstackclient/tests/unit/network/v2/test_port.py +75 -86
  179. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  180. openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
  181. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
  182. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  183. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  184. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  185. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  186. openstackclient/tests/unit/volume/v3/test_volume.py +4 -0
  187. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  188. openstackclient/volume/client.py +7 -17
  189. openstackclient/volume/v2/backup_record.py +1 -1
  190. openstackclient/volume/v2/consistency_group.py +1 -1
  191. openstackclient/volume/v2/consistency_group_snapshot.py +1 -1
  192. openstackclient/volume/v2/qos_specs.py +1 -1
  193. openstackclient/volume/v2/service.py +1 -1
  194. openstackclient/volume/v2/volume.py +2 -2
  195. openstackclient/volume/v2/volume_backend.py +1 -1
  196. openstackclient/volume/v2/volume_backup.py +5 -3
  197. openstackclient/volume/v2/volume_host.py +1 -2
  198. openstackclient/volume/v2/volume_snapshot.py +2 -2
  199. openstackclient/volume/v2/volume_transfer_request.py +1 -1
  200. openstackclient/volume/v2/volume_type.py +11 -6
  201. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  202. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  203. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  204. openstackclient/volume/v3/block_storage_manage.py +1 -1
  205. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  206. openstackclient/volume/v3/service.py +1 -1
  207. openstackclient/volume/v3/volume.py +2 -2
  208. openstackclient/volume/v3/volume_attachment.py +6 -5
  209. openstackclient/volume/v3/volume_backup.py +18 -3
  210. openstackclient/volume/v3/volume_group.py +1 -1
  211. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  212. openstackclient/volume/v3/volume_group_type.py +1 -1
  213. openstackclient/volume/v3/volume_message.py +1 -1
  214. openstackclient/volume/v3/volume_snapshot.py +2 -2
  215. openstackclient/volume/v3/volume_transfer_request.py +1 -1
  216. openstackclient/volume/v3/volume_type.py +15 -9
  217. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/METADATA +15 -13
  218. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/RECORD +224 -213
  219. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/WHEEL +1 -1
  220. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/entry_points.txt +15 -0
  221. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/AUTHORS +10 -0
  222. python_openstackclient-8.3.0.dist-info/pbr.json +1 -0
  223. openstackclient/tests/unit/common/test_logs.py +0 -221
  224. python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
  225. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/LICENSE +0 -0
  226. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,271 @@
1
+ # All Rights Reserved 2020
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
4
+ # not use this file except in compliance with the License. You may obtain
5
+ # a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
+ # License for the specific language governing permissions and limitations
13
+ # under the License.
14
+
15
+ import copy
16
+ import operator
17
+ import uuid
18
+
19
+ from openstack.network.v2 import tap_service
20
+ from openstack.test import fakes as sdk_fakes
21
+ from osc_lib import utils as osc_utils
22
+ from osc_lib.utils import columns as column_util
23
+
24
+ from openstackclient.network.v2.taas import tap_service as osc_tap_service
25
+ from openstackclient.tests.unit.network.v2 import fakes as network_fakes
26
+
27
+
28
+ columns_long = tuple(
29
+ col
30
+ for col, _, listing_mode in osc_tap_service._attr_map
31
+ if listing_mode in (column_util.LIST_BOTH, column_util.LIST_LONG_ONLY)
32
+ )
33
+ headers_long = tuple(
34
+ head
35
+ for _, head, listing_mode in osc_tap_service._attr_map
36
+ if listing_mode in (column_util.LIST_BOTH, column_util.LIST_LONG_ONLY)
37
+ )
38
+ sorted_attr_map = sorted(osc_tap_service._attr_map, key=operator.itemgetter(1))
39
+ sorted_columns = tuple(col for col, _, _ in sorted_attr_map)
40
+ sorted_headers = tuple(head for _, head, _ in sorted_attr_map)
41
+
42
+
43
+ def _get_data(attrs, columns=sorted_columns):
44
+ return osc_utils.get_dict_properties(attrs, columns)
45
+
46
+
47
+ class TestCreateTapService(network_fakes.TestNetworkV2):
48
+ columns = (
49
+ 'description',
50
+ 'id',
51
+ 'name',
52
+ 'port_id',
53
+ 'project_id',
54
+ 'status',
55
+ )
56
+
57
+ def setUp(self):
58
+ super().setUp()
59
+ self.cmd = osc_tap_service.CreateTapService(self.app, None)
60
+
61
+ def test_create_tap_service(self):
62
+ """Test Create Tap Service."""
63
+ port_id = str(uuid.uuid4())
64
+ fake_port = network_fakes.create_one_port(attrs={'id': port_id})
65
+ fake_tap_service = sdk_fakes.generate_fake_resource(
66
+ tap_service.TapService, **{'port_id': port_id}
67
+ )
68
+ self.app.client_manager.network.create_tap_service.return_value = (
69
+ fake_tap_service
70
+ )
71
+ self.app.client_manager.network.find_port.return_value = fake_port
72
+ self.app.client_manager.network.find_tap_service.side_effect = (
73
+ lambda _, name_or_id: {'id': name_or_id}
74
+ )
75
+ arg_list = [
76
+ '--name',
77
+ fake_tap_service['name'],
78
+ '--port',
79
+ fake_tap_service['port_id'],
80
+ ]
81
+
82
+ verify_list = [
83
+ ('name', fake_tap_service['name']),
84
+ ('port_id', fake_tap_service['port_id']),
85
+ ]
86
+
87
+ parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
88
+ self.app.client_manager.network.find_tap_service.return_value = (
89
+ fake_tap_service
90
+ )
91
+
92
+ columns, data = self.cmd.take_action(parsed_args)
93
+ create_tap_s_mock = self.app.client_manager.network.create_tap_service
94
+ create_tap_s_mock.assert_called_once_with(
95
+ **{
96
+ 'name': fake_tap_service['name'],
97
+ 'port_id': fake_tap_service['port_id'],
98
+ }
99
+ )
100
+ self.assertEqual(self.columns, columns)
101
+ fake_data = _get_data(
102
+ fake_tap_service, osc_tap_service._get_columns(fake_tap_service)[1]
103
+ )
104
+ self.assertEqual(fake_data, data)
105
+
106
+
107
+ class TestListTapService(network_fakes.TestNetworkV2):
108
+ def setUp(self):
109
+ super().setUp()
110
+ self.cmd = osc_tap_service.ListTapService(self.app, None)
111
+
112
+ def test_list_tap_service(self):
113
+ """Test List Tap Service."""
114
+ fake_tap_services = list(
115
+ sdk_fakes.generate_fake_resources(tap_service.TapService, count=4)
116
+ )
117
+ self.app.client_manager.network.tap_services.return_value = (
118
+ fake_tap_services
119
+ )
120
+
121
+ arg_list = []
122
+ verify_list = []
123
+
124
+ parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
125
+
126
+ headers, data = self.cmd.take_action(parsed_args)
127
+
128
+ self.app.client_manager.network.tap_services.assert_called_once()
129
+ self.assertEqual(headers, list(headers_long))
130
+ self.assertCountEqual(
131
+ list(data),
132
+ [
133
+ _get_data(fake_tap_service, columns_long)
134
+ for fake_tap_service in fake_tap_services
135
+ ],
136
+ )
137
+
138
+
139
+ class TestDeleteTapService(network_fakes.TestNetworkV2):
140
+ def setUp(self):
141
+ super().setUp()
142
+ self.app.client_manager.network.find_tap_service.side_effect = (
143
+ lambda name_or_id, ignore_missing: tap_service.TapService(
144
+ id=name_or_id
145
+ )
146
+ )
147
+ self.cmd = osc_tap_service.DeleteTapService(self.app, None)
148
+
149
+ def test_delete_tap_service(self):
150
+ """Test Delete tap service."""
151
+
152
+ fake_tap_service = sdk_fakes.generate_fake_resource(
153
+ tap_service.TapService
154
+ )
155
+
156
+ arg_list = [
157
+ fake_tap_service['id'],
158
+ ]
159
+ verify_list = [
160
+ (osc_tap_service.TAP_SERVICE, [fake_tap_service['id']]),
161
+ ]
162
+
163
+ parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
164
+ result = self.cmd.take_action(parsed_args)
165
+
166
+ mock_delete_tap_s = self.app.client_manager.network.delete_tap_service
167
+ mock_delete_tap_s.assert_called_once_with(fake_tap_service['id'])
168
+ self.assertIsNone(result)
169
+
170
+
171
+ class TestShowTapService(network_fakes.TestNetworkV2):
172
+ columns = (
173
+ 'description',
174
+ 'id',
175
+ 'name',
176
+ 'port_id',
177
+ 'project_id',
178
+ 'status',
179
+ )
180
+
181
+ def setUp(self):
182
+ super().setUp()
183
+ self.app.client_manager.network.find_tap_service.side_effect = (
184
+ lambda name_or_id, ignore_missing: tap_service.TapService(
185
+ id=name_or_id
186
+ )
187
+ )
188
+ self.cmd = osc_tap_service.ShowTapService(self.app, None)
189
+
190
+ def test_show_tap_service(self):
191
+ """Test Show tap service."""
192
+
193
+ fake_tap_service = sdk_fakes.generate_fake_resource(
194
+ tap_service.TapService
195
+ )
196
+ self.app.client_manager.network.get_tap_service.return_value = (
197
+ fake_tap_service
198
+ )
199
+ arg_list = [
200
+ fake_tap_service['id'],
201
+ ]
202
+ verify_list = [
203
+ (osc_tap_service.TAP_SERVICE, fake_tap_service['id']),
204
+ ]
205
+
206
+ parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
207
+
208
+ headers, data = self.cmd.take_action(parsed_args)
209
+
210
+ mock_get_tap_s = self.app.client_manager.network.get_tap_service
211
+ mock_get_tap_s.assert_called_once_with(fake_tap_service['id'])
212
+ self.assertEqual(self.columns, headers)
213
+ fake_data = _get_data(
214
+ fake_tap_service, osc_tap_service._get_columns(fake_tap_service)[1]
215
+ )
216
+ self.assertEqual(fake_data, data)
217
+
218
+
219
+ class TestUpdateTapService(network_fakes.TestNetworkV2):
220
+ _new_name = 'new_name'
221
+
222
+ columns = (
223
+ 'description',
224
+ 'id',
225
+ 'name',
226
+ 'port_id',
227
+ 'project_id',
228
+ 'status',
229
+ )
230
+
231
+ def setUp(self):
232
+ super().setUp()
233
+ self.cmd = osc_tap_service.UpdateTapService(self.app, None)
234
+ self.app.client_manager.network.find_tap_service.side_effect = (
235
+ lambda name_or_id, ignore_missing: tap_service.TapService(
236
+ id=name_or_id
237
+ )
238
+ )
239
+
240
+ def test_update_tap_service(self):
241
+ """Test update tap service"""
242
+ fake_tap_service = sdk_fakes.generate_fake_resource(
243
+ tap_service.TapService
244
+ )
245
+ new_tap_service = copy.deepcopy(fake_tap_service)
246
+ new_tap_service['name'] = self._new_name
247
+
248
+ self.app.client_manager.network.update_tap_service.return_value = (
249
+ new_tap_service
250
+ )
251
+
252
+ arg_list = [
253
+ fake_tap_service['id'],
254
+ '--name',
255
+ self._new_name,
256
+ ]
257
+ verify_list = [('name', self._new_name)]
258
+
259
+ parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
260
+ columns, data = self.cmd.take_action(parsed_args)
261
+ attrs = {'name': self._new_name}
262
+
263
+ mock_update_tap_s = self.app.client_manager.network.update_tap_service
264
+ mock_update_tap_s.assert_called_once_with(
265
+ fake_tap_service['id'], **attrs
266
+ )
267
+ self.assertEqual(self.columns, columns)
268
+ fake_data = _get_data(
269
+ new_tap_service, osc_tap_service._get_columns(new_tap_service)[1]
270
+ )
271
+ self.assertEqual(fake_data, data)
@@ -11,7 +11,6 @@
11
11
  # under the License.
12
12
  #
13
13
 
14
- from unittest import mock
15
14
  from unittest.mock import call
16
15
 
17
16
  from osc_lib import exceptions
@@ -58,8 +57,8 @@ class TestCreateAddressGroup(TestAddressGroup):
58
57
 
59
58
  def setUp(self):
60
59
  super().setUp()
61
- self.network_client.create_address_group = mock.Mock(
62
- return_value=self.new_address_group
60
+ self.network_client.create_address_group.return_value = (
61
+ self.new_address_group
63
62
  )
64
63
 
65
64
  # Get the command object to test
@@ -145,7 +144,7 @@ class TestDeleteAddressGroup(TestAddressGroup):
145
144
 
146
145
  def setUp(self):
147
146
  super().setUp()
148
- self.network_client.delete_address_group = mock.Mock(return_value=None)
147
+ self.network_client.delete_address_group.return_value = None
149
148
  self.network_client.find_address_group = (
150
149
  network_fakes.get_address_groups(
151
150
  address_groups=self._address_groups
@@ -206,9 +205,7 @@ class TestDeleteAddressGroup(TestAddressGroup):
206
205
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
207
206
 
208
207
  find_mock_result = [self._address_groups[0], exceptions.CommandError]
209
- self.network_client.find_address_group = mock.Mock(
210
- side_effect=find_mock_result
211
- )
208
+ self.network_client.find_address_group.side_effect = find_mock_result
212
209
 
213
210
  try:
214
211
  self.cmd.take_action(parsed_args)
@@ -251,9 +248,7 @@ class TestListAddressGroup(TestAddressGroup):
251
248
 
252
249
  def setUp(self):
253
250
  super().setUp()
254
- self.network_client.address_groups = mock.Mock(
255
- return_value=self.address_groups
256
- )
251
+ self.network_client.address_groups.return_value = self.address_groups
257
252
 
258
253
  # Get the command object to test
259
254
  self.cmd = address_group.ListAddressGroup(self.app, None)
@@ -333,13 +328,15 @@ class TestSetAddressGroup(TestAddressGroup):
333
328
 
334
329
  def setUp(self):
335
330
  super().setUp()
336
- self.network_client.update_address_group = mock.Mock(return_value=None)
337
- self.network_client.find_address_group = mock.Mock(
338
- return_value=self._address_group
331
+ self.network_client.update_address_group.return_value = None
332
+ self.network_client.find_address_group.return_value = (
333
+ self._address_group
339
334
  )
340
- self.network_client.add_addresses_to_address_group = mock.Mock(
341
- return_value=self._address_group
335
+
336
+ self.network_client.add_addresses_to_address_group.return_value = (
337
+ self._address_group
342
338
  )
339
+
343
340
  # Get the command object to test
344
341
  self.cmd = address_group.SetAddressGroup(self.app, None)
345
342
 
@@ -442,8 +439,8 @@ class TestShowAddressGroup(TestAddressGroup):
442
439
 
443
440
  def setUp(self):
444
441
  super().setUp()
445
- self.network_client.find_address_group = mock.Mock(
446
- return_value=self._address_group
442
+ self.network_client.find_address_group.return_value = (
443
+ self._address_group
447
444
  )
448
445
 
449
446
  # Get the command object to test
@@ -486,12 +483,12 @@ class TestUnsetAddressGroup(TestAddressGroup):
486
483
 
487
484
  def setUp(self):
488
485
  super().setUp()
489
- self.network_client.find_address_group = mock.Mock(
490
- return_value=self._address_group
491
- )
492
- self.network_client.remove_addresses_from_address_group = mock.Mock(
493
- return_value=self._address_group
486
+ self.network_client.find_address_group.return_value = (
487
+ self._address_group
494
488
  )
489
+
490
+ self.network_client.remove_addresses_from_address_group.return_value = self._address_group
491
+
495
492
  # Get the command object to test
496
493
  self.cmd = address_group.UnsetAddressGroup(self.app, None)
497
494
 
@@ -11,7 +11,6 @@
11
11
  # under the License.
12
12
  #
13
13
 
14
- from unittest import mock
15
14
  from unittest.mock import call
16
15
 
17
16
  from osc_lib import exceptions
@@ -52,8 +51,8 @@ class TestCreateAddressScope(TestAddressScope):
52
51
 
53
52
  def setUp(self):
54
53
  super().setUp()
55
- self.network_client.create_address_scope = mock.Mock(
56
- return_value=self.new_address_scope
54
+ self.network_client.create_address_scope.return_value = (
55
+ self.new_address_scope
57
56
  )
58
57
 
59
58
  # Get the command object to test
@@ -160,7 +159,7 @@ class TestDeleteAddressScope(TestAddressScope):
160
159
 
161
160
  def setUp(self):
162
161
  super().setUp()
163
- self.network_client.delete_address_scope = mock.Mock(return_value=None)
162
+ self.network_client.delete_address_scope.return_value = None
164
163
  self.network_client.find_address_scope = (
165
164
  network_fakes.get_address_scopes(
166
165
  address_scopes=self._address_scopes
@@ -222,9 +221,7 @@ class TestDeleteAddressScope(TestAddressScope):
222
221
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
223
222
 
224
223
  find_mock_result = [self._address_scopes[0], exceptions.CommandError]
225
- self.network_client.find_address_scope = mock.Mock(
226
- side_effect=find_mock_result
227
- )
224
+ self.network_client.find_address_scope.side_effect = find_mock_result
228
225
 
229
226
  try:
230
227
  self.cmd.take_action(parsed_args)
@@ -267,9 +264,7 @@ class TestListAddressScope(TestAddressScope):
267
264
 
268
265
  def setUp(self):
269
266
  super().setUp()
270
- self.network_client.address_scopes = mock.Mock(
271
- return_value=self.address_scopes
272
- )
267
+ self.network_client.address_scopes.return_value = self.address_scopes
273
268
 
274
269
  # Get the command object to test
275
270
  self.cmd = address_scope.ListAddressScope(self.app, None)
@@ -398,9 +393,9 @@ class TestSetAddressScope(TestAddressScope):
398
393
 
399
394
  def setUp(self):
400
395
  super().setUp()
401
- self.network_client.update_address_scope = mock.Mock(return_value=None)
402
- self.network_client.find_address_scope = mock.Mock(
403
- return_value=self._address_scope
396
+ self.network_client.update_address_scope.return_value = None
397
+ self.network_client.find_address_scope.return_value = (
398
+ self._address_scope
404
399
  )
405
400
 
406
401
  # Get the command object to test
@@ -488,8 +483,8 @@ class TestShowAddressScope(TestAddressScope):
488
483
 
489
484
  def setUp(self):
490
485
  super().setUp()
491
- self.network_client.find_address_scope = mock.Mock(
492
- return_value=self._address_scope
486
+ self.network_client.find_address_scope.return_value = (
487
+ self._address_scope
493
488
  )
494
489
 
495
490
  # Get the command object to test