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 testAcceptKey(self
):
75 sys
.stdout
= StringIO()
76 self
.child
= server
.handle_requests('Hello', '6FCF121BE2390E0B.gpg', 'HelloWorld.tgz')
77 policy
= autopolicy
.AutoPolicy('http://localhost:8000/Hello', download_only
= False)
78 assert policy
.need_download()
79 sys
.stdin
= Reply("Y\n")
81 policy
.download_and_execute(['Hello'], main
= 'Missing')
83 except model
.SafeException
, ex
:
84 if "HelloWorld/Missing" not in str(ex
):
92 sys
.stdout
= StringIO()
93 self
.child
= server
.handle_requests(('HelloWorld.tar.bz2', 'dummy_1-1_all.deb'))
94 policy
= autopolicy
.AutoPolicy(os
.path
.abspath('Recipe.xml'), download_only
= False)
96 policy
.download_and_execute([])
98 except model
.SafeException
, ex
:
99 if "HelloWorld/Missing" not in str(ex
):
104 def testAutopackage(self
):
107 sys
.stdout
= StringIO()
108 self
.child
= server
.handle_requests('HelloWorld.autopackage')
109 policy
= autopolicy
.AutoPolicy(os
.path
.abspath('Autopackage.xml'), download_only
= False)
111 policy
.download_and_execute([])
113 except model
.SafeException
, ex
:
114 if "HelloWorld/Missing" not in str(ex
):
119 def testRecipeFailure(self
):
122 sys
.stdout
= StringIO()
123 self
.child
= server
.handle_requests('HelloWorld.tar.bz2')
124 policy
= autopolicy
.AutoPolicy(os
.path
.abspath('Recipe.xml'), download_only
= False)
126 policy
.download_and_execute([])
128 except download
.DownloadError
, ex
:
129 if "Connection" not in str(ex
):
134 suite
= unittest
.makeSuite(TestDownload
)
135 if __name__
== '__main__':
136 sys
.argv
.append('-v')