'When L{ClientService} is stopping - that is,
L{ClientService.stopService} has been called, but the L{Deferred} it
returns has not fired yet - calling L{startService} will cause a new
connection to be made, and new calls to L{whenConnected} to succeed.'

def test_startServiceWhileStopping(self):

    (cq, service) = self.makeReconnector(fireImmediately=False)
    cq.connectQueue[0].callback(None)
    first = cq.constructedProtocols[0]
    stopped = service.stopService()
    self.assertNoResult(stopped)
    nextProtocol = service.whenConnected()
    self.assertNoResult(nextProtocol)
    service.startService()
    self.assertNoResult(nextProtocol)
    self.assertNoResult(stopped)
    self.assertEqual(first.transport.disconnecting, True)
    first.connectionLost(Failure(Exception()))
    self.successResultOf(stopped)
    cq.connectQueue[1].callback(None)
    self.assertEqual(len(cq.constructedProtocols), 2)
    self.assertIdentical(self.successResultOf(nextProtocol), cq.applicationProtocols[1])
    secondStopped = service.stopService()
    self.assertNoResult(secondStopped)
