1# Licensed under the Apache License, Version 2.0 (the "License"); you may
2# not use this file except in compliance with the License. You may obtain
3# a copy of the License at
4#
5#      http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10# License for the specific language governing permissions and limitations
11# under the License.
12
13from unittest import mock
14import uuid
15
16from openstack import exceptions
17from openstack.network.v2 import _proxy
18from openstack.network.v2 import address_scope
19from openstack.network.v2 import agent
20from openstack.network.v2 import auto_allocated_topology
21from openstack.network.v2 import availability_zone
22from openstack.network.v2 import extension
23from openstack.network.v2 import firewall_group
24from openstack.network.v2 import firewall_policy
25from openstack.network.v2 import firewall_rule
26from openstack.network.v2 import flavor
27from openstack.network.v2 import floating_ip
28from openstack.network.v2 import health_monitor
29from openstack.network.v2 import ipsec_site_connection
30from openstack.network.v2 import l3_conntrack_helper
31from openstack.network.v2 import listener
32from openstack.network.v2 import load_balancer
33from openstack.network.v2 import metering_label
34from openstack.network.v2 import metering_label_rule
35from openstack.network.v2 import network
36from openstack.network.v2 import network_ip_availability
37from openstack.network.v2 import network_segment_range
38from openstack.network.v2 import pool
39from openstack.network.v2 import pool_member
40from openstack.network.v2 import port
41from openstack.network.v2 import port_forwarding
42from openstack.network.v2 import qos_bandwidth_limit_rule
43from openstack.network.v2 import qos_dscp_marking_rule
44from openstack.network.v2 import qos_minimum_bandwidth_rule
45from openstack.network.v2 import qos_policy
46from openstack.network.v2 import qos_rule_type
47from openstack.network.v2 import quota
48from openstack.network.v2 import rbac_policy
49from openstack.network.v2 import router
50from openstack.network.v2 import security_group
51from openstack.network.v2 import security_group_rule
52from openstack.network.v2 import segment
53from openstack.network.v2 import service_profile
54from openstack.network.v2 import service_provider
55from openstack.network.v2 import subnet
56from openstack.network.v2 import subnet_pool
57from openstack.network.v2 import vpn_service
58from openstack import proxy as proxy_base
59from openstack.tests.unit import test_proxy_base
60
61
62QOS_POLICY_ID = 'qos-policy-id-' + uuid.uuid4().hex
63QOS_RULE_ID = 'qos-rule-id-' + uuid.uuid4().hex
64NETWORK_ID = 'network-id-' + uuid.uuid4().hex
65AGENT_ID = 'agent-id-' + uuid.uuid4().hex
66ROUTER_ID = 'router-id-' + uuid.uuid4().hex
67FIP_ID = 'fip-id-' + uuid.uuid4().hex
68CT_HELPER_ID = 'ct-helper-id-' + uuid.uuid4().hex
69
70
71class TestNetworkProxy(test_proxy_base.TestProxyBase):
72    def setUp(self):
73        super(TestNetworkProxy, self).setUp()
74        self.proxy = _proxy.Proxy(self.session)
75
76    def verify_update(
77        self, test_method, resource_type, base_path=None, *,
78        method_args=None, method_kwargs=None,
79        expected_args=None, expected_kwargs=None, expected_result="result",
80        mock_method="openstack.network.v2._proxy.Proxy._update",
81    ):
82        super().verify_update(
83            test_method,
84            resource_type,
85            base_path=base_path,
86            method_args=method_args,
87            method_kwargs=method_kwargs,
88            expected_args=expected_args,
89            expected_kwargs=expected_kwargs,
90            expected_result=expected_result,
91            mock_method=mock_method)
92
93    def verify_delete(
94        self, test_method, resource_type, ignore_missing=True, *,
95        method_args=None, method_kwargs=None,
96        expected_args=None, expected_kwargs=None,
97        mock_method="openstack.network.v2._proxy.Proxy._delete",
98    ):
99        super().verify_delete(
100            test_method,
101            resource_type,
102            ignore_missing=ignore_missing,
103            method_args=method_args,
104            method_kwargs=method_kwargs,
105            expected_args=expected_args,
106            expected_kwargs=expected_kwargs,
107            mock_method=mock_method)
108
109    def test_address_scope_create_attrs(self):
110        self.verify_create(self.proxy.create_address_scope,
111                           address_scope.AddressScope)
112
113    def test_address_scope_delete(self):
114        self.verify_delete(self.proxy.delete_address_scope,
115                           address_scope.AddressScope,
116                           False)
117
118    def test_address_scope_delete_ignore(self):
119        self.verify_delete(self.proxy.delete_address_scope,
120                           address_scope.AddressScope,
121                           True)
122
123    def test_address_scope_find(self):
124        self.verify_find(self.proxy.find_address_scope,
125                         address_scope.AddressScope)
126
127    def test_address_scope_get(self):
128        self.verify_get(self.proxy.get_address_scope,
129                        address_scope.AddressScope)
130
131    def test_address_scopes(self):
132        self.verify_list(self.proxy.address_scopes,
133                         address_scope.AddressScope)
134
135    def test_address_scope_update(self):
136        self.verify_update(self.proxy.update_address_scope,
137                           address_scope.AddressScope)
138
139    def test_agent_delete(self):
140        self.verify_delete(self.proxy.delete_agent, agent.Agent, True)
141
142    def test_agent_get(self):
143        self.verify_get(self.proxy.get_agent, agent.Agent)
144
145    def test_agents(self):
146        self.verify_list(self.proxy.agents, agent.Agent)
147
148    def test_agent_update(self):
149        self.verify_update(self.proxy.update_agent, agent.Agent)
150
151    def test_availability_zones(self):
152        self.verify_list(
153            self.proxy.availability_zones,
154            availability_zone.AvailabilityZone)
155
156    def test_dhcp_agent_hosting_networks(self):
157        self.verify_list(
158            self.proxy.dhcp_agent_hosting_networks,
159            network.DHCPAgentHostingNetwork,
160            method_kwargs={'agent': AGENT_ID},
161            expected_kwargs={'agent_id': AGENT_ID}
162        )
163
164    def test_network_hosting_dhcp_agents(self):
165        self.verify_list(
166            self.proxy.network_hosting_dhcp_agents,
167            agent.NetworkHostingDHCPAgent,
168            method_kwargs={'network': NETWORK_ID},
169            expected_kwargs={'network_id': NETWORK_ID}
170        )
171
172    def test_extension_find(self):
173        self.verify_find(self.proxy.find_extension, extension.Extension)
174
175    def test_extensions(self):
176        self.verify_list(self.proxy.extensions, extension.Extension)
177
178    def test_floating_ip_create_attrs(self):
179        self.verify_create(self.proxy.create_ip, floating_ip.FloatingIP)
180
181    def test_floating_ip_delete(self):
182        self.verify_delete(self.proxy.delete_ip, floating_ip.FloatingIP,
183                           False, expected_kwargs={'if_revision': None})
184
185    def test_floating_ip_delete_ignore(self):
186        self.verify_delete(self.proxy.delete_ip, floating_ip.FloatingIP,
187                           True, expected_kwargs={'if_revision': None})
188
189    def test_floating_ip_delete_if_revision(self):
190        self.verify_delete(self.proxy.delete_ip, floating_ip.FloatingIP,
191                           True, method_kwargs={'if_revision': 42},
192                           expected_kwargs={'if_revision': 42})
193
194    def test_floating_ip_find(self):
195        self.verify_find(self.proxy.find_ip, floating_ip.FloatingIP)
196
197    def test_floating_ip_get(self):
198        self.verify_get(self.proxy.get_ip, floating_ip.FloatingIP)
199
200    def test_ips(self):
201        self.verify_list(self.proxy.ips, floating_ip.FloatingIP)
202
203    def test_floating_ip_update(self):
204        self.verify_update(self.proxy.update_ip, floating_ip.FloatingIP,
205                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
206                                            'if_revision': None})
207
208    def test_floating_ip_update_if_revision(self):
209        self.verify_update(self.proxy.update_ip, floating_ip.FloatingIP,
210                           method_kwargs={'x': 1, 'y': 2, 'z': 3,
211                                          'if_revision': 42},
212                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
213                                            'if_revision': 42})
214
215    def test_health_monitor_create_attrs(self):
216        self.verify_create(self.proxy.create_health_monitor,
217                           health_monitor.HealthMonitor)
218
219    def test_health_monitor_delete(self):
220        self.verify_delete(self.proxy.delete_health_monitor,
221                           health_monitor.HealthMonitor, False)
222
223    def test_health_monitor_delete_ignore(self):
224        self.verify_delete(self.proxy.delete_health_monitor,
225                           health_monitor.HealthMonitor, True)
226
227    def test_health_monitor_find(self):
228        self.verify_find(self.proxy.find_health_monitor,
229                         health_monitor.HealthMonitor)
230
231    def test_health_monitor_get(self):
232        self.verify_get(self.proxy.get_health_monitor,
233                        health_monitor.HealthMonitor)
234
235    def test_health_monitors(self):
236        self.verify_list(self.proxy.health_monitors,
237                         health_monitor.HealthMonitor)
238
239    def test_health_monitor_update(self):
240        self.verify_update(self.proxy.update_health_monitor,
241                           health_monitor.HealthMonitor)
242
243    def test_ipsec_site_connection_create_attrs(self):
244        self.verify_create(self.proxy.create_vpn_ipsec_site_connection,
245                           ipsec_site_connection.IPSecSiteConnection)
246
247    def test_ipsec_site_connection_delete(self):
248        self.verify_delete(self.proxy.delete_vpn_ipsec_site_connection,
249                           ipsec_site_connection.IPSecSiteConnection, False)
250
251    def test_ipsec_site_connection_delete_ignore(self):
252        self.verify_delete(self.proxy.delete_vpn_ipsec_site_connection,
253                           ipsec_site_connection.IPSecSiteConnection, True)
254
255    def test_ipsec_site_connection_find(self):
256        self.verify_find(self.proxy.find_vpn_ipsec_site_connection,
257                         ipsec_site_connection.IPSecSiteConnection)
258
259    def test_ipsec_site_connection_get(self):
260        self.verify_get(self.proxy.get_vpn_ipsec_site_connection,
261                        ipsec_site_connection.IPSecSiteConnection)
262
263    def test_ipsec_site_connections(self):
264        self.verify_list(self.proxy.vpn_ipsec_site_connections,
265                         ipsec_site_connection.IPSecSiteConnection)
266
267    def test_ipsec_site_connection_update(self):
268        self.verify_update(self.proxy.update_vpn_ipsec_site_connection,
269                           ipsec_site_connection.IPSecSiteConnection)
270
271    def test_listener_create_attrs(self):
272        self.verify_create(self.proxy.create_listener, listener.Listener)
273
274    def test_listener_delete(self):
275        self.verify_delete(self.proxy.delete_listener,
276                           listener.Listener, False)
277
278    def test_listener_delete_ignore(self):
279        self.verify_delete(self.proxy.delete_listener,
280                           listener.Listener, True)
281
282    def test_listener_find(self):
283        self.verify_find(self.proxy.find_listener, listener.Listener)
284
285    def test_listener_get(self):
286        self.verify_get(self.proxy.get_listener, listener.Listener)
287
288    def test_listeners(self):
289        self.verify_list(self.proxy.listeners, listener.Listener)
290
291    def test_listener_update(self):
292        self.verify_update(self.proxy.update_listener, listener.Listener)
293
294    def test_load_balancer_create_attrs(self):
295        self.verify_create(self.proxy.create_load_balancer,
296                           load_balancer.LoadBalancer)
297
298    def test_load_balancer_delete(self):
299        self.verify_delete(self.proxy.delete_load_balancer,
300                           load_balancer.LoadBalancer, False)
301
302    def test_load_balancer_delete_ignore(self):
303        self.verify_delete(self.proxy.delete_load_balancer,
304                           load_balancer.LoadBalancer, True)
305
306    def test_load_balancer_find(self):
307        self.verify_find(self.proxy.find_load_balancer,
308                         load_balancer.LoadBalancer)
309
310    def test_load_balancer_get(self):
311        self.verify_get(self.proxy.get_load_balancer,
312                        load_balancer.LoadBalancer)
313
314    def test_load_balancers(self):
315        self.verify_list(self.proxy.load_balancers,
316                         load_balancer.LoadBalancer)
317
318    def test_load_balancer_update(self):
319        self.verify_update(self.proxy.update_load_balancer,
320                           load_balancer.LoadBalancer)
321
322    def test_metering_label_create_attrs(self):
323        self.verify_create(self.proxy.create_metering_label,
324                           metering_label.MeteringLabel)
325
326    def test_metering_label_delete(self):
327        self.verify_delete(self.proxy.delete_metering_label,
328                           metering_label.MeteringLabel, False)
329
330    def test_metering_label_delete_ignore(self):
331        self.verify_delete(self.proxy.delete_metering_label,
332                           metering_label.MeteringLabel, True)
333
334    def test_metering_label_find(self):
335        self.verify_find(self.proxy.find_metering_label,
336                         metering_label.MeteringLabel)
337
338    def test_metering_label_get(self):
339        self.verify_get(self.proxy.get_metering_label,
340                        metering_label.MeteringLabel)
341
342    def test_metering_labels(self):
343        self.verify_list(self.proxy.metering_labels,
344                         metering_label.MeteringLabel)
345
346    def test_metering_label_update(self):
347        self.verify_update(self.proxy.update_metering_label,
348                           metering_label.MeteringLabel)
349
350    def test_metering_label_rule_create_attrs(self):
351        self.verify_create(self.proxy.create_metering_label_rule,
352                           metering_label_rule.MeteringLabelRule)
353
354    def test_metering_label_rule_delete(self):
355        self.verify_delete(self.proxy.delete_metering_label_rule,
356                           metering_label_rule.MeteringLabelRule, False)
357
358    def test_metering_label_rule_delete_ignore(self):
359        self.verify_delete(self.proxy.delete_metering_label_rule,
360                           metering_label_rule.MeteringLabelRule, True)
361
362    def test_metering_label_rule_find(self):
363        self.verify_find(self.proxy.find_metering_label_rule,
364                         metering_label_rule.MeteringLabelRule)
365
366    def test_metering_label_rule_get(self):
367        self.verify_get(self.proxy.get_metering_label_rule,
368                        metering_label_rule.MeteringLabelRule)
369
370    def test_metering_label_rules(self):
371        self.verify_list(self.proxy.metering_label_rules,
372                         metering_label_rule.MeteringLabelRule)
373
374    def test_metering_label_rule_update(self):
375        self.verify_update(self.proxy.update_metering_label_rule,
376                           metering_label_rule.MeteringLabelRule)
377
378    def test_network_create_attrs(self):
379        self.verify_create(self.proxy.create_network, network.Network)
380
381    def test_network_delete(self):
382        self.verify_delete(self.proxy.delete_network, network.Network, False,
383                           expected_kwargs={'if_revision': None})
384
385    def test_network_delete_ignore(self):
386        self.verify_delete(self.proxy.delete_network, network.Network, True,
387                           expected_kwargs={'if_revision': None})
388
389    def test_network_delete_if_revision(self):
390        self.verify_delete(self.proxy.delete_network, network.Network, True,
391                           method_kwargs={'if_revision': 42},
392                           expected_kwargs={'if_revision': 42})
393
394    def test_network_find(self):
395        self.verify_find(self.proxy.find_network, network.Network)
396
397    def test_network_find_with_filter(self):
398        self._verify(
399            'openstack.proxy.Proxy._find',
400            self.proxy.find_network,
401            method_args=["net1"],
402            method_kwargs={"project_id": "1"},
403            expected_args=[network.Network, "net1"],
404            expected_kwargs={"project_id": "1", "ignore_missing": True})
405
406    def test_network_get(self):
407        self.verify_get(self.proxy.get_network, network.Network)
408
409    def test_networks(self):
410        self.verify_list(self.proxy.networks, network.Network)
411
412    def test_network_update(self):
413        self.verify_update(self.proxy.update_network, network.Network,
414                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
415                                            'if_revision': None})
416
417    def test_network_update_if_revision(self):
418        self.verify_update(self.proxy.update_network, network.Network,
419                           method_kwargs={'x': 1, 'y': 2, 'z': 3,
420                                          'if_revision': 42},
421                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
422                                            'if_revision': 42})
423
424    def test_flavor_create_attrs(self):
425        self.verify_create(self.proxy.create_flavor, flavor.Flavor)
426
427    def test_flavor_delete(self):
428        self.verify_delete(self.proxy.delete_flavor, flavor.Flavor, True)
429
430    def test_flavor_find(self):
431        self.verify_find(self.proxy.find_flavor, flavor.Flavor)
432
433    def test_flavor_get(self):
434        self.verify_get(self.proxy.get_flavor, flavor.Flavor)
435
436    def test_flavor_update(self):
437        self.verify_update(self.proxy.update_flavor, flavor.Flavor)
438
439    def test_flavors(self):
440        self.verify_list(self.proxy.flavors, flavor.Flavor)
441
442    def test_service_profile_create_attrs(self):
443        self.verify_create(self.proxy.create_service_profile,
444                           service_profile.ServiceProfile)
445
446    def test_service_profile_delete(self):
447        self.verify_delete(self.proxy.delete_service_profile,
448                           service_profile.ServiceProfile, True)
449
450    def test_service_profile_find(self):
451        self.verify_find(self.proxy.find_service_profile,
452                         service_profile.ServiceProfile)
453
454    def test_service_profile_get(self):
455        self.verify_get(self.proxy.get_service_profile,
456                        service_profile.ServiceProfile)
457
458    def test_service_profiles(self):
459        self.verify_list(self.proxy.service_profiles,
460                         service_profile.ServiceProfile)
461
462    def test_service_profile_update(self):
463        self.verify_update(self.proxy.update_service_profile,
464                           service_profile.ServiceProfile)
465
466    def test_network_ip_availability_find(self):
467        self.verify_find(self.proxy.find_network_ip_availability,
468                         network_ip_availability.NetworkIPAvailability)
469
470    def test_network_ip_availability_get(self):
471        self.verify_get(self.proxy.get_network_ip_availability,
472                        network_ip_availability.NetworkIPAvailability)
473
474    def test_network_ip_availabilities(self):
475        self.verify_list(self.proxy.network_ip_availabilities,
476                         network_ip_availability.NetworkIPAvailability)
477
478    def test_pool_member_create_attrs(self):
479        self.verify_create(self.proxy.create_pool_member,
480                           pool_member.PoolMember,
481                           method_kwargs={"pool": "test_id"},
482                           expected_kwargs={"pool_id": "test_id"})
483
484    def test_pool_member_delete(self):
485        self.verify_delete(
486            self.proxy.delete_pool_member,
487            pool_member.PoolMember,
488            ignore_missing=False,
489            method_kwargs={"pool": "test_id"},
490            expected_kwargs={"pool_id": "test_id"})
491
492    def test_pool_member_delete_ignore(self):
493        self.verify_delete(
494            self.proxy.delete_pool_member,
495            pool_member.PoolMember,
496            ignore_missing=True,
497            method_kwargs={"pool": "test_id"},
498            expected_kwargs={"pool_id": "test_id"})
499
500    def test_pool_member_find(self):
501        self._verify(
502            'openstack.proxy.Proxy._find',
503            self.proxy.find_pool_member,
504            method_args=["MEMBER", "POOL"],
505            expected_args=[pool_member.PoolMember, "MEMBER"],
506            expected_kwargs={"pool_id": "POOL", "ignore_missing": True})
507
508    def test_pool_member_get(self):
509        self._verify(
510            'openstack.proxy.Proxy._get',
511            self.proxy.get_pool_member,
512            method_args=["MEMBER", "POOL"],
513            expected_args=[pool_member.PoolMember, "MEMBER"],
514            expected_kwargs={"pool_id": "POOL"})
515
516    def test_pool_members(self):
517        self.verify_list(
518            self.proxy.pool_members, pool_member.PoolMember,
519            method_args=["test_id"],
520            expected_args=[],
521            expected_kwargs={"pool_id": "test_id"})
522
523    def test_pool_member_update(self):
524        self._verify(
525            "openstack.network.v2._proxy.Proxy._update",
526            self.proxy.update_pool_member,
527            method_args=["MEMBER", "POOL"],
528            expected_args=[pool_member.PoolMember, "MEMBER"],
529            expected_kwargs={"pool_id": "POOL"})
530
531    def test_pool_create_attrs(self):
532        self.verify_create(self.proxy.create_pool, pool.Pool)
533
534    def test_pool_delete(self):
535        self.verify_delete(self.proxy.delete_pool, pool.Pool, False)
536
537    def test_pool_delete_ignore(self):
538        self.verify_delete(self.proxy.delete_pool, pool.Pool, True)
539
540    def test_pool_find(self):
541        self.verify_find(self.proxy.find_pool, pool.Pool)
542
543    def test_pool_get(self):
544        self.verify_get(self.proxy.get_pool, pool.Pool)
545
546    def test_pools(self):
547        self.verify_list(self.proxy.pools, pool.Pool)
548
549    def test_pool_update(self):
550        self.verify_update(self.proxy.update_pool, pool.Pool)
551
552    def test_port_create_attrs(self):
553        self.verify_create(self.proxy.create_port, port.Port)
554
555    def test_port_delete(self):
556        self.verify_delete(self.proxy.delete_port, port.Port, False,
557                           expected_kwargs={'if_revision': None})
558
559    def test_port_delete_ignore(self):
560        self.verify_delete(self.proxy.delete_port, port.Port, True,
561                           expected_kwargs={'if_revision': None})
562
563    def test_port_delete_if_revision(self):
564        self.verify_delete(self.proxy.delete_port, port.Port, True,
565                           method_kwargs={'if_revision': 42},
566                           expected_kwargs={'if_revision': 42})
567
568    def test_port_find(self):
569        self.verify_find(self.proxy.find_port, port.Port)
570
571    def test_port_get(self):
572        self.verify_get(self.proxy.get_port, port.Port)
573
574    def test_ports(self):
575        self.verify_list(self.proxy.ports, port.Port)
576
577    def test_port_update(self):
578        self.verify_update(self.proxy.update_port, port.Port,
579                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
580                                            'if_revision': None})
581
582    def test_port_update_if_revision(self):
583        self.verify_update(self.proxy.update_port, port.Port,
584                           method_kwargs={'x': 1, 'y': 2, 'z': 3,
585                                          'if_revision': 42},
586                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
587                                            'if_revision': 42})
588
589    @mock.patch('openstack.network.v2._proxy.Proxy._bulk_create')
590    def test_ports_create(self, bc):
591        data = mock.sentinel
592
593        self.proxy.create_ports(data)
594
595        bc.assert_called_once_with(port.Port, data)
596
597    def test_qos_bandwidth_limit_rule_create_attrs(self):
598        self.verify_create(
599            self.proxy.create_qos_bandwidth_limit_rule,
600            qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
601            method_kwargs={'qos_policy': QOS_POLICY_ID},
602            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
603
604    def test_qos_bandwidth_limit_rule_delete(self):
605        self.verify_delete(
606            self.proxy.delete_qos_bandwidth_limit_rule,
607            qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
608            ignore_missing=False,
609            method_args=["resource_or_id", QOS_POLICY_ID],
610            expected_args=["resource_or_id"],
611            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
612
613    def test_qos_bandwidth_limit_rule_delete_ignore(self):
614        self.verify_delete(
615            self.proxy.delete_qos_bandwidth_limit_rule,
616            qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
617            ignore_missing=True,
618            method_args=["resource_or_id", QOS_POLICY_ID],
619            expected_args=["resource_or_id"],
620            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
621
622    def test_qos_bandwidth_limit_rule_find(self):
623        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
624        self._verify(
625            'openstack.proxy.Proxy._find',
626            self.proxy.find_qos_bandwidth_limit_rule,
627            method_args=['rule_id', policy],
628            expected_args=[
629                qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
630                'rule_id'],
631            expected_kwargs={
632                'ignore_missing': True, 'qos_policy_id': QOS_POLICY_ID})
633
634    def test_qos_bandwidth_limit_rule_get(self):
635        self.verify_get(
636            self.proxy.get_qos_bandwidth_limit_rule,
637            qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
638            method_kwargs={'qos_policy': QOS_POLICY_ID},
639            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
640
641    def test_qos_bandwidth_limit_rules(self):
642        self.verify_list(
643            self.proxy.qos_bandwidth_limit_rules,
644            qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
645            method_kwargs={'qos_policy': QOS_POLICY_ID},
646            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
647
648    def test_qos_bandwidth_limit_rule_update(self):
649        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
650        self._verify(
651            'openstack.network.v2._proxy.Proxy._update',
652            self.proxy.update_qos_bandwidth_limit_rule,
653            method_args=['rule_id', policy],
654            method_kwargs={'foo': 'bar'},
655            expected_args=[
656                qos_bandwidth_limit_rule.QoSBandwidthLimitRule,
657                'rule_id'],
658            expected_kwargs={'qos_policy_id': QOS_POLICY_ID, 'foo': 'bar'})
659
660    def test_qos_dscp_marking_rule_create_attrs(self):
661        self.verify_create(
662            self.proxy.create_qos_dscp_marking_rule,
663            qos_dscp_marking_rule.QoSDSCPMarkingRule,
664            method_kwargs={'qos_policy': QOS_POLICY_ID},
665            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
666
667    def test_qos_dscp_marking_rule_delete(self):
668        self.verify_delete(
669            self.proxy.delete_qos_dscp_marking_rule,
670            qos_dscp_marking_rule.QoSDSCPMarkingRule,
671            ignore_missing=False,
672            method_args=["resource_or_id", QOS_POLICY_ID],
673            expected_args=["resource_or_id"],
674            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
675
676    def test_qos_dscp_marking_rule_delete_ignore(self):
677        self.verify_delete(
678            self.proxy.delete_qos_dscp_marking_rule,
679            qos_dscp_marking_rule.QoSDSCPMarkingRule,
680            ignore_missing=True,
681            method_args=["resource_or_id", QOS_POLICY_ID],
682            expected_args=["resource_or_id"],
683            expected_kwargs={'qos_policy_id': QOS_POLICY_ID}, )
684
685    def test_qos_dscp_marking_rule_find(self):
686        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
687        self._verify(
688            'openstack.proxy.Proxy._find',
689            self.proxy.find_qos_dscp_marking_rule,
690            method_args=['rule_id', policy],
691            expected_args=[
692                qos_dscp_marking_rule.QoSDSCPMarkingRule, 'rule_id'],
693            expected_kwargs={
694                'ignore_missing': True, 'qos_policy_id': QOS_POLICY_ID})
695
696    def test_qos_dscp_marking_rule_get(self):
697        self.verify_get(
698            self.proxy.get_qos_dscp_marking_rule,
699            qos_dscp_marking_rule.QoSDSCPMarkingRule,
700            method_kwargs={'qos_policy': QOS_POLICY_ID},
701            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
702
703    def test_qos_dscp_marking_rules(self):
704        self.verify_list(
705            self.proxy.qos_dscp_marking_rules,
706            qos_dscp_marking_rule.QoSDSCPMarkingRule,
707            method_kwargs={'qos_policy': QOS_POLICY_ID},
708            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
709
710    def test_qos_dscp_marking_rule_update(self):
711        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
712        self._verify(
713            'openstack.network.v2._proxy.Proxy._update',
714            self.proxy.update_qos_dscp_marking_rule,
715            method_args=['rule_id', policy],
716            method_kwargs={'foo': 'bar'},
717            expected_args=[
718                qos_dscp_marking_rule.QoSDSCPMarkingRule,
719                'rule_id'],
720            expected_kwargs={'qos_policy_id': QOS_POLICY_ID, 'foo': 'bar'})
721
722    def test_qos_minimum_bandwidth_rule_create_attrs(self):
723        self.verify_create(
724            self.proxy.create_qos_minimum_bandwidth_rule,
725            qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
726            method_kwargs={'qos_policy': QOS_POLICY_ID},
727            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
728
729    def test_qos_minimum_bandwidth_rule_delete(self):
730        self.verify_delete(
731            self.proxy.delete_qos_minimum_bandwidth_rule,
732            qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
733            ignore_missing=False,
734            method_args=["resource_or_id", QOS_POLICY_ID],
735            expected_args=["resource_or_id"],
736            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
737
738    def test_qos_minimum_bandwidth_rule_delete_ignore(self):
739        self.verify_delete(
740            self.proxy.delete_qos_minimum_bandwidth_rule,
741            qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
742            ignore_missing=True,
743            method_args=["resource_or_id", QOS_POLICY_ID],
744            expected_args=["resource_or_id"],
745            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
746
747    def test_qos_minimum_bandwidth_rule_find(self):
748        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
749        self._verify(
750            'openstack.proxy.Proxy._find',
751            self.proxy.find_qos_minimum_bandwidth_rule,
752            method_args=['rule_id', policy],
753            expected_args=[
754                qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
755                'rule_id'],
756            expected_kwargs={
757                'ignore_missing': True, 'qos_policy_id': QOS_POLICY_ID})
758
759    def test_qos_minimum_bandwidth_rule_get(self):
760        self.verify_get(
761            self.proxy.get_qos_minimum_bandwidth_rule,
762            qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
763            method_kwargs={'qos_policy': QOS_POLICY_ID},
764            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
765
766    def test_qos_minimum_bandwidth_rules(self):
767        self.verify_list(
768            self.proxy.qos_minimum_bandwidth_rules,
769            qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
770            method_kwargs={'qos_policy': QOS_POLICY_ID},
771            expected_kwargs={'qos_policy_id': QOS_POLICY_ID})
772
773    def test_qos_minimum_bandwidth_rule_update(self):
774        policy = qos_policy.QoSPolicy.new(id=QOS_POLICY_ID)
775        self._verify(
776            'openstack.network.v2._proxy.Proxy._update',
777            self.proxy.update_qos_minimum_bandwidth_rule,
778            method_args=['rule_id', policy],
779            method_kwargs={'foo': 'bar'},
780            expected_args=[
781                qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule,
782                'rule_id'],
783            expected_kwargs={
784                'qos_policy_id': QOS_POLICY_ID, 'foo': 'bar'})
785
786    def test_qos_policy_create_attrs(self):
787        self.verify_create(self.proxy.create_qos_policy, qos_policy.QoSPolicy)
788
789    def test_qos_policy_delete(self):
790        self.verify_delete(self.proxy.delete_qos_policy, qos_policy.QoSPolicy,
791                           False)
792
793    def test_qos_policy_delete_ignore(self):
794        self.verify_delete(self.proxy.delete_qos_policy, qos_policy.QoSPolicy,
795                           True)
796
797    def test_qos_policy_find(self):
798        self.verify_find(self.proxy.find_qos_policy, qos_policy.QoSPolicy)
799
800    def test_qos_policy_get(self):
801        self.verify_get(self.proxy.get_qos_policy, qos_policy.QoSPolicy)
802
803    def test_qos_policies(self):
804        self.verify_list(self.proxy.qos_policies, qos_policy.QoSPolicy)
805
806    def test_qos_policy_update(self):
807        self.verify_update(self.proxy.update_qos_policy, qos_policy.QoSPolicy)
808
809    def test_qos_rule_type_find(self):
810        self.verify_find(self.proxy.find_qos_rule_type,
811                         qos_rule_type.QoSRuleType)
812
813    def test_qos_rule_type_get(self):
814        self.verify_get(self.proxy.get_qos_rule_type,
815                        qos_rule_type.QoSRuleType)
816
817    def test_qos_rule_types(self):
818        self.verify_list(self.proxy.qos_rule_types, qos_rule_type.QoSRuleType)
819
820    def test_quota_delete(self):
821        self.verify_delete(self.proxy.delete_quota, quota.Quota, False)
822
823    def test_quota_delete_ignore(self):
824        self.verify_delete(self.proxy.delete_quota, quota.Quota, True)
825
826    def test_quota_get(self):
827        self.verify_get(self.proxy.get_quota, quota.Quota)
828
829    @mock.patch.object(proxy_base.Proxy, "_get_resource")
830    def test_quota_get_details(self, mock_get):
831        fake_quota = mock.Mock(project_id='PROJECT')
832        mock_get.return_value = fake_quota
833        self._verify(
834            "openstack.proxy.Proxy._get",
835            self.proxy.get_quota,
836            method_args=['QUOTA_ID'],
837            method_kwargs={'details': True},
838            expected_args=[quota.QuotaDetails],
839            expected_kwargs={
840                'project': fake_quota.id, 'requires_id': False})
841        mock_get.assert_called_once_with(quota.Quota, 'QUOTA_ID')
842
843    @mock.patch.object(proxy_base.Proxy, "_get_resource")
844    def test_quota_default_get(self, mock_get):
845        fake_quota = mock.Mock(project_id='PROJECT')
846        mock_get.return_value = fake_quota
847        self._verify(
848            "openstack.proxy.Proxy._get",
849            self.proxy.get_quota_default,
850            method_args=['QUOTA_ID'],
851            expected_args=[quota.QuotaDefault],
852            expected_kwargs={
853                'project': fake_quota.id, 'requires_id': False})
854        mock_get.assert_called_once_with(quota.Quota, 'QUOTA_ID')
855
856    def test_quotas(self):
857        self.verify_list(self.proxy.quotas, quota.Quota)
858
859    def test_quota_update(self):
860        self.verify_update(self.proxy.update_quota, quota.Quota)
861
862    def test_rbac_policy_create_attrs(self):
863        self.verify_create(self.proxy.create_rbac_policy,
864                           rbac_policy.RBACPolicy)
865
866    def test_rbac_policy_delete(self):
867        self.verify_delete(self.proxy.delete_rbac_policy,
868                           rbac_policy.RBACPolicy, False)
869
870    def test_rbac_policy_delete_ignore(self):
871        self.verify_delete(self.proxy.delete_rbac_policy,
872                           rbac_policy.RBACPolicy, True)
873
874    def test_rbac_policy_find(self):
875        self.verify_find(self.proxy.find_rbac_policy, rbac_policy.RBACPolicy)
876
877    def test_rbac_policy_get(self):
878        self.verify_get(self.proxy.get_rbac_policy, rbac_policy.RBACPolicy)
879
880    def test_rbac_policies(self):
881        self.verify_list(self.proxy.rbac_policies, rbac_policy.RBACPolicy)
882
883    def test_rbac_policy_update(self):
884        self.verify_update(self.proxy.update_rbac_policy,
885                           rbac_policy.RBACPolicy)
886
887    def test_router_create_attrs(self):
888        self.verify_create(self.proxy.create_router, router.Router)
889
890    def test_router_delete(self):
891        self.verify_delete(self.proxy.delete_router, router.Router, False,
892                           expected_kwargs={'if_revision': None})
893
894    def test_router_delete_ignore(self):
895        self.verify_delete(self.proxy.delete_router, router.Router, True,
896                           expected_kwargs={'if_revision': None})
897
898    def test_router_delete_if_revision(self):
899        self.verify_delete(self.proxy.delete_router, router.Router, True,
900                           method_kwargs={'if_revision': 42},
901                           expected_kwargs={'if_revision': 42})
902
903    def test_router_find(self):
904        self.verify_find(self.proxy.find_router, router.Router)
905
906    def test_router_get(self):
907        self.verify_get(self.proxy.get_router, router.Router)
908
909    def test_routers(self):
910        self.verify_list(self.proxy.routers, router.Router)
911
912    def test_router_update(self):
913        self.verify_update(self.proxy.update_router, router.Router,
914                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
915                                            'if_revision': None})
916
917    def test_router_update_if_revision(self):
918        self.verify_update(self.proxy.update_router, router.Router,
919                           method_kwargs={'x': 1, 'y': 2, 'z': 3,
920                                          'if_revision': 42},
921                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
922                                            'if_revision': 42})
923
924    @mock.patch.object(proxy_base.Proxy, '_get_resource')
925    @mock.patch.object(router.Router, 'add_interface')
926    def test_add_interface_to_router_with_port(self, mock_add_interface,
927                                               mock_get):
928        x_router = router.Router.new(id="ROUTER_ID")
929        mock_get.return_value = x_router
930
931        self._verify(
932            "openstack.network.v2.router.Router.add_interface",
933            self.proxy.add_interface_to_router,
934            method_args=["FAKE_ROUTER"],
935            method_kwargs={"port_id": "PORT"},
936            expected_args=[self.proxy],
937            expected_kwargs={"port_id": "PORT"})
938        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
939
940    @mock.patch.object(proxy_base.Proxy, '_get_resource')
941    @mock.patch.object(router.Router, 'add_interface')
942    def test_add_interface_to_router_with_subnet(self, mock_add_interface,
943                                                 mock_get):
944        x_router = router.Router.new(id="ROUTER_ID")
945        mock_get.return_value = x_router
946
947        self._verify(
948            "openstack.network.v2.router.Router.add_interface",
949            self.proxy.add_interface_to_router,
950            method_args=["FAKE_ROUTER"],
951            method_kwargs={"subnet_id": "SUBNET"},
952            expected_args=[self.proxy],
953            expected_kwargs={"subnet_id": "SUBNET"})
954        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
955
956    @mock.patch.object(proxy_base.Proxy, '_get_resource')
957    @mock.patch.object(router.Router, 'remove_interface')
958    def test_remove_interface_from_router_with_port(self, mock_remove,
959                                                    mock_get):
960        x_router = router.Router.new(id="ROUTER_ID")
961        mock_get.return_value = x_router
962
963        self._verify(
964            "openstack.network.v2.router.Router.remove_interface",
965            self.proxy.remove_interface_from_router,
966            method_args=["FAKE_ROUTER"],
967            method_kwargs={"port_id": "PORT"},
968            expected_args=[self.proxy],
969            expected_kwargs={"port_id": "PORT"})
970        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
971
972    @mock.patch.object(proxy_base.Proxy, '_get_resource')
973    @mock.patch.object(router.Router, 'remove_interface')
974    def test_remove_interface_from_router_with_subnet(self, mock_remove,
975                                                      mock_get):
976        x_router = router.Router.new(id="ROUTER_ID")
977        mock_get.return_value = x_router
978
979        self._verify(
980            "openstack.network.v2.router.Router.remove_interface",
981            self.proxy.remove_interface_from_router,
982            method_args=["FAKE_ROUTER"],
983            method_kwargs={"subnet_id": "SUBNET"},
984            expected_args=[self.proxy],
985            expected_kwargs={"subnet_id": "SUBNET"})
986        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
987
988    @mock.patch.object(proxy_base.Proxy, '_get_resource')
989    @mock.patch.object(router.Router, 'add_extra_routes')
990    def test_add_extra_routes_to_router(
991            self, mock_add_extra_routes, mock_get):
992        x_router = router.Router.new(id="ROUTER_ID")
993        mock_get.return_value = x_router
994
995        self._verify(
996            "openstack.network.v2.router.Router.add_extra_routes",
997            self.proxy.add_extra_routes_to_router,
998            method_args=["FAKE_ROUTER"],
999            method_kwargs={"body": {"router": {"routes": []}}},
1000            expected_args=[self.proxy],
1001            expected_kwargs={"body": {"router": {"routes": []}}})
1002        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
1003
1004    @mock.patch.object(proxy_base.Proxy, '_get_resource')
1005    @mock.patch.object(router.Router, 'remove_extra_routes')
1006    def test_remove_extra_routes_from_router(
1007            self, mock_remove_extra_routes, mock_get):
1008        x_router = router.Router.new(id="ROUTER_ID")
1009        mock_get.return_value = x_router
1010
1011        self._verify(
1012            "openstack.network.v2.router.Router.remove_extra_routes",
1013            self.proxy.remove_extra_routes_from_router,
1014            method_args=["FAKE_ROUTER"],
1015            method_kwargs={"body": {"router": {"routes": []}}},
1016            expected_args=[self.proxy],
1017            expected_kwargs={"body": {"router": {"routes": []}}})
1018        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
1019
1020    @mock.patch.object(proxy_base.Proxy, '_get_resource')
1021    @mock.patch.object(router.Router, 'add_gateway')
1022    def test_add_gateway_to_router(self, mock_add, mock_get):
1023        x_router = router.Router.new(id="ROUTER_ID")
1024        mock_get.return_value = x_router
1025
1026        self._verify(
1027            "openstack.network.v2.router.Router.add_gateway",
1028            self.proxy.add_gateway_to_router,
1029            method_args=["FAKE_ROUTER"],
1030            method_kwargs={"foo": "bar"},
1031            expected_args=[self.proxy],
1032            expected_kwargs={"foo": "bar"})
1033        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
1034
1035    @mock.patch.object(proxy_base.Proxy, '_get_resource')
1036    @mock.patch.object(router.Router, 'remove_gateway')
1037    def test_remove_gateway_from_router(self, mock_remove, mock_get):
1038        x_router = router.Router.new(id="ROUTER_ID")
1039        mock_get.return_value = x_router
1040
1041        self._verify(
1042            "openstack.network.v2.router.Router.remove_gateway",
1043            self.proxy.remove_gateway_from_router,
1044            method_args=["FAKE_ROUTER"],
1045            method_kwargs={"foo": "bar"},
1046            expected_args=[self.proxy],
1047            expected_kwargs={"foo": "bar"})
1048        mock_get.assert_called_once_with(router.Router, "FAKE_ROUTER")
1049
1050    def test_router_hosting_l3_agents_list(self):
1051        self.verify_list(
1052            self.proxy.routers_hosting_l3_agents,
1053            agent.RouterL3Agent,
1054            method_kwargs={'router': ROUTER_ID},
1055            expected_kwargs={'router_id': ROUTER_ID},
1056        )
1057
1058    def test_agent_hosted_routers_list(self):
1059        self.verify_list(
1060            self.proxy.agent_hosted_routers,
1061            router.L3AgentRouter,
1062            method_kwargs={'agent': AGENT_ID},
1063            expected_kwargs={'agent_id': AGENT_ID},
1064        )
1065
1066    def test_firewall_group_create_attrs(self):
1067        self.verify_create(self.proxy.create_firewall_group,
1068                           firewall_group.FirewallGroup)
1069
1070    def test_firewall_group_delete(self):
1071        self.verify_delete(self.proxy.delete_firewall_group,
1072                           firewall_group.FirewallGroup, False)
1073
1074    def test_firewall_group_delete_ignore(self):
1075        self.verify_delete(self.proxy.delete_firewall_group,
1076                           firewall_group.FirewallGroup, True)
1077
1078    def test_firewall_group_find(self):
1079        self.verify_find(self.proxy.find_firewall_group,
1080                         firewall_group.FirewallGroup)
1081
1082    def test_firewall_group_get(self):
1083        self.verify_get(self.proxy.get_firewall_group,
1084                        firewall_group.FirewallGroup)
1085
1086    def test_firewall_groups(self):
1087        self.verify_list(self.proxy.firewall_groups,
1088                         firewall_group.FirewallGroup)
1089
1090    def test_firewall_group_update(self):
1091        self.verify_update(self.proxy.update_firewall_group,
1092                           firewall_group.FirewallGroup)
1093
1094    def test_firewall_policy_create_attrs(self):
1095        self.verify_create(self.proxy.create_firewall_policy,
1096                           firewall_policy.FirewallPolicy)
1097
1098    def test_firewall_policy_delete(self):
1099        self.verify_delete(self.proxy.delete_firewall_policy,
1100                           firewall_policy.FirewallPolicy, False)
1101
1102    def test_firewall_policy_delete_ignore(self):
1103        self.verify_delete(self.proxy.delete_firewall_policy,
1104                           firewall_policy.FirewallPolicy, True)
1105
1106    def test_firewall_policy_find(self):
1107        self.verify_find(self.proxy.find_firewall_policy,
1108                         firewall_policy.FirewallPolicy)
1109
1110    def test_firewall_policy_get(self):
1111        self.verify_get(self.proxy.get_firewall_policy,
1112                        firewall_policy.FirewallPolicy)
1113
1114    def test_firewall_policies(self):
1115        self.verify_list(self.proxy.firewall_policies,
1116                         firewall_policy.FirewallPolicy)
1117
1118    def test_firewall_policy_update(self):
1119        self.verify_update(self.proxy.update_firewall_policy,
1120                           firewall_policy.FirewallPolicy)
1121
1122    def test_firewall_rule_create_attrs(self):
1123        self.verify_create(self.proxy.create_firewall_rule,
1124                           firewall_rule.FirewallRule)
1125
1126    def test_firewall_rule_delete(self):
1127        self.verify_delete(self.proxy.delete_firewall_rule,
1128                           firewall_rule.FirewallRule, False)
1129
1130    def test_firewall_rule_delete_ignore(self):
1131        self.verify_delete(self.proxy.delete_firewall_rule,
1132                           firewall_rule.FirewallRule, True)
1133
1134    def test_firewall_rule_find(self):
1135        self.verify_find(self.proxy.find_firewall_rule,
1136                         firewall_rule.FirewallRule)
1137
1138    def test_firewall_rule_get(self):
1139        self.verify_get(self.proxy.get_firewall_rule,
1140                        firewall_rule.FirewallRule)
1141
1142    def test_firewall_rules(self):
1143        self.verify_list(self.proxy.firewall_rules,
1144                         firewall_rule.FirewallRule)
1145
1146    def test_firewall_rule_update(self):
1147        self.verify_update(self.proxy.update_firewall_rule,
1148                           firewall_rule.FirewallRule)
1149
1150    def test_network_segment_range_create_attrs(self):
1151        self.verify_create(self.proxy.create_network_segment_range,
1152                           network_segment_range.NetworkSegmentRange)
1153
1154    def test_network_segment_range_delete(self):
1155        self.verify_delete(self.proxy.delete_network_segment_range,
1156                           network_segment_range.NetworkSegmentRange, False)
1157
1158    def test_network_segment_range_delete_ignore(self):
1159        self.verify_delete(self.proxy.delete_network_segment_range,
1160                           network_segment_range.NetworkSegmentRange, True)
1161
1162    def test_network_segment_range_find(self):
1163        self.verify_find(self.proxy.find_network_segment_range,
1164                         network_segment_range.NetworkSegmentRange)
1165
1166    def test_network_segment_range_get(self):
1167        self.verify_get(self.proxy.get_network_segment_range,
1168                        network_segment_range.NetworkSegmentRange)
1169
1170    def test_network_segment_ranges(self):
1171        self.verify_list(self.proxy.network_segment_ranges,
1172                         network_segment_range.NetworkSegmentRange)
1173
1174    def test_network_segment_range_update(self):
1175        self.verify_update(self.proxy.update_network_segment_range,
1176                           network_segment_range.NetworkSegmentRange)
1177
1178    def test_security_group_create_attrs(self):
1179        self.verify_create(self.proxy.create_security_group,
1180                           security_group.SecurityGroup)
1181
1182    def test_security_group_delete(self):
1183        self.verify_delete(self.proxy.delete_security_group,
1184                           security_group.SecurityGroup, False,
1185                           expected_kwargs={'if_revision': None})
1186
1187    def test_security_group_delete_ignore(self):
1188        self.verify_delete(self.proxy.delete_security_group,
1189                           security_group.SecurityGroup, True,
1190                           expected_kwargs={'if_revision': None})
1191
1192    def test_security_group_delete_if_revision(self):
1193        self.verify_delete(self.proxy.delete_security_group,
1194                           security_group.SecurityGroup, True,
1195                           method_kwargs={'if_revision': 42},
1196                           expected_kwargs={'if_revision': 42})
1197
1198    def test_security_group_find(self):
1199        self.verify_find(self.proxy.find_security_group,
1200                         security_group.SecurityGroup)
1201
1202    def test_security_group_get(self):
1203        self.verify_get(self.proxy.get_security_group,
1204                        security_group.SecurityGroup)
1205
1206    def test_security_groups(self):
1207        self.verify_list(self.proxy.security_groups,
1208                         security_group.SecurityGroup)
1209
1210    def test_security_group_update(self):
1211        self.verify_update(self.proxy.update_security_group,
1212                           security_group.SecurityGroup,
1213                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
1214                                            'if_revision': None})
1215
1216    def test_security_group_update_if_revision(self):
1217        self.verify_update(self.proxy.update_security_group,
1218                           security_group.SecurityGroup,
1219                           method_kwargs={'x': 1, 'y': 2, 'z': 3,
1220                                          'if_revision': 42},
1221                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
1222                                            'if_revision': 42})
1223
1224    def test_security_group_rule_create_attrs(self):
1225        self.verify_create(self.proxy.create_security_group_rule,
1226                           security_group_rule.SecurityGroupRule)
1227
1228    def test_security_group_rule_delete(self):
1229        self.verify_delete(self.proxy.delete_security_group_rule,
1230                           security_group_rule.SecurityGroupRule, False,
1231                           expected_kwargs={'if_revision': None})
1232
1233    def test_security_group_rule_delete_ignore(self):
1234        self.verify_delete(self.proxy.delete_security_group_rule,
1235                           security_group_rule.SecurityGroupRule, True,
1236                           expected_kwargs={'if_revision': None})
1237
1238    def test_security_group_rule_delete_if_revision(self):
1239        self.verify_delete(self.proxy.delete_security_group_rule,
1240                           security_group_rule.SecurityGroupRule, True,
1241                           method_kwargs={'if_revision': 42},
1242                           expected_kwargs={'if_revision': 42})
1243
1244    def test_security_group_rule_find(self):
1245        self.verify_find(self.proxy.find_security_group_rule,
1246                         security_group_rule.SecurityGroupRule)
1247
1248    def test_security_group_rule_get(self):
1249        self.verify_get(self.proxy.get_security_group_rule,
1250                        security_group_rule.SecurityGroupRule)
1251
1252    def test_security_group_rules(self):
1253        self.verify_list(self.proxy.security_group_rules,
1254                         security_group_rule.SecurityGroupRule)
1255
1256    @mock.patch('openstack.network.v2._proxy.Proxy._bulk_create')
1257    def test_security_group_rules_create(self, bc):
1258        data = mock.sentinel
1259
1260        self.proxy.create_security_group_rules(data)
1261
1262        bc.assert_called_once_with(security_group_rule.SecurityGroupRule, data)
1263
1264    def test_segment_create_attrs(self):
1265        self.verify_create(self.proxy.create_segment, segment.Segment)
1266
1267    def test_segment_delete(self):
1268        self.verify_delete(self.proxy.delete_segment, segment.Segment, False)
1269
1270    def test_segment_delete_ignore(self):
1271        self.verify_delete(self.proxy.delete_segment, segment.Segment, True)
1272
1273    def test_segment_find(self):
1274        self.verify_find(self.proxy.find_segment, segment.Segment)
1275
1276    def test_segment_get(self):
1277        self.verify_get(self.proxy.get_segment, segment.Segment)
1278
1279    def test_segments(self):
1280        self.verify_list(self.proxy.segments, segment.Segment)
1281
1282    def test_segment_update(self):
1283        self.verify_update(self.proxy.update_segment, segment.Segment)
1284
1285    def test_subnet_create_attrs(self):
1286        self.verify_create(self.proxy.create_subnet, subnet.Subnet)
1287
1288    def test_subnet_delete(self):
1289        self.verify_delete(self.proxy.delete_subnet, subnet.Subnet, False,
1290                           expected_kwargs={'if_revision': None})
1291
1292    def test_subnet_delete_ignore(self):
1293        self.verify_delete(self.proxy.delete_subnet, subnet.Subnet, True,
1294                           expected_kwargs={'if_revision': None})
1295
1296    def test_subnet_delete_if_revision(self):
1297        self.verify_delete(self.proxy.delete_subnet, subnet.Subnet, True,
1298                           method_kwargs={'if_revision': 42},
1299                           expected_kwargs={'if_revision': 42})
1300
1301    def test_subnet_find(self):
1302        self.verify_find(self.proxy.find_subnet, subnet.Subnet)
1303
1304    def test_subnet_get(self):
1305        self.verify_get(self.proxy.get_subnet, subnet.Subnet)
1306
1307    def test_subnets(self):
1308        self.verify_list(self.proxy.subnets, subnet.Subnet)
1309
1310    def test_subnet_update(self):
1311        self.verify_update(self.proxy.update_subnet, subnet.Subnet,
1312                           expected_kwargs={'x': 1, 'y': 2, 'z': 3,
1313                                            'if_revision': None})
1314
1315    def test_subnet_pool_create_attrs(self):
1316        self.verify_create(self.proxy.create_subnet_pool,
1317                           subnet_pool.SubnetPool)
1318
1319    def test_subnet_pool_delete(self):
1320        self.verify_delete(self.proxy.delete_subnet_pool,
1321                           subnet_pool.SubnetPool, False)
1322
1323    def test_subnet_pool_delete_ignore(self):
1324        self.verify_delete(self.proxy.delete_subnet_pool,
1325                           subnet_pool.SubnetPool, True)
1326
1327    def test_subnet_pool_find(self):
1328        self.verify_find(self.proxy.find_subnet_pool,
1329                         subnet_pool.SubnetPool)
1330
1331    def test_subnet_pool_get(self):
1332        self.verify_get(self.proxy.get_subnet_pool,
1333                        subnet_pool.SubnetPool)
1334
1335    def test_subnet_pools(self):
1336        self.verify_list(self.proxy.subnet_pools,
1337                         subnet_pool.SubnetPool)
1338
1339    def test_subnet_pool_update(self):
1340        self.verify_update(self.proxy.update_subnet_pool,
1341                           subnet_pool.SubnetPool)
1342
1343    def test_vpn_service_create_attrs(self):
1344        self.verify_create(self.proxy.create_vpn_service,
1345                           vpn_service.VPNService)
1346
1347    def test_vpn_service_delete(self):
1348        self.verify_delete(self.proxy.delete_vpn_service,
1349                           vpn_service.VPNService, False)
1350
1351    def test_vpn_service_delete_ignore(self):
1352        self.verify_delete(self.proxy.delete_vpn_service,
1353                           vpn_service.VPNService, True)
1354
1355    def test_vpn_service_find(self):
1356        self.verify_find(self.proxy.find_vpn_service,
1357                         vpn_service.VPNService)
1358
1359    def test_vpn_service_get(self):
1360        self.verify_get(self.proxy.get_vpn_service, vpn_service.VPNService)
1361
1362    def test_vpn_services(self):
1363        self.verify_list(self.proxy.vpn_services, vpn_service.VPNService)
1364
1365    def test_vpn_service_update(self):
1366        self.verify_update(self.proxy.update_vpn_service,
1367                           vpn_service.VPNService)
1368
1369    def test_service_provider(self):
1370        self.verify_list(self.proxy.service_providers,
1371                         service_provider.ServiceProvider)
1372
1373    def test_auto_allocated_topology_get(self):
1374        self.verify_get(self.proxy.get_auto_allocated_topology,
1375                        auto_allocated_topology.AutoAllocatedTopology)
1376
1377    def test_auto_allocated_topology_delete(self):
1378        self.verify_delete(self.proxy.delete_auto_allocated_topology,
1379                           auto_allocated_topology.AutoAllocatedTopology,
1380                           False)
1381
1382    def test_auto_allocated_topology_delete_ignore(self):
1383        self.verify_delete(self.proxy.delete_auto_allocated_topology,
1384                           auto_allocated_topology.AutoAllocatedTopology,
1385                           True)
1386
1387    def test_validate_topology(self):
1388        self.verify_get(self.proxy.validate_auto_allocated_topology,
1389                        auto_allocated_topology.ValidateTopology,
1390                        method_args=[mock.sentinel.project_id],
1391                        expected_args=[],
1392                        expected_kwargs={"project": mock.sentinel.project_id,
1393                                         "requires_id": False})
1394
1395    def test_set_tags(self):
1396        x_network = network.Network.new(id='NETWORK_ID')
1397        self._verify(
1398            'openstack.network.v2.network.Network.set_tags',
1399            self.proxy.set_tags,
1400            method_args=[x_network, ['TAG1', 'TAG2']],
1401            expected_args=[self.proxy, ['TAG1', 'TAG2']],
1402            expected_result=mock.sentinel.result_set_tags)
1403
1404    @mock.patch('openstack.network.v2.network.Network.set_tags')
1405    def test_set_tags_resource_without_tag_suport(self, mock_set_tags):
1406        no_tag_resource = object()
1407        self.assertRaises(exceptions.InvalidRequest,
1408                          self.proxy.set_tags,
1409                          no_tag_resource, ['TAG1', 'TAG2'])
1410        self.assertEqual(0, mock_set_tags.call_count)
1411
1412    def test_create_floating_ip_port_forwarding(self):
1413        self.verify_create(self.proxy.create_floating_ip_port_forwarding,
1414                           port_forwarding.PortForwarding,
1415                           method_kwargs={'floating_ip': FIP_ID},
1416                           expected_kwargs={'floatingip_id': FIP_ID})
1417
1418    def test_delete_floating_ip_port_forwarding(self):
1419        self.verify_delete(
1420            self.proxy.delete_floating_ip_port_forwarding,
1421            port_forwarding.PortForwarding,
1422            ignore_missing=False,
1423            method_args=[FIP_ID, "resource_or_id"],
1424            expected_args=["resource_or_id"],
1425            expected_kwargs={'floatingip_id': FIP_ID})
1426
1427    def test_delete_floating_ip_port_forwarding_ignore(self):
1428        self.verify_delete(
1429            self.proxy.delete_floating_ip_port_forwarding,
1430            port_forwarding.PortForwarding,
1431            ignore_missing=True,
1432            method_args=[FIP_ID, "resource_or_id"],
1433            expected_args=["resource_or_id"],
1434            expected_kwargs={'floatingip_id': FIP_ID})
1435
1436    def test_find_floating_ip_port_forwarding(self):
1437        fip = floating_ip.FloatingIP.new(id=FIP_ID)
1438        self._verify(
1439            'openstack.proxy.Proxy._find',
1440            self.proxy.find_floating_ip_port_forwarding,
1441            method_args=[fip, 'port_forwarding_id'],
1442            expected_args=[
1443                port_forwarding.PortForwarding,
1444                'port_forwarding_id'],
1445            expected_kwargs={
1446                'ignore_missing': True, 'floatingip_id': FIP_ID})
1447
1448    def test_get_floating_ip_port_forwarding(self):
1449        fip = floating_ip.FloatingIP.new(id=FIP_ID)
1450        self._verify(
1451            'openstack.proxy.Proxy._get',
1452            self.proxy.get_floating_ip_port_forwarding,
1453            method_args=[fip, 'port_forwarding_id'],
1454            expected_args=[
1455                port_forwarding.PortForwarding,
1456                'port_forwarding_id'],
1457            expected_kwargs={'floatingip_id': FIP_ID})
1458
1459    def test_floating_ip_port_forwardings(self):
1460        self.verify_list(self.proxy.floating_ip_port_forwardings,
1461                         port_forwarding.PortForwarding,
1462                         method_kwargs={'floating_ip': FIP_ID},
1463                         expected_kwargs={'floatingip_id': FIP_ID})
1464
1465    def test_update_floating_ip_port_forwarding(self):
1466        fip = floating_ip.FloatingIP.new(id=FIP_ID)
1467        self._verify(
1468            'openstack.network.v2._proxy.Proxy._update',
1469            self.proxy.update_floating_ip_port_forwarding,
1470            method_args=[fip, 'port_forwarding_id'],
1471            method_kwargs={'foo': 'bar'},
1472            expected_args=[
1473                port_forwarding.PortForwarding,
1474                'port_forwarding_id'],
1475            expected_kwargs={'floatingip_id': FIP_ID, 'foo': 'bar'})
1476
1477    def test_create_l3_conntrack_helper(self):
1478        self.verify_create(self.proxy.create_conntrack_helper,
1479                           l3_conntrack_helper.ConntrackHelper,
1480                           method_kwargs={'router': ROUTER_ID},
1481                           expected_kwargs={'router_id': ROUTER_ID})
1482
1483    def test_delete_l3_conntrack_helper(self):
1484        r = router.Router.new(id=ROUTER_ID)
1485        self.verify_delete(
1486            self.proxy.delete_conntrack_helper,
1487            l3_conntrack_helper.ConntrackHelper,
1488            ignore_missing=False,
1489            method_args=['resource_or_id', r],
1490            expected_args=['resource_or_id'],
1491            expected_kwargs={'router_id': ROUTER_ID},)
1492
1493    def test_delete_l3_conntrack_helper_ignore(self):
1494        r = router.Router.new(id=ROUTER_ID)
1495        self.verify_delete(
1496            self.proxy.delete_conntrack_helper,
1497            l3_conntrack_helper.ConntrackHelper,
1498            ignore_missing=True,
1499            method_args=['resource_or_id', r],
1500            expected_args=['resource_or_id'],
1501            expected_kwargs={'router_id': ROUTER_ID},)
1502
1503    def test_get_l3_conntrack_helper(self):
1504        r = router.Router.new(id=ROUTER_ID)
1505        self._verify(
1506            'openstack.proxy.Proxy._get',
1507            self.proxy.get_conntrack_helper,
1508            method_args=['conntrack_helper_id', r],
1509            expected_args=[
1510                l3_conntrack_helper.ConntrackHelper,
1511                'conntrack_helper_id'],
1512            expected_kwargs={'router_id': ROUTER_ID})
1513
1514    def test_l3_conntrack_helpers(self):
1515        self.verify_list(self.proxy.conntrack_helpers,
1516                         l3_conntrack_helper.ConntrackHelper,
1517                         method_args=[ROUTER_ID],
1518                         expected_args=[],
1519                         expected_kwargs={'router_id': ROUTER_ID})
1520
1521    def test_update_l3_conntrack_helper(self):
1522        r = router.Router.new(id=ROUTER_ID)
1523        self._verify(
1524            'openstack.network.v2._proxy.Proxy._update',
1525            self.proxy.update_conntrack_helper,
1526            method_args=['conntrack_helper_id', r],
1527            method_kwargs={'foo': 'bar'},
1528            expected_args=[
1529                l3_conntrack_helper.ConntrackHelper,
1530                'conntrack_helper_id'],
1531            expected_kwargs={'router_id': ROUTER_ID, 'foo': 'bar'})
1532