aboutsummaryrefslogtreecommitdiff
path: root/tests/test_client.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_client.py')
-rw-r--r--tests/test_client.py174
1 files changed, 174 insertions, 0 deletions
diff --git a/tests/test_client.py b/tests/test_client.py
new file mode 100644
index 0000000..c7370c6
--- /dev/null
+++ b/tests/test_client.py
@@ -0,0 +1,174 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests the client module."""
+
+import logging
+import time
+import unittest
+
+import dbus
+import defer
+
+from gi.repository import GObject
+
+import aptdaemon.client
+import aptdaemon.loop
+import aptdaemon.enums
+import aptdaemon.errors
+
+import aptdaemon.test
+
+DEBUG = True
+
+
+class ClientTestNotAuthorized(aptdaemon.test.AptDaemonTestCase):
+
+ """Test the python client."""
+
+ def setUp(self):
+ """Setup a chroot, run the aptdaemon and a fake PolicyKit daemon."""
+ # Setup chroot
+ self.chroot = aptdaemon.test.Chroot()
+ self.chroot.setup()
+ self.addCleanup(self.chroot.remove)
+ self.chroot.add_test_repository()
+ # Start aptdaemon with the chroot on the session bus
+ self.start_dbus_daemon()
+ self.bus = dbus.bus.BusConnection(self.dbus_address)
+ self.start_session_aptd(self.chroot.path)
+ # Start the fake PolikcyKit daemon and disallow all actions
+ self.start_fake_polkitd("none")
+ time.sleep(1)
+
+ def _on_finished(self, trans, exit):
+ """Callback to stop the mainloop after a transaction is done."""
+ aptdaemon.loop.mainloop.quit()
+
+ def test_auth_failed(self):
+ """Test the failing of an unauthorized transaction"""
+ @defer.inline_callbacks
+ def run():
+ self.client = aptdaemon.client.AptClient(self.bus)
+ trans = yield self.client.update_cache()
+ trans.connect("finished", self._on_finished)
+ try:
+ yield trans.run()
+ except aptdaemon.errors.NotAuthorizedError as error:
+ print(error)
+ except Exception as error:
+ self.fail("Wrong exception: %s" % error)
+ else:
+ self.fail("Authorization passed (sic!)")
+ defer.return_value(trans)
+ deferred = run()
+ aptdaemon.loop.mainloop.run()
+ self.assertEqual(deferred.result.error.code,
+ aptdaemon.enums.ERROR_NOT_AUTHORIZED)
+
+
+class ClientTest(aptdaemon.test.AptDaemonTestCase):
+
+ """Test the python client."""
+
+ def setUp(self):
+ """Setup a chroot, run the aptdaemon and a fake PolicyKit daemon."""
+ # Setup chroot
+ self.chroot = aptdaemon.test.Chroot()
+ self.chroot.setup()
+ self.addCleanup(self.chroot.remove)
+ self.chroot.add_test_repository()
+ self.chroot.add_trusted_key()
+ # Start aptdaemon with the chroot on the session bus
+ self.start_dbus_daemon()
+ self.bus = dbus.bus.BusConnection(self.dbus_address)
+ self.start_session_aptd(self.chroot.path)
+ # Start the fake PolikcyKit daemon
+ self.start_fake_polkitd()
+ time.sleep(1)
+
+ def _on_finished(self, trans, exit):
+ """Callback to stop the mainloop after a transaction is done."""
+ aptdaemon.loop.mainloop.quit()
+
+ def test_sync(self):
+ """Test synchronous calls to the client."""
+ self.client = aptdaemon.client.AptClient(self.bus)
+ trans = self.client.update_cache()
+ trans.connect("finished", self._on_finished)
+ trans.run()
+ aptdaemon.loop.mainloop.run()
+ self.assertEqual(trans.exit, aptdaemon.enums.EXIT_SUCCESS)
+
+ def test_deferred(self):
+ """Test deferred calls to the client."""
+ @defer.inline_callbacks
+ def run():
+ self.client = aptdaemon.client.AptClient(self.bus)
+ trans = yield self.client.update_cache()
+ trans.connect("finished", self._on_finished)
+ yield trans.run()
+ defer.return_value(trans)
+ deferred = run()
+ aptdaemon.loop.mainloop.run()
+ self.assertEqual(deferred.result.exit, aptdaemon.enums.EXIT_SUCCESS)
+
+ def test_client_methods_sync(self):
+ """ Test most client methods (syncronous) """
+ test_methods = [
+ ("enable_distro_component", ("universe",)),
+ ("add_repository", ("deb", "http://archive.ubuntu.com/ubuntu",
+ "lucid", "restricted"))]
+ client = aptdaemon.client.AptClient(self.bus)
+ for (method, args) in test_methods:
+ f = getattr(client, method)
+ exit = f(*args, wait=True)
+ self.assertEqual(exit, aptdaemon.enums.EXIT_SUCCESS)
+
+ def test_simulation_error(self):
+ """Test if a simulation fails in a correct way."""
+ @defer.inline_callbacks
+ def run():
+ self.client = aptdaemon.client.AptClient(self.bus)
+ trans = yield self.client.install_packages(["silly-broken"])
+ trans.connect("finished", self._on_finished)
+ yield trans.simulate()
+ self.fail("We should never have been here")
+ yield trans.run()
+ defer.return_value(trans)
+ deferred = run()
+ aptdaemon.loop.mainloop.run()
+ self.assertEqual(deferred.result.value.code,
+ aptdaemon.enums.ERROR_DEP_RESOLUTION_FAILED)
+
+ def test_run_error(self):
+ """Test if a simulation during run fails in a correct way."""
+ @defer.inline_callbacks
+ def run():
+ self.client = aptdaemon.client.AptClient(self.bus)
+ trans = yield self.client.install_packages(["silly-broken"])
+ trans.connect("finished", self._on_finished)
+ yield trans.run()
+ self.fail("We should never have been here")
+ defer.return_value(trans)
+ deferred = run()
+ aptdaemon.loop.mainloop.run()
+ self.assertEqual(deferred.result.value.code,
+ aptdaemon.enums.ERROR_DEP_RESOLUTION_FAILED)
+
+ def test_tid_caching(self):
+ """Test if calling Client with identical TIDs uses caching."""
+
+ tid = "/meep"
+ trans = aptdaemon.client.AptTransaction(tid, bus=self.bus)
+ trans2 = aptdaemon.client.AptTransaction(tid, bus=self.bus)
+ trans3 = aptdaemon.client.AptTransaction("/meep2", bus=self.bus)
+ self.assertEqual(trans, trans2)
+ self.assertNotEqual(trans, trans3)
+
+
+if __name__ == "__main__":
+ if DEBUG:
+ logging.basicConfig(level=logging.DEBUG)
+ unittest.main()
+
+# vim: ts=4 et sts=4