~mvo/ubuntu-sso-client/strawman-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 14:51:10 UTC
  • Revision ID: michael.vogt@ubuntu.com-20120523145110-sasgx14uky11l2fh
cleanup and add test, thanks to Natalia for the initial review

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
from ubuntu_sso.main.linux import DBUS_RETRY_WAIT_TIME
 
40
 
 
41
# because we are using twisted we have java like names C0103
 
42
# pylint: disable=C0103
 
43
 
 
44
 
 
45
class UbuntuSSOProxyTestCase(TestCase):
 
46
    """Tests for the UbuntuSSOProxy """
 
47
 
 
48
 
 
49
    def test_retry_on_race_lp711413(self):
 
50
        """ test the retry on dbus failure feature to fix bug #711413 """
 
51
        def _simulate_dbus_unavailable_once():
 
52
            """ helper to simulate a dbus not-yet-ready error once """
 
53
            patcher.stop()
 
54
            raise dbus.DBusException()
 
55
        # simulate that the session bus is unavailable initially
 
56
        patcher = patch("dbus.SessionBus")
 
57
        session_bus_mock = patcher.start()
 
58
        session_bus_mock.side_effect = _simulate_dbus_unavailable_once
 
59
        # get proxy and measure the time to access the bus
 
60
        now = time.time()
 
61
        proxy = UbuntuSSOProxy(None)
 
62
        bus = proxy.bus
 
63
        delay = time.time() - now
 
64
        # verify that we have a bus and that it took the expected time
 
65
        self.assertNotEqual(bus, None)
 
66
        self.assertTrue(delay > 1*DBUS_RETRY_WAIT_TIME and
 
67
                        delay < 2*DBUS_RETRY_WAIT_TIME)