59
60
self.protocolInstance = protocol
63
class SaveClientFactory(PBClientFactory):
64
"""Client Factory that knows when we disconnected."""
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
72
def clientConnectionMade(self, broker):
73
"""Connection made."""
74
PBClientFactory.clientConnectionMade(self, broker)
75
self.connected_d.callback(True)
77
def clientConnectionLost(self, connector, reason, reconnecting=0):
78
"""Connection lost."""
79
self.disconnected_d.callback(True)
82
class ServerProtocol(Broker):
83
"""Server protocol that allows us to clean the tests."""
85
def connectionLost(self, *a):
86
self.factory.onConnectionLost.callback(self)
89
class ConnectedTestCase(TestCase):
90
"""Base test case with a client and a server."""
92
@defer.inlineCallbacks
94
"""Set up for the tests."""
95
yield super(ConnectedTestCase, self).setUp()
96
self.server_disconnected = defer.Deferred()
97
self.client_disconnected = defer.Deferred()
100
self.server_factory = None
101
self.client_factory = None
103
def setup_client_server(self, sso_root):
105
port = get_sso_pb_port()
106
self.listener = self._listen_server(sso_root, self.server_disconnected,
108
connected = defer.Deferred()
109
self.connector = self._connect_client(connected,
110
self.client_disconnected, port)
111
self.addCleanup(self.teardown_client_server)
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)
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)
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])
62
134
class FakeDecoratedObject(object):
63
135
"""An object that has decorators."""
268
340
self.login = SSOLogin(None)
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,
344
yield self.setup_client_server(self.sso_root)
278
345
self.client = yield self._get_client()
279
346
# pylint: enable=E1101
281
348
@defer.inlineCallbacks
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()])
290
def _tearDownServer(self):
291
"""Teardown the server."""
292
return defer.maybeDeferred(self.listener.stopListening)
294
def _tearDownClient(self):
295
"""Tear down the client."""
296
self.connector.disconnect()
297
return defer.succeed(None)
299
@defer.inlineCallbacks
300
349
def _get_client(self):
301
350
"""Get the client."""
302
351
# request the remote object and create a client
556
605
self.creds.root = self.root
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,
609
yield self.setup_client_server(self.sso_root)
566
610
self.client = yield self._get_client()
567
611
# pylint: enable=E1101
569
613
@defer.inlineCallbacks
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()])
578
def _tearDownServer(self):
579
"""Teardown the server."""
580
return defer.maybeDeferred(self.listener.stopListening)
582
def _tearDownClient(self):
583
"""Tear down the client."""
584
self.connector.disconnect()
585
return defer.succeed(None)
587
@defer.inlineCallbacks
588
614
def _get_client(self):
589
615
"""Get the client."""
590
616
# request the remote object and create a client