/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_http.py

  • Committer: Vincent Ladeuil
  • Date: 2007-12-28 15:33:47 UTC
  • mto: (3146.3.1 179368) (3156.2.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 3158.
  • Revision ID: v.ladeuil+lp@free.fr-20071228153347-k84pqeepvol23tj5
Cancel RecordingServer move, that was useless.

Show diffs side-by-side

added added

removed removed

Lines of Context:
167
167
        self.credentials.append([realm, host, username, password])
168
168
 
169
169
 
 
170
class RecordingServer(object):
 
171
    """A fake HTTP server.
 
172
    
 
173
    It records the bytes sent to it, and replies with a 200.
 
174
    """
 
175
 
 
176
    def __init__(self, expect_body_tail=None):
 
177
        """Constructor.
 
178
 
 
179
        :type expect_body_tail: str
 
180
        :param expect_body_tail: a reply won't be sent until this string is
 
181
            received.
 
182
        """
 
183
        self._expect_body_tail = expect_body_tail
 
184
        self.host = None
 
185
        self.port = None
 
186
        self.received_bytes = ''
 
187
 
 
188
    def setUp(self):
 
189
        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
190
        self._sock.bind(('127.0.0.1', 0))
 
191
        self.host, self.port = self._sock.getsockname()
 
192
        self._ready = threading.Event()
 
193
        self._thread = threading.Thread(target=self._accept_read_and_reply)
 
194
        self._thread.setDaemon(True)
 
195
        self._thread.start()
 
196
        self._ready.wait(5)
 
197
 
 
198
    def _accept_read_and_reply(self):
 
199
        self._sock.listen(1)
 
200
        self._ready.set()
 
201
        self._sock.settimeout(5)
 
202
        try:
 
203
            conn, address = self._sock.accept()
 
204
            # On win32, the accepted connection will be non-blocking to start
 
205
            # with because we're using settimeout.
 
206
            conn.setblocking(True)
 
207
            while not self.received_bytes.endswith(self._expect_body_tail):
 
208
                self.received_bytes += conn.recv(4096)
 
209
            conn.sendall('HTTP/1.1 200 OK\r\n')
 
210
        except socket.timeout:
 
211
            # Make sure the client isn't stuck waiting for us to e.g. accept.
 
212
            self._sock.close()
 
213
        except socket.error:
 
214
            # The client may have already closed the socket.
 
215
            pass
 
216
 
 
217
    def tearDown(self):
 
218
        try:
 
219
            self._sock.close()
 
220
        except socket.error:
 
221
            # We might have already closed it.  We don't care.
 
222
            pass
 
223
        self.host = None
 
224
        self.port = None
 
225
 
 
226
 
170
227
class TestHTTPServer(tests.TestCase):
171
228
    """Test the HTTP servers implementations."""
172
229
 
422
479
class TestPost(tests.TestCase):
423
480
 
424
481
    def test_post_body_is_received(self):
425
 
        server = http_utils.RecordingServer(expect_body_tail='end-of-body')
 
482
        server = RecordingServer(expect_body_tail='end-of-body')
426
483
        server.setUp()
427
484
        self.addCleanup(server.tearDown)
428
485
        scheme = self._qualified_prefix
639
696
class TestRecordingServer(tests.TestCase):
640
697
 
641
698
    def test_create(self):
642
 
        server = http_utils.RecordingServer(expect_body_tail=None)
 
699
        server = RecordingServer(expect_body_tail=None)
643
700
        self.assertEqual('', server.received_bytes)
644
701
        self.assertEqual(None, server.host)
645
702
        self.assertEqual(None, server.port)
646
703
 
647
704
    def test_setUp_and_tearDown(self):
648
 
        server = http_utils.RecordingServer(expect_body_tail=None)
 
705
        server = RecordingServer(expect_body_tail=None)
649
706
        server.setUp()
650
707
        try:
651
708
            self.assertNotEqual(None, server.host)
656
713
        self.assertEqual(None, server.port)
657
714
 
658
715
    def test_send_receive_bytes(self):
659
 
        server = http_utils.RecordingServer(expect_body_tail='c')
 
716
        server = RecordingServer(expect_body_tail='c')
660
717
        server.setUp()
661
718
        self.addCleanup(server.tearDown)
662
719
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)