python-openstackclient 8.3.0__py3-none-any.whl → 10.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. openstackclient/__init__.py +2 -6
  2. openstackclient/api/api.py +41 -23
  3. openstackclient/api/compute_v2.py +44 -25
  4. openstackclient/api/object_store_v1.py +75 -97
  5. openstackclient/api/volume_v2.py +2 -1
  6. openstackclient/api/volume_v3.py +2 -1
  7. openstackclient/common/availability_zone.py +58 -42
  8. openstackclient/common/clientmanager.py +56 -29
  9. openstackclient/common/configuration.py +10 -3
  10. openstackclient/common/envvars.py +2 -2
  11. openstackclient/common/extension.py +14 -5
  12. openstackclient/common/limits.py +10 -5
  13. openstackclient/common/module.py +14 -6
  14. openstackclient/common/pagination.py +8 -2
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +13 -7
  17. openstackclient/common/quota.py +126 -114
  18. openstackclient/common/versions.py +8 -2
  19. openstackclient/compute/client.py +7 -3
  20. openstackclient/compute/v2/agent.py +17 -10
  21. openstackclient/compute/v2/aggregate.py +36 -22
  22. openstackclient/compute/v2/console.py +14 -8
  23. openstackclient/compute/v2/console_connection.py +11 -3
  24. openstackclient/compute/v2/flavor.py +39 -21
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +14 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +29 -14
  29. openstackclient/compute/v2/server.py +251 -171
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +21 -12
  32. openstackclient/compute/v2/server_group.py +21 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +24 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +10 -4
  37. openstackclient/compute/v2/service.py +14 -7
  38. openstackclient/compute/v2/usage.py +26 -21
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +103 -41
  41. openstackclient/identity/v2_0/catalog.py +14 -7
  42. openstackclient/identity/v2_0/ec2creds.py +21 -10
  43. openstackclient/identity/v2_0/endpoint.py +23 -11
  44. openstackclient/identity/v2_0/project.py +25 -14
  45. openstackclient/identity/v2_0/role.py +28 -14
  46. openstackclient/identity/v2_0/role_assignment.py +9 -3
  47. openstackclient/identity/v2_0/service.py +26 -12
  48. openstackclient/identity/v2_0/token.py +12 -5
  49. openstackclient/identity/v2_0/user.py +26 -15
  50. openstackclient/identity/v3/access_rule.py +26 -12
  51. openstackclient/identity/v3/application_credential.py +59 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +36 -16
  55. openstackclient/identity/v3/domain.py +37 -18
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +42 -20
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +71 -50
  60. openstackclient/identity/v3/group.py +55 -32
  61. openstackclient/identity/v3/identity_provider.py +92 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +115 -92
  64. openstackclient/identity/v3/mapping.py +26 -13
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +211 -122
  67. openstackclient/identity/v3/region.py +36 -16
  68. openstackclient/identity/v3/registered_limit.py +116 -109
  69. openstackclient/identity/v3/role.py +61 -31
  70. openstackclient/identity/v3/role_assignment.py +23 -6
  71. openstackclient/identity/v3/service.py +36 -16
  72. openstackclient/identity/v3/service_provider.py +37 -15
  73. openstackclient/identity/v3/tag.py +23 -17
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +32 -14
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +49 -26
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +14 -9
  81. openstackclient/image/v2/image.py +76 -49
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +109 -13
  84. openstackclient/image/v2/metadef_objects.py +28 -15
  85. openstackclient/image/v2/metadef_properties.py +24 -13
  86. openstackclient/image/v2/metadef_resource_type_association.py +14 -7
  87. openstackclient/image/v2/metadef_resource_types.py +7 -1
  88. openstackclient/image/v2/task.py +15 -6
  89. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
  90. openstackclient/network/client.py +7 -2
  91. openstackclient/network/common.py +16 -241
  92. openstackclient/network/utils.py +36 -22
  93. openstackclient/network/v2/address_group.py +27 -16
  94. openstackclient/network/v2/address_scope.py +24 -13
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +214 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +490 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +288 -0
  100. openstackclient/network/v2/default_security_group_rule.py +19 -10
  101. openstackclient/network/v2/floating_ip.py +110 -159
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +466 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +574 -0
  107. openstackclient/network/v2/ip_availability.py +13 -5
  108. openstackclient/network/v2/l3_conntrack_helper.py +22 -13
  109. openstackclient/network/v2/local_ip.py +24 -13
  110. openstackclient/network/v2/local_ip_association.py +14 -7
  111. openstackclient/network/v2/ndp_proxy.py +20 -11
  112. openstackclient/network/v2/network.py +129 -196
  113. openstackclient/network/v2/network_agent.py +46 -25
  114. openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
  115. openstackclient/network/v2/network_flavor.py +27 -16
  116. openstackclient/network/v2/network_flavor_profile.py +23 -12
  117. openstackclient/network/v2/network_meter.py +21 -10
  118. openstackclient/network/v2/network_meter_rule.py +21 -11
  119. openstackclient/network/v2/network_qos_policy.py +25 -15
  120. openstackclient/network/v2/network_qos_rule.py +32 -17
  121. openstackclient/network/v2/network_qos_rule_type.py +13 -5
  122. openstackclient/network/v2/network_rbac.py +23 -12
  123. openstackclient/network/v2/network_segment.py +20 -11
  124. openstackclient/network/v2/network_segment_range.py +56 -29
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +38 -22
  127. openstackclient/network/v2/port.py +54 -29
  128. openstackclient/network/v2/router.py +75 -52
  129. openstackclient/network/v2/security_group.py +87 -157
  130. openstackclient/network/v2/security_group_rule.py +100 -280
  131. openstackclient/network/v2/subnet.py +49 -28
  132. openstackclient/network/v2/subnet_pool.py +30 -17
  133. openstackclient/network/v2/taas/tap_flow.py +22 -11
  134. openstackclient/network/v2/taas/tap_mirror.py +22 -11
  135. openstackclient/network/v2/taas/tap_service.py +23 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +25 -15
  139. openstackclient/object/v1/object.py +25 -15
  140. openstackclient/py.typed +0 -0
  141. openstackclient/shell.py +46 -10
  142. openstackclient/tests/functional/base.py +55 -20
  143. openstackclient/tests/functional/common/test_extension.py +4 -0
  144. openstackclient/tests/functional/common/test_quota.py +3 -1
  145. openstackclient/tests/functional/compute/v2/common.py +14 -13
  146. openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
  147. openstackclient/tests/functional/compute/v2/test_server.py +3 -0
  148. openstackclient/tests/functional/identity/v2/common.py +10 -6
  149. openstackclient/tests/functional/identity/v2/test_role.py +4 -4
  150. openstackclient/tests/functional/identity/v3/common.py +25 -19
  151. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  152. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  153. openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
  154. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  155. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  156. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  157. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  158. openstackclient/tests/functional/image/base.py +1 -6
  159. openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
  160. openstackclient/tests/functional/network/v2/common.py +5 -2
  161. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  162. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  163. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  164. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  165. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  166. openstackclient/tests/functional/object/v1/common.py +4 -0
  167. openstackclient/tests/functional/volume/v2/common.py +4 -0
  168. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  169. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  170. openstackclient/tests/functional/volume/v3/common.py +4 -0
  171. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +56 -138
  172. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  173. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  174. openstackclient/tests/unit/common/test_extension.py +2 -2
  175. openstackclient/tests/unit/common/test_module.py +12 -7
  176. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  177. openstackclient/tests/unit/common/test_quota.py +62 -23
  178. openstackclient/tests/unit/compute/v2/fakes.py +25 -0
  179. openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
  180. openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
  181. openstackclient/tests/unit/compute/v2/test_server.py +17 -104
  182. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  183. openstackclient/tests/unit/identity/v3/fakes.py +3 -0
  184. openstackclient/tests/unit/identity/v3/test_group.py +4 -14
  185. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  186. openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
  187. openstackclient/tests/unit/identity/v3/test_project.py +831 -512
  188. openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
  189. openstackclient/tests/unit/identity/v3/test_registered_limit.py +355 -220
  190. openstackclient/tests/unit/identity/v3/test_user.py +4 -4
  191. openstackclient/tests/unit/image/v2/test_image.py +16 -16
  192. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  193. openstackclient/tests/unit/network/test_common.py +0 -155
  194. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  195. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  196. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  197. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  198. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  199. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  200. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  201. openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
  202. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  203. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
  204. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  205. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  206. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  207. openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
  208. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
  209. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
  210. openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
  211. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  212. openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
  213. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
  214. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  215. openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
  216. openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
  217. openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
  218. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  219. openstackclient/tests/unit/network/v2/test_router.py +8 -9
  220. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
  221. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
  222. openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
  223. openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
  224. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  225. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  226. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  227. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  228. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  229. openstackclient/tests/unit/test_hacking.py +108 -0
  230. openstackclient/tests/unit/volume/v2/fakes.py +1 -0
  231. openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
  232. openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
  233. openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
  234. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
  235. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  236. openstackclient/tests/unit/volume/v3/fakes.py +1 -0
  237. openstackclient/tests/unit/volume/v3/test_volume.py +94 -15
  238. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  239. openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
  240. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
  241. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  242. openstackclient/volume/client.py +7 -3
  243. openstackclient/volume/v2/backup_record.py +15 -6
  244. openstackclient/volume/v2/consistency_group.py +37 -25
  245. openstackclient/volume/v2/consistency_group_snapshot.py +27 -12
  246. openstackclient/volume/v2/qos_specs.py +30 -19
  247. openstackclient/volume/v2/service.py +17 -6
  248. openstackclient/volume/v2/volume.py +69 -34
  249. openstackclient/volume/v2/volume_backend.py +19 -6
  250. openstackclient/volume/v2/volume_backup.py +48 -22
  251. openstackclient/volume/v2/volume_host.py +6 -4
  252. openstackclient/volume/v2/volume_snapshot.py +52 -26
  253. openstackclient/volume/v2/volume_transfer_request.py +33 -15
  254. openstackclient/volume/v2/volume_type.py +46 -27
  255. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  256. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  257. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  258. openstackclient/volume/v3/block_storage_manage.py +10 -4
  259. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  260. openstackclient/volume/v3/service.py +16 -6
  261. openstackclient/volume/v3/volume.py +103 -46
  262. openstackclient/volume/v3/volume_attachment.py +43 -21
  263. openstackclient/volume/v3/volume_backup.py +55 -26
  264. openstackclient/volume/v3/volume_group.py +23 -13
  265. openstackclient/volume/v3/volume_group_snapshot.py +32 -13
  266. openstackclient/volume/v3/volume_group_type.py +26 -13
  267. openstackclient/volume/v3/volume_message.py +15 -7
  268. openstackclient/volume/v3/volume_snapshot.py +71 -34
  269. openstackclient/volume/v3/volume_transfer_request.py +33 -15
  270. openstackclient/volume/v3/volume_type.py +45 -27
  271. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
  272. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +279 -267
  273. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
  274. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
  275. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +9 -0
  276. python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
  277. openstackclient/api/image_v1.py +0 -69
  278. openstackclient/api/image_v2.py +0 -79
  279. openstackclient/network/v2/floating_ip_pool.py +0 -38
  280. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  281. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  282. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  283. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  284. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  285. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  286. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  287. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  288. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  289. python_openstackclient-8.3.0.dist-info/pbr.json +0 -1
  290. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  291. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
  292. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,869 @@
