annotate Lib/test/test_httpservers.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents d6ad412dee40
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
1 """Unittests for the various HTTPServer modules.
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
2
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
3 Written by Cody A.W. Somerville <cody-somerville@ubuntu.com>,
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
4 Josip Dzolonga, and Michael Otteneder for the 2007/08 GHOP contest.
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
5 """
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
6
47318
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47278
diff changeset
7 from http.server import BaseHTTPRequestHandler, HTTPServer, \
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47278
diff changeset
8 SimpleHTTPRequestHandler, CGIHTTPRequestHandler
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
9 from http import server
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
10
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
11 import os
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
12 import sys
65029
d787ef9acb72 Add BaseHTTPRequestHandler related tests.
Senthil Kumaran <orsenthil@gmail.com>
parents: 60972
diff changeset
13 import re
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
14 import base64
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
15 import shutil
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47635
diff changeset
16 import urllib.parse
47318
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47278
diff changeset
17 import http.client
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
18 import tempfile
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
19 from io import BytesIO
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
20
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
21 import unittest
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
22 from test import support
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 60970
diff changeset
23 threading = support.import_module('threading')
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
24
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
25 class NoLogRequestHandler:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
26 def log_message(self, *args):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
27 # don't write log messages to stderr
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
28 pass
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
29
47635
f31e32a2013c Patch for issue 2848, mostly by Humberto Diogenes, with a couple of
Barry Warsaw <barry@python.org>
parents: 47318
diff changeset
30 def read(self, n=None):
f31e32a2013c Patch for issue 2848, mostly by Humberto Diogenes, with a couple of
Barry Warsaw <barry@python.org>
parents: 47318
diff changeset
31 return ''
f31e32a2013c Patch for issue 2848, mostly by Humberto Diogenes, with a couple of
Barry Warsaw <barry@python.org>
parents: 47318
diff changeset
32
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
33
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
34 class TestServerThread(threading.Thread):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
35 def __init__(self, test_object, request_handler):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
36 threading.Thread.__init__(self)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
37 self.request_handler = request_handler
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
38 self.test_object = test_object
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
39
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
40 def run(self):
68776
fa20590d4694 Try to strengthen test_httpservers (issue #11617)
Antoine Pitrou <solipsis@pitrou.net>
parents: 68586
diff changeset
41 self.server = HTTPServer(('localhost', 0), self.request_handler)
fa20590d4694 Try to strengthen test_httpservers (issue #11617)
Antoine Pitrou <solipsis@pitrou.net>
parents: 68586
diff changeset
42 self.test_object.HOST, self.test_object.PORT = self.server.socket.getsockname()
60972
9165232e6d1a Merged revisions 80487,80489 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60063
diff changeset
43 self.test_object.server_started.set()
9165232e6d1a Merged revisions 80487,80489 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60063
diff changeset
44 self.test_object = None
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
45 try:
60972
9165232e6d1a Merged revisions 80487,80489 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60063
diff changeset
46 self.server.serve_forever(0.05)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
47 finally:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
48 self.server.server_close()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
49
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
50 def stop(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
51 self.server.shutdown()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
52
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
53
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
54 class BaseTestCase(unittest.TestCase):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
55 def setUp(self):
56871
8fb8fd3b67cf Merged revisions 75838 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56592
diff changeset
56 self._threads = support.threading_setup()
56592
098ba3a63730 Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents: 55593
diff changeset
57 os.environ = support.EnvironmentVarGuard()
60972
9165232e6d1a Merged revisions 80487,80489 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60063
diff changeset
58 self.server_started = threading.Event()
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
59 self.thread = TestServerThread(self, self.request_handler)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
60 self.thread.start()
60972
9165232e6d1a Merged revisions 80487,80489 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60063
diff changeset
61 self.server_started.wait()
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
62
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
63 def tearDown(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
64 self.thread.stop()
79287
247d3e3c08ca Speed up test_httpservers by avoiding a one-second cleanup wait after each test case.
Antoine Pitrou <solipsis@pitrou.net>
parents: 78433
diff changeset
65 self.thread = None
56592
098ba3a63730 Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents: 55593
diff changeset
66 os.environ.__exit__()
56871
8fb8fd3b67cf Merged revisions 75838 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56592
diff changeset
67 support.threading_cleanup(*self._threads)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
68
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
69 def request(self, uri, method='GET', body=None, headers={}):
68776
fa20590d4694 Try to strengthen test_httpservers (issue #11617)
Antoine Pitrou <solipsis@pitrou.net>
parents: 68586
diff changeset
70 self.connection = http.client.HTTPConnection(self.HOST, self.PORT)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
71 self.connection.request(method, uri, body, headers)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
72 return self.connection.getresponse()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
73
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
74
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
75 class BaseHTTPServerTestCase(BaseTestCase):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
76 class request_handler(NoLogRequestHandler, BaseHTTPRequestHandler):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
77 protocol_version = 'HTTP/1.1'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
78 default_request_version = 'HTTP/1.1'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
79
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
80 def do_TEST(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
81 self.send_response(204)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
82 self.send_header('Content-Type', 'text/html')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
83 self.send_header('Connection', 'close')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
84 self.end_headers()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
85
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
86 def do_KEEP(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
87 self.send_response(204)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
88 self.send_header('Content-Type', 'text/html')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
89 self.send_header('Connection', 'keep-alive')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
90 self.end_headers()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
91
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
92 def do_KEYERROR(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
93 self.send_error(999)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
94
79664
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
95 def do_NOTFOUND(self):
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
96 self.send_error(404)
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
97
82669
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
98 def do_EXPLAINERROR(self):
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
99 self.send_error(999, "Short Message",
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
100 "This is a long \n explaination")
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
101
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
102 def do_CUSTOM(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
103 self.send_response(999)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
104 self.send_header('Content-Type', 'text/html')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
105 self.send_header('Connection', 'close')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
106 self.end_headers()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
107
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
108 def do_LATINONEHEADER(self):
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
109 self.send_response(999)
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
110 self.send_header('X-Special', 'Dängerous Mind')
67720
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
111 self.send_header('Connection', 'close')
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
112 self.end_headers()
67720
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
113 body = self.headers['x-special-incoming'].encode('utf-8')
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
114 self.wfile.write(body)
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
115
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
116 def setUp(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
117 BaseTestCase.setUp(self)
68776
fa20590d4694 Try to strengthen test_httpservers (issue #11617)
Antoine Pitrou <solipsis@pitrou.net>
parents: 68586
diff changeset
118 self.con = http.client.HTTPConnection(self.HOST, self.PORT)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
119 self.con.connect()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
120
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
121 def test_command(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
122 self.con.request('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
123 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
124 self.assertEqual(res.status, 501)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
125
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
126 def test_request_line_trimming(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
127 self.con._http_vsn_str = 'HTTP/1.1\n'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
128 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
129 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
130 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
131 self.assertEqual(res.status, 501)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
132
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
133 def test_version_bogus(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
134 self.con._http_vsn_str = 'FUBAR'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
135 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
136 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
137 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
138 self.assertEqual(res.status, 400)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
139
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
140 def test_version_digits(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
141 self.con._http_vsn_str = 'HTTP/9.9.9'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
142 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
143 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
144 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
145 self.assertEqual(res.status, 400)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
146
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
147 def test_version_none_get(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
148 self.con._http_vsn_str = ''
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
149 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
150 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
151 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
152 self.assertEqual(res.status, 501)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
153
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
154 def test_version_none(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
155 self.con._http_vsn_str = ''
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
156 self.con.putrequest('PUT', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
157 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
158 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
159 self.assertEqual(res.status, 400)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
160
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
161 def test_version_invalid(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
162 self.con._http_vsn = 99
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
163 self.con._http_vsn_str = 'HTTP/9.9'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
164 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
165 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
166 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
167 self.assertEqual(res.status, 505)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
168
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
169 def test_send_blank(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
170 self.con._http_vsn_str = ''
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
171 self.con.putrequest('', '')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
172 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
173 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
174 self.assertEqual(res.status, 400)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
175
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
176 def test_header_close(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
177 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
178 self.con.putheader('Connection', 'close')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
179 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
180 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
181 self.assertEqual(res.status, 501)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
182
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
183 def test_head_keep_alive(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
184 self.con._http_vsn_str = 'HTTP/1.1'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
185 self.con.putrequest('GET', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
186 self.con.putheader('Connection', 'keep-alive')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
187 self.con.endheaders()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
188 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
189 self.assertEqual(res.status, 501)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
190
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
191 def test_handler(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
192 self.con.request('TEST', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
193 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
194 self.assertEqual(res.status, 204)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
195
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
196 def test_return_header_keep_alive(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
197 self.con.request('KEEP', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
198 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
199 self.assertEqual(res.getheader('Connection'), 'keep-alive')
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
200 self.con.request('TEST', '/')
65788
211858723b8c Fix ResourceWarning for an unclosed socket.
Brian Curtin <brian.curtin@gmail.com>
parents: 65740
diff changeset
201 self.addCleanup(self.con.close)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
202
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
203 def test_internal_key_error(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
204 self.con.request('KEYERROR', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
205 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
206 self.assertEqual(res.status, 999)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
207
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
208 def test_return_custom_status(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
209 self.con.request('CUSTOM', '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
210 res = self.con.getresponse()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
211 self.assertEqual(res.status, 999)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
212
82669
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
213 def test_return_explain_error(self):
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
214 self.con.request('EXPLAINERROR', '/')
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
215 res = self.con.getresponse()
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
216 self.assertEqual(res.status, 999)
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
217 self.assertTrue(int(res.getheader('Content-Length')))
59292f366b53 #1291 http.server's send_error takes an optional explain argument
Senthil Kumaran <senthil@uthcode.com>
parents: 81996
diff changeset
218
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
219 def test_latin1_header(self):
67720
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
220 self.con.request('LATINONEHEADER', '/', headers={
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
221 'X-Special-Incoming': 'Ärger mit Unicode'
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
222 })
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
223 res = self.con.getresponse()
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
224 self.assertEqual(res.getheader('X-Special'), 'Dängerous Mind')
67720
b3cadf5cf742 To match the behaviour of HTTP server, the HTTP client library now also encodes
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67719
diff changeset
225 self.assertEqual(res.read(), 'Ärger mit Unicode'.encode('utf-8'))
67719
30c91342b6ae Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
Armin Ronacher <armin.ronacher@active-4.com>
parents: 67183
diff changeset
226
79664
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
227 def test_error_content_length(self):
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
228 # Issue #16088: standard error responses should have a content-length
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
229 self.con.request('NOTFOUND', '/')
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
230 res = self.con.getresponse()
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
231 self.assertEqual(res.status, 404)
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
232 data = res.read()
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
233 self.assertEqual(int(res.getheader('Content-Length')), len(data))
ee34cb049a10 Issue #16088: BaseHTTPRequestHandler's send_error method includes a
Senthil Kumaran <senthil@uthcode.com>
parents: 79288
diff changeset
234
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
235
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
236 class SimpleHTTPServerTestCase(BaseTestCase):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
237 class request_handler(NoLogRequestHandler, SimpleHTTPRequestHandler):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
238 pass
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
239
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
240 def setUp(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
241 BaseTestCase.setUp(self)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
242 self.cwd = os.getcwd()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
243 basetempdir = tempfile.gettempdir()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
244 os.chdir(basetempdir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
245 self.data = b'We are the knights who say Ni!'
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
246 self.tempdir = tempfile.mkdtemp(dir=basetempdir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
247 self.tempdir_name = os.path.basename(self.tempdir)
65740
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
248 with open(os.path.join(self.tempdir, 'test'), 'wb') as temp:
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
249 temp.write(self.data)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
250
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
251 def tearDown(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
252 try:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
253 os.chdir(self.cwd)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
254 try:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
255 shutil.rmtree(self.tempdir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
256 except:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
257 pass
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
258 finally:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
259 BaseTestCase.tearDown(self)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
260
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
261 def check_status_and_reason(self, response, status, data=None):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
262 body = response.read()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53073
diff changeset
263 self.assertTrue(response)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
264 self.assertEqual(response.status, status)
59728
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
265 self.assertIsNotNone(response.reason)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
266 if data:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
267 self.assertEqual(data, body)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
268
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
269 def test_get(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
270 #constructs the path relative to the root directory of the HTTPServer
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
271 response = self.request(self.tempdir_name + '/test')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
272 self.check_status_and_reason(response, 200, data=self.data)
85671
1fcccbbe15e2 Fix http.server's request handling case on trailing '/'.
Senthil Kumaran <senthil@uthcode.com>
parents: 81995
diff changeset
273 # check for trailing "/" which should return 404. See Issue17324
1fcccbbe15e2 Fix http.server's request handling case on trailing '/'.
Senthil Kumaran <senthil@uthcode.com>
parents: 81995
diff changeset
274 response = self.request(self.tempdir_name + '/test/')
1fcccbbe15e2 Fix http.server's request handling case on trailing '/'.
Senthil Kumaran <senthil@uthcode.com>
parents: 81995
diff changeset
275 self.check_status_and_reason(response, 404)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
276 response = self.request(self.tempdir_name + '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
277 self.check_status_and_reason(response, 200)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
278 response = self.request(self.tempdir_name)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
279 self.check_status_and_reason(response, 301)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
280 response = self.request('/ThisDoesNotExist')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
281 self.check_status_and_reason(response, 404)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
282 response = self.request('/' + 'ThisDoesNotExist' + '/')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
283 self.check_status_and_reason(response, 404)
65740
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
284 with open(os.path.join(self.tempdir_name, 'index.html'), 'w') as f:
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
285 response = self.request('/' + self.tempdir_name + '/')
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
286 self.check_status_and_reason(response, 200)
73307
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
287 # chmod() doesn't work as expected on Windows, and filesystem
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
288 # permissions are ignored by root on Unix.
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
289 if os.name == 'posix' and os.geteuid() != 0:
65740
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
290 os.chmod(self.tempdir, 0)
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
291 response = self.request(self.tempdir_name + '/')
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
292 self.check_status_and_reason(response, 404)
40ac45a092b7 Move test_httpservers over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 65493
diff changeset
293 os.chmod(self.tempdir, 0o755)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
294
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
295 def test_head(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
296 response = self.request(
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
297 self.tempdir_name + '/test', method='HEAD')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
298 self.check_status_and_reason(response, 200)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
299 self.assertEqual(response.getheader('content-length'),
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
300 str(len(self.data)))
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
301 self.assertEqual(response.getheader('content-type'),
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
302 'application/octet-stream')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
303
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
304 def test_invalid_requests(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
305 response = self.request('/', method='FOO')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
306 self.check_status_and_reason(response, 501)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
307 # requests must be case sensitive,so this should fail too
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
308 response = self.request('/', method='get')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
309 self.check_status_and_reason(response, 501)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
310 response = self.request('/', method='GETs')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
311 self.check_status_and_reason(response, 501)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
312
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
313
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
314 cgi_file1 = """\
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
315 #!%s
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
316
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
317 print("Content-type: text/html")
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
318 print()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
319 print("Hello World")
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
320 """
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
321
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
322 cgi_file2 = """\
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
323 #!%s
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
324 import cgi
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
325
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
326 print("Content-type: text/html")
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
327 print()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
328
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
329 form = cgi.FieldStorage()
59728
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
330 print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
331 form.getfirst("bacon")))
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
332 """
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
333
73307
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
334
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
335 @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
4dc5590dbd0b Issue #13308: Fix test_httpservers failures when run as root.
Charles-François Natali <neologix@free.fr>
parents: 68776
diff changeset
336 "This test can't be run reliably as root (issue #13308).")
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
337 class CGIHTTPServerTestCase(BaseTestCase):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
338 class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
339 pass
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
340
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
341 linesep = os.linesep.encode('ascii')
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
342
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
343 def setUp(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
344 BaseTestCase.setUp(self)
65489
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
345 self.cwd = os.getcwd()
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
346 self.parent_dir = tempfile.mkdtemp()
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
347 self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
348 os.mkdir(self.cgi_dir)
87169
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
349 self.nocgi_path = None
65489
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
350 self.file1_path = None
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
351 self.file2_path = None
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
352
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
353 # The shebang line should be pure ASCII: use symlink if possible.
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
354 # See issue #7668.
67183
5aa433a277f9 Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents: 67020
diff changeset
355 if support.can_symlink():
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
356 self.pythonexe = os.path.join(self.parent_dir, 'python')
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
357 os.symlink(sys.executable, self.pythonexe)
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
358 else:
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
359 self.pythonexe = sys.executable
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
360
65492
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
361 try:
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
362 # The python executable path is written as the first line of the
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
363 # CGI Python script. The encoding cookie cannot be used, and so the
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
364 # path should be encodable to the default script encoding (utf-8)
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
365 self.pythonexe.encode('utf-8')
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
366 except UnicodeEncodeError:
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
367 self.tearDown()
81994
086eb1fe3082 Do not raise self.skipTest().
Serhiy Storchaka <storchaka@gmail.com>
parents: 79287
diff changeset
368 self.skipTest("Python executable path is not encodable to utf-8")
65492
b2a9ca2b61a2 test_httpservers: Fix skip test check, the python executable path have to be
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65489
diff changeset
369
87169
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
370 self.nocgi_path = os.path.join(self.parent_dir, 'nocgi.py')
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
371 with open(self.nocgi_path, 'w') as fp:
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
372 fp.write(cgi_file1 % self.pythonexe)
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
373 os.chmod(self.nocgi_path, 0o777)
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
374
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
375 self.file1_path = os.path.join(self.cgi_dir, 'file1.py')
65493
c147f910af70 test_httpservers: Python CGI scripts have to be encoded to utf-8
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65492
diff changeset
376 with open(self.file1_path, 'w', encoding='utf-8') as file1:
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
377 file1.write(cgi_file1 % self.pythonexe)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
378 os.chmod(self.file1_path, 0o777)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
379
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
380 self.file2_path = os.path.join(self.cgi_dir, 'file2.py')
65493
c147f910af70 test_httpservers: Python CGI scripts have to be encoded to utf-8
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65492
diff changeset
381 with open(self.file2_path, 'w', encoding='utf-8') as file2:
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
382 file2.write(cgi_file2 % self.pythonexe)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
383 os.chmod(self.file2_path, 0o777)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
384
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
385 os.chdir(self.parent_dir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
386
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
387 def tearDown(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
388 try:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
389 os.chdir(self.cwd)
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
390 if self.pythonexe != sys.executable:
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 55593
diff changeset
391 os.remove(self.pythonexe)
87169
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
392 if self.nocgi_path:
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
393 os.remove(self.nocgi_path)
65489
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
394 if self.file1_path:
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
395 os.remove(self.file1_path)
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
396 if self.file2_path:
b0228af6db11 test_httpservers: skip CGI tests if Python executable path is not encodable
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65075
diff changeset
397 os.remove(self.file2_path)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
398 os.rmdir(self.cgi_dir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
399 os.rmdir(self.parent_dir)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
400 finally:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
401 BaseTestCase.tearDown(self)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
402
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
403 def test_url_collapse_path(self):
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
404 # verify tail is the last portion and head is the rest on proper urls
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
405 test_vectors = {
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
406 '': '//',
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
407 '..': IndexError,
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
408 '/.//..': IndexError,
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
409 '/': '//',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
410 '//': '//',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
411 '/\\': '//\\',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
412 '/.//': '//',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
413 'cgi-bin/file1.py': '/cgi-bin/file1.py',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
414 '/cgi-bin/file1.py': '/cgi-bin/file1.py',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
415 'a': '//a',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
416 '/a': '//a',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
417 '//a': '//a',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
418 './a': '//a',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
419 './C:/': '/C:/',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
420 '/a/b': '/a/b',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
421 '/a/b/': '/a/b/',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
422 '/a/b/.': '/a/b/',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
423 '/a/b/c/..': '/a/b/',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
424 '/a/b/c/../d': '/a/b/d',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
425 '/a/b/c/../d/e/../f': '/a/b/d/f',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
426 '/a/b/c/../d/e/../../f': '/a/b/f',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
427 '/a/b/c/../d/e/.././././..//f': '/a/b/f',
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
428 '../a/b/c/../d/e/.././././..//f': IndexError,
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
429 '/a/b/c/../d/e/../../../f': '/a/f',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
430 '/a/b/c/../d/e/../../../../f': '//f',
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
431 '/a/b/c/../d/e/../../../../../f': IndexError,
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
432 '/a/b/c/../d/e/../../../../f/..': '//',
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
433 '/a/b/c/../d/e/../../../../f/../.': '//',
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
434 }
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
435 for path, expected in test_vectors.items():
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
436 if isinstance(expected, type) and issubclass(expected, Exception):
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
437 self.assertRaises(expected,
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
438 server._url_collapse_path, path)
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
439 else:
76248
fc001124a3ee 3.2 - Issue 10484 - Incorporate improvements to CGI module - Suggested by Glenn Linderman. Refactor code and tests
Senthil Kumaran <senthil@uthcode.com>
parents: 76220
diff changeset
440 actual = server._url_collapse_path(path)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
441 self.assertEqual(expected, actual,
59728
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
442 msg='path = %r\nGot: %r\nWanted: %r' %
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
443 (path, actual, expected))
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
444
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
445 def test_headers_and_content(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
446 res = self.request('/cgi-bin/file1.py')
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
447 self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
59728
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
448 (res.read(), res.getheader('Content-type'), res.status))
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
449
87169
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
450 def test_issue19435(self):
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
451 res = self.request('///////////nocgi.py/../cgi-bin/nothere.sh')
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
452 self.assertEqual(res.status, 404)
691b3df5036b Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler.
Georg Brandl <georg@python.org>
parents: 85671
diff changeset
453
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
454 def test_post(self):
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47635
diff changeset
455 params = urllib.parse.urlencode(
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47635
diff changeset
456 {'spam' : 1, 'eggs' : 'python', 'bacon' : 123456})
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
457 headers = {'Content-type' : 'application/x-www-form-urlencoded'}
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
458 res = self.request('/cgi-bin/file2.py', 'POST', params, headers)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
459
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
460 self.assertEqual(res.read(), b'1, python, 123456' + self.linesep)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
461
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
462 def test_invaliduri(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
463 res = self.request('/cgi-bin/invalid')
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
464 res.read()
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65076
diff changeset
465 self.assertEqual(res.status, 404)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
466
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
467 def test_authorization(self):
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
468 headers = {b'Authorization' : b'Basic ' +
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
469 base64.b64encode(b'username:pass')}
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
470 res = self.request('/cgi-bin/file1.py', 'GET', headers=headers)
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
471 self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
59728
4587e1f74ed8 Merged revisions 79100 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 56871
diff changeset
472 (res.read(), res.getheader('Content-type'), res.status))
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
473
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
474 def test_no_leading_slash(self):
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
475 # http://bugs.python.org/issue2254
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
476 res = self.request('cgi-bin/file1.py')
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
477 self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
53073
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
478 (res.read(), res.getheader('Content-type'), res.status))
3b1b6142690a Merged revisions 71303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48334
diff changeset
479
65076
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
480 def test_os_environ_is_not_altered(self):
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
481 signature = "Test CGI Server"
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
482 os.environ['SERVER_SOFTWARE'] = signature
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
483 res = self.request('/cgi-bin/file1.py')
78433
bc4fdb758b8c Fix CGI tests to take into account the platform's line ending (issue #13119)
Antoine Pitrou <solipsis@pitrou.net>
parents: 76248
diff changeset
484 self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
65076
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
485 (res.read(), res.getheader('Content-type'), res.status))
945a55d4e73e Merged revisions 85202 via svnmerge from
Senthil Kumaran <orsenthil@gmail.com>
parents: 65029
diff changeset
486 self.assertEqual(os.environ['SERVER_SOFTWARE'], signature)
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
487
66971
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
488
63558
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
489 class SocketlessRequestHandler(SimpleHTTPRequestHandler):
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
490 def __init__(self):
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
491 self.get_called = False
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
492 self.protocol_version = "HTTP/1.1"
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
493
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
494 def do_GET(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
495 self.get_called = True
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
496 self.send_response(200)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
497 self.send_header('Content-Type', 'text/html')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
498 self.end_headers()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
499 self.wfile.write(b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
500
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
501 def log_message(self, format, *args):
63558
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
502 pass
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
503
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
504 class RejectingSocketlessRequestHandler(SocketlessRequestHandler):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
505 def handle_expect_100(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
506 self.send_error(417)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
507 return False
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
508
69981
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
509
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
510 class AuditableBytesIO:
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
511
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
512 def __init__(self):
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
513 self.datas = []
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
514
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
515 def write(self, data):
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
516 self.datas.append(data)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
517
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
518 def getData(self):
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
519 return b''.join(self.datas)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
520
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
521 @property
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
522 def numWrites(self):
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
523 return len(self.datas)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
524
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
525
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
526 class BaseHTTPRequestHandlerTestCase(unittest.TestCase):
68586
dc245d681901 #11565: Merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68257 68585
diff changeset
527 """Test the functionality of the BaseHTTPServer.
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
528
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
529 Test the support for the Expect 100-continue header.
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
530 """
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
531
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
532 HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
533
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
534 def setUp (self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
535 self.handler = SocketlessRequestHandler()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
536
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
537 def send_typical_request(self, message):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
538 input = BytesIO(message)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
539 output = BytesIO()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
540 self.handler.rfile = input
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
541 self.handler.wfile = output
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
542 self.handler.handle_one_request()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
543 output.seek(0)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
544 return output.readlines()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
545
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
546 def verify_get_called(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
547 self.assertTrue(self.handler.get_called)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
548
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
549 def verify_expected_headers(self, headers):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
550 for fieldName in b'Server: ', b'Date: ', b'Content-Type: ':
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
551 self.assertEqual(sum(h.startswith(fieldName) for h in headers), 1)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
552
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
553 def verify_http_server_response(self, response):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
554 match = self.HTTPResponseMatch.search(response)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
555 self.assertTrue(match is not None)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
556
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
557 def test_http_1_1(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
558 result = self.send_typical_request(b'GET / HTTP/1.1\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
559 self.verify_http_server_response(result[0])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
560 self.verify_expected_headers(result[1:-1])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
561 self.verify_get_called()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
562 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
563
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
564 def test_http_1_0(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
565 result = self.send_typical_request(b'GET / HTTP/1.0\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
566 self.verify_http_server_response(result[0])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
567 self.verify_expected_headers(result[1:-1])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
568 self.verify_get_called()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
569 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
570
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
571 def test_http_0_9(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
572 result = self.send_typical_request(b'GET / HTTP/0.9\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
573 self.assertEqual(len(result), 1)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
574 self.assertEqual(result[0], b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
575 self.verify_get_called()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
576
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
577 def test_with_continue_1_0(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
578 result = self.send_typical_request(b'GET / HTTP/1.0\r\nExpect: 100-continue\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
579 self.verify_http_server_response(result[0])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
580 self.verify_expected_headers(result[1:-1])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
581 self.verify_get_called()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
582 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
583
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
584 def test_with_continue_1_1(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
585 result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
586 self.assertEqual(result[0], b'HTTP/1.1 100 Continue\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
587 self.assertEqual(result[1], b'HTTP/1.1 200 OK\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
588 self.verify_expected_headers(result[2:-1])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
589 self.verify_get_called()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
590 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
591
69981
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
592 def test_header_buffering_of_send_error(self):
66351
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
593
69981
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
594 input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
595 output = AuditableBytesIO()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
596 handler = SocketlessRequestHandler()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
597 handler.rfile = input
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
598 handler.wfile = output
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
599 handler.request_version = 'HTTP/1.1'
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
600 handler.requestline = ''
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
601 handler.command = None
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
602
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
603 handler.send_error(418)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
604 self.assertEqual(output.numWrites, 2)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
605
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
606 def test_header_buffering_of_send_response_only(self):
66351
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
607
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
608 input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
69981
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
609 output = AuditableBytesIO()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
610 handler = SocketlessRequestHandler()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
611 handler.rfile = input
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
612 handler.wfile = output
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
613 handler.request_version = 'HTTP/1.1'
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
614
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
615 handler.send_response_only(418)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
616 self.assertEqual(output.numWrites, 0)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
617 handler.end_headers()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
618 self.assertEqual(output.numWrites, 1)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
619
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
620 def test_header_buffering_of_send_header(self):
66351
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
621
69981
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
622 input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
623 output = AuditableBytesIO()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
624 handler = SocketlessRequestHandler()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
625 handler.rfile = input
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
626 handler.wfile = output
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
627 handler.request_version = 'HTTP/1.1'
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
628
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
629 handler.send_header('Foo', 'foo')
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
630 handler.send_header('bar', 'bar')
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
631 self.assertEqual(output.numWrites, 0)
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
632 handler.end_headers()
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
633 self.assertEqual(output.getData(), b'Foo: foo\r\nbar: bar\r\n\r\n')
25298224cb25 Issue #3709: a flush_headers method to BaseHTTPRequestHandler which manages the
Senthil Kumaran <senthil@uthcode.com>
parents: 68776
diff changeset
634 self.assertEqual(output.numWrites, 1)
66351
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
635
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
636 def test_header_unbuffered_when_continue(self):
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
637
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
638 def _readAndReseek(f):
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
639 pos = f.tell()
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
640 f.seek(0)
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
641 data = f.read()
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
642 f.seek(pos)
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
643 return data
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
644
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
645 input = BytesIO(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
646 output = BytesIO()
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
647 self.handler.rfile = input
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
648 self.handler.wfile = output
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
649 self.handler.request_version = 'HTTP/1.1'
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
650
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
651 self.handler.handle_one_request()
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
652 self.assertNotEqual(_readAndReseek(output), b'')
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
653 result = _readAndReseek(output).split(b'\r\n')
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
654 self.assertEqual(result[0], b'HTTP/1.1 100 Continue')
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
655 self.assertEqual(result[1], b'HTTP/1.1 200 OK')
9717153d558d Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
Senthil Kumaran <orsenthil@gmail.com>
parents: 65788
diff changeset
656
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
657 def test_with_continue_rejected(self):
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
658 usual_handler = self.handler # Save to avoid breaking any subsequent tests.
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
659 self.handler = RejectingSocketlessRequestHandler()
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
660 result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
661 self.assertEqual(result[0], b'HTTP/1.1 417 Expectation Failed\r\n')
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
662 self.verify_expected_headers(result[1:-1])
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
663 # The expect handler should short circuit the usual get method by
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
664 # returning false here, so get_called should be false
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
665 self.assertFalse(self.handler.get_called)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
666 self.assertEqual(sum(r == b'Connection: close\r\n' for r in result[1:-1]), 1)
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
667 self.handler = usual_handler # Restore to avoid breaking any subsequent tests.
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
668
66970
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
669 def test_request_length(self):
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
670 # Issue #10714: huge request lines are discarded, to avoid Denial
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
671 # of Service attacks.
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
672 result = self.send_typical_request(b'GET ' + b'x' * 65537)
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
673 self.assertEqual(result[0], b'HTTP/1.1 414 Request-URI Too Long\r\n')
436bbc7f0aa6 Issue #10714: Limit length of incoming request in http.server to 65536 bytes
Antoine Pitrou <solipsis@pitrou.net>
parents: 66606
diff changeset
674 self.assertFalse(self.handler.get_called)
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
675
67020
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
676 def test_header_length(self):
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
677 # Issue #6791: same for headers
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
678 result = self.send_typical_request(
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
679 b'GET / HTTP/1.1\r\nX-Foo: bar' + b'r' * 65537 + b'\r\n\r\n')
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
680 self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n')
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
681 self.assertFalse(self.handler.get_called)
0b94635ed2f6 Fix Issue6791 - Limit the HTTP header readline with _MAXLENGTH. Patch by Antoine Pitrou
Senthil Kumaran <orsenthil@gmail.com>
parents: 66970
diff changeset
682
66971
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
683 class SimpleHTTPRequestHandlerTestCase(unittest.TestCase):
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
684 """ Test url parsing """
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
685 def setUp(self):
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
686 self.translated = os.getcwd()
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
687 self.translated = os.path.join(self.translated, 'filename')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
688 self.handler = SocketlessRequestHandler()
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
689
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
690 def test_query_arguments(self):
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
691 path = self.handler.translate_path('/filename')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
692 self.assertEqual(path, self.translated)
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
693 path = self.handler.translate_path('/filename?foo=bar')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
694 self.assertEqual(path, self.translated)
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
695 path = self.handler.translate_path('/filename?a=b&spam=eggs#zot')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
696 self.assertEqual(path, self.translated)
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
697
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
698 def test_start_with_double_slash(self):
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
699 path = self.handler.translate_path('//filename')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
700 self.assertEqual(path, self.translated)
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
701 path = self.handler.translate_path('//filename?foo=bar')
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
702 self.assertEqual(path, self.translated)
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
703
dc32788f0e4e Merged revisions 87317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66340
diff changeset
704
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
705 def test_main(verbose=None):
63558
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
706 cwd = os.getcwd()
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
707 try:
63558
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
708 support.run_unittest(
65028
7add45bcc9c6 Issue1491 - BaseHTTPServer incorrectly implements response code 100
Senthil Kumaran <orsenthil@gmail.com>
parents: 63558
diff changeset
709 BaseHTTPRequestHandlerTestCase,
63558
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
710 BaseHTTPServerTestCase,
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
711 SimpleHTTPServerTestCase,
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
712 CGIHTTPServerTestCase,
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
713 SimpleHTTPRequestHandlerTestCase,
58c22d30f749 Move test_SimpleHTTPServer into test_httpservers.
Georg Brandl <georg@python.org>
parents: 62874
diff changeset
714 )
47278
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
715 finally:
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
716 os.chdir(cwd)
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
717
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
718 if __name__ == '__main__':
f762a9ab69dd Merged revisions 63412,63445-63447,63449-63450,63452,63454,63459,63463,63465,63470,63483-63484,63496-63497,63499-63501,63530-63531,63540,63614 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
719 test_main()