1
#!/usr/bin/env python2.3
2
import sys, tempfile, os, shutil
3
from StringIO import StringIO
4
import unittest, signal
5
from logging import getLogger, DEBUG, INFO
6
#getLogger().setLevel(DEBUG)
8
sys.path.insert(0, '..')
10
from zeroinstall.injector import model, basedir, autopolicy, gpg, iface_cache, download
16
def __init__(self, reply):
22
class TestDownload(unittest.TestCase):
24
self.config_home = tempfile.mktemp()
25
self.cache_home = tempfile.mktemp()
26
os.environ['XDG_CONFIG_HOME'] = self.config_home
27
os.environ['XDG_CACHE_HOME'] = self.cache_home
28
os.environ['XDG_CACHE_DIRS'] = ''
31
os.mkdir(self.config_home, 0700)
32
os.mkdir(self.cache_home, 0700)
33
if os.environ.has_key('DISPLAY'):
34
del os.environ['DISPLAY']
35
self.gnupg_home = tempfile.mktemp()
36
os.environ['GNUPGHOME'] = self.gnupg_home
37
os.mkdir(self.gnupg_home, 0700)
38
stream = tempfile.TemporaryFile()
39
stream.write(data.thomas_key)
41
gpg.import_key(stream)
42
iface_cache.iface_cache.__init__()
43
download._downloads = {}
47
if self.child is not None:
48
os.kill(self.child, signal.SIGTERM)
49
os.waitpid(self.child, 0)
51
shutil.rmtree(self.config_home)
52
shutil.rmtree(self.cache_home)
53
shutil.rmtree(self.gnupg_home)
55
def testRejectKey(self):
58
sys.stdout = StringIO()
59
self.child = server.handle_requests('Hello', '6FCF121BE2390E0B.gpg')
60
policy = autopolicy.AutoPolicy('http://localhost:8000/Hello', download_only = False)
61
assert policy.need_download()
62
sys.stdin = Reply("N\n")
64
policy.download_and_execute(['Hello'])
66
except model.SafeException, ex:
67
if "Not signed with a trusted key" not in str(ex):
72
def testRejectKeyXML(self):
75
sys.stdout = StringIO()
76
self.child = server.handle_requests('Hello.xml', '6FCF121BE2390E0B.gpg')
77
policy = autopolicy.AutoPolicy('http://localhost:8000/Hello.xml', download_only = False)
78
assert policy.need_download()
79
sys.stdin = Reply("N\n")
81
policy.download_and_execute(['Hello'])
83
except model.SafeException, ex:
84
if "Not signed with a trusted key" not in str(ex):
92
from zeroinstall.injector import cli
93
from zeroinstall.injector.trust import trust_db
94
sys.stdout = StringIO()
95
self.child = server.handle_requests('6FCF121BE2390E0B.gpg', 'HelloWorld.tgz')
96
sys.stdin = Reply("Y\n")
98
assert not trust_db.is_trusted('DE937DD411906ACF7C263B396FCF121BE2390E0B')
100
cli.main(['--import', 'Hello'])
102
except SystemExit, ex:
104
assert trust_db.is_trusted('DE937DD411906ACF7C263B396FCF121BE2390E0B')
105
# Shouldn't need to prompt the second time
108
cli.main(['--import', 'Hello'])
110
except SystemExit, ex:
112
except model.SafeException, ex:
113
if "HelloWorld/Missing" not in str(ex):
118
def testAcceptKey(self):
121
sys.stdout = StringIO()
122
self.child = server.handle_requests('Hello', '6FCF121BE2390E0B.gpg', 'HelloWorld.tgz')
123
policy = autopolicy.AutoPolicy('http://localhost:8000/Hello', download_only = False)
124
assert policy.need_download()
125
sys.stdin = Reply("Y\n")
127
policy.download_and_execute(['Hello'], main = 'Missing')
129
except model.SafeException, ex:
130
if "HelloWorld/Missing" not in str(ex):
135
def testRecipe(self):
138
sys.stdout = StringIO()
139
self.child = server.handle_requests(('HelloWorld.tar.bz2', 'dummy_1-1_all.deb'))
140
policy = autopolicy.AutoPolicy(os.path.abspath('Recipe.xml'), download_only = False)
142
policy.download_and_execute([])
144
except model.SafeException, ex:
145
if "HelloWorld/Missing" not in str(ex):
150
def testAutopackage(self):
153
sys.stdout = StringIO()
154
self.child = server.handle_requests('HelloWorld.autopackage')
155
policy = autopolicy.AutoPolicy(os.path.abspath('Autopackage.xml'), download_only = False)
157
policy.download_and_execute([])
159
except model.SafeException, ex:
160
if "HelloWorld/Missing" not in str(ex):
165
def testRecipeFailure(self):
168
sys.stdout = StringIO()
169
self.child = server.handle_requests('*')
170
policy = autopolicy.AutoPolicy(os.path.abspath('Recipe.xml'), download_only = False)
172
policy.download_and_execute([])
174
except download.DownloadError, ex:
175
if "Connection" not in str(ex):
180
suite = unittest.makeSuite(TestDownload)
181
if __name__ == '__main__':
182
sys.argv.append('-v')