1
1
# test_archive.py - Test suite for ubuntutools.archive
3
# Copyright (C) 2010, Stefano Rivera <stefanor@ubuntu.com>
3
# Copyright (C) 2010-2012, Stefano Rivera <stefanor@ubuntu.com>
5
5
# Permission to use, copy, modify, and/or distribute this software for any
6
6
# purpose with or without fee is hereby granted, provided that the above
67
68
fn = 'test-data/example_1.0.orig.tar.gz'
68
69
with open(fn, 'rb') as f:
70
data = data[:-1] + chr(ord(data[-1]) ^ 8)
71
data = data[:-1] + chr(ord(data[-1]) ^ 8)
71
72
self.mox.StubOutWithMock(__builtin__, 'open')
72
73
open(fn, 'rb').AndReturn(StringIO.StringIO(data))
73
74
self.mox.ReplayAll()
95
96
self.mox.StubOutWithMock(ubuntutools.archive, 'Distribution')
96
97
self.mox.StubOutWithMock(ubuntutools.archive, 'rmadison')
98
self.real_urlopen = urllib2.urlopen
99
self.mox.StubOutWithMock(urllib2, 'urlopen')
101
99
self.real_http = httplib2.Http()
102
100
self.mox.StubOutWithMock(httplib2, 'Http')
103
101
self.mock_http = self.mox.CreateMock(httplib2.Http)
115
113
if destname is None:
116
114
destname = os.path.basename(url)
117
115
destpath = os.path.join(os.path.abspath('test-data'), destname)
118
return self.real_urlopen('file://' + destpath)
116
return urllib2.urlopen('file://' + destpath)
120
118
def urlopen_file(self, filename):
121
119
"Wrapper for urlopen_proxy for named files"
195
193
self.mock_http.request('https://launchpad.net/%s/+archive/primary/'
196
194
'+files/example_1.0-1.dsc' % dist
197
195
).WithSideEffects(self.request_proxy)
198
urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz'
196
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
197
url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz'
199
198
).WithSideEffects(self.urlopen_proxy)
200
urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
199
url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
201
200
).WithSideEffects(self.urlopen_proxy)
202
201
self.mox.ReplayAll()
204
203
pkg = self.SourcePackage('example', '1.0-1', 'main',
205
204
workdir=self.workdir)
205
pkg.url_opener = url_opener
208
208
def test_mirrors(self):
213
213
httplib2.Http().AndReturn(self.mock_http)
214
214
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
215
215
).WithSideEffects(self.request_proxy)
216
urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz'
216
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
217
url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz'
217
218
).WithSideEffects(self.urlopen_null)
218
urllib2.urlopen(master + urlbase + 'example_1.0.orig.tar.gz'
219
url_opener.open(master + urlbase + 'example_1.0.orig.tar.gz'
219
220
).WithSideEffects(self.urlopen_404)
220
urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz'
221
url_opener.open(lpbase + 'example_1.0.orig.tar.gz'
221
222
).WithSideEffects(self.urlopen_proxy)
222
urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
223
url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
223
224
).WithSideEffects(self.urlopen_proxy)
224
225
self.mox.ReplayAll()
226
227
pkg = self.SourcePackage('example', '1.0-1', 'main',
227
228
workdir=self.workdir, mirrors=[mirror])
229
pkg.url_opener = url_opener
230
232
def test_dsc_missing(self):
253
255
httplib2.Http().AndReturn(self.mock_http)
254
256
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
255
257
).WithSideEffects(self.request_proxy)
256
urllib2.urlopen(debian_mirror + base + 'example_1.0.orig.tar.gz'
258
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
259
url_opener.open(debian_mirror + base + 'example_1.0.orig.tar.gz'
257
260
).WithSideEffects(self.urlopen_null)
258
urllib2.urlopen(debsec_mirror + base + 'example_1.0.orig.tar.gz'
259
).WithSideEffects(self.urlopen_404)
260
urllib2.urlopen(debian_master + base + 'example_1.0.orig.tar.gz'
261
).WithSideEffects(self.urlopen_404)
262
urllib2.urlopen(debsec_master + base + 'example_1.0.orig.tar.gz'
263
).WithSideEffects(self.urlopen_404)
264
urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz'
265
).WithSideEffects(self.urlopen_404)
266
urllib2.urlopen('http://snapshot.debian.org/mr/package/example/1.0-1/'
261
url_opener.open(debsec_mirror + base + 'example_1.0.orig.tar.gz'
262
).WithSideEffects(self.urlopen_404)
263
url_opener.open(debian_master + base + 'example_1.0.orig.tar.gz'
264
).WithSideEffects(self.urlopen_404)
265
url_opener.open(debsec_master + base + 'example_1.0.orig.tar.gz'
266
).WithSideEffects(self.urlopen_404)
267
url_opener.open(lpbase + 'example_1.0.orig.tar.gz'
268
).WithSideEffects(self.urlopen_404)
269
url_opener.open('http://snapshot.debian.org/mr/package/example/1.0-1/'
267
270
'srcfiles?fileinfo=1'
268
271
).WithSideEffects(lambda x: StringIO.StringIO(
269
272
'{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}'
271
urllib2.urlopen('http://snapshot.debian.org/file/hashabc'
274
url_opener.open('http://snapshot.debian.org/file/hashabc'
272
275
).WithSideEffects(self.urlopen_file(
273
276
'example_1.0.orig.tar.gz'))
274
urllib2.urlopen(debian_mirror + base + 'example_1.0-1.debian.tar.gz'
277
url_opener.open(debian_mirror + base + 'example_1.0-1.debian.tar.gz'
275
278
).WithSideEffects(self.urlopen_proxy)
276
279
self.mox.ReplayAll()
278
281
pkg = self.SourcePackage('example', '1.0-1', 'main',
279
282
workdir=self.workdir, mirrors=[debian_mirror,
284
pkg.url_opener = url_opener
291
295
httplib2.Http().AndReturn(self.mock_http)
292
296
self.mock_http.request(mirror + base + 'example_1.0-1.dsc'
293
297
).WithSideEffects(self.request_proxy)
294
urllib2.urlopen(mirror + base + 'example_1.0.orig.tar.gz'
298
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
299
url_opener.open(mirror + base + 'example_1.0.orig.tar.gz'
295
300
).WithSideEffects(self.urlopen_proxy)
296
urllib2.urlopen(mirror + base + 'example_1.0-1.debian.tar.gz'
301
url_opener.open(mirror + base + 'example_1.0-1.debian.tar.gz'
297
302
).WithSideEffects(self.urlopen_proxy)
299
304
def fake_gpg_info(self, message, keyrings=None):
313
318
pkg = self.SourcePackage('example', '1.0-1', 'main',
314
319
workdir=self.workdir, mirrors=[mirror])
320
pkg.url_opener = url_opener
317
323
def test_dsc_badsig(self):