mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-13 08:01:09 +00:00
Make ubuntutools.archive a little more testable, by making its urlopener an
instance property. Replace these with mocks, as needed, rather than mocking out urllib2.urlopen. Makes the test suite pass again.
This commit is contained in:
parent
872957da4e
commit
52fc42ca8f
@ -154,6 +154,10 @@ class SourcePackage(object):
|
|||||||
|
|
||||||
self.version = debian.debian_support.Version(version)
|
self.version = debian.debian_support.Version(version)
|
||||||
|
|
||||||
|
# uses default proxies from the environment
|
||||||
|
proxy = urllib2.ProxyHandler()
|
||||||
|
self.url_opener = urllib2.build_opener(proxy)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lp_spph(self):
|
def lp_spph(self):
|
||||||
"Return the LP Source Package Publishing History entry"
|
"Return the LP Source Package Publishing History entry"
|
||||||
@ -317,11 +321,8 @@ class SourcePackage(object):
|
|||||||
if parsed.scheme == 'file':
|
if parsed.scheme == 'file':
|
||||||
in_ = open(parsed.path, 'r')
|
in_ = open(parsed.path, 'r')
|
||||||
else:
|
else:
|
||||||
# uses default proxy from environment
|
|
||||||
proxy = urllib2.ProxyHandler()
|
|
||||||
opener = urllib2.build_opener(proxy)
|
|
||||||
try:
|
try:
|
||||||
in_ = opener.open(url)
|
in_ = self.url_opener.open(url)
|
||||||
except urllib2.URLError:
|
except urllib2.URLError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -499,7 +500,7 @@ class DebianSourcePackage(SourcePackage):
|
|||||||
"python-simplejson")
|
"python-simplejson")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
srcfiles = json.load(urllib2.urlopen(
|
srcfiles = json.load(self.url_opener.open(
|
||||||
'http://snapshot.debian.org'
|
'http://snapshot.debian.org'
|
||||||
'/mr/package/%s/%s/srcfiles?fileinfo=1'
|
'/mr/package/%s/%s/srcfiles?fileinfo=1'
|
||||||
% (self.source, self.version.full_version)))
|
% (self.source, self.version.full_version)))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# test_archive.py - Test suite for ubuntutools.archive
|
# test_archive.py - Test suite for ubuntutools.archive
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010, Stefano Rivera <stefanor@ubuntu.com>
|
# Copyright (C) 2010-2012, Stefano Rivera <stefanor@ubuntu.com>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for any
|
# Permission to use, copy, modify, and/or distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
@ -36,6 +36,7 @@ from ubuntutools.test import unittest
|
|||||||
|
|
||||||
from ubuntutools.test.example_package import ExamplePackage
|
from ubuntutools.test.example_package import ExamplePackage
|
||||||
|
|
||||||
|
|
||||||
def setUpModule():
|
def setUpModule():
|
||||||
if not os.path.exists('test-data/example-0.1-1.dsc'):
|
if not os.path.exists('test-data/example-0.1-1.dsc'):
|
||||||
ex_pkg = ExamplePackage()
|
ex_pkg = ExamplePackage()
|
||||||
@ -67,7 +68,7 @@ class DscVerificationTestCase(mox.MoxTestBase, unittest.TestCase):
|
|||||||
fn = 'test-data/example_1.0.orig.tar.gz'
|
fn = 'test-data/example_1.0.orig.tar.gz'
|
||||||
with open(fn, 'rb') as f:
|
with open(fn, 'rb') as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
data = data[:-1] + chr(ord(data[-1]) ^ 8)
|
data = data[:-1] + chr(ord(data[-1]) ^ 8)
|
||||||
self.mox.StubOutWithMock(__builtin__, 'open')
|
self.mox.StubOutWithMock(__builtin__, 'open')
|
||||||
open(fn, 'rb').AndReturn(StringIO.StringIO(data))
|
open(fn, 'rb').AndReturn(StringIO.StringIO(data))
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -95,9 +96,6 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase):
|
|||||||
self.mox.StubOutWithMock(ubuntutools.archive, 'Distribution')
|
self.mox.StubOutWithMock(ubuntutools.archive, 'Distribution')
|
||||||
self.mox.StubOutWithMock(ubuntutools.archive, 'rmadison')
|
self.mox.StubOutWithMock(ubuntutools.archive, 'rmadison')
|
||||||
|
|
||||||
self.real_urlopen = urllib2.urlopen
|
|
||||||
self.mox.StubOutWithMock(urllib2, 'urlopen')
|
|
||||||
|
|
||||||
self.real_http = httplib2.Http()
|
self.real_http = httplib2.Http()
|
||||||
self.mox.StubOutWithMock(httplib2, 'Http')
|
self.mox.StubOutWithMock(httplib2, 'Http')
|
||||||
self.mock_http = self.mox.CreateMock(httplib2.Http)
|
self.mock_http = self.mox.CreateMock(httplib2.Http)
|
||||||
@ -115,7 +113,7 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase):
|
|||||||
if destname is None:
|
if destname is None:
|
||||||
destname = os.path.basename(url)
|
destname = os.path.basename(url)
|
||||||
destpath = os.path.join(os.path.abspath('test-data'), destname)
|
destpath = os.path.join(os.path.abspath('test-data'), destname)
|
||||||
return self.real_urlopen('file://' + destpath)
|
return urllib2.urlopen('file://' + destpath)
|
||||||
|
|
||||||
def urlopen_file(self, filename):
|
def urlopen_file(self, filename):
|
||||||
"Wrapper for urlopen_proxy for named files"
|
"Wrapper for urlopen_proxy for named files"
|
||||||
@ -195,14 +193,16 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase):
|
|||||||
self.mock_http.request('https://launchpad.net/%s/+archive/primary/'
|
self.mock_http.request('https://launchpad.net/%s/+archive/primary/'
|
||||||
'+files/example_1.0-1.dsc' % dist
|
'+files/example_1.0-1.dsc' % dist
|
||||||
).WithSideEffects(self.request_proxy)
|
).WithSideEffects(self.request_proxy)
|
||||||
urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz'
|
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
|
||||||
|
url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
|
url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
||||||
workdir=self.workdir)
|
workdir=self.workdir)
|
||||||
|
pkg.url_opener = url_opener
|
||||||
pkg.pull()
|
pkg.pull()
|
||||||
|
|
||||||
def test_mirrors(self):
|
def test_mirrors(self):
|
||||||
@ -213,18 +213,20 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase):
|
|||||||
httplib2.Http().AndReturn(self.mock_http)
|
httplib2.Http().AndReturn(self.mock_http)
|
||||||
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
|
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
|
||||||
).WithSideEffects(self.request_proxy)
|
).WithSideEffects(self.request_proxy)
|
||||||
urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz'
|
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
|
||||||
|
url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_null)
|
).WithSideEffects(self.urlopen_null)
|
||||||
urllib2.urlopen(master + urlbase + 'example_1.0.orig.tar.gz'
|
url_opener.open(master + urlbase + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_404)
|
).WithSideEffects(self.urlopen_404)
|
||||||
urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz'
|
url_opener.open(lpbase + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
|
url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
||||||
workdir=self.workdir, mirrors=[mirror])
|
workdir=self.workdir, mirrors=[mirror])
|
||||||
|
pkg.url_opener = url_opener
|
||||||
pkg.pull()
|
pkg.pull()
|
||||||
|
|
||||||
def test_dsc_missing(self):
|
def test_dsc_missing(self):
|
||||||
@ -253,31 +255,33 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase):
|
|||||||
httplib2.Http().AndReturn(self.mock_http)
|
httplib2.Http().AndReturn(self.mock_http)
|
||||||
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
|
self.mock_http.request(lpbase + 'example_1.0-1.dsc'
|
||||||
).WithSideEffects(self.request_proxy)
|
).WithSideEffects(self.request_proxy)
|
||||||
urllib2.urlopen(debian_mirror + base + 'example_1.0.orig.tar.gz'
|
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
|
||||||
|
url_opener.open(debian_mirror + base + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_null)
|
).WithSideEffects(self.urlopen_null)
|
||||||
urllib2.urlopen(debsec_mirror + base + 'example_1.0.orig.tar.gz'
|
url_opener.open(debsec_mirror + base + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_404)
|
).WithSideEffects(self.urlopen_404)
|
||||||
urllib2.urlopen(debian_master + base + 'example_1.0.orig.tar.gz'
|
url_opener.open(debian_master + base + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_404)
|
).WithSideEffects(self.urlopen_404)
|
||||||
urllib2.urlopen(debsec_master + base + 'example_1.0.orig.tar.gz'
|
url_opener.open(debsec_master + base + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_404)
|
).WithSideEffects(self.urlopen_404)
|
||||||
urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz'
|
url_opener.open(lpbase + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_404)
|
).WithSideEffects(self.urlopen_404)
|
||||||
urllib2.urlopen('http://snapshot.debian.org/mr/package/example/1.0-1/'
|
url_opener.open('http://snapshot.debian.org/mr/package/example/1.0-1/'
|
||||||
'srcfiles?fileinfo=1'
|
'srcfiles?fileinfo=1'
|
||||||
).WithSideEffects(lambda x: StringIO.StringIO(
|
).WithSideEffects(lambda x: StringIO.StringIO(
|
||||||
'{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}'
|
'{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}'
|
||||||
))
|
))
|
||||||
urllib2.urlopen('http://snapshot.debian.org/file/hashabc'
|
url_opener.open('http://snapshot.debian.org/file/hashabc'
|
||||||
).WithSideEffects(self.urlopen_file(
|
).WithSideEffects(self.urlopen_file(
|
||||||
'example_1.0.orig.tar.gz'))
|
'example_1.0.orig.tar.gz'))
|
||||||
urllib2.urlopen(debian_mirror + base + 'example_1.0-1.debian.tar.gz'
|
url_opener.open(debian_mirror + base + 'example_1.0-1.debian.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
||||||
workdir=self.workdir, mirrors=[debian_mirror,
|
workdir=self.workdir, mirrors=[debian_mirror,
|
||||||
debsec_mirror])
|
debsec_mirror])
|
||||||
|
pkg.url_opener = url_opener
|
||||||
pkg.pull()
|
pkg.pull()
|
||||||
pkg.unpack()
|
pkg.unpack()
|
||||||
|
|
||||||
@ -291,9 +295,10 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase):
|
|||||||
httplib2.Http().AndReturn(self.mock_http)
|
httplib2.Http().AndReturn(self.mock_http)
|
||||||
self.mock_http.request(mirror + base + 'example_1.0-1.dsc'
|
self.mock_http.request(mirror + base + 'example_1.0-1.dsc'
|
||||||
).WithSideEffects(self.request_proxy)
|
).WithSideEffects(self.request_proxy)
|
||||||
urllib2.urlopen(mirror + base + 'example_1.0.orig.tar.gz'
|
url_opener = self.mox.CreateMock(urllib2.OpenerDirector)
|
||||||
|
url_opener.open(mirror + base + 'example_1.0.orig.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
urllib2.urlopen(mirror + base + 'example_1.0-1.debian.tar.gz'
|
url_opener.open(mirror + base + 'example_1.0-1.debian.tar.gz'
|
||||||
).WithSideEffects(self.urlopen_proxy)
|
).WithSideEffects(self.urlopen_proxy)
|
||||||
|
|
||||||
def fake_gpg_info(self, message, keyrings=None):
|
def fake_gpg_info(self, message, keyrings=None):
|
||||||
@ -312,6 +317,7 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase):
|
|||||||
|
|
||||||
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
pkg = self.SourcePackage('example', '1.0-1', 'main',
|
||||||
workdir=self.workdir, mirrors=[mirror])
|
workdir=self.workdir, mirrors=[mirror])
|
||||||
|
pkg.url_opener = url_opener
|
||||||
pkg.pull()
|
pkg.pull()
|
||||||
|
|
||||||
def test_dsc_badsig(self):
|
def test_dsc_badsig(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user