2 from basetest
import BaseTest
6 sys
.path
.insert(0, '..')
7 from zeroinstall
.injector
import packagekit
, handler
, model
, fetch
8 from zeroinstall
.support
import tasks
19 return "/tid/%d" % self
.x
25 def connect_to_signal(self
, signal
, cb
):
26 self
.signals
[signal
] = cb
28 def get_dbus_method(self
, method
):
29 if hasattr(self
, method
):
30 return getattr(self
, method
)
31 raise dbus
.exceptions
.DBusException('org.freedesktop.DBus.Error.UnknownMethod')
33 def SetLocale(self
, locale
):
37 def Resolve(self
, query
, package_names
):
42 for package_name
in package_names
:
43 if package_name
== 'gimp':
45 self
.signals
['Package'](info
, "gimp;2.6.8-2ubuntu1.1;amd64;Ubuntu", "summary")
47 self
.signals
['Error']("package-not-found", "Package name %s could not be resolved" % package_name
)
50 self
.signals
['Finished'](result
, 100)
54 def GetDetails(self
, package_ids
):
58 for package_id
in package_ids
:
59 assert package_id
== "gimp;2.6.8-2ubuntu1.1;amd64;Ubuntu"
60 self
.signals
['Details'](package_id
, "GPL", "Graphics", "detail", "http://foo", 100)
63 self
.signals
['Finished']("success", 100)
67 def GetProgress(self
):
68 # %task, %sub-task, time-task, time-sub-task
69 return (50, 101, 351, 0)
71 def InstallPackages(self
, only_trusted
, package_ids
= None):
72 if package_ids
is None:
74 raise dbus
.exceptions
.DBusException('org.freedesktop.DBus.Error.UnknownMethod')
76 assert only_trusted
== False
80 for package_id
in package_ids
:
81 assert package_id
== "gimp;2.6.8-2ubuntu1.1;amd64;Ubuntu"
82 self
.signals
['StatusChanged']("setup")
84 # Unknown % for task and subtask
86 #self.signals['ProgressChanged'](101, 101, 0, 0)
90 #self.signals['ProgressChanged'](50, 101, 351, 0)
92 #self.signals['AllowCancel'](False)
93 self
.signals
['Package']("installing", "gimp;2.6.8-2ubuntu1.1;amd64;Ubuntu", "Graphics package")
97 #self.signals['ProgressChanged'](100, 101, 1351, 0)
98 self
.signals
['Package']("finished", "gimp;2.6.8-2ubuntu1.1;amd64;Ubuntu", "Graphics package")
101 self
.signals
['Finished']("success", 100)
104 class TestPackageKit(BaseTest
):
110 BaseTest
.tearDown(self
)
112 def find_module(self
, fullname
, path
=None):
113 if fullname
.startswith('dbus'):
114 raise ImportError("No (dummy) D-BUS")
118 def testNoDBUS(self
):
122 sys
.meta_path
= [self
]
123 del sys
.modules
['dbus']
127 pk
= packagekit
.PackageKit()
128 assert pk
.available
== False
130 factory
= Exception("not called")
131 pk
.get_candidates('gimp', factory
, 'package:null')
134 sys
.modules
['dbus'] = old_dbus
136 def testNoPackageKit(self
):
138 pk
= packagekit
.PackageKit()
139 assert not pk
.available
141 factory
= Exception("not called")
142 pk
.get_candidates('gimp', factory
, 'package:null')
144 def testPackageKit05(self
):
145 #import logging; logging.getLogger().setLevel(logging.DEBUG)
147 dbus
.system_services
['org.freedesktop.PackageKit'] = {
148 '/org/freedesktop/PackageKit': PackageKit05(),
149 '/tid/1': PackageKit05
.Tid1(),
150 '/tid/2': PackageKit05
.Tid2(),
151 '/tid/3': PackageKit05
.Install(),
154 pk
= packagekit
.PackageKit()
157 factory
= Exception("not called")
158 pk
.get_candidates('gimp', factory
, 'package:test')
160 blocker
= pk
.fetch_candidates(["gimp"])
161 h
.wait_for_blocker(blocker
)
165 def factory(impl_id
, only_if_missing
, installed
):
166 assert impl_id
.startswith('package:')
167 assert only_if_missing
is True
168 assert installed
is False
172 impl
= model
.DistributionImplementation(feed
, impl_id
, self
)
173 impl
.installed
= installed
174 impls
[impl_id
] = impl
177 pk
.get_candidates('gimp', factory
, 'package:test')
178 self
.assertEquals(["package:test:gimp:2.6.8-2:x86_64"], impls
.keys())
180 impl
, = impls
.values()
181 fetcher
= fetch
.Fetcher(handler
= h
)
182 b
= fetcher
.download_impl(impl
, impl
.download_sources
[0], stores
= None)
183 h
.wait_for_blocker(b
)
186 if __name__
== '__main__':