2 from basetest
import BaseTest
, empty_feed
3 import sys
, os
, tempfile
4 from StringIO
import StringIO
7 sys
.path
.insert(0, '..')
8 from zeroinstall
.injector
import distro
, model
, qdom
10 def parse_impls(impls
, test_distro
):
11 xml
= """<?xml version="1.0" ?>
12 <interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
14 <summary>Foo</summary>
15 <description>Foo</description>
17 </interface>""" % impls
18 element
= qdom
.parse(StringIO(xml
))
19 return model
.ZeroInstallFeed(element
, "myfeed.xml", test_distro
)
21 class TestDistro(BaseTest
):
24 self
.feed
= model
.ZeroInstallFeed(empty_feed
, local_path
= '/empty.xml')
27 BaseTest
.tearDown(self
)
30 src
= tempfile
.NamedTemporaryFile()
32 cache
= distro
.Cache('test-cache', src
.name
)
33 self
.assertEquals(None, cache
.get("foo"))
35 self
.assertEquals("1", cache
.get("foo"))
37 self
.assertEquals("2", cache
.get("foo"))
40 cache
= distro
.Cache('test-cache', src
.name
)
41 self
.assertEquals("2", cache
.get("foo"))
46 self
.assertEquals("2", cache
.get("foo"))
49 cache
= distro
.Cache('test-cache', src
.name
)
50 self
.assertEquals(None, cache
.get("foo"))
55 def factory(self
, id):
56 impl
= model
.DistributionImplementation(self
.feed
, id)
57 assert id not in self
.feed
.implementations
58 self
.feed
.implementations
[id] = impl
61 def testDefault(self
):
62 host
= distro
.Distribution()
64 host
.get_package_info('gimp', self
.factory
)
65 self
.assertEquals(self
.feed
.implementations
, {})
68 dpkgdir
= os
.path
.join(os
.path
.dirname(__file__
), 'dpkg')
69 host
= distro
.DebianDistribution(
70 os
.path
.join(dpkgdir
, 'status'),
71 os
.path
.join(dpkgdir
, 'pkgcache.bin'))
73 self
.assertEquals(2, len(host
.versions
))
75 host
.get_package_info('gimp', self
.factory
)
76 self
.assertEquals({}, self
.feed
.implementations
)
78 host
.get_package_info('python-bittorrent', self
.factory
)
79 self
.assertEquals(2, len(self
.feed
.implementations
))
80 bittorrent_installed
= self
.feed
.implementations
['package:deb:python-bittorrent:3.4.2-10']
81 bittorrent_uninstalled
= self
.feed
.implementations
['package:deb:python-bittorrent:3.4.2-11.1']
82 self
.assertEquals('3.4.2-10', bittorrent_installed
.get_version())
83 self
.assertTrue(bittorrent_installed
.installed
)
84 self
.assertFalse(bittorrent_uninstalled
.installed
)
85 self
.assertEquals(None, bittorrent_installed
.machine
)
87 self
.feed
= model
.ZeroInstallFeed(empty_feed
, local_path
= '/empty.xml')
88 host
.get_package_info('libxcomposite-dev', self
.factory
)
89 self
.assertEquals(1, len(self
.feed
.implementations
))
90 libxcomposite
= self
.feed
.implementations
['package:deb:libxcomposite-dev:0.3.1-1']
91 self
.assertEquals('0.3.1-1', libxcomposite
.get_version())
92 self
.assertEquals('i386', libxcomposite
.machine
)
95 rpmdir
= os
.path
.join(os
.path
.dirname(__file__
), 'rpm')
96 os
.environ
['PATH'] = rpmdir
+ ':' + self
.old_path
97 rpm
= distro
.RPMDistribution(os
.path
.join(rpmdir
, 'status'))
99 self
.assertEquals(2, len(rpm
.versions
))
101 rpm
.get_package_info('yast2-update', self
.factory
)
102 self
.assertEquals(1, len(self
.feed
.implementations
))
103 yast
= self
.feed
.implementations
['package:rpm:yast2-update:2.15.23-21:i586']
104 self
.assertEquals('2.15.23-21', yast
.get_version())
105 self
.assertEquals('*-i586', yast
.arch
)
107 impls
= parse_impls("""
108 <package-implementation distributions="Debian" package="yast2-mail"/>
109 <package-implementation distributions="RPM" package="yast2-update"/>
110 """, rpm
).implementations
111 assert len(impls
) == 1, impls
113 assert impl
== 'package:rpm:yast2-update:2.15.23-21:i586'
115 impls
= parse_impls("""
116 <package-implementation distributions="RPM" package="yast2-mail"/>
117 <package-implementation distributions="RPM" package="yast2-update"/>
118 """, rpm
).implementations
119 assert len(impls
) == 2, impls
121 impls
= parse_impls("""
122 <package-implementation distributions="" package="yast2-mail"/>
123 <package-implementation package="yast2-update"/>
124 """, rpm
).implementations
125 assert len(impls
) == 2, impls
127 def testGentoo(self
):
128 pkgdir
= os
.path
.join(os
.path
.dirname(__file__
), 'gentoo')
129 ebuilds
= distro
.GentooDistribution(pkgdir
)
131 ebuilds
.get_package_info('media-gfx/gimp', self
.factory
)
132 self
.assertEquals({}, self
.feed
.implementations
)
134 ebuilds
.get_package_info('sys-apps/portage', self
.factory
)
135 self
.assertEquals(1, len(self
.feed
.implementations
))
136 impl
= self
.feed
.implementations
['package:gentoo:sys-apps/portage:2.1.7.16:x86_64']
137 self
.assertEquals('2.1.7.16', impl
.get_version())
139 ebuilds
.get_package_info('sys-kernel/gentoo-sources', self
.factory
)
140 self
.assertEquals(3, len(self
.feed
.implementations
))
141 impl
= self
.feed
.implementations
['package:gentoo:sys-kernel/gentoo-sources:2.6.30-4:i686']
142 self
.assertEquals('2.6.30-4', impl
.get_version())
143 impl
= self
.feed
.implementations
['package:gentoo:sys-kernel/gentoo-sources:2.6.32:x86_64']
144 self
.assertEquals('2.6.32', impl
.get_version())
146 def testCleanVersion(self
):
147 self
.assertEquals('1', distro
.try_cleanup_distro_version('1:0.3.1-1'))
148 self
.assertEquals('0.3.1-1', distro
.try_cleanup_distro_version('0.3.1-1ubuntu0'))
149 self
.assertEquals('0.3-post1-rc2', distro
.try_cleanup_distro_version('0.3-post1-rc2'))
150 self
.assertEquals('0.3.1-2', distro
.try_cleanup_distro_version('0.3.1-r2-r3'))
152 if __name__
== '__main__':