Merge ~ack/maas:user-delete-resources-check into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: e3c6187c084e6db5b5318254dfaf7c1de9ec7ed4
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:user-delete-resources-check
Merge into: maas:master
Diff against target: 436 lines (+96/-54)
9 files modified
src/maasserver/api/tests/test_subnets.py (+1/-4)
src/maasserver/api/tests/test_users.py (+11/-0)
src/maasserver/models/tests/test_staticipaddress.py (+1/-1)
src/maasserver/models/tests/test_subnet.py (+11/-11)
src/maasserver/models/tests/test_userprofile.py (+22/-8)
src/maasserver/models/userprofile.py (+18/-16)
src/maasserver/testing/factory.py (+16/-6)
src/maasserver/triggers/tests/test_system_listener.py (+5/-5)
src/maasserver/triggers/tests/test_websocket_listener.py (+11/-3)
Reviewer Review Type Date Requested Status
Mike Pontillo (community) Approve
MAAS Lander Approve
Review via email: mp+336139@code.launchpad.net

Commit message

LP: #1642916: check if user has assigned resources before trying to remove

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/1252/console
COMMIT: 71dc8adbab0ba6d936d113fb97cc46f9528b63fb

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/1254/console
COMMIT: 54fed589841ab533a96a3c4d91f3670c7aba3852

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/1255/console
COMMIT: 0a50a6f25bfe7f92151c14a02e45f75dd167edcd

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/1256/console
COMMIT: 184ed63e17815444b330a77dd07fd7bd4a9267b6

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 5e0610bc321893692d8457d5c1c1b062294826fb

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b user-delete-resources-check lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: e3c6187c084e6db5b5318254dfaf7c1de9ec7ed4

review: Approve
Revision history for this message
Mike Pontillo (mpontillo) wrote :

Looks good; thanks for the fixes to the tests!

See a couple of minor non-blocking comments below.

