@@ -1253,47 +1253,64 @@ def test_getting_header_defaultint(self):
1253
1253
self .assertEqual (header , 42 )
1254
1254
1255
1255
class TunnelTests (TestCase ):
1256
-
1257
- def test_connect (self ):
1256
+ def setUp (self ):
1258
1257
response_text = (
1259
1258
'HTTP/1.0 200 OK\r \n \r \n ' # Reply to CONNECT
1260
1259
'HTTP/1.1 200 OK\r \n ' # Reply to HEAD
1261
1260
'Content-Length: 42\r \n \r \n '
1262
1261
)
1263
1262
1264
1263
def create_connection (address , timeout = None , source_address = None ):
1265
- return FakeSocket (response_text , host = address [0 ],
1266
- port = address [1 ])
1264
+ return FakeSocket (response_text , host = address [0 ], port = address [1 ])
1267
1265
1268
- conn = client .HTTPConnection ('proxy.com' )
1269
- conn ._create_connection = create_connection
1266
+ self .host = 'proxy.com'
1267
+ self .conn = client .HTTPConnection (self .host )
1268
+ self .conn ._create_connection = create_connection
1270
1269
1270
+ def tearDown (self ):
1271
+ self .conn .close ()
1272
+
1273
+ def test_set_tunnel_host_port_headers (self ):
1274
+ tunnel_host = 'destination.com'
1275
+ tunnel_port = 8888
1276
+ tunnel_headers = {'User-Agent' : 'Mozilla/5.0 (compatible, MSIE 11)' }
1277
+ self .conn .set_tunnel (tunnel_host , port = tunnel_port ,
1278
+ headers = tunnel_headers )
1279
+ self .conn .request ('HEAD' , '/' , '' )
1280
+ self .assertEqual (self .conn .sock .host , self .host )
1281
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1282
+ self .assertEqual (self .conn ._tunnel_host , tunnel_host )
1283
+ self .assertEqual (self .conn ._tunnel_port , tunnel_port )
1284
+ self .assertEqual (self .conn ._tunnel_headers , tunnel_headers )
1285
+
1286
+ def test_disallow_set_tunnel_after_connect (self ):
1271
1287
# Once connected, we shouldn't be able to tunnel anymore
1272
- conn .connect ()
1273
- self .assertRaises (RuntimeError , conn .set_tunnel ,
1288
+ self . conn .connect ()
1289
+ self .assertRaises (RuntimeError , self . conn .set_tunnel ,
1274
1290
'destination.com' )
1275
1291
1276
- # But if we close the connection, we're good
1277
- conn .close ()
1278
- conn .set_tunnel ('destination.com' )
1279
- conn .request ('HEAD' , '/' , '' )
1280
-
1281
- self .assertEqual (conn .sock .host , 'proxy.com' )
1282
- self .assertEqual (conn .sock .port , 80 )
1283
- self .assertIn (b'CONNECT destination.com' , conn .sock .data )
1292
+ def test_connect_with_tunnel (self ):
1293
+ self .conn .set_tunnel ('destination.com' )
1294
+ self .conn .request ('HEAD' , '/' , '' )
1295
+ self .assertEqual (self .conn .sock .host , self .host )
1296
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1297
+ self .assertIn (b'CONNECT destination.com' , self .conn .sock .data )
1284
1298
# issue22095
1285
- self .assertNotIn (b'Host: destination.com:None' , conn .sock .data )
1286
- self .assertIn (b'Host: destination.com' , conn .sock .data )
1299
+ self .assertNotIn (b'Host: destination.com:None' , self . conn .sock .data )
1300
+ self .assertIn (b'Host: destination.com' , self . conn .sock .data )
1287
1301
1288
1302
# This test should be removed when CONNECT gets the HTTP/1.1 blessing
1289
- self .assertNotIn (b'Host: proxy.com' , conn .sock .data )
1303
+ self .assertNotIn (b'Host: proxy.com' , self .conn .sock .data )
1304
+
1305
+ def test_connect_put_request (self ):
1306
+ self .conn .set_tunnel ('destination.com' )
1307
+ self .conn .request ('PUT' , '/' , '' )
1308
+ self .assertEqual (self .conn .sock .host , self .host )
1309
+ self .assertEqual (self .conn .sock .port , client .HTTP_PORT )
1310
+ self .assertIn (b'CONNECT destination.com' , self .conn .sock .data )
1311
+ self .assertIn (b'Host: destination.com' , self .conn .sock .data )
1312
+
1290
1313
1291
- conn .close ()
1292
- conn .request ('PUT' , '/' , '' )
1293
- self .assertEqual (conn .sock .host , 'proxy.com' )
1294
- self .assertEqual (conn .sock .port , 80 )
1295
- self .assertTrue (b'CONNECT destination.com' in conn .sock .data )
1296
- self .assertTrue (b'Host: destination.com' in conn .sock .data )
1297
1314
1298
1315
@support .reap_threads
1299
1316
def test_main (verbose = None ):
0 commit comments