~mvo/ubuntu-sso-client/strawman-lp711413

« back to all changes in this revision

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

  • Committer: Tarmac
  • Author(s): Natalia B. Bidart
  • Date: 2011-12-20 15:46:10 UTC
  • mfrom: (815.1.2 stable-3-0-update)
  • Revision ID: tarmac-20111220154610-bbocw3y2omwkjgze
[ Alejandro J. Cura <alecu@canonical.com> ]
  - An async webclient with qtnetwork and libsoup backends, to be used for
    proxy support.
  - Use the dedicated time url (LP: #891644).

[ Diego Sarmentero <diego.sarmentero@canonical.com> ]
  - Fixed pep8 issue.
  - Fix double back navigation in SSO reset code page (LP: #862403).

[ Manuel de la Pena <manuel.delapena@canonical.com> ]
  - Fixed the tests by ensuring that the server and the client are correctly
    closed.
  - Changed the import from ubuntuone-dev-tools so that we do not use the
    deprecated API.

[ Natalia B. Bidart <natalia.bidart@canonical.com> ]
  - Do not hardcode the app_name when showing the TC_NOT_ACCEPTED message
    (LP: #TC_NOT_ACCEPTED).
  - Pass module for test to u1trial properly.
  - Have a single executable to start the service (LP: #890416).
  - Lint fixes (LP: #890349).

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
    DeadReferenceError,
29
29
    PBClientFactory,
30
30
    PBServerFactory,
 
31
    Broker,
31
32
)
32
33
from ubuntu_sso import main
33
34
from ubuntu_sso.main import windows
46
47
 
47
48
# because we are using twisted we have java like names C0103 and
48
49
# the issues that mocker brings with it like W0104
49
 
# pylint: disable=C0103,W0104
 
50
# pylint: disable=C0103,W0104,E1101,W0201
50
51
 
51
52
 
52
53
class SaveProtocolServerFactory(PBServerFactory):
59
60
        self.protocolInstance = protocol
60
61
 
61
62
 
 
63
class SaveClientFactory(PBClientFactory):
 
64
    """Client Factory that knows when we disconnected."""
 
65
 
 
66
    def __init__(self, connected_d, disconnected_d):
 
67
        """Create a new instance."""
 
68
        PBClientFactory.__init__(self)
 
69
        self.connected_d = connected_d
 
70
        self.disconnected_d = disconnected_d
 
71
 
 
72
    def clientConnectionMade(self, broker):
 
73
        """Connection made."""
 
74
        PBClientFactory.clientConnectionMade(self, broker)
 
75
        self.connected_d.callback(True)
 
76
 
 
77
    def clientConnectionLost(self, connector, reason, reconnecting=0):
 
78
        """Connection lost."""
 
79
        self.disconnected_d.callback(True)
 
80
 
 
81
 
 
82
class ServerProtocol(Broker):
 
83
    """Server protocol that allows us to clean the tests."""
 
84
 
 
85
    def connectionLost(self, *a):
 
86
        self.factory.onConnectionLost.callback(self)
 
87
 
 
88
 
 
89
class ConnectedTestCase(TestCase):
 
90
    """Base test case with a client and a server."""
 
91
 
 
92
    @defer.inlineCallbacks
 
93
    def setUp(self):
 
94
        """Set up for the tests."""
 
95
        yield super(ConnectedTestCase, self).setUp()
 
96
        self.server_disconnected = defer.Deferred()
 
97
        self.client_disconnected = defer.Deferred()
 
98
        self.listener = None
 
99
        self.connector = None
 
100
        self.server_factory = None
 
101
        self.client_factory = None
 
102
 
 
103
    def setup_client_server(self, sso_root):
 
104
        """Set tests."""
 
105
        port = get_sso_pb_port()
 
106
        self.listener = self._listen_server(sso_root, self.server_disconnected,
 
107
                port)
 
108
        connected = defer.Deferred()
 
109
        self.connector = self._connect_client(connected,
 
110
                self.client_disconnected, port)
 
111
        self.addCleanup(self.teardown_client_server)
 
112
        return connected
 
113
 
 
114
    def _listen_server(self, sso_root, d, port):
 
115
        """Start listenting."""
 
116
        self.server_factory = SaveProtocolServerFactory(sso_root)
 
117
        self.server_factory.onConnectionLost = d
 
118
        self.server_factory.protocol = ServerProtocol
 
119
        return reactor.listenTCP(port, self.server_factory)
 
120
 
 
121
    def _connect_client(self, d1, d2, port):
 
122
        """Connect client."""
 
123
        self.client_factory = SaveClientFactory(d1, d2)
 
124
        return reactor.connectTCP(LOCALHOST, port, self.client_factory)
 
125
 
 
126
    def teardown_client_server(self):
 
127
        """Clean resources."""
 
128
        self.connector.disconnect()
 
129
        d = defer.maybeDeferred(self.listener.stopListening)
 
130
        return defer.gatherResults([d, self.client_disconnected,
 
131
            self.server_disconnected])
 
132
 
 
133
 
62
134
class FakeDecoratedObject(object):
63
135
    """An object that has decorators."""
64
136
 
240
312
        self.assertEqual(name, self.signal_names[signal_index])
241
313
 
242
314
 
243
 
class SSOLoginTestCase(SignalHandlingTestCase):
 
315
class SSOLoginTestCase(ConnectedTestCase, SignalHandlingTestCase):
244
316
    """Test the login class."""
245
317
 
246
318
    signal_names = [
268
340
        self.login = SSOLogin(None)
269
341
        # start pb
270
342
        self.sso_root = UbuntuSSORoot(sso_login=self.login)
271
 
        self.server_factory = SaveProtocolServerFactory(self.sso_root)
272
343
        # pylint: disable=E1101
273
 
        port = get_sso_pb_port()
274
 
        self.listener = reactor.listenTCP(port, self.server_factory)
275
 
        self.client_factory = PBClientFactory()
276
 
        self.connector = reactor.connectTCP(LOCALHOST, port,
277
 
                                            self.client_factory)
 
344
        yield self.setup_client_server(self.sso_root)
278
345
        self.client = yield self._get_client()
279
346
        # pylint: enable=E1101
280
347
 
281
348
    @defer.inlineCallbacks
282
 
    def tearDown(self):
283
 
        """Clean reactor."""
284
 
        yield super(SSOLoginTestCase, self).tearDown()
285
 
        if self.server_factory.protocolInstance is not None:
286
 
            self.server_factory.protocolInstance.transport.loseConnection()
287
 
        yield defer.gatherResults([self._tearDownServer(),
288
 
                                    self._tearDownClient()])
289
 
 
290
 
    def _tearDownServer(self):
291
 
        """Teardown the server."""
292
 
        return defer.maybeDeferred(self.listener.stopListening)
293
 
 
294
 
    def _tearDownClient(self):
295
 
        """Tear down the client."""
296
 
        self.connector.disconnect()
297
 
        return defer.succeed(None)
298
 
 
299
 
    @defer.inlineCallbacks
300
349
    def _get_client(self):
301
350
        """Get the client."""
302
351
        # request the remote object and create a client
541
590
        self.mocker.verify()
542
591
 
543
592
 
544
 
class CredentialsManagementTestCase(TestCase):
 
593
class CredentialsManagementTestCase(ConnectedTestCase, TestCase):
545
594
    """Test the management class."""
546
595
 
547
596
    @defer.inlineCallbacks
556
605
        self.creds.root = self.root
557
606
        # start pb
558
607
        self.sso_root = UbuntuSSORoot(cred_manager=self.creds)
559
 
        self.server_factory = SaveProtocolServerFactory(self.sso_root)
560
608
        # pylint: disable=E1101
561
 
        port = get_sso_pb_port()
562
 
        self.listener = reactor.listenTCP(port, self.server_factory)
563
 
        self.client_factory = PBClientFactory()
564
 
        self.connector = reactor.connectTCP(LOCALHOST, port,
565
 
                                            self.client_factory)
 
609
        yield self.setup_client_server(self.sso_root)
566
610
        self.client = yield self._get_client()
567
611
        # pylint: enable=E1101
568
612
 
569
613
    @defer.inlineCallbacks
570
 
    def tearDown(self):
571
 
        """Clean reactor."""
572
 
        yield super(CredentialsManagementTestCase, self).tearDown()
573
 
        if self.server_factory.protocolInstance is not None:
574
 
            self.server_factory.protocolInstance.transport.loseConnection()
575
 
        yield defer.gatherResults([self._tearDownServer(),
576
 
                                    self._tearDownClient()])
577
 
 
578
 
    def _tearDownServer(self):
579
 
        """Teardown the server."""
580
 
        return defer.maybeDeferred(self.listener.stopListening)
581
 
 
582
 
    def _tearDownClient(self):
583
 
        """Tear down the client."""
584
 
        self.connector.disconnect()
585
 
        return defer.succeed(None)
586
 
 
587
 
    @defer.inlineCallbacks
588
614
    def _get_client(self):
589
615
        """Get the client."""
590
616
        # request the remote object and create a client
592
618
        remote = yield root.callRemote('get_cred_manager')
593
619
        client = CredentialsManagementClient(remote)
594
620
        yield client.register_to_signals()
 
621
        self.addCleanup(client.unregister_to_signals)
595
622
        # set the cb
596
623
        for signal_name in ['on_authorization_denied_cb',
597
624
                            'on_credentials_found_cb',