55class Socket :
66 def __init__ (self ):
77 self ._write_buffer = io .BytesIO ()
8- self ._read_buffer = io .BytesIO (b"HTTP/1.0 200 OK\r \n \r \n " )
8+ self ._read_buffer = io .BytesIO (Socket .RESPONSES .pop (0 ))
9+
10+ def close (self ):
11+ pass
912
1013 def connect (self , address ):
1114 pass
@@ -34,12 +37,20 @@ def socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP):
3437# ruff: noqa: E402
3538import requests
3639
40+ SERVER_RESPONSE_200_OK = b"HTTP/1.0 200 OK\r \n \r \n "
41+
42+
43+ def set_server_responses (* buffers ):
44+ Socket .RESPONSES = list (buffers )
45+
3746
3847def format_message (response ):
3948 return response .raw ._write_buffer .getvalue ().decode ("utf8" )
4049
4150
4251def test_simple_get ():
52+ set_server_responses (SERVER_RESPONSE_200_OK )
53+
4354 response = requests .request ("GET" , "http://example.com" )
4455
4556 assert response .raw ._write_buffer .getvalue () == (
@@ -48,6 +59,8 @@ def test_simple_get():
4859
4960
5061def test_get_auth ():
62+ set_server_responses (SERVER_RESPONSE_200_OK )
63+
5164 response = requests .request (
5265 "GET" , "http://example.com" , auth = ("test-username" , "test-password" )
5366 )
@@ -61,6 +74,8 @@ def test_get_auth():
6174
6275
6376def test_get_custom_header ():
77+ set_server_responses (SERVER_RESPONSE_200_OK )
78+
6479 response = requests .request ("GET" , "http://example.com" , headers = {"User-Agent" : "test-agent" })
6580
6681 assert response .raw ._write_buffer .getvalue () == (
@@ -72,6 +87,8 @@ def test_get_custom_header():
7287
7388
7489def test_post_json ():
90+ set_server_responses (SERVER_RESPONSE_200_OK )
91+
7592 response = requests .request ("GET" , "http://example.com" , json = "test" )
7693
7794 assert response .raw ._write_buffer .getvalue () == (
@@ -85,6 +102,8 @@ def test_post_json():
85102
86103
87104def test_post_chunked_data ():
105+ set_server_responses (SERVER_RESPONSE_200_OK )
106+
88107 def chunks ():
89108 yield "test"
90109
@@ -101,6 +120,8 @@ def chunks():
101120
102121
103122def test_overwrite_get_headers ():
123+ set_server_responses (SERVER_RESPONSE_200_OK )
124+
104125 response = requests .request (
105126 "GET" , "http://example.com" , headers = {"Host" : "test.com" , "Connection" : "keep-alive" }
106127 )
@@ -111,6 +132,8 @@ def test_overwrite_get_headers():
111132
112133
113134def test_overwrite_post_json_headers ():
135+ set_server_responses (SERVER_RESPONSE_200_OK )
136+
114137 response = requests .request (
115138 "GET" ,
116139 "http://example.com" ,
@@ -129,6 +152,8 @@ def test_overwrite_post_json_headers():
129152
130153
131154def test_overwrite_post_chunked_data_headers ():
155+ set_server_responses (SERVER_RESPONSE_200_OK )
156+
132157 def chunks ():
133158 yield "test"
134159
@@ -146,13 +171,37 @@ def chunks():
146171
147172
148173def test_do_not_modify_headers_argument ():
174+ set_server_responses (SERVER_RESPONSE_200_OK )
175+
149176 global do_not_modify_this_dict
150177 do_not_modify_this_dict = {}
151178 requests .request ("GET" , "http://example.com" , headers = do_not_modify_this_dict )
152179
153180 assert do_not_modify_this_dict == {}, do_not_modify_this_dict
154181
155182
183+ def test_redirect_with_protocol ():
184+ set_server_responses (
185+ b"HTTP/1.0 301 OK\r \n Location: http://example.com/index\r \n \r \n " , SERVER_RESPONSE_200_OK
186+ )
187+
188+ response = requests .request ("GET" , "http://example.com" )
189+
190+ assert response .raw ._write_buffer .getvalue () == (
191+ b"GET /index HTTP/1.0\r \n " + b"Connection: close\r \n " + b"Host: example.com\r \n \r \n "
192+ ), format_message (response )
193+
194+
195+ def test_redirect_without_protocol ():
196+ set_server_responses (b"HTTP/1.0 301 OK\r \n Location: /index\r \n \r \n " , SERVER_RESPONSE_200_OK )
197+
198+ response = requests .request ("GET" , "http://example.com" )
199+
200+ assert response .raw ._write_buffer .getvalue () == (
201+ b"GET /index HTTP/1.0\r \n " + b"Connection: close\r \n " + b"Host: example.com\r \n \r \n "
202+ ), format_message (response )
203+
204+
156205test_simple_get ()
157206test_get_auth ()
158207test_get_custom_header ()
@@ -162,3 +211,5 @@ def test_do_not_modify_headers_argument():
162211test_overwrite_post_json_headers ()
163212test_overwrite_post_chunked_data_headers ()
164213test_do_not_modify_headers_argument ()
214+ test_redirect_with_protocol ()
215+ test_redirect_without_protocol ()
0 commit comments