Merge lp:~jtv/maas/bug-1041158 into lp:maas/trunk

Proposed by Jeroen T. Vermeulen on 2012-08-24
Status: Merged
Approved by: Jeroen T. Vermeulen on 2012-08-24
Approved revision: 924
Merged at revision: 927
Proposed branch: lp:~jtv/maas/bug-1041158
Merge into: lp:maas/trunk
Diff against target: 91 lines (+19/-14)
3 files modified
src/maasserver/tests/test_api.py (+18/-0)
src/provisioningserver/dhcp/leases.py (+1/-1)
src/provisioningserver/dhcp/tests/test_leases.py (+0/-13)
To merge this branch: bzr merge lp:~jtv/maas/bug-1041158
Reviewer Review Type Date Requested Status
Gavin Panella (community) 2012-08-24 Approve on 2012-08-24
Review via email: mp+121207@code.launchpad.net

Commit Message

Fix broken API URL path in worker.

Description of the Change

When the scheduled job for DHCP updates came to the worker, the worker tried but failed to upload its dhcp leases to the MAAS server. Gavin figured out what was wrong. It construed the wrong URL to post for, without the /api/<version> prefix.

This branch fixes that. I added an API test to ensure that it really gets the right path now. And I discovered that there was a similar test in the provisioning-server code, but since it didn't have access to django's reverse>(), it was built on the same wrong idea of the API path. So I deleted that test in favour of the new one.

Jeroen

To post a comment you must log in.
Gavin Panella (allenap) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/tests/test_api.py'
2--- src/maasserver/tests/test_api.py 2012-08-24 12:52:34 +0000
3+++ src/maasserver/tests/test_api.py 2012-08-24 15:47:20 +0000
4@@ -28,6 +28,7 @@
5 import random
6 import shutil
7
8+from apiclient.maas_client import MAASClient
9 from django.conf import settings
10 from django.contrib.auth.models import AnonymousUser
11 from django.core.urlresolvers import reverse
12@@ -63,6 +64,7 @@
13 get_auth_tokens,
14 )
15 from maasserver.preseed import compose_preseed_url
16+from maasserver.refresh_worker import refresh_worker
17 from maasserver.testing import (
18 reload_object,
19 reload_objects,
20@@ -86,11 +88,13 @@
21 NodeUserData,
22 )
23 from metadataserver.nodeinituser import get_node_init_user
24+from mock import Mock
25 from provisioningserver import (
26 kernel_opts,
27 tasks,
28 )
29 from provisioningserver.auth import get_recorded_nodegroup_name
30+from provisioningserver.dhcp.leases import send_leases
31 from provisioningserver.enum import (
32 POWER_TYPE,
33 POWER_TYPE_CHOICES,
34@@ -2535,6 +2539,20 @@
35 (response.status_code, response.content))
36 self.assertEqual([], tasks.add_new_dhcp_host_map.calls)
37
38+ def test_worker_calls_update_leases(self):
39+ # In bug 1041158, the worker's upload_leases task tried to call
40+ # the update_leases API at the wrong URL path. It has the right
41+ # path now.
42+ nodegroup = factory.make_node_group()
43+ refresh_worker(nodegroup)
44+ self.patch(MAASClient, 'post', Mock())
45+ leases = factory.make_random_leases()
46+ send_leases(leases)
47+ nodegroup_path = reverse('nodegroup_handler', args=[nodegroup.name])
48+ nodegroup_path = nodegroup_path.decode('ascii').lstrip('/')
49+ MAASClient.post.assert_called_once_with(
50+ nodegroup_path, 'update_leases', leases=leases)
51+
52
53 class TestNodeGroupAPIAuth(APIv10TestMixin, TestCase):
54 """Authorization tests for nodegroup API."""
55
56=== modified file 'src/provisioningserver/dhcp/leases.py'
57--- src/provisioningserver/dhcp/leases.py 2012-08-23 15:37:08 +0000
58+++ src/provisioningserver/dhcp/leases.py 2012-08-24 15:47:20 +0000
59@@ -129,7 +129,7 @@
60 % ', '.join(list_missing_items(knowledge)))
61 return
62
63- api_path = 'nodegroups/%s/' % knowledge['nodegroup_name']
64+ api_path = 'api/1.0/nodegroups/%s/' % knowledge['nodegroup_name']
65 oauth = MAASOAuth(*knowledge['api_credentials'])
66 MAASClient(oauth, MAASDispatcher(), knowledge['maas_url']).post(
67 api_path, 'update_leases', leases=leases)
68
69=== modified file 'src/provisioningserver/dhcp/tests/test_leases.py'
70--- src/provisioningserver/dhcp/tests/test_leases.py 2012-08-23 15:37:08 +0000
71+++ src/provisioningserver/dhcp/tests/test_leases.py 2012-08-24 15:47:20 +0000
72@@ -297,19 +297,6 @@
73 (get_write_time(leases_file), {params['ip']: params['mac']}),
74 parse_leases_file())
75
76- def test_send_leases_posts_to_API(self):
77- self.patch(Omshell, 'create', FakeMethod())
78- self.set_items_needed_for_lease_update()
79- nodegroup_name = self.set_nodegroup_name()
80- self.patch(MAASClient, 'post', FakeMethod())
81- leases = factory.make_random_leases()
82- send_leases(leases)
83- self.assertEqual([(
84- ('nodegroups/%s/' % nodegroup_name, 'update_leases'),
85- {'leases': leases},
86- )],
87- MAASClient.post.calls)
88-
89 def test_send_leases_does_nothing_without_maas_url(self):
90 self.patch(MAASClient, 'post', FakeMethod())
91 self.set_lease_state()