8687.15.17
by Karl Fogel
Add the copyright header block to the rest of the files under lib/lp/. |
1 |
# Copyright 2009 Canonical Ltd. This software is licensed under the
|
2 |
# GNU Affero General Public License version 3 (see the file LICENSE).
|
|
3 |
||
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
4 |
"""Tests for lp.registry.scripts.productreleasefinder.hose."""
|
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
5 |
|
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
6 |
import os |
7 |
import shutil |
|
8 |
import tempfile |
|
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
9 |
import unittest |
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
10 |
|
11 |
from canonical.testing import reset_logging |
|
8426.6.1
by Michael Hudson
bzr ls --versioned --recursive --kind=file | xargs sed -i -e 's,from canonical.codehosting,from lp.codehosting,' |
12 |
from lp.codehosting.codeimport.tests.helpers import ( |
11403.1.4
by Henning Eggers
Reformatted imports using format-imports script r32. |
13 |
instrument_method, |
14 |
InstrumentedMethodObserver, |
|
15 |
)
|
|
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
16 |
|
17 |
||
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
18 |
class Hose_Logging(unittest.TestCase): |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
19 |
def testCreatesDefaultLogger(self): |
20 |
"""Hose creates a default logger."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
21 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
22 |
from logging import Logger |
23 |
h = Hose() |
|
24 |
self.failUnless(isinstance(h.log, Logger)) |
|
25 |
||
26 |
def testCreatesChildLogger(self): |
|
27 |
"""Hose creates a child logger if given a parent."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
28 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
29 |
from logging import getLogger |
30 |
parent = getLogger("foo") |
|
31 |
h = Hose(log_parent=parent) |
|
32 |
self.assertEquals(h.log.parent, parent) |
|
33 |
||
34 |
||
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
35 |
class Hose_Filter(unittest.TestCase): |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
36 |
def testCreatesFilterObject(self): |
37 |
"""Hose creates a Filter object."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
38 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
39 |
from lp.registry.scripts.productreleasefinder.filter import ( |
|
3691.84.7
by James Henstridge
rename files |
40 |
Filter) |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
41 |
h = Hose() |
42 |
self.failUnless(isinstance(h.filter, Filter)) |
|
43 |
||
44 |
def testDefaultsFiltersToEmptyDict(self): |
|
45 |
"""Hose creates Filter object with empty dictionary."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
46 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
47 |
h = Hose() |
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
48 |
self.assertEquals(h.filter.filters, []) |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
49 |
|
50 |
def testCreatesFiltersWithGiven(self): |
|
51 |
"""Hose creates Filter object with dictionary given."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
52 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
53 |
from lp.registry.scripts.productreleasefinder.filter import ( |
|
3691.84.7
by James Henstridge
rename files |
54 |
FilterPattern) |
3691.169.22
by James Henstridge
adjust product-release-finder code to work with single releasefileglob field |
55 |
pattern = FilterPattern("foo", "http:e*") |
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
56 |
h = Hose([pattern]) |
57 |
self.assertEquals(len(h.filter.filters), 1) |
|
58 |
self.assertEquals(h.filter.filters[0], pattern) |
|
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
59 |
|
60 |
||
4187.4.3
by Michael Hudson
change the tests in test_hose that used hct.scaffold to not do so any more. |
61 |
class Hose_Urls(unittest.TestCase): |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
62 |
def testCallsReduceWork(self): |
63 |
"""Hose constructor calls reduceWork function."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
64 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
4187.4.3
by Michael Hudson
change the tests in test_hose that used hct.scaffold to not do so any more. |
65 |
h = Hose.__new__(Hose) |
66 |
class Observer(InstrumentedMethodObserver): |
|
67 |
def __init__(self): |
|
68 |
self.called_it = False |
|
69 |
def called(self, name, args, kw): |
|
70 |
self.called_it = True |
|
71 |
obs = Observer() |
|
72 |
instrument_method(obs, h, "reduceWork") |
|
73 |
h.__init__() |
|
74 |
self.assert_(obs.called_it) |
|
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
75 |
|
76 |
def testPassesUrlList(self): |
|
77 |
"""Hose constructor passes url list to reduceWork."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
78 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
79 |
from lp.registry.scripts.productreleasefinder.filter import ( |
|
3691.84.7
by James Henstridge
rename files |
80 |
FilterPattern) |
3691.169.22
by James Henstridge
adjust product-release-finder code to work with single releasefileglob field |
81 |
pattern = FilterPattern("foo", "http://archive.ubuntu.com/e*") |
4187.4.3
by Michael Hudson
change the tests in test_hose that used hct.scaffold to not do so any more. |
82 |
h = Hose.__new__(Hose) |
83 |
class Observer(InstrumentedMethodObserver): |
|
84 |
def __init__(self): |
|
85 |
self.args = [] |
|
86 |
def called(self, name, args, kw): |
|
87 |
self.args.append(args) |
|
88 |
obs = Observer() |
|
89 |
instrument_method(obs, h, "reduceWork") |
|
90 |
h.__init__([pattern]) |
|
91 |
self.assertEquals(obs.args[0][0], |
|
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
92 |
["http://archive.ubuntu.com/"]) |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
93 |
|
94 |
def testSetsUrlProperty(self): |
|
95 |
"""Hose constructor sets urls property to reduceWork return value."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
96 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
97 |
class TestHose(Hose): |
98 |
def reduceWork(self, url_list): |
|
99 |
return "wibble" |
|
100 |
||
101 |
h = TestHose() |
|
102 |
self.assertEquals(h.urls, "wibble") |
|
103 |
||
104 |
||
3691.84.3
by James Henstridge
fix canonical.dyson.hose + tests to work with FilterPattern |
105 |
class Hose_ReduceWork(unittest.TestCase): |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
106 |
def testEmptyList(self): |
107 |
"""Hose.reduceWork returns empty list when given one."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
108 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
109 |
h = Hose() |
110 |
self.assertEquals(h.reduceWork([]), []) |
|
111 |
||
112 |
def testReducedList(self): |
|
113 |
"""Hose.reduceWork returns same list when nothing to do."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
114 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
115 |
h = Hose() |
116 |
self.assertEquals(h.reduceWork(["http://localhost/", "file:///usr/"]), |
|
117 |
["http://localhost/", "file:///usr/"]) |
|
118 |
||
119 |
def testReducesList(self): |
|
120 |
"""Hose.reduceWork removes children elements from list."""
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
121 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
1976
by Canonical.com Patch Queue Manager
dyson product release creator [r=dsilvers] |
122 |
h = Hose() |
123 |
self.assertEquals(h.reduceWork(["http://localhost/", |
|
124 |
"http://localhost/foo/bar/", |
|
125 |
"http://localhost/wibble/", |
|
126 |
"file:///usr/"]), |
|
127 |
["http://localhost/", "file:///usr/"]) |
|
128 |
||
129 |
||
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
130 |
class Hose_LimitWalk(unittest.TestCase): |
131 |
||
132 |
def setUp(self): |
|
133 |
self.release_root = tempfile.mkdtemp() |
|
134 |
self.release_url = 'file://' + self.release_root |
|
135 |
||
136 |
def tearDown(self): |
|
137 |
shutil.rmtree(self.release_root, ignore_errors=True) |
|
138 |
reset_logging() |
|
139 |
||
140 |
def testHoseLimitsWalk(self): |
|
141 |
# Test that the hose limits the directory walk to places that
|
|
142 |
# could contain a match.
|
|
4785.3.7
by Jeroen Vermeulen
Removed whitespace at ends of lines |
143 |
|
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
144 |
# Set up the releases tree:
|
145 |
for directory in ['bar', |
|
146 |
'foo', |
|
147 |
'foo/1.0', |
|
148 |
'foo/1.0/source', |
|
149 |
'foo/1.0/x64', |
|
150 |
'foo/1.5', |
|
151 |
'foo/1.5/source', |
|
152 |
'foo/2.0', |
|
153 |
'foo/2.0/source']: |
|
154 |
os.mkdir(os.path.join(self.release_root, directory)) |
|
155 |
for releasefile in ['foo/1.0/foo-1.0.tar.gz', |
|
156 |
'foo/1.0/source/foo-1.0.tar.gz', |
|
157 |
'foo/1.0/source/foo-2.0.tar.gz', |
|
158 |
'foo/1.0/x64/foo-1.0.tar.gz', |
|
159 |
'foo/1.5/source/foo-1.5.tar.gz', |
|
160 |
'foo/2.0/source/foo-2.0.tar.gz']: |
|
161 |
fp = open(os.path.join(self.release_root, releasefile), 'wb') |
|
162 |
fp.write('data') |
|
163 |
fp.close() |
|
164 |
||
165 |
# Run the hose over the test data
|
|
7675.110.3
by Curtis Hovey
Ran the migration script to move registry code to lp.registry. |
166 |
from lp.registry.scripts.productreleasefinder.hose import Hose |
167 |
from lp.registry.scripts.productreleasefinder.filter import ( |
|
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
168 |
FilterPattern) |
4785.3.7
by Jeroen Vermeulen
Removed whitespace at ends of lines |
169 |
pattern = FilterPattern("key", self.release_url + |
3691.169.22
by James Henstridge
adjust product-release-finder code to work with single releasefileglob field |
170 |
"/foo/1.*/source/foo-1.*.tar.gz") |
3691.131.6
by James Henstridge
fixes from BjornT's review |
171 |
hose = Hose([pattern]) |
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
172 |
|
173 |
prefix_len = len(self.release_url) |
|
174 |
matched = [] |
|
175 |
unmatched = [] |
|
3691.131.6
by James Henstridge
fixes from BjornT's review |
176 |
for key, url in hose: |
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
177 |
if key is None: |
178 |
unmatched.append(url[prefix_len:]) |
|
179 |
else: |
|
180 |
matched.append(url[prefix_len:]) |
|
181 |
||
3691.131.6
by James Henstridge
fixes from BjornT's review |
182 |
# Make sure that the correct releases got found.
|
3691.131.4
by James Henstridge
add support for limiting which subdirs get walked in Hose |
183 |
self.assertEqual(sorted(matched), |
184 |
['/foo/1.0/source/foo-1.0.tar.gz', |
|
185 |
'/foo/1.5/source/foo-1.5.tar.gz']) |
|
186 |
||
187 |
# The only unmatched files that get checked exist in
|
|
188 |
# directories that are parents of potential matches.
|
|
189 |
self.assertEqual(sorted(unmatched), |
|
190 |
['/foo/1.0/foo-1.0.tar.gz', |
|
191 |
'/foo/1.0/source/foo-2.0.tar.gz']) |