~mvo/ubuntu-sso-client/lp711413

« back to all changes in this revision

Viewing changes to ubuntu_sso/main/tests/test_linux.py

  • Committer: Michael Vogt
  • Date: 2012-05-23 15:45:50 UTC
  • Revision ID: michael.vogt@ubuntu.com-20120523154550-143redkc7ypg14oo
try to fix #711413 via a retry approach if the session bus is not available, the idea is that ubuntu-sso-client gets killed on logout hopefully before the retry-timeout is reached

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
#
 
3
# Copyright 2012 Canonical Ltd.
 
4
#
 
5
# This program is free software: you can redistribute it and/or modify it
 
6
# under the terms of the GNU General Public License version 3, as published
 
7
# by the Free Software Foundation.
 
8
#
 
9
# This program is distributed in the hope that it will be useful, but
 
10
# WITHOUT ANY WARRANTY; without even the implied warranties of
 
11
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
 
12
# PURPOSE.  See the GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License along
 
15
# with this program.  If not, see <http://www.gnu.org/licenses/>.
 
16
#
 
17
# In addition, as a special exception, the copyright holders give
 
18
# permission to link the code of portions of this program with the
 
19
# OpenSSL library under certain conditions as described in each
 
20
# individual source file, and distribute linked combinations
 
21
# including the two.
 
22
# You must obey the GNU General Public License in all respects
 
23
# for all of the code used other than OpenSSL.  If you modify
 
24
# file(s) with this exception, you may extend this exception to your
 
25
# version of the file(s), but you are not obligated to do so.  If you
 
26
# do not wish to do so, delete this exception statement from your
 
27
# version.  If you delete this exception statement from all source
 
28
# files in the program, then also delete it here.
 
29
"""Linux specific tests for the main module."""
 
30
 
 
31
import time
 
32
 
 
33
from mock import patch
 
34
 
 
35
import dbus
 
36
 
 
37
from ubuntu_sso.tests import TestCase
 
38
from ubuntu_sso.main import UbuntuSSOProxy
 
39
 
 
40
# because we are using twisted we have java like names C0103
 
41
# pylint: disable=C0103
 
42
 
 
43
 
 
44
class UbuntuSSOProxyTestCase(TestCase):
 
45
    """Tests for the UbuntuSSOProxy """
 
46
 
 
47
 
 
48
    def test_retry_on_race_lp711413(self):
 
49
        """Test the retry on dbus failure feature to fix bug #711413 """
 
50
        def _simulate_dbus_unavailable_once():
 
51
            """ helper to simulate a dbus not-yet-ready error once """
 
52
            patcher.stop()
 
53
            raise dbus.DBusException()
 
54
        # simulate that the session bus is unavailable initially
 
55
        patcher = patch("dbus.SessionBus")
 
56
        session_bus_mock = patcher.start()
 
57
        session_bus_mock.side_effect = _simulate_dbus_unavailable_once
 
58
        # get proxy and measure the time to access the bus
 
59
        now = time.time()
 
60
        proxy = UbuntuSSOProxy(None)
 
61
        bus = proxy.bus
 
62
        delay = time.time() - now
 
63
        # verify that we have a bus and that it took the expected time
 
64
        self.assertNotEqual(bus, None)
 
65
        self.assertTrue(delay > 1*proxy.DBUS_RETRY_WAIT_TIME and
 
66
                        delay < 2*proxy.DBUS_RETRY_WAIT_TIME)
 
67
 
 
68
    
 
69
    @patch("time.sleep")
 
70
    @patch("dbus.SessionBus")
 
71
    def test_raise_on_timeout(self, mock_session_bus, mock_sleep):
 
72
        """Test that  the normal dbus.DBusException is raised on timeout """
 
73
        def _raise_dbus_exception():
 
74
            raise dbus.DBusException()
 
75
        mock_session_bus.side_effect = _raise_dbus_exception
 
76
        self.assertRaises(dbus.DBusException, UbuntuSSOProxy, None)
 
77