1 #!/usr/bin/env python2.3
2 import sys
, tempfile
, os
, shutil
, logging
3 from StringIO
import StringIO
5 from logging
import getLogger
, DEBUG
, INFO
7 sys
.path
.insert(0, '..')
9 from zeroinstall
import NeedDownload
10 from zeroinstall
.injector
import model
, basedir
, autopolicy
, gpg
, iface_cache
, namespaces
, reader
14 foo_iface_uri
= 'http://foo'
15 bar_iface_uri
= 'http://localhost/bar'
17 logger
= logging
.getLogger()
19 config_home
= tempfile
.mktemp()
20 cache_home
= tempfile
.mktemp()
21 os
.environ
['XDG_CONFIG_HOME'] = config_home
22 os
.environ
['XDG_CACHE_HOME'] = cache_home
24 assert not os
.path
.exists(config_home
)
26 class TestReader(unittest
.TestCase
):
28 assert not os
.path
.exists(config_home
)
29 os
.mkdir(config_home
, 0700)
30 os
.mkdir(cache_home
, 0700)
31 if os
.environ
.has_key('DISPLAY'):
32 del os
.environ
['DISPLAY']
33 self
.gnupg_home
= tempfile
.mktemp()
34 os
.environ
['GNUPGHOME'] = self
.gnupg_home
35 os
.mkdir(self
.gnupg_home
, 0700)
36 stream
= tempfile
.TemporaryFile()
37 stream
.write(data
.thomas_key
)
39 gpg
.import_key(stream
)
40 iface_cache
.iface_cache
._interfaces
= {}
43 shutil
.rmtree(config_home
)
44 shutil
.rmtree(cache_home
)
45 shutil
.rmtree(self
.gnupg_home
)
47 def write_with_version(self
, version
):
48 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
50 """<?xml version="1.0" ?>
51 <interface last-modified="1110752708"
53 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
55 <summary>Foo</summary>
56 <description>Foo</description>
57 </interface>""" % (foo_iface_uri
, version
))
61 def testNoVersion(self
):
62 tmp
= self
.write_with_version('')
63 reader
.check_readable(foo_iface_uri
, tmp
.name
)
65 def testNewEnough(self
):
66 tmp
= self
.write_with_version('min-injector-version="0.19"')
67 reader
.check_readable(foo_iface_uri
, tmp
.name
)
70 tmp
= self
.write_with_version('min-injector-version="1000"')
72 reader
.check_readable(foo_iface_uri
, tmp
.name
)
73 except reader
.InvalidInterface
, ex
:
74 assert "1000" in str(ex
)
76 def testRequiresVersion(self
):
77 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
79 """<?xml version="1.0" ?>
80 <interface last-modified="1110752708"
82 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
84 <summary>Foo</summary>
85 <description>Foo</description>
87 <requires interface='%s' min-version='2.3.4' max-version='3.4.5'/>
88 <requires interface='%s2'/>
89 <implementation id='sha1=123' version='1'/>
91 </interface>""" % (foo_iface_uri
, bar_iface_uri
, bar_iface_uri
))
93 iface
= model
.Interface(foo_iface_uri
)
94 reader
.update(iface
, tmp
.name
)
95 impl
= iface
.implementations
['sha1=123']
96 assert len(impl
.dependencies
) == 2
97 dep
= impl
.dependencies
[bar_iface_uri
]
98 assert dep
.min_version
== [2, 3, 4]
99 assert dep
.max_version
== [3, 4, 5]
100 dep2
= impl
.dependencies
[bar_iface_uri
+ '2']
101 assert dep2
.min_version
is None
102 assert dep2
.max_version
is None
106 suite
= unittest
.makeSuite(TestReader
)
107 if __name__
== '__main__':
108 sys
.argv
.append('-v')