diff options
Diffstat (limited to 'tests/test_cdrom.py')
-rw-r--r-- | tests/test_cdrom.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/test_cdrom.py b/tests/test_cdrom.py new file mode 100644 index 0000000..352bbbe --- /dev/null +++ b/tests/test_cdrom.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Tests the client module.""" + +import logging +import time +import unittest + +import defer +import dbus + +import aptdaemon.client +import aptdaemon.loop +import aptdaemon.enums + +import aptdaemon.test + +DEBUG = True + + +class CDROMTestCase(aptdaemon.test.AptDaemonTestCase): + + """Test the installation from removable media, e.g. CDROMs.""" + + 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_trusted_key() + self.chroot.add_cdrom_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 + self.start_fake_polkitd() + time.sleep(1) + self.called = False + + @defer.inline_callbacks + def _on_medium_required_cancel(self, trans, medium, mount_point): + yield trans.cancel() + + @defer.inline_callbacks + def _on_medium_required(self, trans, medium, mount_point): + if self.called: + # Abort if we get asked twice for the cdrom + yield trans.cancel() + self.chroot.mount_cdrom() + self.called = True + yield trans.provide_medium(medium) + + def _on_finished(self, trans, exit): + """Callback to stop the mainloop after a transaction is done.""" + aptdaemon.loop.mainloop.quit() + + def test(self): + """Test changing media.""" + @defer.inline_callbacks + def run(): + self.client = aptdaemon.client.AptClient(self.bus) + trans = yield self.client.install_packages(["silly-depend-base"]) + trans.connect("finished", self._on_finished) + trans.connect("medium-required", self._on_medium_required) + yield trans.run() + defer.return_value(trans) + deferred = run() + aptdaemon.loop.mainloop.run() + self.assertEqual(deferred.result.exit, aptdaemon.enums.EXIT_SUCCESS) + + def test_cancel(self): + """Test cancelling a required medium request.""" + @defer.inline_callbacks + def run(): + self.client = aptdaemon.client.AptClient(self.bus) + trans = yield self.client.install_packages(["silly-depend-base"]) + trans.connect("finished", self._on_finished) + trans.connect("medium-required", self._on_medium_required_cancel) + yield trans.run() + defer.return_value(trans) + deferred = run() + aptdaemon.loop.mainloop.run() + self.assertEqual(deferred.result.exit, aptdaemon.enums.EXIT_CANCELLED) + + self.chroot.mount_cdrom() + + deferred = run() + aptdaemon.loop.mainloop.run() + self.assertEqual(deferred.result.exit, aptdaemon.enums.EXIT_SUCCESS) + + +if __name__ == "__main__": + if DEBUG: + logging.basicConfig(level=logging.DEBUG) + unittest.main() + +# vim: ts=4 et sts=4 |