@@ -1041,47 +1041,64 @@ def test_getting_header_defaultint(self):
1041
1041
self .assertEqual (header , 42 )
1042
1042
1043
1043
class TunnelTests (TestCase ):
1044
-
1045
- def test_connect (self ):
1044
+ def setUp (self ):
1046
1045
response_text = (
1047
1046
'HTTP/1.0 200 OK\r \n \r \n ' # Reply to CONNECT
1048
1047
'HTTP/1.1 200 OK\r \n ' # Reply to HEAD
1049
1048
'Content-Length: 42\r \n \r \n '
1050
1049
)
1051
1050
1052
1051
def create_connection (address , timeout = None , source_address = None ):
1053
- return FakeSocket (response_text , host = address [0 ],
1054
- port = address [1 ])
1052
+ return FakeSocket (response_text , host = address [0 ], port = address [1 ])
1055
1053
1056
- conn = client .HTTPConnection ('proxy.com' )
1057
- conn ._create_connection = create_connection
1054
+ self .host = 'proxy.com'
1055
+ self .conn = client .HTTPConnection (self .host )
1056
+ self .conn ._create_connection = create_connection
1058
1057
1058
+ def tearDown (self ):
1059
+ self .conn .close ()
1060
+
1061
+ def test_set_tunnel_host_port_headers (self ):
1062
+ tunnel_host = 'destination.com'
1063
+ tunnel_port = 8888
1064
+ tunnel_headers = {'User-Agent' : 'Mozilla/5.0 (compatible, MSIE 11)' }
1065
+ self .conn .set_tunnel (tunnel_host , port = tunnel_port ,
1066
+ headers = tunnel_headers )
1067
+ self .conn .request ('HEAD' , '/' , '' )
1068
+ self .assertEqual (self .conn .sock .host , self .host )
1069
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1070
+ self .assertEqual (self .conn ._tunnel_host , tunnel_host )
1071
+ self .assertEqual (self .conn ._tunnel_port , tunnel_port )
1072
+ self .assertEqual (self .conn ._tunnel_headers , tunnel_headers )
1073
+
1074
+ def test_disallow_set_tunnel_after_connect (self ):
1059
1075
# Once connected, we shouldn't be able to tunnel anymore
1060
- conn .connect ()
1061
- self .assertRaises (RuntimeError , conn .set_tunnel ,
1076
+ self . conn .connect ()
1077
+ self .assertRaises (RuntimeError , self . conn .set_tunnel ,
1062
1078
'destination.com' )
1063
1079
1064
- # But if we close the connection, we're good
1065
- conn .close ()
1066
- conn .set_tunnel ('destination.com' )
1067
- conn .request ('HEAD' , '/' , '' )
1068
-
1069
- self .assertEqual (conn .sock .host , 'proxy.com' )
1070
- self .assertEqual (conn .sock .port , 80 )
1071
- self .assertIn (b'CONNECT destination.com' , conn .sock .data )
1080
+ def test_connect_with_tunnel (self ):
1081
+ self .conn .set_tunnel ('destination.com' )
1082
+ self .conn .request ('HEAD' , '/' , '' )
1083
+ self .assertEqual (self .conn .sock .host , self .host )
1084
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1085
+ self .assertIn (b'CONNECT destination.com' , self .conn .sock .data )
1072
1086
# issue22095
1073
- self .assertNotIn (b'Host: destination.com:None' , conn .sock .data )
1074
- self .assertIn (b'Host: destination.com' , conn .sock .data )
1087
+ self .assertNotIn (b'Host: destination.com:None' , self . conn .sock .data )
1088
+ self .assertIn (b'Host: destination.com' , self . conn .sock .data )
1075
1089
1076
1090
# This test should be removed when CONNECT gets the HTTP/1.1 blessing
1077
- self .assertNotIn (b'Host: proxy.com' , conn .sock .data )
1091
+ self .assertNotIn (b'Host: proxy.com' , self .conn .sock .data )
1092
+
1093
+ def test_connect_put_request (self ):
1094
+ self .conn .set_tunnel ('destination.com' )
1095
+ self .conn .request ('PUT' , '/' , '' )
1096
+ self .assertEqual (self .conn .sock .host , self .host )
1097
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1098
+ self .assertIn (b'CONNECT destination.com' , self .conn .sock .data )
1099
+ self .assertIn (b'Host: destination.com' , self .conn .sock .data )
1100
+
1078
1101
1079
- conn .close ()
1080
- conn .request ('PUT' , '/' , '' )
1081
- self .assertEqual (conn .sock .host , 'proxy.com' )
1082
- self .assertEqual (conn .sock .port , 80 )
1083
- self .assertTrue (b'CONNECT destination.com' in conn .sock .data )
1084
- self .assertTrue (b'Host: destination.com' in conn .sock .data )
1085
1102
1086
1103
@support .reap_threads
1087
1104
def test_main (verbose = None ):
0 commit comments