@@ -1170,6 +1170,67 @@ def test_gzip_decode_limit(self):
11701170 xmlrpclib .gzip_decode (encoded , max_decode = - 1 )
11711171
11721172
1173+ class HeadersServerTestCase (BaseServerTestCase ):
1174+ class RequestHandler (xmlrpc .server .SimpleXMLRPCRequestHandler ):
1175+ test_headers = None
1176+
1177+ def do_POST (self ):
1178+ self .__class__ .test_headers = self .headers
1179+ return super ().do_POST ()
1180+ requestHandler = RequestHandler
1181+ standard_headers = [
1182+ 'Host' , 'Accept-Encoding' , 'Content-Type' , 'User-Agent' ,
1183+ 'Content-Length' ]
1184+
1185+ def setUp (self ):
1186+ self .RequestHandler .test_headers = None
1187+ return super ().setUp ()
1188+
1189+ def assertContainsAdditionalHeaders (self , headers , additional ):
1190+ expected_keys = sorted (self .standard_headers + list (additional .keys ()))
1191+ self .assertListEqual (sorted (headers .keys ()), expected_keys )
1192+
1193+ for key , value in additional .items ():
1194+ self .assertEqual (headers .get (key ), value )
1195+
1196+ def test_header (self ):
1197+ p = xmlrpclib .ServerProxy (URL , headers = [('X-Test' , 'foo' )])
1198+ self .assertEqual (p .pow (6 , 8 ), 6 ** 8 )
1199+
1200+ headers = self .RequestHandler .test_headers
1201+ self .assertContainsAdditionalHeaders (headers , {'X-Test' : 'foo' })
1202+
1203+ def test_header_many (self ):
1204+ p = xmlrpclib .ServerProxy (
1205+ URL , headers = [('X-Test' , 'foo' ), ('X-Test-Second' , 'bar' )])
1206+ self .assertEqual (p .pow (6 , 8 ), 6 ** 8 )
1207+
1208+ headers = self .RequestHandler .test_headers
1209+ self .assertContainsAdditionalHeaders (
1210+ headers , {'X-Test' : 'foo' , 'X-Test-Second' : 'bar' })
1211+
1212+ def test_header_empty (self ):
1213+ p = xmlrpclib .ServerProxy (URL , headers = [])
1214+ self .assertEqual (p .pow (6 , 8 ), 6 ** 8 )
1215+
1216+ headers = self .RequestHandler .test_headers
1217+ self .assertContainsAdditionalHeaders (headers , {})
1218+
1219+ def test_header_tuple (self ):
1220+ p = xmlrpclib .ServerProxy (URL , headers = (('X-Test' , 'foo' ),))
1221+ self .assertEqual (p .pow (6 , 8 ), 6 ** 8 )
1222+
1223+ headers = self .RequestHandler .test_headers
1224+ self .assertContainsAdditionalHeaders (headers , {'X-Test' : 'foo' })
1225+
1226+ def test_header_items (self ):
1227+ p = xmlrpclib .ServerProxy (URL , headers = {'X-Test' : 'foo' }.items ())
1228+ self .assertEqual (p .pow (6 , 8 ), 6 ** 8 )
1229+
1230+ headers = self .RequestHandler .test_headers
1231+ self .assertContainsAdditionalHeaders (headers , {'X-Test' : 'foo' })
1232+
1233+
11731234#Test special attributes of the ServerProxy object
11741235class ServerProxyTestCase (unittest .TestCase ):
11751236 def setUp (self ):
@@ -1396,7 +1457,7 @@ def test_main():
13961457 BinaryTestCase , FaultTestCase , UseBuiltinTypesTestCase ,
13971458 SimpleServerTestCase , SimpleServerEncodingTestCase ,
13981459 KeepaliveServerTestCase1 , KeepaliveServerTestCase2 ,
1399- GzipServerTestCase , GzipUtilTestCase ,
1460+ GzipServerTestCase , GzipUtilTestCase , HeadersServerTestCase ,
14001461 MultiPathServerTestCase , ServerProxyTestCase , FailingServerTestCase ,
14011462 CGIHandlerTestCase , SimpleXMLRPCDispatcherTestCase )
14021463
0 commit comments