Merge lp:~mhall119/awstrial/use-sites-framework-658572 into lp:awstrial

Proposed by Michael Hall
Status: Merged
Approved by: Matthew Nuzum
Approved revision: 264
Merged at revision: 264
Proposed branch: lp:~mhall119/awstrial/use-sites-framework-658572
Merge into: lp:awstrial
Diff against target: 115 lines (+64/-2)
2 files modified
awstrial/trial/ec2_helper.py (+4/-2)
awstrial/trial/tests.py (+60/-0)
To merge this branch: bzr merge lp:~mhall119/awstrial/use-sites-framework-658572
Reviewer Review Type Date Requested Status
Matthew Nuzum (community) Approve
Review via email: mp+79882@code.launchpad.net

Commit message

Get the base urls for callbacks from the django.contrib.sites defined in the database, rather from the settings file.

Description of the change

Get the base urls for callbacks from the django.contrib.sites defined in the database, rather from the settings file.

To post a comment you must log in.
Revision history for this message
Matthew Nuzum (newz) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'awstrial/trial/ec2_helper.py'
2--- awstrial/trial/ec2_helper.py 2011-10-18 13:58:40 +0000
3+++ awstrial/trial/ec2_helper.py 2011-10-19 19:46:27 +0000
4@@ -21,6 +21,7 @@
5
6 from trial.models import Campaign, Instances
7 from django.contrib.auth.models import User
8+from django.contrib.sites.models import Site
9 from django.template.loader import render_to_string
10
11 from django.conf import settings
12@@ -82,8 +83,9 @@
13 render_to_string("import-launchpad-ssh-keys",
14 { 'debug' : settings.DEBUG, 'launchpad_id' : lpid, 'password' : password } ),
15 part_type=util.CI_SCRIPT, filename="10-launchpad-ssh-keys"))
16-
17- callback_url = "%s/info_callback/%s" % (settings.BASE_URL, sec_key)
18+
19+ site = Site.objects.get(pk=settings.SITE_ID)
20+ callback_url = "%s/info_callback/%s" % (site.name, sec_key)
21 parts.append(
22 util.partItem(
23 render_to_string("info-callback",
24
25=== modified file 'awstrial/trial/tests.py'
26--- awstrial/trial/tests.py 2011-10-18 20:11:39 +0000
27+++ awstrial/trial/tests.py 2011-10-19 19:46:27 +0000
28@@ -25,6 +25,7 @@
29 from django.test import TestCase as DjangoTestCase
30 from django.conf import settings
31 from django.contrib.auth.models import User
32+from django.contrib.sites.models import Site
33 from mock import patch, Mock
34 from trial import ec2_helper
35 from trial.models import Campaign, Instances
36@@ -96,6 +97,7 @@
37 self.old_access_key = getattr(settings, 'AWS_ACCESS_KEY_ID', None)
38 self.old_secret_key = getattr(settings, 'AWS_SECRET_ACCESS_KEY', None)
39 self.old_alternate_cloud = getattr(settings, 'ALTERNATE_CLOUD', None)
40+ self.old_site_id = getattr(settings, 'SITE_ID', None)
41 settings.AWS_ACCESS_KEY_ID = 'TestAccessKey'
42 settings.AWS_SECRET_ACCESS_KEY = 'TestSecretKey'
43 settings.ALTERNATE_CLOUD = None
44@@ -104,6 +106,7 @@
45 settings.AWS_ACCESS_KEY_ID = self.old_access_key
46 settings.AWS_SECRET_ACCESS_KEY = self.old_secret_key
47 settings.ALTERNATE_CLOUD = self.old_alternate_cloud
48+ settings.SITE_ID = self.old_site_id
49
50 def call_run_instance(self, campaign):
51 post_data = {
52@@ -114,6 +117,63 @@
53 return self.client.post('/%s/run/' % campaign.name, post_data)
54
55 @patch('boto.ec2.EC2Connection')
56+ def test_uses_sites_framework(self, mock_connection):
57+ """
58+ Checks that the callback url is based off the Site.name for this
59+ configuration
60+ """
61+
62+ newsite = Site.objects.create(
63+ domain='testing.awstrial.org',
64+ name='http://testing.awstrial.org:8000',
65+ )
66+ settings.SITE_ID = newsite.id
67+ self.call_count=0
68+ class MockInstance(object):
69+
70+ def __init__(self, instance_id):
71+ self.id = instance_id
72+
73+ class MockReservation(object):
74+
75+ def __init__(self, instance_ids):
76+ self.instances = [MockInstance(i) for i in instance_ids]
77+
78+ campaign = Campaign.objects.create(
79+ name='test-campaign',
80+ verbose_name='Test Campaign',
81+ max_instances=5,
82+ active=True,
83+ )
84+
85+ def mock_run_instances(conn, *args, **kwargs):
86+ self.call_count += 1
87+ self.assertTrue('user_data' in kwargs)
88+
89+ import StringIO, gzip, email
90+ gzipped_mime_data = StringIO.StringIO()
91+ gzipped_mime_data.write(kwargs['user_data'])
92+ gzipped_mime_data.seek(0)
93+ gzipped_mime_file = gzip.GzipFile(fileobj=gzipped_mime_data, mode='r')
94+ mime_data = gzipped_mime_file.read()
95+ mime_msg = email.message_from_string(mime_data)
96+ self.assertTrue(mime_msg.is_multipart())
97+
98+ for mime_part in mime_msg.get_payload():
99+ if mime_part.get_filename() == '99-info-callback':
100+ self.assertTrue('http://testing.awstrial.org:8000/info_callback/' in mime_part.get_payload())
101+
102+ return MockReservation(['i-test-%s'%self.call_count])
103+ mock_connection.return_value.run_instances.side_effect = mock_run_instances
104+
105+ user = User.objects.create_user('testuser', 'test@example.com', 'testpasswd')
106+ self.client.login(username='testuser', password='testpasswd')
107+
108+ response = self.call_run_instance(campaign)
109+ self.assertEquals(1, Instances.objects.all().count())
110+ instance = Instances.objects.all()[0]
111+
112+ @patch('boto.ec2.EC2Connection')
113 def test_disallow_multiple_instances(self, mock_connection):
114 """
115 Checks that a user can't create multiple isntances by making requests

Subscribers

People subscribed via source and target branches