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)
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.