1
+ # Copyright 2016 FUJITSU LIMITED
2
+ # All Rights Reserved
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
5
+ # not use this file except in compliance with the License. You may obtain
6
+ # a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+ #
16
+
17
+ import re
18
+ from unittest import mock
19
+
20
+ from openstack.network.v2 import firewall_policy
21
+ from openstack.network.v2 import firewall_rule
22
+ from openstack.test import fakes as sdk_fakes
23
+ from osc_lib import exceptions
24
+
25
+ from openstackclient.network.v2.fwaas import policy as fwaas_policy
26
+ from openstackclient.tests.unit.network.v2 import fakes as network_fakes
27
+ from openstackclient.tests.unit import utils as test_utils
28
+
29
+ CONVERT_MAP = {
30
+ 'project': 'project_id',
31
+ 'port': 'ports',
32
+ 'name': 'name',
33
+ 'id': 'id',
34
+ 'firewall_rule': 'firewall_rules',
35
+ 'description': 'description',
36
+ }
37
+
38
+
39
+ def _generate_data(source=None, data=None):
40
+ source = source or {}
41
+ if data:
42
+ source.update(data)
43
+ return tuple(source[key] for key in source)
44
+
45
+
46
+ def _generate_req_and_res(verifylist, response):
47
+ request = dict(verifylist)
48
+ for key, val in verifylist:
49
+ converted = CONVERT_MAP.get(key, key)
50
+ del request[key]
51
+ if re.match('^no_', key) and val is True:
52
+ new_value = None
53
+ elif val is True or val is False:
54
+ new_value = val
55
+ elif key in ('name', 'description'):
56
+ new_value = val
57
+ else:
58
+ new_value = val
59
+ request[converted] = new_value
60
+ response[converted] = new_value
61
+ return request, response
62
+
63
+
64
+ class TestFirewallPolicy(network_fakes.TestNetworkV2):
65
+ def check_results(self, headers, data, exp_req, is_list=False):
66
+ if is_list:
67
+ req_body = {self.res_plural: [exp_req]}
68
+ else:
69
+ req_body = exp_req
70
+ self.mocked.assert_called_once_with(**req_body)
71
+ self.assertEqual(self.ordered_headers, tuple(sorted(headers)))
72
+
73
+ def setUp(self):
74
+ super().setUp()
75
+
76
+ self.identity_client.projects.get.side_effect = lambda x: mock.Mock(
77
+ id=x
78
+ )
79
+ self.res = 'firewall_policy'
80
+ self.res_plural = 'firewall_policies'
81
+ self.resource = sdk_fakes.generate_fake_resource(
82
+ firewall_policy.FirewallPolicy
83
+ )
84
+ # TODO(slaweq): Remove this "firewall_rules" override once bug
85
+ # https://bugs.launchpad.net/openstacksdk/+bug/2146537 will be fixed in
86
+ # OpenStackSDK
87
+ self.resource['firewall_rules'] = [self.resource['firewall_rules']]
88
+
89
+ self.list_headers = (
90
+ 'ID',
91
+ 'Name',
92
+ 'Firewall Rules',
93
+ )
94
+ self.list_data = (
95
+ self.resource['id'],
96
+ self.resource['name'],
97
+ self.resource['firewall_rules'],
98
+ )
99
+ self.headers = tuple(
100
+ (*self.list_headers, 'Description', 'Audited', 'Shared', 'Project')
101
+ )
102
+ self.data = _generate_data(self.resource)
103
+ self.ordered_headers = (
104
+ 'Audited',
105
+ 'Description',
106
+ 'Firewall Rules',
107
+ 'ID',
108
+ 'Name',
109
+ 'Project',
110
+ 'Shared',
111
+ )
112
+ self.ordered_data = (
113
+ self.resource['audited'],
114
+ self.resource['description'],
115
+ self.resource['firewall_rules'],
116
+ self.resource['id'],
117
+ self.resource['name'],
118
+ self.resource['project_id'],
119
+ self.resource['shared'],
120
+ )
121
+ self.ordered_columns = (
122
+ 'audited',
123
+ 'description',
124
+ 'firewall_rules',
125
+ 'id',
126
+ 'name',
127
+ 'project_id',
128
+ 'shared',
129
+ )
130
+
131
+
132
+ class TestCreateFirewallPolicy(TestFirewallPolicy):
133
+ def setUp(self):
134
+ super().setUp()
135
+ self.network_client.create_firewall_policy.return_value = self.resource
136
+ self.mocked = self.network_client.create_firewall_policy
137
+ self.cmd = fwaas_policy.CreateFirewallPolicy(self.app, None)
138
+
139
+ def _update_expect_response(self, request, response):
140
+ """Set expected request and response
141
+
142
+ :param request
143
+ A dictionary of request body(dict of verifylist)
144
+ :param response
145
+ A OrderedDict of request body
146
+ """
147
+ # Update response body
148
+ pass # identity_client.projects.get is already mocked in setUp
149
+ # Update response(finally returns 'data')
150
+ self.data = _generate_data(data=response)
151
+ self.ordered_data = tuple(
152
+ response[column] for column in self.ordered_columns
153
+ )
154
+
155
+ def test_create_with_no_options(self):
156
+ arglist = []
157
+ verifylist = []
158
+
159
+ self.assertRaises(
160
+ test_utils.ParserException,
161
+ self.check_parser,
162
+ self.cmd,
163
+ arglist,
164
+ verifylist,
165
+ )
166
+
167
+ def test_create_with_mandatory_param(self):
168
+ name = 'my-fwg'
169
+ arglist = [
170
+ name,
171
+ ]
172
+ verifylist = [
173
+ ('name', name),
174
+ ]
175
+ request, response = _generate_req_and_res(verifylist, self.resource)
176
+ self._update_expect_response(request, response)
177
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
178
+ headers, data = self.cmd.take_action(parsed_args)
179
+
180
+ self.check_results(headers, data, request)
181
+
182
+ def test_create_with_rules(self):
183
+ name = 'my-fwg'
184
+ rule1 = 'rule1'
185
+ rule2 = 'rule2'
186
+
187
+ def _mock_find_rule(*args, **kwargs):
188
+ return sdk_fakes.generate_fake_resource(
189
+ firewall_rule.FirewallRule, id=args[0]
190
+ )
191
+
192
+ self.network_client.find_firewall_rule.side_effect = _mock_find_rule
193
+
194
+ arglist = [
195
+ name,
196
+ '--firewall-rule',
197
+ rule1,
198
+ '--firewall-rule',
199
+ rule2,
200
+ ]
201
+ verifylist = [
202
+ ('name', name),
203
+ ('firewall_rule', [rule1, rule2]),
204
+ ]
205
+ request, response = _generate_req_and_res(verifylist, self.resource)
206
+ self._update_expect_response(request, response)
207
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
208
+ headers, data = self.cmd.take_action(parsed_args)
209
+ self.assertEqual(2, self.network_client.find_firewall_rule.call_count)
210
+
211
+ self.check_results(headers, data, request)
212
+
213
+ def test_create_with_all_params(self):
214
+ name = 'my-fwp'
215
+ desc = 'my-desc'
216
+ rule1 = 'rule1'
217
+ rule2 = 'rule2'
218
+ project = 'my-tenant'
219
+
220
+ def _mock_find(*args, **kwargs):
221
+ if self.res in args[0]:
222
+ rules = self.resource['firewall_rules']
223
+ return mock.Mock(id=args[0], firewall_rules=rules)
224
+ return mock.Mock(id=args[0])
225
+
226
+ self.network_client.find_firewall_policy.side_effect = _mock_find
227
+ self.network_client.find_firewall_rule.side_effect = _mock_find
228
+
229
+ arglist = [
230
+ name,
231
+ '--description',
232
+ desc,
233
+ '--firewall-rule',
234
+ rule1,
235
+ '--firewall-rule',
236
+ rule2,
237
+ '--project',
238
+ project,
239
+ '--share',
240
+ '--audited',
241
+ ]
242
+ verifylist = [
243
+ ('name', name),
244
+ ('description', desc),
245
+ ('firewall_rule', [rule1, rule2]),
246
+ ('project', project),
247
+ ('shared', True),
248
+ ('audited', True),
249
+ ]
250
+ request, response = _generate_req_and_res(verifylist, self.resource)
251
+ self._update_expect_response(request, response)
252
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
253
+ headers, data = self.cmd.take_action(parsed_args)
254
+
255
+ self.check_results(headers, data, request)
256
+
257
+ def test_create_with_firewall_rule_and_no(self):
258
+ name = 'my-fwp'
259
+ rule1 = 'rule1'
260
+ rule2 = 'rule2'
261
+ arglist = [
262
+ name,
263
+ '--firewall-rule',
264
+ rule1,
265
+ '--firewall-rule',
266
+ rule2,
267
+ '--no-firewall-rule',
268
+ ]
269
+ verifylist = [
270
+ ('name', name),
271
+ ('firewall_rule', [rule1, rule2]),
272
+ ('no_firewall_rule', True),
273
+ ]
274
+ self.assertRaises(
275
+ test_utils.ParserException,
276
+ self.check_parser,
277
+ self.cmd,
278
+ arglist,
279
+ verifylist,
280
+ )
281
+
282
+ def test_create_with_shared_and_no_share(self):
283
+ name = 'my-fwp'
284
+ arglist = [
285
+ name,
286
+ '--share',
287
+ '--no-share',
288
+ ]
289
+ verifylist = [
290
+ ('name', name),
291
+ ('shared', True),
292
+ ]
293
+ self.assertRaises(
294
+ test_utils.ParserException,
295
+ self.check_parser,
296
+ self.cmd,
297
+ arglist,
298
+ verifylist,
299
+ )
300
+
301
+ def test_create_with_audited_and_no(self):
302
+ name = 'my-fwp'
303
+ arglist = [
304
+ name,
305
+ '--audited',
306
+ '--no-audited',
307
+ ]
308
+ verifylist = [
309
+ ('name', name),
310
+ ('audited', True),
311
+ ]
312
+ self.assertRaises(
313
+ test_utils.ParserException,
314
+ self.check_parser,
315
+ self.cmd,
316
+ arglist,
317
+ verifylist,
318
+ )
319
+
320
+
321
+ class TestListFirewallPolicy(TestFirewallPolicy):
322
+ def setUp(self):
323
+ super().setUp()
324
+ self.network_client.firewall_policies.return_value = [self.resource]
325
+ self.mocked = self.network_client.firewall_policies
326
+ self.cmd = fwaas_policy.ListFirewallPolicy(self.app, None)
327
+
328
+ def test_list_with_no_option(self):
329
+ arglist = []
330
+ verifylist = []
331
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
332
+ headers, data = self.cmd.take_action(parsed_args)
333
+
334
+ self.mocked.assert_called_once_with()
335
+ self.assertEqual(list(self.list_headers), headers)
336
+ self.assertEqual([self.list_data], list(data))
337
+
338
+ def test_list_with_long_option(self):
339
+ arglist = ['--long']
340
+ verifylist = [('long', True)]
341
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
342
+ headers, _data = self.cmd.take_action(parsed_args)
343
+
344
+ self.mocked.assert_called_once_with()
345
+ self.assertEqual(list(self.headers), headers)
346
+
347
+
348
+ class TestShowFirewallPolicy(TestFirewallPolicy):
349
+ def setUp(self):
350
+ super().setUp()
351
+ self.network_client.get_firewall_policy.return_value = self.resource
352
+ self.mocked = self.network_client.get_firewall_policy
353
+ self.cmd = fwaas_policy.ShowFirewallPolicy(self.app, None)
354
+
355
+ def test_show_filtered_by_id_or_name(self):
356
+ target = self.resource['id']
357
+
358
+ def _mock_fwaas(*args, **kwargs):
359
+ return mock.Mock(id=args[0])
360
+
361
+ self.network_client.find_firewall_policy.side_effect = _mock_fwaas
362
+
363
+ arglist = [target]
364
+ verifylist = [(self.res, target)]
365
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
366
+ headers, _data = self.cmd.take_action(parsed_args)
367
+
368
+ self.mocked.assert_called_once_with(target)
369
+ self.assertEqual(self.ordered_headers, headers)
370
+
371
+
372
+ class TestSetFirewallPolicy(TestFirewallPolicy):
373
+ def setUp(self):
374
+ super().setUp()
375
+ self.network_client.update_firewall_policy.return_value = self.resource
376
+ self.mocked = self.network_client.update_firewall_policy
377
+
378
+ def _mock_find_rule(*args, **kwargs):
379
+ return sdk_fakes.generate_fake_resource(
380
+ firewall_rule.FirewallRule, id=args[0]
381
+ )
382
+
383
+ def _mock_find_policy(*args, **kwargs):
384
+ return self.resource
385
+
386
+ self.network_client.find_firewall_policy.side_effect = (
387
+ _mock_find_policy
388
+ )
389
+ self.network_client.find_firewall_rule.side_effect = _mock_find_rule
390
+
391
+ self.cmd = fwaas_policy.SetFirewallPolicy(self.app, None)
392
+
393
+ def test_set_name(self):
394
+ target = self.resource['id']
395
+ update = 'change'
396
+ arglist = [target, '--name', update]
397
+ verifylist = [
398
+ (self.res, target),
399
+ ('name', update),
400
+ ]
401
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
402
+ result = self.cmd.take_action(parsed_args)
403
+
404
+ self.mocked.assert_called_once_with(target, **{'name': update})
405
+ self.assertIsNone(result)
406
+
407
+ def test_set_options(self):
408
+ target = self.resource['id']
409
+ updated_desc = 'change-desc'
410
+ arglist = [target, '--description', updated_desc, '--share']
411
+ verifylist = [
412
+ (self.res, target),
413
+ ('description', updated_desc),
414
+ ('shared', True),
415
+ ]
416
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
417
+ result = self.cmd.take_action(parsed_args)
418
+
419
+ self.mocked.assert_called_once_with(
420
+ target, shared=True, description=updated_desc
421
+ )
422
+ self.assertIsNone(result)
423
+
424
+ def test_set_rules(self):
425
+ target = self.resource['id']
426
+ rule1 = 'new_rule1'
427
+ rule2 = 'new_rule2'
428
+ arglist = [
429
+ target,
430
+ '--firewall-rule',
431
+ rule1,
432
+ '--firewall-rule',
433
+ rule2,
434
+ ]
435
+ verifylist = [
436
+ (self.res, target),
437
+ ('firewall_rule', [rule1, rule2]),
438
+ ]
439
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
440
+ result = self.cmd.take_action(parsed_args)
441
+
442
+ expect = self.resource['firewall_rules'] + [rule1, rule2]
443
+ body = {'firewall_rules': expect}
444
+ self.mocked.assert_called_once_with(target, **body)
445
+ self.assertEqual(2, self.network_client.find_firewall_rule.call_count)
446
+ self.assertEqual(
447
+ 2, self.network_client.find_firewall_policy.call_count
448
+ )
449
+ self.assertIsNone(result)
450
+
451
+ def test_set_no_rules(self):
452
+ target = self.resource['id']
453
+ arglist = [target, '--no-firewall-rule']
454
+ verifylist = [
455
+ (self.res, target),
456
+ ('no_firewall_rule', True),
457
+ ]
458
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
459
+ result = self.cmd.take_action(parsed_args)
460
+
461
+ body = {'firewall_rules': []}
462
+ self.mocked.assert_called_once_with(target, **body)
463
+ self.assertIsNone(result)
464
+
465
+ def test_set_rules_and_no_rules(self):
466
+ target = self.resource['id']
467
+ rule1 = 'rule1'
468
+ arglist = [
469
+ target,
470
+ '--firewall-rule',
471
+ rule1,
472
+ '--no-firewall-rule',
473
+ ]
474
+ verifylist = [
475
+ (self.res, target),
476
+ ('firewall_rule', [rule1]),
477
+ ('no_firewall_rule', True),
478
+ ]
479
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
480
+ result = self.cmd.take_action(parsed_args)
481
+
482
+ body = {'firewall_rules': [rule1]}
483
+ self.mocked.assert_called_once_with(target, **body)
484
+ self.assertEqual(1, self.network_client.find_firewall_rule.call_count)
485
+ self.assertEqual(
486
+ 1, self.network_client.find_firewall_policy.call_count
487
+ )
488
+ self.assertIsNone(result)
489
+
490
+ def test_set_audited(self):
491
+ target = self.resource['id']
492
+ arglist = [target, '--audited']
493
+ verifylist = [
494
+ (self.res, target),
495
+ ('audited', True),
496
+ ]
497
+ body = {'audited': True}
498
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
499
+ result = self.cmd.take_action(parsed_args)
500
+
501
+ self.mocked.assert_called_once_with(target, **body)
502
+ self.assertIsNone(result)
503
+
504
+ def test_set_no_audited(self):
505
+ target = self.resource['id']
506
+ arglist = [target, '--no-audited']
507
+ verifylist = [
508
+ (self.res, target),
509
+ ('audited', False),
510
+ ]
511
+ body = {'audited': False}
512
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
513
+ result = self.cmd.take_action(parsed_args)
514
+
515
+ self.mocked.assert_called_once_with(target, **body)
516
+ self.assertIsNone(result)
517
+
518
+ def test_set_audited_and_no_audited(self):
519
+ target = self.resource['id']
520
+ arglist = [
521
+ target,
522
+ '--audited',
523
+ '--no-audited',
524
+ ]
525
+ verifylist = [
526
+ (self.res, target),
527
+ ('audited', True),
528
+ ]
529
+ self.assertRaises(
530
+ test_utils.ParserException,
531
+ self.check_parser,
532
+ self.cmd,
533
+ arglist,
534
+ verifylist,
535
+ )
536
+
537
+ def test_set_and_raises(self):
538
+ self.network_client.update_firewall_policy.side_effect = Exception
539
+ target = self.resource['id']
540
+
541
+ arglist = [target, '--name', 'my-name']
542
+ verifylist = [(self.res, target), ('name', 'my-name')]
543
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
544
+
545
+ self.assertRaises(
546
+ exceptions.CommandError, self.cmd.take_action, parsed_args
547
+ )
548
+
549
+
550
+ class TestDeleteFirewallPolicy(TestFirewallPolicy):
551
+ def setUp(self):
552
+ super().setUp()
553
+ self.network_client.delete_firewall_policy.return_value = {
554
+ self.res: self.resource
555
+ }
556
+ self.mocked = self.network_client.delete_firewall_policy
557
+ self.cmd = fwaas_policy.DeleteFirewallPolicy(self.app, None)
558
+
559
+ def test_delete_with_one_resource(self):
560
+ target = self.resource['id']
561
+
562
+ def _mock_fwaas(*args, **kwargs):
563
+ return self.resource
564
+
565
+ self.network_client.find_firewall_policy.side_effect = _mock_fwaas
566
+
567
+ arglist = [target]
568
+ verifylist = [(self.res, [target])]
569
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
570
+ result = self.cmd.take_action(parsed_args)
571
+
572
+ self.mocked.assert_called_once_with(target)
573
+ self.assertIsNone(result)
574
+
575
+ def test_delete_with_multiple_resources(self):
576
+
577
+ def _mock_fwaas(*args, **kwargs):
578
+ return sdk_fakes.generate_fake_resource(
579
+ firewall_policy.FirewallPolicy, id=args[0]
580
+ )
581
+
582
+ self.network_client.find_firewall_policy.side_effect = _mock_fwaas
583
+
584
+ target1 = 'target1'
585
+ target2 = 'target2'
586
+ arglist = [target1, target2]
587
+ verifylist = [(self.res, [target1, target2])]
588
+
589
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
590
+ result = self.cmd.take_action(parsed_args)
591
+ self.assertIsNone(result)
592
+
593
+ self.assertEqual(2, self.mocked.call_count)
594
+ for idx, reference in enumerate([target1, target2]):
595
+ actual = ''.join(self.mocked.call_args_list[idx][0][0])
596
+ self.assertEqual(reference, actual)
597
+
598
+ def test_delete_multiple_with_exception(self):
599
+ target1 = 'target1'
600
+ target2 = 'target2'
601
+ arglist = [target1, target2]
602
+ verifylist = [(self.res, [target1, target2])]
603
+
604
+ def _mock_find(*args, **kwargs):
605
+ if args[0] == target2:
606
+ raise Exception('Not found')
607
+ return self.resource
608
+
609
+ self.network_client.find_firewall_policy.side_effect = _mock_find
610
+
611
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
612
+ self.assertRaises(
613
+ exceptions.CommandError, self.cmd.take_action, parsed_args
614
+ )
615
+
616
+
617
+ class TestFirewallPolicyInsertRule(TestFirewallPolicy):
618
+ def setUp(self):
619
+ super().setUp()
620
+ self.network_client.insert_rule_into_policy.return_value = {
621
+ self.res: self.resource
622
+ }
623
+ self.mocked = self.network_client.insert_rule_into_policy
624
+
625
+ def _mock_find_policy(*args, **kwargs):
626
+ return self.resource
627
+
628
+ def _mock_find_rule(*args, **kwargs):
629
+ return sdk_fakes.generate_fake_resource(
630
+ firewall_rule.FirewallRule, id=args[0]
631
+ )
632
+
633
+ self.network_client.find_firewall_policy.side_effect = (
634
+ _mock_find_policy
635
+ )
636
+ self.network_client.find_firewall_rule.side_effect = _mock_find_rule
637
+
638
+ self.cmd = fwaas_policy.FirewallPolicyInsertRule(self.app, None)
639
+
640
+ def test_insert_firewall_rule(self):
641
+ target = self.resource['id']
642
+ rule = 'new-rule'
643
+ before = 'before'
644
+ after = 'after'
645
+ arglist = [
646
+ target,
647
+ rule,
648
+ '--insert-before',
649
+ before,
650
+ '--insert-after',
651
+ after,
652
+ ]
653
+ verifylist = [
654
+ (self.res, target),
655
+ ('firewall_rule', rule),
656
+ ('insert_before', before),
657
+ ('insert_after', after),
658
+ ]
659
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
660
+ result = self.cmd.take_action(parsed_args)
661
+
662
+ body = {
663
+ 'firewall_rule_id': rule,
664
+ 'insert_before': before,
665
+ 'insert_after': after,
666
+ }
667
+ self.mocked.assert_called_once_with(target, **body)
668
+ self.assertIsNone(result)
669
+ self.assertEqual(
670
+ 1, self.network_client.find_firewall_policy.call_count
671
+ )
672
+ self.assertEqual(3, self.network_client.find_firewall_rule.call_count)
673
+
674
+ def test_insert_with_no_firewall_rule(self):
675
+ target = self.resource['id']
676
+ arglist = [
677
+ target,
678
+ ]
679
+ verifylist = [
680
+ (self.res, target),
681
+ ]
682
+ self.assertRaises(
683
+ test_utils.ParserException,
684
+ self.check_parser,
685
+ self.cmd,
686
+ arglist,
687
+ verifylist,
688
+ )
689
+
690
+
691
+ class TestFirewallPolicyRemoveRule(TestFirewallPolicy):
692
+ def setUp(self):
693
+ super().setUp()
694
+ self.network_client.remove_rule_from_policy.return_value = {
695
+ self.res: self.resource
696
+ }
697
+ self.mocked = self.network_client.remove_rule_from_policy
698
+
699
+ def _mock_find_policy(*args, **kwargs):
700
+ return mock.Mock(id=args[0])
701
+
702
+ self.network_client.find_firewall_policy.side_effect = (
703
+ _mock_find_policy
704
+ )
705
+ self.network_client.find_firewall_rule.side_effect = _mock_find_policy
706
+
707
+ self.cmd = fwaas_policy.FirewallPolicyRemoveRule(self.app, None)
708
+
709
+ def test_remove_firewall_rule(self):
710
+ target = self.resource['id']
711
+ rule = 'remove-rule'
712
+ arglist = [
713
+ target,
714
+ rule,
715
+ ]
716
+ verifylist = [
717
+ (self.res, target),
718
+ ('firewall_rule', rule),
719
+ ]
720
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
721
+ result = self.cmd.take_action(parsed_args)
722
+ body = {'firewall_rule_id': rule}
723
+ self.mocked.assert_called_once_with(target, **body)
724
+ self.assertIsNone(result)
725
+ self.assertEqual(
726
+ 1, self.network_client.find_firewall_policy.call_count
727
+ )
728
+ self.assertEqual(1, self.network_client.find_firewall_rule.call_count)
729
+
730
+ def test_remove_with_no_firewall_rule(self):
731
+ target = self.resource['id']
732
+ arglist = [
733
+ target,
734
+ ]
735
+ verifylist = [
736
+ (self.res, target),
737
+ ]
738
+ self.assertRaises(
739
+ test_utils.ParserException,
740
+ self.check_parser,
741
+ self.cmd,
742
+ arglist,
743
+ verifylist,
744
+ )
745
+
746
+
747
+ class TestUnsetFirewallPolicy(TestFirewallPolicy):
748
+ def setUp(self):
749
+ super().setUp()
750
+ self.network_client.update_firewall_policy.return_value = {
751
+ self.res: self.resource
752
+ }
753
+ self.mocked = self.network_client.update_firewall_policy
754
+
755
+ def _mock_find_rule(*args, **kwargs):
756
+ return sdk_fakes.generate_fake_resource(
757
+ firewall_rule.FirewallRule, id=args[0]
758
+ )
759
+
760
+ def _mock_find_policy(*args, **kwargs):
761
+ return mock.Mock(
762
+ id=args[0],
763
+ firewall_rules=self.resource['firewall_rules'],
764
+ )
765
+
766
+ self.network_client.find_firewall_policy.side_effect = (
767
+ _mock_find_policy
768
+ )
769
+ self.network_client.find_firewall_rule.side_effect = _mock_find_rule
770
+
771
+ self.cmd = fwaas_policy.UnsetFirewallPolicy(self.app, None)
772
+
773
+ def test_unset_shared(self):
774
+ target = self.resource['id']
775
+ arglist = [
776
+ target,
777
+ '--share',
778
+ ]
779
+ verifylist = [
780
+ (self.res, target),
781
+ ('share', True),
782
+ ]
783
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
784
+ with mock.patch.object(fwaas_policy.LOG, 'warning') as mock_warning:
785
+ result = self.cmd.take_action(parsed_args)
786
+ mock_warning.assert_called_once_with(
787
+ 'The --share option is deprecated, please use '
788
+ '"firewall policy set --no-share" instead.'
789
+ )
790
+ self.mocked.assert_called_once_with(target, **{'shared': False})
791
+ self.assertIsNone(result)
792
+
793
+ def test_unset_audited(self):
794
+ target = self.resource['id']
795
+ arglist = [
796
+ target,
797
+ '--audited',
798
+ ]
799
+ verifylist = [
800
+ (self.res, target),
801
+ ('audited', True),
802
+ ]
803
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
804
+ result = self.cmd.take_action(parsed_args)
805
+
806
+ body = {'audited': False}
807
+ self.mocked.assert_called_once_with(target, **body)
808
+ self.assertIsNone(result)
809
+
810
+ def test_unset_firewall_rule_not_matched(self):
811
+ self.resource['firewall_rules'] = ['old_rule']
812
+ target = self.resource['id']
813
+ rule = 'new_rule'
814
+ arglist = [
815
+ target,
816
+ '--firewall-rule',
817
+ rule,
818
+ ]
819
+ verifylist = [
820
+ (self.res, target),
821
+ ('firewall_rule', [rule]),
822
+ ]
823
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
824
+ result = self.cmd.take_action(parsed_args)
825
+
826
+ body = {'firewall_rules': self.resource['firewall_rules']}
827
+ self.mocked.assert_called_once_with(target, **body)
828
+ self.assertIsNone(result)
829
+
830
+ def test_unset_firewall_rule_matched(self):
831
+ self.resource['firewall_rules'] = ['rule1', 'rule2']
832
+ target = self.resource['id']
833
+ rule = 'rule1'
834
+ arglist = [
835
+ target,
836
+ '--firewall-rule',
837
+ rule,
838
+ ]
839
+ verifylist = [
840
+ (self.res, target),
841
+ ('firewall_rule', [rule]),
842
+ ]
843
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
844
+ result = self.cmd.take_action(parsed_args)
845
+
846
+ body = {'firewall_rules': ['rule2']}
847
+ self.mocked.assert_called_once_with(target, **body)
848
+ self.assertIsNone(result)
849
+ self.assertEqual(
850
+ 2, self.network_client.find_firewall_policy.call_count
851
+ )
852
+ self.assertEqual(1, self.network_client.find_firewall_rule.call_count)
853
+
854
+ def test_unset_all_firewall_rule(self):
855
+ target = self.resource['id']
856
+ arglist = [
857
+ target,
858
+ '--all-firewall-rule',
859
+ ]
860
+ verifylist = [
861
+ (self.res, target),
862
+ ('all_firewall_rule', True),
863
+ ]
864
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
865
+ result = self.cmd.take_action(parsed_args)
866
+
867
+ body = {'firewall_rules': []}
868
+ self.mocked.assert_called_once_with(target, **body)
869
+ self.assertIsNone(result)