Merge lp:~ltrager/maas/lp1521833 into lp:~maas-committers/maas/trunk

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: no longer in the source branch.
Merged at revision: 4531
Proposed branch: lp:~ltrager/maas/lp1521833
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 38 lines (+17/-0)
2 files modified
src/maasserver/forms_subnet.py (+4/-0)
src/maasserver/tests/test_forms_subnet.py (+13/-0)
To merge this branch: bzr merge lp:~ltrager/maas/lp1521833
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+279373@code.launchpad.net

Commit message

Fix bug where updates to the subnet would remove the first DNS server

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Yeah hopefully the new ArrayField in django fixes this without needing this. But good to land this now in trunk to backport to 1.9.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/forms_subnet.py'
2--- src/maasserver/forms_subnet.py 2015-12-02 21:46:34 +0000
3+++ src/maasserver/forms_subnet.py 2015-12-02 22:59:43 +0000
4@@ -59,6 +59,10 @@
5
6 def clean(self):
7 cleaned_data = super(SubnetForm, self).clean()
8+ # The djorm_pgarray.fields.ArrayField form has a bug which leaves out
9+ # the first entry.
10+ if 'dns_servers' in self.data and self.data['dns_servers'] != '':
11+ cleaned_data['dns_servers'] = self.data.getlist('dns_servers')
12 cleaned_data = self._clean_name(cleaned_data)
13 cleaned_data = self._clean_dns_servers(cleaned_data)
14 if self.instance.id is None:
15
16=== modified file 'src/maasserver/tests/test_forms_subnet.py'
17--- src/maasserver/tests/test_forms_subnet.py 2015-12-02 21:46:34 +0000
18+++ src/maasserver/tests/test_forms_subnet.py 2015-12-02 22:59:43 +0000
19@@ -252,6 +252,19 @@
20 subnet, MatchesStructure.byEquality(
21 name=new_cidr, cidr=new_cidr, gateway_ip=new_gateway_ip))
22
23+ def test__updates_subnet_name_doesnt_remove_dns_server(self):
24+ # Regression test for lp:1521833
25+ dns_servers = [factory.make_ip_address()
26+ for _ in range(random.randint(2, 10))]
27+ subnet = factory.make_Subnet(dns_servers=dns_servers)
28+ form = SubnetForm(instance=subnet, data={
29+ "name": factory.make_name("subnet")
30+ })
31+ self.assertTrue(form.is_valid(), form.errors)
32+ form.save()
33+ subnet = reload_object(subnet)
34+ self.assertEquals(dns_servers, subnet.dns_servers)
35+
36 def test__doesnt_overwrite_other_fields(self):
37 new_name = factory.make_name("subnet")
38 subnet = factory.make_Subnet()