blob: d94aedeffa99b0a468be9449be05da435fd258ee [file] [log] [blame]
Kevin Benton183b7be2016-03-24 22:14:58 -07001# 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
Kevin Bentona2ceb2d2016-09-22 17:52:25 -070013import netaddr
14
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000015from tempest.lib import decorators
Kevin Benton183b7be2016-03-24 22:14:58 -070016from tempest import test
17
18from neutron.tests.tempest.api import base
19from neutron.tests.tempest.api import base_security_groups as bsg
20from neutron.tests.tempest import config
21
22
23class TestRevisions(base.BaseAdminNetworkTest, bsg.BaseSecGroupTest):
24
Jakub Libosvar1982aa12017-05-30 11:15:33 +000025 required_extensions = ['standard-attr-revisions']
Kevin Benton183b7be2016-03-24 22:14:58 -070026
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000027 @decorators.idempotent_id('4a26a4be-9c53-483c-bc50-b53f1db10ac6')
Kevin Benton183b7be2016-03-24 22:14:58 -070028 def test_update_network_bumps_revision(self):
29 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -040030 self.addCleanup(self.client.delete_network, net['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070031 self.assertIn('revision_number', net)
Kevin Benton183b7be2016-03-24 22:14:58 -070032 updated = self.client.update_network(net['id'], name='newnet')
Kevin Benton2f067902016-09-02 17:14:37 -070033 self.assertGreater(updated['network']['revision_number'],
34 net['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -070035
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000036 @decorators.idempotent_id('cac7ecde-12d5-4331-9a03-420899dea077')
Kevin Benton183b7be2016-03-24 22:14:58 -070037 def test_update_port_bumps_revision(self):
38 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -040039 self.addCleanup(self.client.delete_network, net['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -070040 port = self.create_port(net)
Prateek Aroraebc25142017-03-27 11:30:47 -040041 self.addCleanup(self.client.delete_port, port['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070042 self.assertIn('revision_number', port)
Kevin Benton183b7be2016-03-24 22:14:58 -070043 updated = self.client.update_port(port['id'], name='newport')
Kevin Benton2f067902016-09-02 17:14:37 -070044 self.assertGreater(updated['port']['revision_number'],
45 port['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -070046
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000047 @decorators.idempotent_id('c1c4fa41-8e89-44d0-9bfc-409f3b66dc57')
Kevin Benton183b7be2016-03-24 22:14:58 -070048 def test_update_subnet_bumps_revision(self):
49 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -040050 self.addCleanup(self.client.delete_network, net['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -070051 subnet = self.create_subnet(net)
Prateek Aroraebc25142017-03-27 11:30:47 -040052 self.addCleanup(self.client.delete_subnet, subnet['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070053 self.assertIn('revision_number', subnet)
Kevin Benton183b7be2016-03-24 22:14:58 -070054 updated = self.client.update_subnet(subnet['id'], name='newsub')
Kevin Benton2f067902016-09-02 17:14:37 -070055 self.assertGreater(updated['subnet']['revision_number'],
56 subnet['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -070057
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000058 @decorators.idempotent_id('e8c5d7db-2b8d-4615-a476-6e537437c4f2')
Kevin Benton183b7be2016-03-24 22:14:58 -070059 def test_update_subnetpool_bumps_revision(self):
60 sp = self.create_subnetpool('subnetpool', default_prefixlen=24,
61 prefixes=['10.0.0.0/8'])
Prateek Aroraebc25142017-03-27 11:30:47 -040062 self.addCleanup(self.client.delete_subnetpool, sp['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070063 self.assertIn('revision_number', sp)
Kevin Benton183b7be2016-03-24 22:14:58 -070064 updated = self.admin_client.update_subnetpool(sp['id'], name='sp2')
Kevin Benton2f067902016-09-02 17:14:37 -070065 self.assertGreater(updated['subnetpool']['revision_number'],
66 sp['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -070067
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000068 @decorators.idempotent_id('e8c5d7db-2b8d-4567-a326-6e123437c4d1')
Nam Nguyen Hoai2984b6d2016-08-05 09:46:43 +070069 def test_update_subnet_bumps_network_revision(self):
70 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -040071 self.addCleanup(self.client.delete_network, net['id'])
Nam Nguyen Hoai2984b6d2016-08-05 09:46:43 +070072 subnet = self.create_subnet(net)
73 updated = self.client.show_network(net['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070074 self.assertGreater(updated['network']['revision_number'],
75 net['revision_number'])
Nam Nguyen Hoai2984b6d2016-08-05 09:46:43 +070076 self.client.delete_subnet(subnet['id'])
77 updated2 = self.client.show_network(net['id'])
Kevin Benton2f067902016-09-02 17:14:37 -070078 self.assertGreater(updated2['network']['revision_number'],
79 updated['network']['revision_number'])
Nam Nguyen Hoai2984b6d2016-08-05 09:46:43 +070080
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000081 @decorators.idempotent_id('6c256f71-c929-4200-b3dc-4e1843506be5')
Kevin Benton183b7be2016-03-24 22:14:58 -070082 @test.requires_ext(extension="security-group", service="network")
83 def test_update_sg_group_bumps_revision(self):
84 sg, name = self._create_security_group()
Kevin Benton2f067902016-09-02 17:14:37 -070085 self.assertIn('revision_number', sg['security_group'])
Kevin Benton183b7be2016-03-24 22:14:58 -070086 update_body = self.client.update_security_group(
87 sg['security_group']['id'], name='new_sg_name')
Kevin Benton2f067902016-09-02 17:14:37 -070088 self.assertGreater(update_body['security_group']['revision_number'],
89 sg['security_group']['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -070090
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +000091 @decorators.idempotent_id('6489632f-8550-4453-a674-c98849742967')
Kevin Benton183b7be2016-03-24 22:14:58 -070092 @test.requires_ext(extension="security-group", service="network")
93 def test_update_port_sg_binding_bumps_revision(self):
94 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -040095 self.addCleanup(self.client.delete_network, net['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -070096 port = self.create_port(net)
Prateek Aroraebc25142017-03-27 11:30:47 -040097 self.addCleanup(self.client.delete_port, port['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -070098 sg = self._create_security_group()[0]
99 self.client.update_port(
100 port['id'], security_groups=[sg['security_group']['id']])
101 updated = self.client.show_port(port['id'])
Kevin Bentona2bd97b2016-09-19 20:05:25 -0700102 updated2 = self.client.update_port(port['id'], security_groups=[])
Kevin Benton2f067902016-09-02 17:14:37 -0700103 self.assertGreater(updated['port']['revision_number'],
104 port['revision_number'])
105 self.assertGreater(updated2['port']['revision_number'],
106 updated['port']['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700107
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000108 @decorators.idempotent_id('29c7ab2b-d1d8-425d-8cec-fcf632960f22')
Kevin Benton183b7be2016-03-24 22:14:58 -0700109 @test.requires_ext(extension="security-group", service="network")
110 def test_update_sg_rule_bumps_sg_revision(self):
111 sg, name = self._create_security_group()
112 rule = self.client.create_security_group_rule(
113 security_group_id=sg['security_group']['id'],
114 protocol='tcp', direction='ingress', ethertype=self.ethertype,
115 port_range_min=60, port_range_max=70)
116 updated = self.client.show_security_group(sg['security_group']['id'])
Kevin Benton2f067902016-09-02 17:14:37 -0700117 self.assertGreater(updated['security_group']['revision_number'],
118 sg['security_group']['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700119 self.client.delete_security_group_rule(
120 rule['security_group_rule']['id'])
121 updated2 = self.client.show_security_group(sg['security_group']['id'])
Kevin Benton2f067902016-09-02 17:14:37 -0700122 self.assertGreater(updated2['security_group']['revision_number'],
123 updated['security_group']['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700124
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000125 @decorators.idempotent_id('db70c285-0365-4fac-9f55-2a0ad8cf55a8')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700126 @test.requires_ext(extension="allowed-address-pairs", service="network")
127 def test_update_allowed_address_pairs_bumps_revision(self):
128 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -0400129 self.addCleanup(self.client.delete_network, net['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700130 port = self.create_port(net)
Prateek Aroraebc25142017-03-27 11:30:47 -0400131 self.addCleanup(self.client.delete_port, port['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700132 updated = self.client.update_port(
133 port['id'], allowed_address_pairs=[{'ip_address': '1.1.1.1/32'}])
134 self.assertGreater(updated['port']['revision_number'],
135 port['revision_number'])
136 updated2 = self.client.update_port(
137 port['id'], allowed_address_pairs=[])
138 self.assertGreater(updated2['port']['revision_number'],
139 updated['port']['revision_number'])
140
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000141 @decorators.idempotent_id('a21ec3b4-3569-4b77-bf29-4177edaa2df5')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700142 @test.requires_ext(extension="extra_dhcp_opt", service="network")
143 def test_update_extra_dhcp_opt_bumps_revision(self):
144 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -0400145 self.addCleanup(self.client.delete_network, net['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700146 port = self.create_port(net)
Prateek Aroraebc25142017-03-27 11:30:47 -0400147 self.addCleanup(self.client.delete_port, port['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700148 opts = [{'opt_value': 'pxelinux.0', 'opt_name': 'bootfile-name'}]
149 updated = self.client.update_port(port['id'], extra_dhcp_opts=opts)
150 self.assertGreater(updated['port']['revision_number'],
151 port['revision_number'])
152 opts[0]['opt_value'] = 'pxelinux.77'
153 updated2 = self.client.update_port(
154 port['id'], extra_dhcp_opts=opts)
155 self.assertGreater(updated2['port']['revision_number'],
156 updated['port']['revision_number'])
157
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000158 @decorators.idempotent_id('40ba648f-f374-4c29-a5b7-489dd5a38a4e')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700159 @test.requires_ext(extension="dns-integration", service="network")
160 def test_update_dns_domain_bumps_revision(self):
161 net = self.create_network(dns_domain='example.test.')
Prateek Aroraebc25142017-03-27 11:30:47 -0400162 self.addCleanup(self.client.delete_network, net['id'])
Kevin Bentonf46e7a22016-09-24 23:07:45 -0700163 updated = self.client.update_network(net['id'], dns_domain='exa.test.')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700164 self.assertGreater(updated['network']['revision_number'],
165 net['revision_number'])
166 port = self.create_port(net)
Prateek Aroraebc25142017-03-27 11:30:47 -0400167 self.addCleanup(self.client.delete_port, port['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700168 updated = self.client.update_port(port['id'], dns_name='port1')
169 if not updated['port']['dns_name']:
170 self.skipTest("Server does not have DNS domain configured.")
171 self.assertGreater(updated['port']['revision_number'],
172 port['revision_number'])
173 updated2 = self.client.update_port(port['id'], dns_name='')
174 self.assertGreater(updated2['port']['revision_number'],
175 updated['port']['revision_number'])
176
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000177 @decorators.idempotent_id('8482324f-cf59-4d73-b98e-d37119255300')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700178 @test.requires_ext(extension="router", service="network")
179 @test.requires_ext(extension="extraroute", service="network")
180 def test_update_router_extra_routes_bumps_revision(self):
Prateek Aroraebc25142017-03-27 11:30:47 -0400181 net = self.create_network()
182 self.addCleanup(self.client.delete_network, net['id'])
183 subnet = self.create_subnet(net)
184 self.addCleanup(self.client.delete_subnet, subnet['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700185 subgateway = netaddr.IPAddress(subnet['gateway_ip'])
186 router = self.create_router(router_name='test')
Prateek Aroraebc25142017-03-27 11:30:47 -0400187 self.addCleanup(self.client.delete_router, router['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700188 self.create_router_interface(router['id'], subnet['id'])
Prateek Aroraebc25142017-03-27 11:30:47 -0400189 self.addCleanup(
190 self.client.remove_router_interface_with_subnet_id,
191 router['id'],
192 subnet['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700193 router = self.client.show_router(router['id'])['router']
Omer Ansond1586832016-10-10 22:46:32 +0300194 updated = self.client.update_extra_routes(
195 router['id'], str(subgateway + 1), '2.0.0.0/24')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700196 self.assertGreater(updated['router']['revision_number'],
197 router['revision_number'])
Omer Ansond1586832016-10-10 22:46:32 +0300198 updated2 = self.client.delete_extra_routes(router['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700199 self.assertGreater(updated2['router']['revision_number'],
200 updated['router']['revision_number'])
201
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000202 @decorators.idempotent_id('6bd18702-e25a-4b4b-8c0c-680113533511')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700203 @test.requires_ext(extension="subnet-service-types", service="network")
204 def test_update_subnet_service_types_bumps_revisions(self):
Prateek Aroraebc25142017-03-27 11:30:47 -0400205 net = self.create_network()
206 self.addCleanup(self.client.delete_network, net['id'])
207 subnet = self.create_subnet(net)
208 self.addCleanup(self.client.delete_subnet, subnet['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700209 updated = self.client.update_subnet(
210 subnet['id'], service_types=['compute:'])
211 self.assertGreater(updated['subnet']['revision_number'],
212 subnet['revision_number'])
213 updated2 = self.client.update_subnet(
214 subnet['id'], service_types=[])
215 self.assertGreater(updated2['subnet']['revision_number'],
216 updated['subnet']['revision_number'])
217
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000218 @decorators.idempotent_id('9c83105c-9973-45ff-9ca2-e66d64700abe')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700219 @test.requires_ext(extension="port-security", service="network")
220 def test_update_port_security_bumps_revisions(self):
221 net = self.create_network(port_security_enabled=False)
Prateek Aroraebc25142017-03-27 11:30:47 -0400222 self.addCleanup(self.client.delete_network, net['id'])
Kevin Bentonf46e7a22016-09-24 23:07:45 -0700223 updated = self.client.update_network(net['id'],
224 port_security_enabled=True)
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700225 self.assertGreater(updated['network']['revision_number'],
226 net['revision_number'])
Kevin Bentonf46e7a22016-09-24 23:07:45 -0700227 updated2 = self.client.update_network(net['id'],
228 port_security_enabled=False)
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700229 self.assertGreater(updated2['network']['revision_number'],
230 updated['network']['revision_number'])
231 port = self.create_port(net, port_security_enabled=False)
Prateek Aroraebc25142017-03-27 11:30:47 -0400232 self.addCleanup(self.client.delete_port, port['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700233 updated = self.client.update_port(port['id'],
234 port_security_enabled=True)
235 self.assertGreater(updated['port']['revision_number'],
236 port['revision_number'])
237 updated2 = self.client.update_port(port['id'],
238 port_security_enabled=False)
239 self.assertGreater(updated2['port']['revision_number'],
240 updated['port']['revision_number'])
241
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000242 @decorators.idempotent_id('68d5ac3a-11a1-4847-8e2e-5843c043d89b')
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700243 @test.requires_ext(extension="binding", service="network")
244 def test_portbinding_bumps_revision(self):
Prateek Aroraebc25142017-03-27 11:30:47 -0400245 net = self.create_network()
246 self.addCleanup(self.client.delete_network, net['id'])
247 port = self.create_port(net)
248 self.addCleanup(self.client.delete_port, port['id'])
Kevin Bentona2ceb2d2016-09-22 17:52:25 -0700249 port = self.admin_client.update_port(
250 port['id'], **{'binding:host_id': 'badhost1'})['port']
251 updated = self.admin_client.update_port(
252 port['id'], **{'binding:host_id': 'badhost2'})['port']
253 self.assertGreater(updated['revision_number'],
254 port['revision_number'])
255
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000256 @decorators.idempotent_id('4a37bde9-1975-47e0-9b8c-2c9ca36415b0')
Kevin Benton183b7be2016-03-24 22:14:58 -0700257 @test.requires_ext(extension="router", service="network")
258 def test_update_router_bumps_revision(self):
Prateek Aroraebc25142017-03-27 11:30:47 -0400259 net = self.create_network()
260 self.addCleanup(self.client.delete_network, net['id'])
261 subnet = self.create_subnet(net)
262 self.addCleanup(self.client.delete_subnet, subnet['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700263 router = self.create_router(router_name='test')
Prateek Aroraebc25142017-03-27 11:30:47 -0400264 self.addCleanup(self.client.delete_router, router['id'])
Kevin Benton2f067902016-09-02 17:14:37 -0700265 self.assertIn('revision_number', router)
266 rev1 = router['revision_number']
Kevin Benton183b7be2016-03-24 22:14:58 -0700267 router = self.client.update_router(router['id'],
268 name='test2')['router']
Kevin Benton2f067902016-09-02 17:14:37 -0700269 self.assertGreater(router['revision_number'], rev1)
Kevin Benton183b7be2016-03-24 22:14:58 -0700270 self.create_router_interface(router['id'], subnet['id'])
Prateek Aroraebc25142017-03-27 11:30:47 -0400271 self.addCleanup(
272 self.client.remove_router_interface_with_subnet_id,
273 router['id'],
274 subnet['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700275 updated = self.client.show_router(router['id'])['router']
Kevin Benton2f067902016-09-02 17:14:37 -0700276 self.assertGreater(updated['revision_number'],
277 router['revision_number'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700278
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000279 @decorators.idempotent_id('9de71ebc-f5df-4cd0-80bc-60299fce3ce9')
Kevin Benton183b7be2016-03-24 22:14:58 -0700280 @test.requires_ext(extension="router", service="network")
281 @test.requires_ext(extension="standard-attr-description",
282 service="network")
283 def test_update_floatingip_bumps_revision(self):
284 ext_id = config.CONF.network.public_network_id
Prateek Aroraebc25142017-03-27 11:30:47 -0400285 net = self.create_network()
286 self.addCleanup(self.client.delete_network, net['id'])
287 subnet = self.create_subnet(net)
288 self.addCleanup(self.client.delete_subnet, subnet['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700289 router = self.create_router('test', external_network_id=ext_id)
Prateek Aroraebc25142017-03-27 11:30:47 -0400290 self.addCleanup(self.client.delete_router, router['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700291 self.create_router_interface(router['id'], subnet['id'])
Prateek Aroraebc25142017-03-27 11:30:47 -0400292 self.addCleanup(
293 self.client.remove_router_interface_with_subnet_id,
294 router['id'],
295 subnet['id'])
296 port = self.create_port(net)
297 self.addCleanup(self.client.delete_port, port['id'])
Kevin Benton183b7be2016-03-24 22:14:58 -0700298 body = self.client.create_floatingip(
299 floating_network_id=ext_id,
300 port_id=port['id'],
301 description='d1'
302 )['floatingip']
Itzik Browna3926d92017-02-12 02:49:29 +0200303 self.floating_ips.append(body)
Kevin Benton2f067902016-09-02 17:14:37 -0700304 self.assertIn('revision_number', body)
Kevin Benton183b7be2016-03-24 22:14:58 -0700305 b2 = self.client.update_floatingip(body['id'], description='d2')
Kevin Benton2f067902016-09-02 17:14:37 -0700306 self.assertGreater(b2['floatingip']['revision_number'],
307 body['revision_number'])
LIU Yulong39e5f102016-05-05 14:52:26 +0800308 # disassociate
309 self.client.update_floatingip(b2['floatingip']['id'], port_id=None)
Lujinba9a4922016-11-21 18:19:04 +0900310
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000311 @decorators.idempotent_id('afb6486c-41b5-483e-a500-3c506f4deb49')
Lujinba9a4922016-11-21 18:19:04 +0900312 @test.requires_ext(extension="router", service="network")
Brian Haley5ae5a2e2017-05-05 11:32:07 -0400313 @test.requires_ext(extension="l3-ha", service="network")
Lujinba9a4922016-11-21 18:19:04 +0900314 def test_update_router_extra_attributes_bumps_revision(self):
Brian Haley5ae5a2e2017-05-05 11:32:07 -0400315 # updates from CVR to CVR-HA are supported on every release,
316 # but only the admin can forcibly create a non-HA router
317 router_args = {'tenant_id': self.client.tenant_id,
318 'ha': False}
319 router = self.admin_client.create_router('r1', True,
320 **router_args)['router']
Prateek Aroraebc25142017-03-27 11:30:47 -0400321 self.addCleanup(self.client.delete_router, router['id'])
Lujinba9a4922016-11-21 18:19:04 +0900322 self.assertIn('revision_number', router)
323 rev1 = router['revision_number']
324 router = self.admin_client.update_router(
325 router['id'], admin_state_up=False)['router']
326 self.assertGreater(router['revision_number'], rev1)
Brian Haley5ae5a2e2017-05-05 11:32:07 -0400327 self.admin_client.update_router(router['id'], ha=True)['router']
Lujinba9a4922016-11-21 18:19:04 +0900328 updated = self.client.show_router(router['id'])['router']
329 self.assertGreater(updated['revision_number'],
330 router['revision_number'])
331
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000332 @decorators.idempotent_id('90743b00-b0e2-40e4-9524-1c884fe3ef23')
Kevin Benton3e305972016-12-28 02:05:29 -0800333 @test.requires_ext(extension="external-net", service="network")
Lujinba9a4922016-11-21 18:19:04 +0900334 @test.requires_ext(extension="auto-allocated-topology", service="network")
335 @test.requires_ext(extension="subnet_allocation", service="network")
336 @test.requires_ext(extension="router", service="network")
337 def test_update_external_network_bumps_revision(self):
338 net = self.create_network()
Prateek Aroraebc25142017-03-27 11:30:47 -0400339 self.addCleanup(self.client.delete_network, net['id'])
Lujinba9a4922016-11-21 18:19:04 +0900340 self.assertIn('revision_number', net)
341 updated = self.admin_client.update_network(net['id'],
342 **{'router:external': True})
343 self.assertGreater(updated['network']['revision_number'],
344 net['revision_number'])
345
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000346 @decorators.idempotent_id('5af6450a-0f61-49c3-b628-38db77c7b856')
Lujinba9a4922016-11-21 18:19:04 +0900347 @test.requires_ext(extension="qos", service="network")
348 def test_update_qos_port_policy_binding_bumps_revision(self):
349 policy = self.create_qos_policy(name='port-policy', shared=False)
Prateek Aroraebc25142017-03-27 11:30:47 -0400350 net = self.create_network()
351 self.addCleanup(self.client.delete_network, net['id'])
352 port = self.create_port(net)
Lujinba9a4922016-11-21 18:19:04 +0900353 self.addCleanup(self.client.delete_port, port['id'])
354 updated = self.admin_client.update_port(
355 port['id'], qos_policy_id=policy['id'])
356 self.assertGreater(updated['port']['revision_number'],
357 port['revision_number'])
358
Sławek Kapłońskic0caa2e2017-02-25 10:11:32 +0000359 @decorators.idempotent_id('817da343-c6e4-445c-9519-a621f124dfbe')
Lujinba9a4922016-11-21 18:19:04 +0900360 @test.requires_ext(extension="qos", service="network")
361 def test_update_qos_network_policy_binding_bumps_revision(self):
362 policy = self.create_qos_policy(name='network-policy', shared=False)
363 network = self.create_network()
364 self.addCleanup(self.client.delete_network, network['id'])
365 updated = self.admin_client.update_network(
366 network['id'], qos_policy_id=policy['id'])
367 self.assertGreater(updated['network']['revision_number'],
368 network['revision_number'])