1
# Copyright (c) 2009-2010 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
Tests for L{twisted.test.proto_helpers.StringTransport}.
8
from zope.interface.verify import verifyObject
10
from twisted.internet.interfaces import ITransport, IPushProducer, IConsumer
11
from twisted.trial.unittest import TestCase
12
from twisted.test.proto_helpers import StringTransport
15
class StringTransportTests(TestCase):
17
Tests for L{twisted.test.proto_helpers.StringTransport}.
20
self.transport = StringTransport()
23
def test_interfaces(self):
25
L{StringTransport} instances provide L{ITransport}, L{IPushProducer},
28
self.assertTrue(verifyObject(ITransport, self.transport))
29
self.assertTrue(verifyObject(IPushProducer, self.transport))
30
self.assertTrue(verifyObject(IConsumer, self.transport))
33
def test_registerProducer(self):
35
L{StringTransport.registerProducer} records the arguments supplied to
36
it as instance attributes.
40
self.transport.registerProducer(producer, streaming)
41
self.assertIdentical(self.transport.producer, producer)
42
self.assertIdentical(self.transport.streaming, streaming)
45
def test_disallowedRegisterProducer(self):
47
L{StringTransport.registerProducer} raises L{RuntimeError} if a
48
producer is already registered.
51
self.transport.registerProducer(producer, True)
53
RuntimeError, self.transport.registerProducer, object(), False)
54
self.assertIdentical(self.transport.producer, producer)
55
self.assertTrue(self.transport.streaming)
58
def test_unregisterProducer(self):
60
L{StringTransport.unregisterProducer} causes the transport to forget
61
about the registered producer and makes it possible to register a new
64
oldProducer = object()
65
newProducer = object()
66
self.transport.registerProducer(oldProducer, False)
67
self.transport.unregisterProducer()
68
self.assertIdentical(self.transport.producer, None)
69
self.transport.registerProducer(newProducer, True)
70
self.assertIdentical(self.transport.producer, newProducer)
71
self.assertTrue(self.transport.streaming)
74
def test_invalidUnregisterProducer(self):
76
L{StringTransport.unregisterProducer} raises L{RuntimeError} if called
77
when no producer is registered.
79
self.assertRaises(RuntimeError, self.transport.unregisterProducer)
82
def test_initialProducerState(self):
84
L{StringTransport.producerState} is initially C{'producing'}.
86
self.assertEqual(self.transport.producerState, 'producing')
89
def test_pauseProducing(self):
91
L{StringTransport.pauseProducing} changes the C{producerState} of the
92
transport to C{'paused'}.
94
self.transport.pauseProducing()
95
self.assertEqual(self.transport.producerState, 'paused')
98
def test_resumeProducing(self):
100
L{StringTransport.resumeProducing} changes the C{producerState} of the
101
transport to C{'producing'}.
103
self.transport.pauseProducing()
104
self.transport.resumeProducing()
105
self.assertEqual(self.transport.producerState, 'producing')
108
def test_stopProducing(self):
110
L{StringTransport.stopProducing} changes the C{'producerState'} of the
111
transport to C{'stopped'}.
113
self.transport.stopProducing()
114
self.assertEqual(self.transport.producerState, 'stopped')
117
def test_stoppedTransportCannotPause(self):
119
L{StringTransport.pauseProducing} raises L{RuntimeError} if the
120
transport has been stopped.
122
self.transport.stopProducing()
123
self.assertRaises(RuntimeError, self.transport.pauseProducing)
126
def test_stoppedTransportCannotResume(self):
128
L{StringTransport.resumeProducing} raises L{RuntimeError} if the
129
transport has been stopped.
131
self.transport.stopProducing()
132
self.assertRaises(RuntimeError, self.transport.resumeProducing)
135
def test_disconnectingTransportCannotPause(self):
137
L{StringTransport.pauseProducing} raises L{RuntimeError} if the
138
transport is being disconnected.
140
self.transport.loseConnection()
141
self.assertRaises(RuntimeError, self.transport.pauseProducing)
144
def test_disconnectingTransportCannotResume(self):
146
L{StringTransport.resumeProducing} raises L{RuntimeError} if the
147
transport is being disconnected.
149
self.transport.loseConnection()
150
self.assertRaises(RuntimeError, self.transport.resumeProducing)
153
def test_loseConnectionSetsDisconnecting(self):
155
L{StringTransport.loseConnection} toggles the C{disconnecting} instance
158
self.assertFalse(self.transport.disconnecting)
159
self.transport.loseConnection()
160
self.assertTrue(self.transport.disconnecting)