Merge lp:~jml/libdep-service/django-free-double into lp:libdep-service

Proposed by Jonathan Lange
Status: Merged
Approved by: James Westby
Approved revision: 63
Merged at revision: 61
Proposed branch: lp:~jml/libdep-service/django-free-double
Merge into: lp:libdep-service
Diff against target: 111 lines (+26/-9)
3 files modified
djlibdep/stats.py (+6/-2)
djlibdep/test_double.py (+5/-1)
djlibdep/tests/test_interface.py (+15/-6)
To merge this branch: bzr merge lp:~jml/libdep-service/django-free-double
Reviewer Review Type Date Requested Status
James Westby (community) Approve
Review via email: mp+129903@code.launchpad.net

Commit message

Don't import Django in test double

Description of the change

The test double imports django settings in the stats module. This
  a) fixes that, by wrapping settings usage in ImportError expection things
  b) tests that, by removing DJANGO_SETTINGS_MODULE from the environment
     before running the test server

The reason "usage" rather than "import", is because Django is awesome.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'djlibdep/stats.py'
2--- djlibdep/stats.py 2012-09-07 15:12:44 +0000
3+++ djlibdep/stats.py 2012-10-16 14:26:23 +0000
4@@ -44,8 +44,12 @@
5
6 def get_metrics():
7 """Get a metrics object to report stats to."""
8- statsd_client = _get_statsd_client()
9- namespace = settings.STATSD_NAMESPACE
10+ try:
11+ statsd_client = _get_statsd_client()
12+ namespace = settings.STATSD_NAMESPACE
13+ except ImportError:
14+ statsd_client = NullClient()
15+ namespace = 'null-namespace'
16 return Metrics(connection=statsd_client, namespace=namespace)
17
18
19
20=== modified file 'djlibdep/test_double.py'
21--- djlibdep/test_double.py 2012-10-03 00:36:08 +0000
22+++ djlibdep/test_double.py 2012-10-16 14:26:23 +0000
23@@ -1,4 +1,5 @@
24 import json
25+import os
26 import subprocess
27 import sys
28
29@@ -29,12 +30,15 @@
30
31 def setUp(self):
32 super(LibdepServiceDouble, self).setUp()
33+ # Make sure that the double does not require Django
34+ env = dict(os.environ)
35+ del env['DJANGO_SETTINGS_MODULE']
36 tree = self.useFixture(
37 FileTree({'data.json': {CONTENT: json.dumps(self._data)}}))
38 data_path = tree.join('data.json')
39 p = subprocess.Popen(
40 [sys.executable, '-c', get_test_double_code(), data_path],
41- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
42+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
43 self.addCleanup(p.terminate)
44 # XXX: Assume that the "I'm ready" message is only a single line.
45 # XXX: Maybe make it JSON?
46
47=== modified file 'djlibdep/tests/test_interface.py'
48--- djlibdep/tests/test_interface.py 2012-10-12 14:47:59 +0000
49+++ djlibdep/tests/test_interface.py 2012-10-16 14:26:23 +0000
50@@ -52,6 +52,15 @@
51 ]))
52
53
54+def get_data(url):
55+ try:
56+ return urlopen(url).read()
57+ except HTTPError, e:
58+ raise ValueError(
59+ "Could not get data from %r: %r %r\n%s"
60+ % (url, e.code, e.message, e.read()))
61+
62+
63 class InterfaceTests(TestCase, ResourcedTestCase):
64
65 scenarios = [
66@@ -61,31 +70,31 @@
67
68 def test_service_check(self):
69 url = '%s/v1/service_check' % (self.server.base_url,)
70- data = urlopen(url).read()
71+ data = get_data(url)
72 self.assertEqual('Hello world!', data)
73
74 def test_v1_not_found(self):
75 url = '%s/v1/get_binaries_for_libraries' % (self.server.base_url,)
76 url += '?libs=doesnotexist'
77- data = urlopen(url).read()
78+ data = get_data(url)
79 self.assertEqual('{}', data)
80
81 def test_v1_found(self):
82 url = '%s/v1/get_binaries_for_libraries' % (self.server.base_url,)
83 url += '?libs=libc.so.6'
84- data = urlopen(url).read()
85+ data = get_data(url)
86 self.assertEqual({'libc.so.6': ['libc-bin']}, json.loads(data))
87
88 def test_v2_not_found(self):
89 url = '%s/v2/get_binaries_for_libraries' % (self.server.base_url,)
90 url += '?libs=doesnotexist&arch=i386'
91- data = urlopen(url).read()
92+ data = get_data(url)
93 self.assertEqual({"i386": {}}, json.loads(data))
94
95 def test_v2_found(self):
96 url = '%s/v2/get_binaries_for_libraries' % (self.server.base_url,)
97 url += '?libs=libc.so.6&arch=i386'
98- data = urlopen(url).read()
99+ data = get_data(url)
100 self.assertEqual({'i386': {'libc.so.6': ['libc-bin']}},
101 json.loads(data))
102
103@@ -98,7 +107,7 @@
104 def test_v2_multiple_architectures(self):
105 url = '%s/v2/get_binaries_for_libraries' % (self.server.base_url,)
106 url += '?libs=libc.so.6&arch=i386&arch=amd64'
107- data = urlopen(url).read()
108+ data = get_data(url)
109 self.assertEqual({'amd64': {'libc.so.6': ['libc-amd64']},
110 'i386': {'libc.so.6': ['libc-bin']}},
111 json.loads(data))

Subscribers

People subscribed via source and target branches