@@ -66,15 +66,6 @@ def test_datetime_before_1900(self):
6666 (newdt ,), m = xmlrpclib .loads (s , use_datetime = 0 )
6767 self .assertEqual (newdt , xmlrpclib .DateTime ('00010210T11:41:23' ))
6868
69- def test_cmp_datetime_DateTime (self ):
70- now = datetime .datetime .now ()
71- dt = xmlrpclib .DateTime (now .timetuple ())
72- self .assertTrue (dt == now )
73- self .assertTrue (now == dt )
74- then = now + datetime .timedelta (seconds = 4 )
75- self .assertTrue (then >= dt )
76- self .assertTrue (dt < then )
77-
7869 def test_bug_1164912 (self ):
7970 d = xmlrpclib .DateTime ()
8071 ((new_d ,), dummy ) = xmlrpclib .loads (xmlrpclib .dumps ((d ,),
@@ -149,6 +140,9 @@ def test_get_host_info(self):
149140 ('host.tld' ,
150141 [('Authorization' , 'Basic dXNlcg==' )], {}))
151142
143+ def test_dump_bytes (self ):
144+ self .assertRaises (TypeError , xmlrpclib .dumps , (b"my dog has fleas" ,))
145+
152146 def test_ssl_presence (self ):
153147 try :
154148 import ssl
@@ -186,7 +180,7 @@ def test_dump_fault(self):
186180 self .assertRaises (xmlrpclib .Fault , xmlrpclib .loads , s )
187181
188182 def test_dotted_attribute (self ):
189- # this will raise AttirebuteError because code don't want us to use
183+ # this will raise AttributeError because code don't want us to use
190184 # private methods
191185 self .assertRaises (AttributeError ,
192186 xmlrpc .server .resolve_dotted_attribute , str , '__add' )
@@ -233,6 +227,45 @@ def test_decode(self):
233227 t2 = xmlrpclib ._datetime (d )
234228 self .assertEqual (t1 , tref )
235229
230+ def test_comparison (self ):
231+ now = datetime .datetime .now ()
232+ dtime = xmlrpclib .DateTime (now .timetuple ())
233+
234+ # datetime vs. DateTime
235+ self .assertTrue (dtime == now )
236+ self .assertTrue (now == dtime )
237+ then = now + datetime .timedelta (seconds = 4 )
238+ self .assertTrue (then >= dtime )
239+ self .assertTrue (dtime < then )
240+
241+ # str vs. DateTime
242+ dstr = now .strftime ("%Y%m%dT%H:%M:%S" )
243+ self .assertTrue (dtime == dstr )
244+ self .assertTrue (dstr == dtime )
245+ dtime_then = xmlrpclib .DateTime (then .timetuple ())
246+ self .assertTrue (dtime_then >= dstr )
247+ self .assertTrue (dstr < dtime_then )
248+
249+ # some other types
250+ dbytes = dstr .encode ('ascii' )
251+ dtuple = now .timetuple ()
252+ with self .assertRaises (TypeError ):
253+ dtime == 1970
254+ with self .assertRaises (TypeError ):
255+ dtime != dbytes
256+ with self .assertRaises (TypeError ):
257+ dtime == bytearray (dbytes )
258+ with self .assertRaises (TypeError ):
259+ dtime != dtuple
260+ with self .assertRaises (TypeError ):
261+ dtime < float (1970 )
262+ with self .assertRaises (TypeError ):
263+ dtime > dbytes
264+ with self .assertRaises (TypeError ):
265+ dtime <= bytearray (dbytes )
266+ with self .assertRaises (TypeError ):
267+ dtime >= dtuple
268+
236269class BinaryTestCase (unittest .TestCase ):
237270
238271 # XXX What should str(Binary(b"\xff")) return? I'm chosing "\xff"
@@ -346,6 +379,10 @@ def get_request(self):
346379 class MyRequestHandler (requestHandler ):
347380 rpc_paths = []
348381
382+ class BrokenDispatcher :
383+ def _marshaled_dispatch (self , data , dispatch_method = None , path = None ):
384+ raise RuntimeError ("broken dispatcher" )
385+
349386 serv = MyXMLRPCServer (("localhost" , 0 ), MyRequestHandler ,
350387 logRequests = False , bind_and_activate = False )
351388 serv .socket .settimeout (3 )
@@ -366,6 +403,7 @@ class MyRequestHandler(requestHandler):
366403 d .register_multicall_functions ()
367404 serv .get_dispatcher (paths [0 ]).register_function (pow )
368405 serv .get_dispatcher (paths [1 ]).register_function (lambda x ,y : x + y , 'add' )
406+ serv .add_dispatcher ("/is/broken" , BrokenDispatcher ())
369407 evt .set ()
370408
371409 # handle up to 'numrequests' requests
@@ -595,11 +633,16 @@ def test_path1(self):
595633 p = xmlrpclib .ServerProxy (URL + "/foo" )
596634 self .assertEqual (p .pow (6 ,8 ), 6 ** 8 )
597635 self .assertRaises (xmlrpclib .Fault , p .add , 6 , 8 )
636+
598637 def test_path2 (self ):
599638 p = xmlrpclib .ServerProxy (URL + "/foo/bar" )
600639 self .assertEqual (p .add (6 ,8 ), 6 + 8 )
601640 self .assertRaises (xmlrpclib .Fault , p .pow , 6 , 8 )
602641
642+ def test_path3 (self ):
643+ p = xmlrpclib .ServerProxy (URL + "/is/broken" )
644+ self .assertRaises (xmlrpclib .Fault , p .add , 6 , 8 )
645+
603646#A test case that verifies that a server using the HTTP/1.1 keep-alive mechanism
604647#does indeed serve subsequent requests on the same connection
605648class BaseKeepaliveServerTestCase (BaseServerTestCase ):
0 commit comments