review: Approve
Revision history for this message
Alberto Donato (ack) :

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/tests/test_subnets.py b/src/maasserver/api/tests/test_subnets.py
2index b6ef174..f0a740a 100644
3--- a/src/maasserver/api/tests/test_subnets.py
4+++ b/src/maasserver/api/tests/test_subnets.py
5@@ -12,7 +12,6 @@ import random
6 from django.conf import settings
7 from maasserver.enum import (
8 IPADDRESS_TYPE,
9- IPRANGE_TYPE,
10 NODE_STATUS,
11 RDNS_MODE_CHOICES,
12 )
13@@ -443,9 +442,7 @@ class TestSubnetUnreservedIPRangesAPI(APITestCase.ForUser):
14 boilerplate that creates the requested range, then makes sure the
15 unreserved_ip_ranges API call successfully returns an empty list.
16 """
17- factory.make_IPRange(
18- subnet, first_address, last_address,
19- type=IPRANGE_TYPE.DYNAMIC)
20+ factory.make_IPRange(subnet, first_address, last_address)
21 response = self.client.get(
22 get_subnet_uri(subnet),
23 {'op': 'unreserved_ip_ranges'})
24diff --git a/src/maasserver/api/tests/test_users.py b/src/maasserver/api/tests/test_users.py
25index 76cd268..7e292f6 100644
26--- a/src/maasserver/api/tests/test_users.py
27+++ b/src/maasserver/api/tests/test_users.py
28@@ -300,6 +300,17 @@ class TestUser(APITestCase.ForUser):
29 self.assertIn(
30 b'1 static IP address(es) are still allocated', response.content)
31
32+ def test_DELETE_user_with_iprange_fails(self):
33+ self.become_admin()
34+ user = factory.make_User()
35+ factory.make_IPRange(user=user)
36+ response = self.client.delete(
37+ reverse('user_handler', args=[user.username]))
38+ self.assertEqual(
39+ http.client.BAD_REQUEST, response.status_code,
40+ response.status_code)
41+ self.assertIn(b'1 IP range(s) are still allocated', response.content)
42+
43 def test_DELETE_user_with_staticaddress_and_transfer(self):
44 self.become_admin()
45 user = factory.make_User()
46diff --git a/src/maasserver/models/tests/test_staticipaddress.py b/src/maasserver/models/tests/test_staticipaddress.py
47index a8a88f6..995bb7a 100644
48--- a/src/maasserver/models/tests/test_staticipaddress.py
49+++ b/src/maasserver/models/tests/test_staticipaddress.py
50@@ -276,7 +276,7 @@ class TestStaticIPAddressManager(MAASServerTestCase):
51 subnet = factory.make_Subnet(cidr=network)
52 factory.make_IPRange(
53 subnet, '192.168.230.1', '192.168.230.254',
54- type=IPRANGE_TYPE.RESERVED)
55+ alloc_type=IPRANGE_TYPE.RESERVED)
56 e = self.assertRaises(
57 StaticIPAddressExhaustion,
58 StaticIPAddress.objects.allocate_new,
59diff --git a/src/maasserver/models/tests/test_subnet.py b/src/maasserver/models/tests/test_subnet.py
60index 3e1c415..15f2810 100644
61--- a/src/maasserver/models/tests/test_subnet.py
62+++ b/src/maasserver/models/tests/test_subnet.py
63@@ -1056,7 +1056,7 @@ class TestSubnetGetLeastRecentlySeenUnknownNeighbour(MAASServerTestCase):
64 ip="10.0.0.2", interface=rackif, updated=yesterday)
65 factory.make_IPRange(
66 subnet, start_ip="10.0.0.2", end_ip="10.0.0.2",
67- type=IPRANGE_TYPE.RESERVED)
68+ alloc_type=IPRANGE_TYPE.RESERVED)
69 discovery = subnet.get_least_recently_seen_unknown_neighbour()
70 self.assertThat(discovery.ip, Equals("10.0.0.1"))
71
72@@ -1078,7 +1078,7 @@ class TestSubnetGetLeastRecentlySeenUnknownNeighbour(MAASServerTestCase):
73 ip="10.0.0.4", interface=rackif, updated=yesterday)
74 factory.make_IPRange(
75 subnet, start_ip="10.0.0.1", end_ip="10.0.0.2",
76- type=IPRANGE_TYPE.RESERVED)
77+ alloc_type=IPRANGE_TYPE.RESERVED)
78 discovery = subnet.get_least_recently_seen_unknown_neighbour()
79 self.assertThat(discovery.ip, Equals("10.0.0.2"))
80
81@@ -1112,7 +1112,7 @@ class TestSubnetGetNextIPForAllocation(MAASServerTestCase):
82 if not self.managed:
83 factory.make_IPRange(
84 subnet, start_ip=first, end_ip=last,
85- type=IPRANGE_TYPE.RESERVED)
86+ alloc_type=IPRANGE_TYPE.RESERVED)
87 subnet = reload_object(subnet)
88 return subnet
89
90@@ -1206,14 +1206,14 @@ class TestUnmanagedSubnets(MAASServerTestCase):
91 managed=False)
92 range1 = factory.make_IPRange(
93 subnet, start_ip='10.0.0.1', end_ip='10.0.0.1',
94- type=IPRANGE_TYPE.RESERVED)
95+ alloc_type=IPRANGE_TYPE.RESERVED)
96 subnet = reload_object(subnet)
97 ip = subnet.get_next_ip_for_allocation()
98 self.assertThat(ip, Equals("10.0.0.1"))
99 range1.delete()
100 factory.make_IPRange(
101 subnet, start_ip='10.0.0.6', end_ip='10.0.0.6',
102- type=IPRANGE_TYPE.RESERVED)
103+ alloc_type=IPRANGE_TYPE.RESERVED)
104 subnet = reload_object(subnet)
105 ip = subnet.get_next_ip_for_allocation()
106 self.assertThat(ip, Equals("10.0.0.6"))
107@@ -1225,7 +1225,7 @@ class TestUnmanagedSubnets(MAASServerTestCase):
108 managed=False)
109 factory.make_IPRange(
110 subnet, start_ip='10.0.0.3', end_ip='10.0.0.4',
111- type=IPRANGE_TYPE.RESERVED)
112+ alloc_type=IPRANGE_TYPE.RESERVED)
113 subnet = reload_object(subnet)
114 ip = subnet.get_next_ip_for_allocation()
115 self.assertThat(ip, Equals("10.0.0.3"))
116@@ -1355,7 +1355,7 @@ class TestSubnetIPExhaustionNotifications(MAASServerTestCase):
117 start_ip=str(IPAddress(range_start)),
118 end_ip=str(IPAddress(range_end)),
119 subnet=self.subnet,
120- type=IPRANGE_TYPE.RESERVED)
121+ alloc_type=IPRANGE_TYPE.RESERVED)
122 else:
123 # Dummy value so we allocate an IP below.
124 range_end = self.ipnetwork.first
125@@ -1387,7 +1387,7 @@ class TestSubnetIPExhaustionNotifications(MAASServerTestCase):
126 start_ip=str(IPAddress(range_start)),
127 end_ip=str(IPAddress(range_end)),
128 subnet=self.subnet,
129- type=IPRANGE_TYPE.RESERVED)
130+ alloc_type=IPRANGE_TYPE.RESERVED)
131 ident = 'ip_exhaustion__subnet_%d' % self.subnet.id
132 notification = get_one(Notification.objects.filter(ident=ident))
133 notification_exists = notification is not None
134@@ -1406,7 +1406,7 @@ class TestSubnetIPExhaustionNotifications(MAASServerTestCase):
135 start_ip=str(IPAddress(range_start)),
136 end_ip=str(IPAddress(range_end)),
137 subnet=self.subnet,
138- type=IPRANGE_TYPE.RESERVED)
139+ alloc_type=IPRANGE_TYPE.RESERVED)
140 ident = 'ip_exhaustion__subnet_%d' % self.subnet.id
141 notification = get_one(Notification.objects.filter(ident=ident))
142 notification_exists = notification is not None
143@@ -1430,7 +1430,7 @@ class TestSubnetIPExhaustionNotifications(MAASServerTestCase):
144 start_ip=str(IPAddress(range_start)),
145 end_ip=str(IPAddress(range_end)),
146 subnet=self.subnet,
147- type=IPRANGE_TYPE.RESERVED)
148+ alloc_type=IPRANGE_TYPE.RESERVED)
149 ident = 'ip_exhaustion__subnet_%d' % self.subnet.id
150 notification = get_one(Notification.objects.filter(ident=ident))
151 notification_exists = notification is not None
152@@ -1460,7 +1460,7 @@ class TestSubnetIPExhaustionNotifications(MAASServerTestCase):
153 start_ip=str(IPAddress(range_start)),
154 end_ip=str(IPAddress(range_end)),
155 subnet=self.subnet,
156- type=IPRANGE_TYPE.RESERVED)
157+ alloc_type=IPRANGE_TYPE.RESERVED)
158 else:
159 # Dummy value so we allocate an IP below.
160 range_end = self.ipnetwork.first
161diff --git a/src/maasserver/models/tests/test_userprofile.py b/src/maasserver/models/tests/test_userprofile.py
162index 4f96cf3..8a0efac 100644
163--- a/src/maasserver/models/tests/test_userprofile.py
164+++ b/src/maasserver/models/tests/test_userprofile.py
165@@ -10,8 +10,6 @@ from django.core.exceptions import ValidationError
166 from maasserver.exceptions import CannotDeleteUserException
167 from maasserver.models import (
168 FileStorage,
169- Node,
170- StaticIPAddress,
171 UserProfile,
172 )
173 from maasserver.models.user import (
174@@ -107,24 +105,40 @@ class UserProfileTest(MAASServerTestCase):
175 # Cannot delete a user with nodes attached to it.
176 profile = factory.make_User().userprofile
177 factory.make_Node(owner=profile.user)
178- self.assertRaises(CannotDeleteUserException, profile.delete)
179+ error = self.assertRaises(CannotDeleteUserException, profile.delete)
180+ self.assertIn('1 node(s)', str(error))
181
182 def test_delete_attached_static_ip_addresses(self):
183 # Cannot delete a user with static IP address attached to it.
184 profile = factory.make_User().userprofile
185 factory.make_StaticIPAddress(user=profile.user)
186- self.assertRaises(CannotDeleteUserException, profile.delete)
187+ error = self.assertRaises(CannotDeleteUserException, profile.delete)
188+ self.assertIn('1 static IP address(es)', str(error))
189+
190+ def test_delete_attached_iprange(self):
191+ # Cannot delete a user with an IP range attached to it.
192+ profile = factory.make_User().userprofile
193+ factory.make_IPRange(user=profile.user)
194+ error = self.assertRaises(CannotDeleteUserException, profile.delete)
195+ self.assertIn('1 IP range(s)', str(error))
196+
197+ def test_delete_attached_multiple_resources(self):
198+ profile = factory.make_User().userprofile
199+ factory.make_Node(owner=profile.user)
200+ factory.make_StaticIPAddress(user=profile.user)
201+ error = self.assertRaises(CannotDeleteUserException, profile.delete)
202+ self.assertIn('1 static IP address(es), 1 node(s)', str(error))
203
204 def test_transfer_resources(self):
205 user = factory.make_User()
206 node = factory.make_Node(owner=user)
207 ipaddress = factory.make_StaticIPAddress(user=user)
208+ iprange = factory.make_IPRange(user=user)
209 new_user = factory.make_User()
210 user.userprofile.transfer_resources(new_user)
211- node = Node.objects.get(id=node.id)
212- self.assertEqual(node.owner, new_user)
213- ipaddress = StaticIPAddress.objects.get(id=ipaddress.id)
214- self.assertEqual(ipaddress.user, new_user)
215+ self.assertEqual(reload_object(node).owner, new_user)
216+ self.assertEqual(reload_object(ipaddress).user, new_user)
217+ self.assertEqual(reload_object(iprange).user, new_user)
218
219 def test_transfer_resources_missing_target_access(self):
220 user = factory.make_User()
221diff --git a/src/maasserver/models/userprofile.py b/src/maasserver/models/userprofile.py
222index d5c5d74..4fa024c 100644
223--- a/src/maasserver/models/userprofile.py
224+++ b/src/maasserver/models/userprofile.py
225@@ -67,20 +67,21 @@ class UserProfile(CleanSave, Model):
226 completed_intro = BooleanField(default=False)
227
228 def delete(self):
229- addr_count = self.user.staticipaddress_set.count()
230- if addr_count:
231- msg = (
232- "User {} cannot be deleted: {} static IP address(es) "
233- "are still allocated to this user.").format(
234- self.user.username, addr_count)
235- raise CannotDeleteUserException(msg)
236- nb_nodes = self.user.node_set.count()
237- if nb_nodes:
238- msg = (
239- "User {} cannot be deleted: {} node(s) are still "
240- "allocated to this user.").format(
241- self.user.username, nb_nodes)
242- raise CannotDeleteUserException(msg)
243+ # check owned resources
244+ owned_resources = {
245+ 'staticipaddress': 'static IP address(es)',
246+ 'iprange': 'IP range(s)',
247+ 'node': 'node(s)'}
248+ messages = []
249+ for attr, title in owned_resources.items():
250+ count = getattr(self.user, attr + '_set').count()
251+ if count:
252+ messages.append('{} {}'.format(count, title))
253+
254+ if messages:
255+ raise CannotDeleteUserException(
256+ 'User {} cannot be deleted: {} are still allocated'.format(
257+ self.user.username, ', '.join(messages)))
258
259 if self.user.filestorage_set.exists():
260 self.user.filestorage_set.all().delete()
261@@ -91,8 +92,8 @@ class UserProfile(CleanSave, Model):
262 def transfer_resources(self, new_owner):
263 """Transfer owned resources to another user.
264
265- Nodes and static IP addresses owned by the user are transfered to the
266- new owner.
267+ Nodes, static IP addresses and IP ranges owned by the user are
268+ transfered to the new owner.
269
270 :param new_owner: the UserProfile to transfer ownership to.
271 :type new_owner: maasserver.models.UserProfile
272@@ -106,6 +107,7 @@ class UserProfile(CleanSave, Model):
273 " user missing access target resource pool(s)")
274 self.user.node_set.update(owner=new_owner)
275 self.user.staticipaddress_set.update(user=new_owner)
276+ self.user.iprange_set.update(user=new_owner)
277
278 def get_authorisation_tokens(self):
279 """Fetches all the user's OAuth tokens.
280diff --git a/src/maasserver/testing/factory.py b/src/maasserver/testing/factory.py
281index e29cbe5..eb22ff0 100644
282--- a/src/maasserver/testing/factory.py
283+++ b/src/maasserver/testing/factory.py
284@@ -720,7 +720,7 @@ class Factory(maastesting.factory.Factory):
285 domain=domain)
286 dnsrr.save()
287 if ip_addresses:
288- dnsrr.ip_addresses = ip_addresses
289+ dnsrr.ip_addresses.set(ip_addresses)
290 dnsrr.save()
291 return dnsrr
292
293@@ -1364,16 +1364,26 @@ class Factory(maastesting.factory.Factory):
294
295 def make_IPRange(
296 self, subnet=None, start_ip=None, end_ip=None, comment=None,
297- user=None, type=IPRANGE_TYPE.DYNAMIC):
298+ user=None, alloc_type=None):
299+ if alloc_type is None:
300+ alloc_type = (
301+ IPRANGE_TYPE.RESERVED if user else IPRANGE_TYPE.DYNAMIC)
302+
303 if subnet is None and start_ip is None and end_ip is None:
304 subnet = self.make_ipv4_Subnet_with_IPRanges()
305- return subnet.get_dynamic_ranges().first()
306+ iprange = subnet.get_dynamic_ranges().first()
307+ iprange.comment = comment
308+ iprange.user = user
309+ iprange.type = alloc_type
310+ iprange.save()
311+ return iprange
312+
313 # If any of these values are provided, they must all be provided.
314 assert subnet is not None
315 assert start_ip is not None
316 assert end_ip is not None
317 iprange = IPRange(
318- subnet=subnet, start_ip=start_ip, end_ip=end_ip, type=type,
319+ subnet=subnet, start_ip=start_ip, end_ip=end_ip, type=alloc_type,
320 comment=comment, user=user)
321 iprange.save()
322 return iprange
323@@ -1412,13 +1422,13 @@ class Factory(maastesting.factory.Factory):
324 subnet.vlan.dhcp_on = True
325 subnet.vlan.save()
326 self.make_IPRange(
327- subnet, type=IPRANGE_TYPE.DYNAMIC,
328+ subnet, alloc_type=IPRANGE_TYPE.DYNAMIC,
329 start_ip=str(IPAddress(network.first + 2)),
330 end_ip=str(IPAddress(network.first + range_size + 2)))
331 # Create a "static range" for this Subnet.
332 if not with_static_range:
333 self.make_IPRange(
334- subnet, type=IPRANGE_TYPE.RESERVED,
335+ subnet, alloc_type=IPRANGE_TYPE.RESERVED,
336 start_ip=str(IPAddress(network.last - range_size - 2)),
337 end_ip=str(IPAddress(network.last - 2)))
338 return reload_object(subnet)
339diff --git a/src/maasserver/triggers/tests/test_system_listener.py b/src/maasserver/triggers/tests/test_system_listener.py
340index 5e381e2..9124424 100644
341--- a/src/maasserver/triggers/tests/test_system_listener.py
342+++ b/src/maasserver/triggers/tests/test_system_listener.py
343@@ -1436,7 +1436,7 @@ class TestDHCPIPRangeListener(
344 end_ip = str(IPAddress(network.first + 3))
345 yield deferToDatabase(self.create_iprange, {
346 "subnet": subnet,
347- "type": IPRANGE_TYPE.DYNAMIC,
348+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
349 "start_ip": start_ip,
350 "end_ip": end_ip,
351 })
352@@ -1471,7 +1471,7 @@ class TestDHCPIPRangeListener(
353 end_ip = str(IPAddress(network.first + 3))
354 ip_range = yield deferToDatabase(self.create_iprange, {
355 "subnet": subnet,
356- "type": IPRANGE_TYPE.DYNAMIC,
357+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
358 "start_ip": start_ip,
359 "end_ip": end_ip,
360 })
361@@ -1522,7 +1522,7 @@ class TestDHCPIPRangeListener(
362 end_ip = str(IPAddress(network.first + 3))
363 ip_range = yield deferToDatabase(self.create_iprange, {
364 "subnet": subnet,
365- "type": IPRANGE_TYPE.DYNAMIC,
366+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
367 "start_ip": start_ip,
368 "end_ip": end_ip,
369 })
370@@ -1572,7 +1572,7 @@ class TestDHCPIPRangeListener(
371 end_ip = str(IPAddress(network.first + 3))
372 ip_range = yield deferToDatabase(self.create_iprange, {
373 "subnet": subnet,
374- "type": IPRANGE_TYPE.RESERVED,
375+ "alloc_type": IPRANGE_TYPE.RESERVED,
376 "start_ip": start_ip,
377 "end_ip": end_ip,
378 })
379@@ -1622,7 +1622,7 @@ class TestDHCPIPRangeListener(
380 end_ip = str(IPAddress(network.first + 3))
381 ip_range = yield deferToDatabase(self.create_iprange, {
382 "subnet": subnet,
383- "type": IPRANGE_TYPE.DYNAMIC,
384+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
385 "start_ip": start_ip,
386 "end_ip": end_ip,
387 })
388diff --git a/src/maasserver/triggers/tests/test_websocket_listener.py b/src/maasserver/triggers/tests/test_websocket_listener.py
389index 1251af9..176002d 100644
390--- a/src/maasserver/triggers/tests/test_websocket_listener.py
391+++ b/src/maasserver/triggers/tests/test_websocket_listener.py
392@@ -31,6 +31,7 @@ from maasserver.triggers.websocket import register_websocket_triggers
393 from maasserver.utils.orm import transactional
394 from maasserver.utils.threads import deferToDatabase
395 from metadataserver.enum import SCRIPT_STATUS
396+from netaddr import IPAddress
397 from provisioningserver.utils.twisted import (
398 asynchronous,
399 DeferredValue,
400@@ -1695,10 +1696,17 @@ class TestIPRangeListener(
401 listener = self.make_listener_without_delay()
402 dv = DeferredValue()
403 listener.register("iprange", lambda *args: dv.set(args))
404+ network = factory.make_ipv4_network()
405+ subnet = yield deferToDatabase(
406+ self.create_subnet, {'cidr': str(network)})
407+ params = {
408+ 'subnet': subnet,
409+ 'start_ip': IPAddress(network.first + 2),
410+ 'end_ip': IPAddress(network.last - 1)}
411 yield listener.startService()
412 try:
413 iprange = yield deferToDatabase(
414- self.create_iprange)
415+ self.create_iprange, params)
416 yield dv.get(timeout=2)
417 self.assertEqual(('create', '%s' % iprange.id), dv.value)
418 finally:
419@@ -3424,7 +3432,7 @@ class TestIPRangeSubnetListener(
420 try:
421 iprange = yield deferToDatabase(
422 self.create_iprange, {
423- "type": IPRANGE_TYPE.DYNAMIC,
424+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
425 "subnet": subnet,
426 "start_ip": '192.168.0.100',
427 "end_ip": '192.168.0.110',
428@@ -3472,7 +3480,7 @@ class TestIPRangeSubnetListener(
429 })
430 iprange = yield deferToDatabase(
431 self.create_iprange, {
432- "type": IPRANGE_TYPE.DYNAMIC,
433+ "alloc_type": IPRANGE_TYPE.DYNAMIC,
434 "subnet": old_subnet,
435 "start_ip": '192.168.0.100',
436 "end_ip": '192.168.0.110',

Subscribers

People subscribed via source and target branches