10
from twisted.trial import unittest
10
from twisted.trial.unittest import TestCase
12
12
from twisted.internet import reactor, defer
13
from twisted.internet.task import Clock
13
14
from twisted.internet.protocol import Factory, ReconnectingClientFactory
14
15
from twisted.protocols.basic import Int16StringReceiver
16
19
class In(Int16StringReceiver):
17
20
def __init__(self):
54
class ReconnectingFactoryTestCase(unittest.TestCase):
59
class FakeConnector(object):
61
A fake connector class, to be used to mock connections failed or lost.
64
def stopConnecting(self):
73
class ReconnectingFactoryTestCase(TestCase):
56
75
Tests for L{ReconnectingClientFactory}.
58
78
def testStopTrying(self):
98
118
self.assertEqual(original.__dict__, reconstituted.__dict__)
121
def test_serializeWithClock(self):
123
The clock attribute of L{ReconnectingClientFactory} is not serialized,
124
and the restored value sets it to the default value, the reactor.
127
original = ReconnectingClientFactory()
128
original.clock = clock
129
reconstituted = pickle.loads(pickle.dumps(original))
130
self.assertIdentical(reconstituted.clock, None)
101
133
def test_deserializationResetsParameters(self):
103
135
A L{ReconnectingClientFactory} which is unpickled does not have an
104
L{IConnector} and has its reconnectioning timing parameters reset to
105
their initial values.
136
L{IConnector} and has its reconnecting timing parameters reset to their
107
class FakeConnector(object):
108
def stopConnecting(self):
111
139
factory = ReconnectingClientFactory()
112
140
factory.clientConnectionFailed(FakeConnector(), None)
114
serialized = pickle.dumps(factory)
115
unserialized = pickle.loads(serialized)
116
self.assertEqual(unserialized.connector, None)
117
self.assertEqual(unserialized._callID, None)
118
self.assertEqual(unserialized.retries, 0)
119
self.assertEqual(unserialized.delay, factory.initialDelay)
120
self.assertEqual(unserialized.continueTrying, True)
141
self.addCleanup(factory.stopTrying)
143
serialized = pickle.dumps(factory)
144
unserialized = pickle.loads(serialized)
145
self.assertEqual(unserialized.connector, None)
146
self.assertEqual(unserialized._callID, None)
147
self.assertEqual(unserialized.retries, 0)
148
self.assertEqual(unserialized.delay, factory.initialDelay)
149
self.assertEqual(unserialized.continueTrying, True)
152
def test_parametrizedClock(self):
154
The clock used by L{ReconnectingClientFactory} can be parametrized, so
155
that one can cleanly test reconnections.
158
factory = ReconnectingClientFactory()
159
factory.clock = clock
161
factory.clientConnectionLost(FakeConnector(), None)
162
self.assertEquals(len(clock.calls), 1)