r46818 - explicit tests for whenConnected
glyph-TA+aISz0psMTMxyoc4vAAJOcrHinNvQL0E9HWUfgJXw@public.gmane.org
| Newsgroups | gmane.comp.python.twisted.commits |
|---|---|
| Message-ID | <[email protected]> |
Author: glyph
Date: Thu Feb 18 01:29:38 2016
New Revision: 46818
Modified:
branches/persistent-client-service-4735-5/twisted/application/internet.py
branches/persistent-client-service-4735-5/twisted/application/test/test_internet.py
Log:
explicit tests for whenConnected
Modified: branches/persistent-client-service-4735-5/twisted/application/internet.py
==============================================================================
--- branches/persistent-client-service-4735-5/twisted/application/internet.py (original)
+++ branches/persistent-client-service-4735-5/twisted/application/internet.py Thu Feb 18 01:29:38 2016
@@ -582,8 +582,9 @@
if self._currentConnection is not None:
return succeed(self._currentConnection)
else:
- # XXX WROOONG
- return Deferred()
+ result = Deferred()
+ self._awaitingConnected.append(result)
+ return result
def startService(self):
Modified: branches/persistent-client-service-4735-5/twisted/application/test/test_internet.py
==============================================================================
--- branches/persistent-client-service-4735-5/twisted/application/test/test_internet.py (original)
+++ branches/persistent-client-service-4735-5/twisted/application/test/test_internet.py Thu Feb 18 01:29:38 2016
@@ -3,6 +3,9 @@
"""
Tests for (new code in) L{twisted.application.internet}.
+
+@var AT_LEAST_ONE_ATTEMPT: At least enough seconds for L{ClientService} to make
+ one attempt.
"""
from __future__ import absolute_import, division
@@ -486,6 +489,8 @@
+AT_LEAST_ONE_ATTEMPT = 100.
+
class ClientServiceTests(TestCase):
"""
Tests for L{ClientService}.
@@ -551,7 +556,7 @@
clock = Clock()
cq, service = self.makeReconnector(fireImmediately=False, clock=clock)
cq.connectQueue[0].errback(Exception())
- clock.advance(100)
+ clock.advance(AT_LEAST_ONE_ATTEMPT)
self.assertEqual(len(cq.connectQueue), 2)
d = service.stopService()
cq.connectQueue[1].errback(Exception())
@@ -595,7 +600,7 @@
self.assertEqual(len(cq.connectQueue), 1)
cq.connectQueue[0].errback(Failure(Exception()))
self.assertNoResult(service.whenConnected())
- clock.advance(100.)
+ clock.advance(AT_LEAST_ONE_ATTEMPT)
self.assertEqual(len(cq.connectQueue), 2)
@@ -612,7 +617,7 @@
self.assertIdentical(self.successResultOf(service.whenConnected()),
cq.applicationProtocols[0])
cq.constructedProtocols[0].connectionLost(Failure(Exception()))
- clock.advance(100.)
+ clock.advance(AT_LEAST_ONE_ATTEMPT)
self.assertEquals(len(cq.connectQueue), 2)
cq.connectQueue[1].callback(None)
self.assertIdentical(self.successResultOf(service.whenConnected()),
@@ -647,3 +652,38 @@
service.startService()
self.assertEqual(len(cq.connectQueue), 1)
self.assertIn("Duplicate ClientService.startService", messages()[0])
+
+
+ def test_whenConnectedLater(self):
+ """
+ L{ClientService.whenConnected} returns a L{Deferred} that fires when a
+ connection is established.
+ """
+ clock = Clock()
+ cq, service = self.makeReconnector(fireImmediately=False, clock=clock)
+ a = service.whenConnected()
+ b = service.whenConnected()
+ self.assertNoResult(a)
+ self.assertNoResult(b)
+ cq.connectQueue[0].callback(None)
+ resultA = self.successResultOf(a)
+ resultB = self.successResultOf(b)
+ self.assertIdentical(resultA, resultB)
+ self.assertIdentical(resultA, cq.applicationProtocols[0])
+
+
+ def test_whenConnectedStopService(self):
+ """
+ L{ClientService.whenConnected} returns a L{Deferred} that fails when
+ L{ClientService.stopService} is called.
+ """
+ clock = Clock()
+ cq, service = self.makeReconnector(fireImmediately=False, clock=clock)
+ a = service.whenConnected()
+ b = service.whenConnected()
+ self.assertNoResult(a)
+ self.assertNoResult(b)
+ service.stopService()
+ self.assertFailure(a, CancelledError)
+ self.assertFailure(b, CancelledError)
+