Merge lp:~xnox/ubuntu-dev-tools/drop-mox into lp:~ubuntu-dev/ubuntu-dev-tools/trunk
- drop-mox
- Merge into trunk
Proposed by
Dimitri John Ledkov
Status: | Merged |
---|---|
Merge reported by: | Daniel Holbach |
Merged at revision: | not available |
Proposed branch: | lp:~xnox/ubuntu-dev-tools/drop-mox |
Merge into: | lp:~ubuntu-dev/ubuntu-dev-tools/trunk |
Diff against target: |
403 lines (+89/-135) 5 files modified
debian/control (+0/-1) ubuntutools/test/test_archive.py (+68/-122) ubuntutools/test/test_config.py (+10/-4) ubuntutools/test/test_pylint.py (+0/-3) ubuntutools/test/test_update_maintainer.py (+11/-5) |
To merge this branch: | bzr merge lp:~xnox/ubuntu-dev-tools/drop-mox |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Stefano Rivera | Pending | ||
Ubuntu Development Team | Pending | ||
Review via email: mp+244832@code.launchpad.net |
Commit message
Description of the change
Drop mox.
mox is not ported to python3, everything else is.
This is mostly equivalent, however, I do not assert call counts / call list of mocks. If this is critical, let me know and I can expand the tests to include that.
To post a comment you must log in.
Revision history for this message
Daniel Holbach (dholbach) wrote : | # |
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'debian/control' | |||
2 | --- debian/control 2014-01-06 21:48:08 +0000 | |||
3 | +++ debian/control 2014-12-16 09:17:30 +0000 | |||
4 | @@ -19,7 +19,6 @@ | |||
5 | 19 | python-distro-info (>= 0.4~), | 19 | python-distro-info (>= 0.4~), |
6 | 20 | python-httplib2, | 20 | python-httplib2, |
7 | 21 | python-launchpadlib (>= 1.5.7), | 21 | python-launchpadlib (>= 1.5.7), |
8 | 22 | python-mox, | ||
9 | 23 | python-setuptools, | 22 | python-setuptools, |
10 | 24 | python-soappy, | 23 | python-soappy, |
11 | 25 | python-unittest2 | 24 | python-unittest2 |
12 | 26 | 25 | ||
13 | === modified file 'ubuntutools/test/test_archive.py' | |||
14 | --- ubuntutools/test/test_archive.py 2014-02-25 20:46:10 +0000 | |||
15 | +++ ubuntutools/test/test_archive.py 2014-12-16 09:17:30 +0000 | |||
16 | @@ -20,13 +20,14 @@ | |||
17 | 20 | import os.path | 20 | import os.path |
18 | 21 | import shutil | 21 | import shutil |
19 | 22 | import StringIO | 22 | import StringIO |
20 | 23 | from io import BytesIO | ||
21 | 23 | import tempfile | 24 | import tempfile |
22 | 24 | import types | 25 | import types |
23 | 25 | import urllib2 | 26 | import urllib2 |
24 | 26 | 27 | ||
25 | 27 | import debian.deb822 | 28 | import debian.deb822 |
26 | 28 | import httplib2 | 29 | import httplib2 |
28 | 29 | import mox | 30 | import mock |
29 | 30 | 31 | ||
30 | 31 | import ubuntutools.archive | 32 | import ubuntutools.archive |
31 | 32 | from ubuntutools.config import UDTConfig | 33 | from ubuntutools.config import UDTConfig |
32 | @@ -44,15 +45,11 @@ | |||
33 | 44 | ex_pkg.cleanup() | 45 | ex_pkg.cleanup() |
34 | 45 | 46 | ||
35 | 46 | 47 | ||
37 | 47 | class DscVerificationTestCase(mox.MoxTestBase, unittest.TestCase): | 48 | class DscVerificationTestCase(unittest.TestCase): |
38 | 48 | def setUp(self): | 49 | def setUp(self): |
39 | 49 | super(DscVerificationTestCase, self).setUp() | ||
40 | 50 | with open('test-data/example_1.0-1.dsc', 'rb') as f: | 50 | with open('test-data/example_1.0-1.dsc', 'rb') as f: |
41 | 51 | self.dsc = ubuntutools.archive.Dsc(f.read()) | 51 | self.dsc = ubuntutools.archive.Dsc(f.read()) |
42 | 52 | 52 | ||
43 | 53 | def tearDown(self): | ||
44 | 54 | super(DscVerificationTestCase, self).tearDown() | ||
45 | 55 | |||
46 | 56 | def test_good(self): | 53 | def test_good(self): |
47 | 57 | self.assertTrue(self.dsc.verify_file( | 54 | self.assertTrue(self.dsc.verify_file( |
48 | 58 | 'test-data/example_1.0.orig.tar.gz')) | 55 | 'test-data/example_1.0.orig.tar.gz')) |
49 | @@ -68,10 +65,10 @@ | |||
50 | 68 | with open(fn, 'rb') as f: | 65 | with open(fn, 'rb') as f: |
51 | 69 | data = f.read() | 66 | data = f.read() |
52 | 70 | data = data[:-1] + chr(ord(data[-1]) ^ 8) | 67 | data = data[:-1] + chr(ord(data[-1]) ^ 8) |
57 | 71 | self.mox.StubOutWithMock(__builtin__, 'open') | 68 | m = mock.MagicMock(name='open', spec=open) |
58 | 72 | open(fn, 'rb').AndReturn(StringIO.StringIO(data)) | 69 | m.return_value = BytesIO(data) |
59 | 73 | self.mox.ReplayAll() | 70 | with mock.patch('__builtin__.open', m): |
60 | 74 | self.assertFalse(self.dsc.verify_file(fn)) | 71 | self.assertFalse(self.dsc.verify_file(fn)) |
61 | 75 | 72 | ||
62 | 76 | def test_sha1(self): | 73 | def test_sha1(self): |
63 | 77 | del self.dsc['Checksums-Sha256'] | 74 | del self.dsc['Checksums-Sha256'] |
64 | @@ -85,26 +82,31 @@ | |||
65 | 85 | self.test_bad() | 82 | self.test_bad() |
66 | 86 | 83 | ||
67 | 87 | 84 | ||
69 | 88 | class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase): | 85 | class LocalSourcePackageTestCase(unittest.TestCase): |
70 | 89 | SourcePackage = ubuntutools.archive.UbuntuSourcePackage | 86 | SourcePackage = ubuntutools.archive.UbuntuSourcePackage |
71 | 90 | 87 | ||
72 | 91 | def setUp(self): | 88 | def setUp(self): |
73 | 92 | super(LocalSourcePackageTestCase, self).setUp() | ||
74 | 93 | self.workdir = tempfile.mkdtemp(prefix='udt-test') | 89 | self.workdir = tempfile.mkdtemp(prefix='udt-test') |
75 | 94 | 90 | ||
82 | 95 | self.mox.StubOutWithMock(ubuntutools.archive, 'Distribution') | 91 | self._stubout('ubuntutools.archive.Distribution') |
83 | 96 | self.mox.StubOutWithMock(ubuntutools.archive, 'rmadison') | 92 | self._stubout('ubuntutools.archive.rmadison') |
84 | 97 | 93 | ||
85 | 98 | self.real_http = httplib2.Http() | 94 | self.mock_http = self._stubout('httplib2.Http.request') |
86 | 99 | self.mox.StubOutWithMock(httplib2, 'Http') | 95 | self.mock_http.side_effect = self.request_proxy |
87 | 100 | self.mock_http = self.mox.CreateMock(httplib2.Http) | 96 | |
88 | 97 | self.url_opener = mock.MagicMock(spec=urllib2.OpenerDirector) | ||
89 | 98 | self.url_opener.open.side_effect = self.urlopen_proxy | ||
90 | 101 | 99 | ||
91 | 102 | # Silence the tests a little: | 100 | # Silence the tests a little: |
94 | 103 | self.mox.stubs.Set(Logger, 'stdout', StringIO.StringIO()) | 101 | self._stubout('ubuntutools.logger.Logger.stdout') |
95 | 104 | self.mox.stubs.Set(Logger, 'stderr', StringIO.StringIO()) | 102 | self._stubout('ubuntutools.logger.Logger.stderr') |
96 | 103 | |||
97 | 104 | def _stubout(self, stub): | ||
98 | 105 | patcher = mock.patch(stub) | ||
99 | 106 | self.addCleanup(patcher.stop) | ||
100 | 107 | return patcher.start() | ||
101 | 105 | 108 | ||
102 | 106 | def tearDown(self): | 109 | def tearDown(self): |
103 | 107 | super(LocalSourcePackageTestCase, self).tearDown() | ||
104 | 108 | shutil.rmtree(self.workdir) | 110 | shutil.rmtree(self.workdir) |
105 | 109 | 111 | ||
106 | 110 | def urlopen_proxy(self, url, destname=None): | 112 | def urlopen_proxy(self, url, destname=None): |
107 | @@ -141,6 +143,12 @@ | |||
108 | 141 | response = httplib2.Response({'status': 404}) | 143 | response = httplib2.Response({'status': 404}) |
109 | 142 | return response, "I'm a 404 Error" | 144 | return response, "I'm a 404 Error" |
110 | 143 | 145 | ||
111 | 146 | def request_404_then_proxy(self, url, destname=None): | ||
112 | 147 | "mock side_effect callable to chain request 404 & proxy" | ||
113 | 148 | if self.mock_http.called: | ||
114 | 149 | return self.request_proxy(url, destname) | ||
115 | 150 | return self.request_404(url) | ||
116 | 151 | |||
117 | 144 | def test_local_copy(self): | 152 | def test_local_copy(self): |
118 | 145 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 153 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
119 | 146 | dscfile='test-data/example_1.0-1.dsc', | 154 | dscfile='test-data/example_1.0-1.dsc', |
120 | @@ -188,20 +196,11 @@ | |||
121 | 188 | dist = self.SourcePackage.distribution | 196 | dist = self.SourcePackage.distribution |
122 | 189 | mirror = UDTConfig.defaults['%s_MIRROR' % dist.upper()] | 197 | mirror = UDTConfig.defaults['%s_MIRROR' % dist.upper()] |
123 | 190 | urlbase = '/pool/main/e/example/' | 198 | urlbase = '/pool/main/e/example/' |
124 | 191 | httplib2.Http().AndReturn(self.mock_http) | ||
125 | 192 | self.mock_http.request('https://launchpad.net/%s/+archive/primary/' | ||
126 | 193 | '+files/example_1.0-1.dsc' % dist | ||
127 | 194 | ).WithSideEffects(self.request_proxy) | ||
128 | 195 | url_opener = self.mox.CreateMock(urllib2.OpenerDirector) | ||
129 | 196 | url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz' | ||
130 | 197 | ).WithSideEffects(self.urlopen_proxy) | ||
131 | 198 | url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.xz' | ||
132 | 199 | ).WithSideEffects(self.urlopen_proxy) | ||
133 | 200 | self.mox.ReplayAll() | ||
134 | 201 | 199 | ||
135 | 202 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 200 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
136 | 203 | workdir=self.workdir) | 201 | workdir=self.workdir) |
138 | 204 | pkg.url_opener = url_opener | 202 | |
139 | 203 | pkg.url_opener = self.url_opener | ||
140 | 205 | pkg.pull() | 204 | pkg.pull() |
141 | 206 | 205 | ||
142 | 207 | def test_mirrors(self): | 206 | def test_mirrors(self): |
143 | @@ -209,19 +208,12 @@ | |||
144 | 209 | mirror = 'http://mirror' | 208 | mirror = 'http://mirror' |
145 | 210 | lpbase = 'https://launchpad.net/ubuntu/+archive/primary/+files/' | 209 | lpbase = 'https://launchpad.net/ubuntu/+archive/primary/+files/' |
146 | 211 | urlbase = '/pool/main/e/example/' | 210 | urlbase = '/pool/main/e/example/' |
160 | 212 | httplib2.Http().AndReturn(self.mock_http) | 211 | sequence = [self.urlopen_null, self.urlopen_404, self.urlopen_proxy, |
161 | 213 | self.mock_http.request(lpbase + 'example_1.0-1.dsc' | 212 | self.urlopen_proxy] |
162 | 214 | ).WithSideEffects(self.request_proxy) | 213 | def _callable_iter(*args, **kwargs): |
163 | 215 | url_opener = self.mox.CreateMock(urllib2.OpenerDirector) | 214 | return sequence.pop(0)(*args, **kwargs) |
164 | 216 | url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz' | 215 | url_opener = mock.MagicMock(spec=urllib2.OpenerDirector) |
165 | 217 | ).WithSideEffects(self.urlopen_null) | 216 | url_opener.open.side_effect = _callable_iter |
153 | 218 | url_opener.open(master + urlbase + 'example_1.0.orig.tar.gz' | ||
154 | 219 | ).WithSideEffects(self.urlopen_404) | ||
155 | 220 | url_opener.open(lpbase + 'example_1.0.orig.tar.gz' | ||
156 | 221 | ).WithSideEffects(self.urlopen_proxy) | ||
157 | 222 | url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.xz' | ||
158 | 223 | ).WithSideEffects(self.urlopen_proxy) | ||
159 | 224 | self.mox.ReplayAll() | ||
166 | 225 | 217 | ||
167 | 226 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 218 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
168 | 227 | workdir=self.workdir, mirrors=[mirror]) | 219 | workdir=self.workdir, mirrors=[mirror]) |
169 | @@ -229,12 +221,7 @@ | |||
170 | 229 | pkg.pull() | 221 | pkg.pull() |
171 | 230 | 222 | ||
172 | 231 | def test_dsc_missing(self): | 223 | def test_dsc_missing(self): |
179 | 232 | lpbase = 'https://launchpad.net/ubuntu/+archive/primary/+files/' | 224 | self.mock_http.side_effect = self.request_404 |
174 | 233 | httplib2.Http().AndReturn(self.mock_http) | ||
175 | 234 | self.mock_http.request(lpbase + 'example_1.0-1.dsc' | ||
176 | 235 | ).WithSideEffects(self.request_404) | ||
177 | 236 | self.mox.ReplayAll() | ||
178 | 237 | |||
180 | 238 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 225 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
181 | 239 | workdir=self.workdir) | 226 | workdir=self.workdir) |
182 | 240 | self.assertRaises(ubuntutools.archive.DownloadError, pkg.pull) | 227 | self.assertRaises(ubuntutools.archive.DownloadError, pkg.pull) |
183 | @@ -251,31 +238,19 @@ | |||
184 | 251 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' | 238 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' |
185 | 252 | base = '/pool/main/e/example/' | 239 | base = '/pool/main/e/example/' |
186 | 253 | 240 | ||
212 | 254 | httplib2.Http().AndReturn(self.mock_http) | 241 | sequence = [self.urlopen_null, |
213 | 255 | self.mock_http.request(lpbase + 'example_1.0-1.dsc' | 242 | self.urlopen_404, |
214 | 256 | ).WithSideEffects(self.request_proxy) | 243 | self.urlopen_404, |
215 | 257 | url_opener = self.mox.CreateMock(urllib2.OpenerDirector) | 244 | self.urlopen_404, |
216 | 258 | url_opener.open(debian_mirror + base + 'example_1.0.orig.tar.gz' | 245 | self.urlopen_404, |
217 | 259 | ).WithSideEffects(self.urlopen_null) | 246 | lambda x: BytesIO( |
218 | 260 | url_opener.open(debsec_mirror + base + 'example_1.0.orig.tar.gz' | 247 | '{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}'), |
219 | 261 | ).WithSideEffects(self.urlopen_404) | 248 | self.urlopen_file('example_1.0.orig.tar.gz'), |
220 | 262 | url_opener.open(debian_master + base + 'example_1.0.orig.tar.gz' | 249 | self.urlopen_proxy] |
221 | 263 | ).WithSideEffects(self.urlopen_404) | 250 | def _callable_iter(*args, **kwargs): |
222 | 264 | url_opener.open(debsec_master + base + 'example_1.0.orig.tar.gz' | 251 | return sequence.pop(0)(*args, **kwargs) |
223 | 265 | ).WithSideEffects(self.urlopen_404) | 252 | url_opener = mock.MagicMock(spec=urllib2.OpenerDirector) |
224 | 266 | url_opener.open(lpbase + 'example_1.0.orig.tar.gz' | 253 | url_opener.open.side_effect = _callable_iter |
200 | 267 | ).WithSideEffects(self.urlopen_404) | ||
201 | 268 | url_opener.open('http://snapshot.debian.org/mr/package/example/1.0-1/' | ||
202 | 269 | 'srcfiles?fileinfo=1' | ||
203 | 270 | ).WithSideEffects(lambda x: StringIO.StringIO( | ||
204 | 271 | '{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}' | ||
205 | 272 | )) | ||
206 | 273 | url_opener.open('http://snapshot.debian.org/file/hashabc' | ||
207 | 274 | ).WithSideEffects(self.urlopen_file( | ||
208 | 275 | 'example_1.0.orig.tar.gz')) | ||
209 | 276 | url_opener.open(debian_mirror + base + 'example_1.0-1.debian.tar.xz' | ||
210 | 277 | ).WithSideEffects(self.urlopen_proxy) | ||
211 | 278 | self.mox.ReplayAll() | ||
225 | 279 | 254 | ||
226 | 280 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 255 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
227 | 281 | workdir=self.workdir, mirrors=[debian_mirror, | 256 | workdir=self.workdir, mirrors=[debian_mirror, |
228 | @@ -288,61 +263,32 @@ | |||
229 | 288 | mirror = 'http://mirror' | 263 | mirror = 'http://mirror' |
230 | 289 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' | 264 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' |
231 | 290 | base = '/pool/main/e/example/' | 265 | base = '/pool/main/e/example/' |
257 | 291 | httplib2.Http().AndReturn(self.mock_http) | 266 | self.mock_http.side_effect = self.request_404_then_proxy |
258 | 292 | self.mock_http.request(lpbase + 'example_1.0-1.dsc' | 267 | |
259 | 293 | ).WithSideEffects(self.request_404) | 268 | patcher = mock.patch.object(debian.deb822.GpgInfo, 'from_sequence') |
260 | 294 | httplib2.Http().AndReturn(self.mock_http) | 269 | self.addCleanup(patcher.stop) |
261 | 295 | self.mock_http.request(mirror + base + 'example_1.0-1.dsc' | 270 | mock_gpg_info = patcher.start() |
262 | 296 | ).WithSideEffects(self.request_proxy) | 271 | mock_gpg_info.return_value = debian.deb822.GpgInfo.from_output( |
263 | 297 | url_opener = self.mox.CreateMock(urllib2.OpenerDirector) | 272 | '[GNUPG:] GOODSIG DEADBEEF Joe Developer ' |
264 | 298 | url_opener.open(mirror + base + 'example_1.0.orig.tar.gz' | 273 | '<joe@example.net>') |
240 | 299 | ).WithSideEffects(self.urlopen_proxy) | ||
241 | 300 | url_opener.open(mirror + base + 'example_1.0-1.debian.tar.xz' | ||
242 | 301 | ).WithSideEffects(self.urlopen_proxy) | ||
243 | 302 | |||
244 | 303 | def fake_gpg_info(self, message, keyrings=None): | ||
245 | 304 | return debian.deb822.GpgInfo.from_output( | ||
246 | 305 | '[GNUPG:] GOODSIG DEADBEEF Joe Developer ' | ||
247 | 306 | '<joe@example.net>') | ||
248 | 307 | # We have to stub this out without mox because there some versions of | ||
249 | 308 | # python-debian will pass keyrings=None, others won't. | ||
250 | 309 | # http://code.google.com/p/pymox/issues/detail?id=37 | ||
251 | 310 | self.mox.stubs.Set(debian.deb822.GpgInfo, 'from_sequence', | ||
252 | 311 | types.MethodType(fake_gpg_info, | ||
253 | 312 | debian.deb822.GpgInfo, | ||
254 | 313 | debian.deb822.GpgInfo)) | ||
255 | 314 | |||
256 | 315 | self.mox.ReplayAll() | ||
265 | 316 | 274 | ||
266 | 317 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 275 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
267 | 318 | workdir=self.workdir, mirrors=[mirror]) | 276 | workdir=self.workdir, mirrors=[mirror]) |
269 | 319 | pkg.url_opener = url_opener | 277 | pkg.url_opener = self.url_opener |
270 | 320 | pkg.pull() | 278 | pkg.pull() |
271 | 321 | 279 | ||
272 | 322 | def test_dsc_badsig(self): | 280 | def test_dsc_badsig(self): |
273 | 323 | mirror = 'http://mirror' | 281 | mirror = 'http://mirror' |
274 | 324 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' | 282 | lpbase = 'https://launchpad.net/debian/+archive/primary/+files/' |
275 | 325 | base = '/pool/main/e/example/' | 283 | base = '/pool/main/e/example/' |
296 | 326 | httplib2.Http().AndReturn(self.mock_http) | 284 | self.mock_http.side_effect = self.request_404_then_proxy |
297 | 327 | self.mock_http.request(lpbase + 'example_1.0-1.dsc' | 285 | |
298 | 328 | ).WithSideEffects(self.request_404) | 286 | patcher = mock.patch.object(debian.deb822.GpgInfo, 'from_sequence') |
299 | 329 | httplib2.Http().AndReturn(self.mock_http) | 287 | self.addCleanup(patcher.stop) |
300 | 330 | self.mock_http.request(mirror + base + 'example_1.0-1.dsc' | 288 | mock_gpg_info = patcher.start() |
301 | 331 | ).WithSideEffects(self.request_proxy) | 289 | mock_gpg_info.return_value = debian.deb822.GpgInfo.from_output( |
302 | 332 | 290 | '[GNUPG:] ERRSIG DEADBEEF') | |
303 | 333 | def fake_gpg_info(self, message, keyrings=None): | 291 | |
284 | 334 | return debian.deb822.GpgInfo.from_output( | ||
285 | 335 | '[GNUPG:] ERRSIG DEADBEEF') | ||
286 | 336 | # We have to stub this out without mox because there some versions of | ||
287 | 337 | # python-debian will pass keyrings=None, others won't. | ||
288 | 338 | # http://code.google.com/p/pymox/issues/detail?id=37 | ||
289 | 339 | self.mox.stubs.Set(debian.deb822.GpgInfo, 'from_sequence', | ||
290 | 340 | types.MethodType(fake_gpg_info, | ||
291 | 341 | debian.deb822.GpgInfo, | ||
292 | 342 | debian.deb822.GpgInfo)) | ||
293 | 343 | |||
294 | 344 | self.mox.ReplayAll() | ||
295 | 345 | |||
304 | 346 | pkg = self.SourcePackage('example', '1.0-1', 'main', | 292 | pkg = self.SourcePackage('example', '1.0-1', 'main', |
305 | 347 | workdir=self.workdir, mirrors=[mirror]) | 293 | workdir=self.workdir, mirrors=[mirror]) |
306 | 348 | self.assertRaises(ubuntutools.archive.DownloadError, pkg.pull) | 294 | self.assertRaises(ubuntutools.archive.DownloadError, pkg.pull) |
307 | 349 | 295 | ||
308 | === modified file 'ubuntutools/test/test_config.py' | |||
309 | --- ubuntutools/test/test_config.py 2013-05-15 00:18:50 +0000 | |||
310 | +++ ubuntutools/test/test_config.py 2014-12-16 09:17:30 +0000 | |||
311 | @@ -19,15 +19,16 @@ | |||
312 | 19 | import os | 19 | import os |
313 | 20 | import sys | 20 | import sys |
314 | 21 | import locale | 21 | import locale |
315 | 22 | from io import BytesIO | ||
316 | 22 | from StringIO import StringIO | 23 | from StringIO import StringIO |
317 | 23 | 24 | ||
319 | 24 | import mox | 25 | import mock |
320 | 25 | 26 | ||
321 | 26 | from ubuntutools.config import UDTConfig, ubu_email | 27 | from ubuntutools.config import UDTConfig, ubu_email |
322 | 27 | from ubuntutools.logger import Logger | 28 | from ubuntutools.logger import Logger |
323 | 28 | from ubuntutools.test import unittest | 29 | from ubuntutools.test import unittest |
324 | 29 | 30 | ||
326 | 30 | class ConfigTestCase(mox.MoxTestBase, unittest.TestCase): | 31 | class ConfigTestCase(unittest.TestCase): |
327 | 31 | _config_files = { | 32 | _config_files = { |
328 | 32 | 'system': '', | 33 | 'system': '', |
329 | 33 | 'user': '', | 34 | 'user': '', |
330 | @@ -42,11 +43,16 @@ | |||
331 | 42 | } | 43 | } |
332 | 43 | if filename not in files: | 44 | if filename not in files: |
333 | 44 | raise IOError("No such file or directory: '%s'" % filename) | 45 | raise IOError("No such file or directory: '%s'" % filename) |
335 | 45 | return StringIO(files[filename]) | 46 | return BytesIO(files[filename]) |
336 | 46 | 47 | ||
337 | 47 | def setUp(self): | 48 | def setUp(self): |
338 | 48 | super(ConfigTestCase, self).setUp() | 49 | super(ConfigTestCase, self).setUp() |
340 | 49 | self.mox.stubs.Set(__builtin__, 'open', self._fake_open) | 50 | m = mock.mock_open() |
341 | 51 | m.side_effect = self._fake_open | ||
342 | 52 | patcher = mock.patch('__builtin__.open', m) | ||
343 | 53 | self.addCleanup(patcher.stop) | ||
344 | 54 | patcher.start() | ||
345 | 55 | |||
346 | 50 | Logger.stdout = StringIO() | 56 | Logger.stdout = StringIO() |
347 | 51 | Logger.stderr = StringIO() | 57 | Logger.stderr = StringIO() |
348 | 52 | 58 | ||
349 | 53 | 59 | ||
350 | === modified file 'ubuntutools/test/test_pylint.py' | |||
351 | --- ubuntutools/test/test_pylint.py 2011-06-24 14:32:07 +0000 | |||
352 | +++ ubuntutools/test/test_pylint.py 2014-12-16 09:17:30 +0000 | |||
353 | @@ -25,9 +25,6 @@ | |||
354 | 25 | r"No name '\w+Error' in module 'launchpadlib\.errors'", | 25 | r"No name '\w+Error' in module 'launchpadlib\.errors'", |
355 | 26 | # http://www.logilab.org/ticket/51250: | 26 | # http://www.logilab.org/ticket/51250: |
356 | 27 | r"Module 'hashlib' has no '(md5|sha(1|224|256|384|512))' member", | 27 | r"Module 'hashlib' has no '(md5|sha(1|224|256|384|512))' member", |
357 | 28 | # mox: | ||
358 | 29 | r"Instance of '.+' has no '(WithSideEffects|MultipleTimes|AndReturn)' " | ||
359 | 30 | r"member", | ||
360 | 31 | # pylint doesn't like *args/**kwargs | 28 | # pylint doesn't like *args/**kwargs |
361 | 32 | r"Instance of 'Popen' has no '.*' member", | 29 | r"Instance of 'Popen' has no '.*' member", |
362 | 33 | )] | 30 | )] |
363 | 34 | 31 | ||
364 | === modified file 'ubuntutools/test/test_update_maintainer.py' | |||
365 | --- ubuntutools/test/test_update_maintainer.py 2013-03-18 23:18:02 +0000 | |||
366 | +++ ubuntutools/test/test_update_maintainer.py 2014-12-16 09:17:30 +0000 | |||
367 | @@ -21,7 +21,7 @@ | |||
368 | 21 | import StringIO | 21 | import StringIO |
369 | 22 | import sys | 22 | import sys |
370 | 23 | 23 | ||
372 | 24 | import mox | 24 | import mock |
373 | 25 | 25 | ||
374 | 26 | from ubuntutools.logger import Logger | 26 | from ubuntutools.logger import Logger |
375 | 27 | from ubuntutools.test import unittest | 27 | from ubuntutools.test import unittest |
376 | @@ -186,7 +186,7 @@ | |||
377 | 186 | """ | 186 | """ |
378 | 187 | 187 | ||
379 | 188 | #pylint: disable=R0904 | 188 | #pylint: disable=R0904 |
381 | 189 | class UpdateMaintainerTestCase(mox.MoxTestBase, unittest.TestCase): | 189 | class UpdateMaintainerTestCase(unittest.TestCase): |
382 | 190 | """TestCase object for ubuntutools.update_maintainer""" | 190 | """TestCase object for ubuntutools.update_maintainer""" |
383 | 191 | 191 | ||
384 | 192 | _directory = "/" | 192 | _directory = "/" |
385 | @@ -216,9 +216,15 @@ | |||
386 | 216 | 216 | ||
387 | 217 | #pylint: disable=C0103 | 217 | #pylint: disable=C0103 |
388 | 218 | def setUp(self): | 218 | def setUp(self): |
392 | 219 | super(UpdateMaintainerTestCase, self).setUp() | 219 | m = mock.mock_open() |
393 | 220 | self.mox.stubs.Set(__builtin__, 'open', self._fake_open) | 220 | m.side_effect = self._fake_open |
394 | 221 | self.mox.stubs.Set(os.path, 'isfile', self._fake_isfile) | 221 | patcher = mock.patch('__builtin__.open', m) |
395 | 222 | self.addCleanup(patcher.stop) | ||
396 | 223 | patcher.start() | ||
397 | 224 | m = mock.MagicMock(side_effect=self._fake_isfile) | ||
398 | 225 | patcher = mock.patch('os.path.isfile', m) | ||
399 | 226 | self.addCleanup(patcher.stop) | ||
400 | 227 | patcher.start() | ||
401 | 222 | self._files["rules"] = StringIO.StringIO(_SIMPLE_RULES) | 228 | self._files["rules"] = StringIO.StringIO(_SIMPLE_RULES) |
402 | 223 | Logger.stdout = StringIO.StringIO() | 229 | Logger.stdout = StringIO.StringIO() |
403 | 224 | Logger.stderr = StringIO.StringIO() | 230 | Logger.stderr = StringIO.StringIO() |
This appears to have been merged already.