annotate Lib/test/test_httplib.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 6da1ab5f777d
children b47d342c449b 732d70746fc0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52375
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
1 import errno
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
2 from http import client
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
3 import io
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
4 import os
56293
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
5 import array
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
6 import socket
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
7
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
8 import unittest
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
9 TestCase = unittest.TestCase
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
10
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
11 from test import support
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
13 here = os.path.dirname(__file__)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
14 # Self-signed cert file for 'localhost'
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
15 CERT_localhost = os.path.join(here, 'keycert.pem')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
16 # Self-signed cert file for 'fakehostname'
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
17 CERT_fakehostname = os.path.join(here, 'keycert2.pem')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
18 # Root cert file (CA) for svn.python.org's cert
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
19 CACERT_svn_python_org = os.path.join(here, 'https_svn_python_org_root.pem')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
20
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
21 HOST = support.HOST
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45504
diff changeset
22
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
23 class FakeSocket:
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
24 def __init__(self, text, fileclass=io.BytesIO):
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
25 if isinstance(text, str):
42902
62874b34d95d Changes in anticipation of stricter str vs. bytes enforcement.
Guido van Rossum <guido@python.org>
parents: 42590
diff changeset
26 text = text.encode("ascii")
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
27 self.text = text
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
28 self.fileclass = fileclass
42133
a8582e25748b Fix test_httplib.
Martin v. Löwis <martin@v.loewis.de>
parents: 41824
diff changeset
29 self.data = b''
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
31 def sendall(self, data):
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
32 self.data += data
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
33
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
34 def makefile(self, mode, bufsize=None):
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
35 if mode != 'r' and mode != 'rb':
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
36 raise client.UnimplementedFileMode()
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
37 return self.fileclass(self.text)
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
38
52375
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
39 class EPipeSocket(FakeSocket):
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
40
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
41 def __init__(self, text, pipe_trigger):
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
42 # When sendall() is called with pipe_trigger, raise EPIPE.
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
43 FakeSocket.__init__(self, text)
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
44 self.pipe_trigger = pipe_trigger
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
45
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
46 def sendall(self, data):
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
47 if self.pipe_trigger in data:
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
48 raise socket.error(errno.EPIPE, "gotcha")
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
49 self.data += data
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
50
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
51 def close(self):
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
52 pass
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
53
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
54 class NoEOFStringIO(io.BytesIO):
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
55 """Like StringIO, but raises AssertionError on EOF.
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
56
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
57 This is used below to test that http.client doesn't try to read
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
58 more from the underlying file than it should.
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
59 """
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
60 def read(self, n=-1):
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
61 data = io.BytesIO.read(self, n)
42992
ecda33051739 Convert various string literals to bytes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42965
diff changeset
62 if data == b'':
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
63 raise AssertionError('caller tried to read past EOF')
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
64 return data
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
65
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
66 def readline(self, length=None):
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
67 data = io.BytesIO.readline(self, length)
42992
ecda33051739 Convert various string literals to bytes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42965
diff changeset
68 if data == b'':
29778
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
69 raise AssertionError('caller tried to read past EOF')
ce988394c754 Fix SF bug 764095: Don't use network in test_httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 28978
diff changeset
70 return data
17483
71752a41b57f Add test for SF bug #405427
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
71
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
72 class HeaderTests(TestCase):
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
73 def test_auto_headers(self):
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
74 # Some headers are added automatically, but should not be added by
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
75 # .request() if they are explicitly set.
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
76
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
77 class HeaderCountingBuffer(list):
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
78 def __init__(self):
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
79 self.count = {}
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
80 def append(self, item):
42965
d1a17cd26a4b Make test_httplib pass.
Guido van Rossum <guido@python.org>
parents: 42902
diff changeset
81 kv = item.split(b':')
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
82 if len(kv) > 1:
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
83 # item is a 'Key: Value' header string
42133
a8582e25748b Fix test_httplib.
Martin v. Löwis <martin@v.loewis.de>
parents: 41824
diff changeset
84 lcKey = kv[0].decode('ascii').lower()
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
85 self.count.setdefault(lcKey, 0)
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
86 self.count[lcKey] += 1
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
87 list.append(self, item)
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
88
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
89 for explicit_header in True, False:
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
90 for header in 'Content-length', 'Host', 'Accept-encoding':
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
91 conn = client.HTTPConnection('example.com')
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
92 conn.sock = FakeSocket('blahblahblah')
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
93 conn._buffer = HeaderCountingBuffer()
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
94
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
95 body = 'spamspamspam'
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
96 headers = {}
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
97 if explicit_header:
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
98 headers[header] = str(len(body))
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
99 conn.request('POST', '/', body, headers)
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
100 self.assertEqual(conn._buffer.count[header.lower()], 1)
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
101
77048
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
102 def test_content_length_0(self):
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
103
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
104 class ContentLengthChecker(list):
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
105 def __init__(self):
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
106 list.__init__(self)
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
107 self.content_length = None
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
108 def append(self, item):
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
109 kv = item.split(b':', 1)
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
110 if len(kv) > 1 and kv[0].lower() == b'content-length':
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
111 self.content_length = kv[1].strip()
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
112 list.append(self, item)
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
113
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
114 # POST with empty body
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
115 conn = client.HTTPConnection('example.com')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
116 conn.sock = FakeSocket(None)
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
117 conn._buffer = ContentLengthChecker()
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
118 conn.request('POST', '/', '')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
119 self.assertEqual(conn._buffer.content_length, b'0',
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
120 'Header Content-Length not set')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
121
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
122 # PUT request with empty body
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
123 conn = client.HTTPConnection('example.com')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
124 conn.sock = FakeSocket(None)
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
125 conn._buffer = ContentLengthChecker()
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
126 conn.request('PUT', '/', '')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
127 self.assertEqual(conn._buffer.content_length, b'0',
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
128 'Header Content-Length not set')
6da1ab5f777d Fix Issue14721: Send Content-length: 0 for empty body () in the http.client requests
Senthil Kumaran <senthil@uthcode.com>
parents: 76604
diff changeset
129
65079
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
130 def test_putheader(self):
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
131 conn = client.HTTPConnection('example.com')
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
132 conn.sock = FakeSocket(None)
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
133 conn.putrequest('GET','/')
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
134 conn.putheader('Content-length', 42)
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
135 self.assertTrue(b'Content-length: 42' in conn._buffer)
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
136
66196
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
137 def test_ipv6host_header(self):
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
138 # Default host header on IPv6 transaction should wrapped by [] if
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
139 # its actual IPv6 address
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
140 expected = b'GET /foo HTTP/1.1\r\nHost: [2001::]:81\r\n' \
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
141 b'Accept-Encoding: identity\r\n\r\n'
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
142 conn = client.HTTPConnection('[2001::]:81')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
143 sock = FakeSocket('')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
144 conn.sock = sock
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
145 conn.request('GET', '/foo')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
146 self.assertTrue(sock.data.startswith(expected))
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
147
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
148 expected = b'GET /foo HTTP/1.1\r\nHost: [2001:102A::]\r\n' \
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
149 b'Accept-Encoding: identity\r\n\r\n'
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
150 conn = client.HTTPConnection('[2001:102A::]')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
151 sock = FakeSocket('')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
152 conn.sock = sock
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
153 conn.request('GET', '/foo')
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
154 self.assertTrue(sock.data.startswith(expected))
0f398188c7f6 Merged revisions 86450 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65083
diff changeset
155
65079
32c32b70aa33 Merged revisions 85205 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 63538
diff changeset
156
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
157 class BasicTest(TestCase):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
158 def test_status_lines(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
159 # Test HTTP status lines
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
160
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
161 body = "HTTP/1.1 200 Ok\r\n\r\nText"
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
162 sock = FakeSocket(body)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
163 resp = client.HTTPResponse(sock)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
164 resp.begin()
42436
3ed020e95b44 Fix tests to use bytes() where the actual sockets return bytes().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42133
diff changeset
165 self.assertEqual(resp.read(), b"Text")
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
166 self.assertTrue(resp.isclosed())
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
167
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
168 body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText"
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
169 sock = FakeSocket(body)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
170 resp = client.HTTPResponse(sock)
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
171 self.assertRaises(client.BadStatusLine, resp.begin)
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
172
59875
d9b8f273ab8d Merged revisions 78417 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58114
diff changeset
173 def test_bad_status_repr(self):
d9b8f273ab8d Merged revisions 78417 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58114
diff changeset
174 exc = client.BadStatusLine('')
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66187
diff changeset
175 self.assertEqual(repr(exc), '''BadStatusLine("\'\'",)''')
59875
d9b8f273ab8d Merged revisions 78417 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58114
diff changeset
176
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
177 def test_partial_reads(self):
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
178 # if we have a lenght, the system knows when to close itself
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
179 # same behaviour than when we read the whole thing with read()
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
180 body = "HTTP/1.1 200 Ok\r\nContent-Length: 4\r\n\r\nText"
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
181 sock = FakeSocket(body)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
182 resp = client.HTTPResponse(sock)
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
183 resp.begin()
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
184 self.assertEqual(resp.read(2), b'Te')
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
185 self.assertFalse(resp.isclosed())
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
186 self.assertEqual(resp.read(2), b'xt')
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
187 self.assertTrue(resp.isclosed())
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43351
diff changeset
188
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
189 def test_host_port(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
190 # Check invalid host_port
22495
91f9a24887cb add test of InvalidURL
Skip Montanaro <skip@pobox.com>
parents: 20089
diff changeset
191
72981
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
192 for hp in ("www.python.org:abc", "user:password@www.python.org"):
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
193 self.assertRaises(client.InvalidURL, client.HTTPConnection, hp)
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
194
42590
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
195 for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000",
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
196 "fe80::207:e9ff:fe9b", 8000),
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
197 ("www.python.org:80", "www.python.org", 80),
72981
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
198 ("www.python.org:", "www.python.org", 80),
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
199 ("www.python.org", "www.python.org", 80),
72981
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
200 ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
201 ("[fe80::207:e9ff:fe9b]:", "fe80::207:e9ff:fe9b", 80)):
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
202 c = client.HTTPConnection(hp)
42590
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
203 self.assertEqual(h, c.host)
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
204 self.assertEqual(p, c.port)
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
205
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
206 def test_response_headers(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
207 # test response with multiple message headers with the same field name.
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
208 text = ('HTTP/1.1 200 OK\r\n'
42590
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
209 'Set-Cookie: Customer="WILE_E_COYOTE"; '
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
210 'Version="1"; Path="/acme"\r\n'
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
211 'Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1";'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
212 ' Path="/acme"\r\n'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
213 '\r\n'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
214 'No body\r\n')
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
215 hdr = ('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
216 ', '
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
217 'Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"')
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
218 s = FakeSocket(text)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
219 r = client.HTTPResponse(s)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
220 r.begin()
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
221 cookies = r.getheader("Set-Cookie")
42590
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
222 self.assertEqual(cookies, hdr)
33488
71ed4b35fdc4 Search from the end of the host/port combination to find the colon which
Skip Montanaro <skip@pobox.com>
parents: 33001
diff changeset
223
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
224 def test_read_head(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
225 # Test that the library doesn't attempt to read any data
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
226 # from a HEAD request. (Tickles SF bug #622042.)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
227 sock = FakeSocket(
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
228 'HTTP/1.1 200 OK\r\n'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
229 'Content-Length: 14432\r\n'
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
230 '\r\n',
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
231 NoEOFStringIO)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
232 resp = client.HTTPResponse(sock, method="HEAD")
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
233 resp.begin()
43351
84dc86f21196 Fix for bug 1148: str/bytes issue in httplib's _safe_read().
Guido van Rossum <guido@python.org>
parents: 43099
diff changeset
234 if resp.read():
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
235 self.fail("Did not expect response from HEAD request")
27348
5acf6967d6dd Fix for SF bug 661340: test_httplib fails on the mac.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24442
diff changeset
236
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
237 def test_send_file(self):
42965
d1a17cd26a4b Make test_httplib pass.
Guido van Rossum <guido@python.org>
parents: 42902
diff changeset
238 expected = (b'GET /foo HTTP/1.1\r\nHost: example.com\r\n'
d1a17cd26a4b Make test_httplib pass.
Guido van Rossum <guido@python.org>
parents: 42902
diff changeset
239 b'Accept-Encoding: identity\r\nContent-Length:')
28978
83fe0f5c9359 SF bug 622042: Don't expect response body from HEAD request.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 27348
diff changeset
240
65738
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
241 with open(__file__, 'rb') as body:
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
242 conn = client.HTTPConnection('example.com')
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
243 sock = FakeSocket(body)
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
244 conn.sock = sock
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
245 conn.request('GET', '/foo', body)
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
246 self.assertTrue(sock.data.startswith(expected), '%r != %r' %
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
247 (sock.data[:len(expected)], expected))
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
248
56293
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
249 def test_send(self):
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
250 expected = b'this is a test this is only a test'
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
251 conn = client.HTTPConnection('example.com')
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
252 sock = FakeSocket(None)
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
253 conn.sock = sock
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
254 conn.send(expected)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
255 self.assertEqual(expected, sock.data)
56293
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
256 sock.data = b''
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
257 conn.send(array.array('b', expected))
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
258 self.assertEqual(expected, sock.data)
56293
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
259 sock.data = b''
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
260 conn.send(io.BytesIO(expected))
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
261 self.assertEqual(expected, sock.data)
56293
a17cd9fcdd46 Merged revisions 75137 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
262
67046
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
263 def test_send_iter(self):
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
264 expected = b'GET /foo HTTP/1.1\r\nHost: example.com\r\n' \
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
265 b'Accept-Encoding: identity\r\nContent-Length: 11\r\n' \
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
266 b'\r\nonetwothree'
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
267
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
268 def body():
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
269 yield b"one"
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
270 yield b"two"
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
271 yield b"three"
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
272
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
273 conn = client.HTTPConnection('example.com')
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
274 sock = FakeSocket("")
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
275 conn.sock = sock
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
276 conn.request('GET', '/foo', body(), {'Content-Length': '11'})
67335
f0eb3448ce38 test_httplib: fix a DeprecationWarning, assertEquals=>assertEqual
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67046
diff changeset
277 self.assertEqual(sock.data, expected)
67046
6f56b247a7cd Issue3243 - Support iterable bodies in httplib. Patch contributions by Xuanji Li and Chris AtLee.
Senthil Kumaran <orsenthil@gmail.com>
parents: 67020
diff changeset
278
71688
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
279 def test_send_type_error(self):
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
280 # See: Issue #12676
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
281 conn = client.HTTPConnection('example.com')
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
282 conn.sock = FakeSocket('')
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
283 with self.assertRaises(TypeError):
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
284 conn.request('POST', 'test', conn)
1013c9fbd83c Fix closes Issue12676 - Invalid identifier used in TypeError message in http.client.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
285
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
286 def test_chunked(self):
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
287 chunked_start = (
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
288 'HTTP/1.1 200 OK\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
289 'Transfer-Encoding: chunked\r\n\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
290 'a\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
291 'hello worl\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
292 '1\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
293 'd\r\n'
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
294 )
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
295 sock = FakeSocket(chunked_start + '0\r\n')
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
296 resp = client.HTTPResponse(sock, method="GET")
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
297 resp.begin()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
298 self.assertEqual(resp.read(), b'hello world')
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
299 resp.close()
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
300
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
301 for x in ('', 'foo\r\n'):
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
302 sock = FakeSocket(chunked_start + x)
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
303 resp = client.HTTPResponse(sock, method="GET")
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
304 resp.begin()
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
305 try:
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
306 resp.read()
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
307 except client.IncompleteRead as i:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
308 self.assertEqual(i.partial, b'hello world')
51954
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
309 self.assertEqual(repr(i),'IncompleteRead(11 bytes read)')
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
310 self.assertEqual(str(i),'IncompleteRead(11 bytes read)')
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
311 else:
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
312 self.fail('IncompleteRead expected')
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
313 finally:
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
314 resp.close()
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
315
61061
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
316 def test_chunked_head(self):
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
317 chunked_start = (
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
318 'HTTP/1.1 200 OK\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
319 'Transfer-Encoding: chunked\r\n\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
320 'a\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
321 'hello world\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
322 '1\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
323 'd\r\n'
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
324 )
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
325 sock = FakeSocket(chunked_start + '0\r\n')
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
326 resp = client.HTTPResponse(sock, method="HEAD")
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
327 resp.begin()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
328 self.assertEqual(resp.read(), b'')
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
329 self.assertEqual(resp.status, 200)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
330 self.assertEqual(resp.reason, 'OK')
62073
84988bb91fbf Merged revisions 81695 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 61061
diff changeset
331 self.assertTrue(resp.isclosed())
61061
6950eab51ffe Merged revisions 80587 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 56293
diff changeset
332
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
333 def test_negative_content_length(self):
50540
4229a4b14f1d Merged revisions 67653,67655,67682-67683,67724,67755,67780-67783,67786,67789,67841,67843,67865,67881,67884,67925,67929,67931 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
334 sock = FakeSocket(
4229a4b14f1d Merged revisions 67653,67655,67682-67683,67724,67755,67780-67783,67786,67789,67841,67843,67865,67881,67884,67925,67929,67931 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
335 'HTTP/1.1 200 OK\r\nContent-Length: -1\r\n\r\nHello\r\n')
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
336 resp = client.HTTPResponse(sock, method="GET")
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
337 resp.begin()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
338 self.assertEqual(resp.read(), b'Hello\r\n')
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
339 resp.close()
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
340
51954
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
341 def test_incomplete_read(self):
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
342 sock = FakeSocket('HTTP/1.1 200 OK\r\nContent-Length: 10\r\n\r\nHello\r\n')
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
343 resp = client.HTTPResponse(sock, method="GET")
51954
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
344 resp.begin()
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
345 try:
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
346 resp.read()
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
347 except client.IncompleteRead as i:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
348 self.assertEqual(i.partial, b'Hello\r\n')
51954
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
349 self.assertEqual(repr(i),
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
350 "IncompleteRead(7 bytes read, 3 more expected)")
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
351 self.assertEqual(str(i),
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
352 "IncompleteRead(7 bytes read, 3 more expected)")
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
353 else:
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
354 self.fail('IncompleteRead expected')
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
355 finally:
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
356 resp.close()
4da5f0ded362 Merged revisions 70109 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51533
diff changeset
357
52375
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
358 def test_epipe(self):
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
359 sock = EPipeSocket(
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
360 "HTTP/1.0 401 Authorization Required\r\n"
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
361 "Content-type: text/html\r\n"
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
362 "WWW-Authenticate: Basic realm=\"example\"\r\n",
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
363 b"Content-Length")
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
364 conn = client.HTTPConnection("example.com")
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
365 conn.sock = sock
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
366 self.assertRaises(socket.error,
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
367 lambda: conn.request("PUT", "/url", "body"))
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
368 resp = conn.getresponse()
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
369 self.assertEqual(401, resp.status)
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
370 self.assertEqual("Basic realm=\"example\"",
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
371 resp.getheader("www-authenticate"))
45504
1b6fb5699634 Merged revisions 61034-61036,61038-61048 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
372
67029
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
373 # Test lines overflowing the max line size (_MAXLINE in http.client)
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
374
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
375 def test_overflowing_status_line(self):
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
376 body = "HTTP/1.1 200 Ok" + "k" * 65536 + "\r\n"
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
377 resp = client.HTTPResponse(FakeSocket(body))
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
378 self.assertRaises((client.LineTooLong, client.BadStatusLine), resp.begin)
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
379
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
380 def test_overflowing_header_line(self):
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
381 body = (
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
382 'HTTP/1.1 200 OK\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
383 'X-Foo: bar' + 'r' * 65536 + '\r\n\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
384 )
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
385 resp = client.HTTPResponse(FakeSocket(body))
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
386 self.assertRaises(client.LineTooLong, resp.begin)
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
387
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
388 def test_overflowing_chunked_line(self):
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
389 body = (
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
390 'HTTP/1.1 200 OK\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
391 'Transfer-Encoding: chunked\r\n\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
392 + '0' * 65536 + 'a\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
393 'hello world\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
394 '0\r\n'
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
395 )
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
396 resp = client.HTTPResponse(FakeSocket(body))
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
397 resp.begin()
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
398 self.assertRaises(client.LineTooLong, resp.read)
3c182f71d4c9 Merged revisions 87373,87381 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
399
76604
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
400 def test_early_eof(self):
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
401 # Test httpresponse with no \r\n termination,
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
402 body = "HTTP/1.1 200 Ok"
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
403 sock = FakeSocket(body)
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
404 resp = client.HTTPResponse(sock)
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
405 resp.begin()
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
406 self.assertEqual(resp.read(), b'')
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
407 self.assertTrue(resp.isclosed())
afabb0635b15 httplib test for early eof response. related to Issue13684
Senthil Kumaran <senthil@uthcode.com>
parents: 73136
diff changeset
408
36560
9a8396f460af Move test case for HTTP response dict to httplib.
Georg Brandl <georg@python.org>
parents: 33497
diff changeset
409 class OfflineTest(TestCase):
9a8396f460af Move test case for HTTP response dict to httplib.
Georg Brandl <georg@python.org>
parents: 33497
diff changeset
410 def test_responses(self):
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66196
diff changeset
411 self.assertEqual(client.responses[client.NOT_FOUND], "Not Found")
36560
9a8396f460af Move test case for HTTP response dict to httplib.
Georg Brandl <georg@python.org>
parents: 33497
diff changeset
412
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
413
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
414 class SourceAddressTest(TestCase):
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
415 def setUp(self):
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
416 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
417 self.port = support.bind_port(self.serv)
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
418 self.source_port = support.find_unused_port()
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
419 self.serv.listen(5)
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
420 self.conn = None
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
421
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
422 def tearDown(self):
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
423 if self.conn:
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
424 self.conn.close()
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
425 self.conn = None
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
426 self.serv.close()
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
427 self.serv = None
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
428
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
429 def testHTTPConnectionSourceAddress(self):
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
430 self.conn = client.HTTPConnection(HOST, self.port,
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
431 source_address=('', self.source_port))
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
432 self.conn.connect()
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
433 self.assertEqual(self.conn.sock.getsockname()[1], self.source_port)
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
434
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
435 @unittest.skipIf(not hasattr(client, 'HTTPSConnection'),
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
436 'http.client.HTTPSConnection not defined')
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
437 def testHTTPSConnectionSourceAddress(self):
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
438 self.conn = client.HTTPSConnection(HOST, self.port,
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
439 source_address=('', self.source_port))
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
440 # We don't test anything here other the constructor not barfing as
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
441 # this code doesn't deal with setting up an active running SSL server
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
442 # for an ssl_wrapped connect() to actually return from.
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
443
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56293
diff changeset
444
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
445 class TimeoutTest(TestCase):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45504
diff changeset
446 PORT = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
447
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
448 def setUp(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
449 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
450 TimeoutTest.PORT = support.bind_port(self.serv)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
451 self.serv.listen(5)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
452
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
453 def tearDown(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
454 self.serv.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
455 self.serv = None
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
456
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
457 def testTimeoutAttribute(self):
42590
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
458 # This will prove that the timeout gets through HTTPConnection
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
459 # and into the socket.
1b91faa0de2d Remove Python 1.5 compatibility layer from httplib.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42436
diff changeset
460
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
461 # default -- use global socket timeout
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 52375
diff changeset
462 self.assertTrue(socket.getdefaulttimeout() is None)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
463 socket.setdefaulttimeout(30)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
464 try:
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
465 httpConn = client.HTTPConnection(HOST, TimeoutTest.PORT)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
466 httpConn.connect()
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
467 finally:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
468 socket.setdefaulttimeout(None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
469 self.assertEqual(httpConn.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
470 httpConn.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
471
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
472 # no timeout -- do not use global socket default
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 52375
diff changeset
473 self.assertTrue(socket.getdefaulttimeout() is None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
474 socket.setdefaulttimeout(30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
475 try:
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
476 httpConn = client.HTTPConnection(HOST, TimeoutTest.PORT,
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45504
diff changeset
477 timeout=None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
478 httpConn.connect()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
479 finally:
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
480 socket.setdefaulttimeout(None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
481 self.assertEqual(httpConn.sock.gettimeout(), None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
482 httpConn.close()
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
483
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
484 # a value
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
485 httpConn = client.HTTPConnection(HOST, TimeoutTest.PORT, timeout=30)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
486 httpConn.connect()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
487 self.assertEqual(httpConn.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
488 httpConn.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
489
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
490
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
491 class HTTPSTest(TestCase):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
492
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
493 def setUp(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
494 if not hasattr(client, 'HTTPSConnection'):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
495 self.skipTest('ssl support required')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
496
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
497 def make_server(self, certfile):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
498 from test.ssl_servers import make_https_server
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
499 return make_https_server(self, certfile)
41824
24b60622b944 Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
500
24b60622b944 Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
501 def test_attributes(self):
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
502 # simple test to check it's storing the timeout
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
503 h = client.HTTPSConnection(HOST, TimeoutTest.PORT, timeout=30)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
504 self.assertEqual(h.timeout, 30)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
505
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
506 def _check_svn_python_org(self, resp):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
507 # Just a simple check that everything went fine
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
508 server_string = resp.getheader('server')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
509 self.assertIn('Apache', server_string)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
510
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
511 def test_networked(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
512 # Default settings: no cert verification is done
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
513 support.requires('network')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
514 with support.transient_internet('svn.python.org'):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
515 h = client.HTTPSConnection('svn.python.org', 443)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
516 h.request('GET', '/')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
517 resp = h.getresponse()
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
518 self._check_svn_python_org(resp)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
519
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
520 def test_networked_good_cert(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
521 # We feed a CA cert that validates the server's cert
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
522 import ssl
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
523 support.requires('network')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
524 with support.transient_internet('svn.python.org'):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
525 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
526 context.verify_mode = ssl.CERT_REQUIRED
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
527 context.load_verify_locations(CACERT_svn_python_org)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
528 h = client.HTTPSConnection('svn.python.org', 443, context=context)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
529 h.request('GET', '/')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
530 resp = h.getresponse()
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
531 self._check_svn_python_org(resp)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
532
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
533 def test_networked_bad_cert(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
534 # We feed a "CA" cert that is unrelated to the server's cert
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
535 import ssl
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
536 support.requires('network')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
537 with support.transient_internet('svn.python.org'):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
538 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
539 context.verify_mode = ssl.CERT_REQUIRED
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
540 context.load_verify_locations(CERT_localhost)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
541 h = client.HTTPSConnection('svn.python.org', 443, context=context)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
542 with self.assertRaises(ssl.SSLError):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
543 h.request('GET', '/')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
544
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
545 def test_local_good_hostname(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
546 # The (valid) cert validates the HTTP hostname
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
547 import ssl
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
548 from test.ssl_servers import make_https_server
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
549 server = make_https_server(self, CERT_localhost)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
550 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
551 context.verify_mode = ssl.CERT_REQUIRED
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
552 context.load_verify_locations(CERT_localhost)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
553 h = client.HTTPSConnection('localhost', server.port, context=context)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
554 h.request('GET', '/nonexistent')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
555 resp = h.getresponse()
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
556 self.assertEqual(resp.status, 404)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
557
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
558 def test_local_bad_hostname(self):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
559 # The (valid) cert doesn't validate the HTTP hostname
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
560 import ssl
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
561 from test.ssl_servers import make_https_server
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
562 server = make_https_server(self, CERT_fakehostname)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
563 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
564 context.verify_mode = ssl.CERT_REQUIRED
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
565 context.load_verify_locations(CERT_fakehostname)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
566 h = client.HTTPSConnection('localhost', server.port, context=context)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
567 with self.assertRaises(ssl.CertificateError):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
568 h.request('GET', '/')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
569 # Same with explicit check_hostname=True
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
570 h = client.HTTPSConnection('localhost', server.port, context=context,
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
571 check_hostname=True)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
572 with self.assertRaises(ssl.CertificateError):
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
573 h.request('GET', '/')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
574 # With check_hostname=False, the mismatching is ignored
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
575 h = client.HTTPSConnection('localhost', server.port, context=context,
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
576 check_hostname=False)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
577 h.request('GET', '/nonexistent')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
578 resp = h.getresponse()
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
579 self.assertEqual(resp.status, 404)
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
580
73136
a3939c2f6727 Issue #10860: Skip the new test if HTTPS is not available
Petri Lehtinen <petri@digip.org>
parents: 72981
diff changeset
581 @unittest.skipIf(not hasattr(client, 'HTTPSConnection'),
a3939c2f6727 Issue #10860: Skip the new test if HTTPS is not available
Petri Lehtinen <petri@digip.org>
parents: 72981
diff changeset
582 'http.client.HTTPSConnection not available')
72981
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
583 def test_host_port(self):
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
584 # Check invalid host_port
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
585
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
586 for hp in ("www.python.org:abc", "user:password@www.python.org"):
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
587 self.assertRaises(client.InvalidURL, client.HTTPSConnection, hp)
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
588
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
589 for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000",
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
590 "fe80::207:e9ff:fe9b", 8000),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
591 ("www.python.org:443", "www.python.org", 443),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
592 ("www.python.org:", "www.python.org", 443),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
593 ("www.python.org", "www.python.org", 443),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
594 ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 443),
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
595 ("[fe80::207:e9ff:fe9b]:", "fe80::207:e9ff:fe9b",
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
596 443)):
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
597 c = client.HTTPSConnection(hp)
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
598 self.assertEqual(h, c.host)
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
599 self.assertEqual(p, c.port)
6ac59218c049 Fixes #10860: Handle empty port after port delimiter in httplib
Łukasz Langa <lukasz@langa.pl>
parents: 72426
diff changeset
600
41824
24b60622b944 Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
601
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
602 class RequestBodyTest(TestCase):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
603 """Test cases where a request includes a message body."""
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
604
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
605 def setUp(self):
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
606 self.conn = client.HTTPConnection('example.com')
52375
a726f7928561 Remove special logic that closes HTTPConnection socket on EPIPE.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52372
diff changeset
607 self.conn.sock = self.sock = FakeSocket("")
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
608 self.conn.sock = self.sock
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
609
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
610 def get_headers_and_fp(self):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
611 f = io.BytesIO(self.sock.data)
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
612 f.readline() # read the request line
52372
4265d6c7c074 Replace references to httplib with http.client.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 52370
diff changeset
613 message = client.parse_headers(f)
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
614 return message, f
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
615
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
616 def test_manual_content_length(self):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
617 # Set an incorrect content-length so that we can verify that
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
618 # it will not be over-ridden by the library.
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
619 self.conn.request("PUT", "/url", "body",
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
620 {"Content-Length": "42"})
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
621 message, f = self.get_headers_and_fp()
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
622 self.assertEqual("42", message.get("content-length"))
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
623 self.assertEqual(4, len(f.read()))
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
624
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
625 def test_ascii_body(self):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
626 self.conn.request("PUT", "/url", "body")
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
627 message, f = self.get_headers_and_fp()
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
628 self.assertEqual("text/plain", message.get_content_type())
67397
8c448a4277a0 Issue 10825: Minor updates to the test suite.
Raymond Hettinger <python@rcn.com>
parents: 67335
diff changeset
629 self.assertIsNone(message.get_charset())
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
630 self.assertEqual("4", message.get("content-length"))
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
631 self.assertEqual(b'body', f.read())
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
632
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
633 def test_latin1_body(self):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
634 self.conn.request("PUT", "/url", "body\xc1")
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
635 message, f = self.get_headers_and_fp()
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
636 self.assertEqual("text/plain", message.get_content_type())
67397
8c448a4277a0 Issue 10825: Minor updates to the test suite.
Raymond Hettinger <python@rcn.com>
parents: 67335
diff changeset
637 self.assertIsNone(message.get_charset())
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
638 self.assertEqual("5", message.get("content-length"))
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
639 self.assertEqual(b'body\xc1', f.read())
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
640
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
641 def test_bytes_body(self):
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
642 self.conn.request("PUT", "/url", b"body\xc1")
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
643 message, f = self.get_headers_and_fp()
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
644 self.assertEqual("text/plain", message.get_content_type())
67397
8c448a4277a0 Issue 10825: Minor updates to the test suite.
Raymond Hettinger <python@rcn.com>
parents: 67335
diff changeset
645 self.assertIsNone(message.get_charset())
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
646 self.assertEqual("5", message.get("content-length"))
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
647 self.assertEqual(b'body\xc1', f.read())
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
648
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
649 def test_file_body(self):
72426
950515bff239 test_httplib removes temporary files
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71688
diff changeset
650 self.addCleanup(support.unlink, support.TESTFN)
65738
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
651 with open(support.TESTFN, "w") as f:
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
652 f.write("body")
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
653 with open(support.TESTFN) as f:
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
654 self.conn.request("PUT", "/url", f)
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
655 message, f = self.get_headers_and_fp()
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
656 self.assertEqual("text/plain", message.get_content_type())
67397
8c448a4277a0 Issue 10825: Minor updates to the test suite.
Raymond Hettinger <python@rcn.com>
parents: 67335
diff changeset
657 self.assertIsNone(message.get_charset())
65738
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
658 self.assertEqual("4", message.get("content-length"))
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
659 self.assertEqual(b'body', f.read())
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
660
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
661 def test_binary_file_body(self):
72426
950515bff239 test_httplib removes temporary files
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71688
diff changeset
662 self.addCleanup(support.unlink, support.TESTFN)
65738
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
663 with open(support.TESTFN, "wb") as f:
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
664 f.write(b"body\xc1")
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
665 with open(support.TESTFN, "rb") as f:
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
666 self.conn.request("PUT", "/url", f)
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
667 message, f = self.get_headers_and_fp()
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
668 self.assertEqual("text/plain", message.get_content_type())
67397
8c448a4277a0 Issue 10825: Minor updates to the test suite.
Raymond Hettinger <python@rcn.com>
parents: 67335
diff changeset
669 self.assertIsNone(message.get_charset())
65738
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
670 self.assertEqual("5", message.get("content-length"))
5c013ec27327 Move test_httplib over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65247
diff changeset
671 self.assertEqual(b'body\xc1', f.read())
52370
8b691690babd Fix some string encoding issues with entity bodies in HTTP requests.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 51954
diff changeset
672
63538
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
673
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
674 class HTTPResponseTest(TestCase):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
675
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
676 def setUp(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
677 body = "HTTP/1.1 200 Ok\r\nMy-Header: first-value\r\nMy-Header: \
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
678 second-value\r\n\r\nText"
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
679 sock = FakeSocket(body)
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
680 self.resp = client.HTTPResponse(sock)
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
681 self.resp.begin()
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
682
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
683 def test_getting_header(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
684 header = self.resp.getheader('My-Header')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
685 self.assertEqual(header, 'first-value, second-value')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
686
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
687 header = self.resp.getheader('My-Header', 'some default')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
688 self.assertEqual(header, 'first-value, second-value')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
689
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
690 def test_getting_nonexistent_header_with_string_default(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
691 header = self.resp.getheader('No-Such-Header', 'default-value')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
692 self.assertEqual(header, 'default-value')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
693
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
694 def test_getting_nonexistent_header_with_iterable_default(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
695 header = self.resp.getheader('No-Such-Header', ['default', 'values'])
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
696 self.assertEqual(header, 'default, values')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
697
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
698 header = self.resp.getheader('No-Such-Header', ('default', 'values'))
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
699 self.assertEqual(header, 'default, values')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
700
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
701 def test_getting_nonexistent_header_without_default(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
702 header = self.resp.getheader('No-Such-Header')
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
703 self.assertEqual(header, None)
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
704
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
705 def test_getting_header_defaultint(self):
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
706 header = self.resp.getheader('No-Such-Header',default=42)
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
707 self.assertEqual(header, 42)
904ef4bbff5e Merged revisions 83521 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 62073
diff changeset
708
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
709 def test_main(verbose=None):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
710 support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65082
diff changeset
711 HTTPSTest, RequestBodyTest, SourceAddressTest,
63537
39e14df765e4 Fix Issue8572 - httplib getheader() throws error instead of default
Senthil Kumaran <orsenthil@gmail.com>
parents: 62072
diff changeset
712 HTTPResponseTest)
33001
4fd59651fe3f SF bug 874842 and patch 997626: httplib bugs
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29778
diff changeset
713
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
714 if __name__ == '__main__':
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 36560
diff changeset
715 test_main()