@@ -222,14 +222,8 @@ def test_setter(self):
222222 url = "http://example.com"
223223 method = "GET"
224224 req = oauth .Request (method )
225-
226- try :
227- url = req .url
228- self .fail ("AttributeError should have been raised on empty url." )
229- except AttributeError :
230- pass
231- except Exception , e :
232- self .fail (str (e ))
225+ self .assertTrue (req .url is None )
226+ self .assertTrue (req .normalized_url is None )
233227
234228 def test_deleter (self ):
235229 url = "http://example.com"
@@ -253,17 +247,21 @@ def test_url(self):
253247 method = "GET"
254248
255249 req = oauth .Request (method , url1 )
256- self .assertEquals (req .url , exp1 )
250+ self .assertEquals (req .normalized_url , exp1 )
251+ self .assertEquals (req .url , url1 )
257252
258253 req = oauth .Request (method , url2 )
259- self .assertEquals (req .url , exp2 )
254+ self .assertEquals (req .normalized_url , exp2 )
255+ self .assertEquals (req .url , url2 )
260256
261257 def test_url_query (self ):
262258 url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
259+ normalized_url = urlparse .urlunparse (urlparse .urlparse (url )[:3 ] + (None , None , None ))
263260 method = "GET"
264261
265262 req = oauth .Request (method , url )
266263 self .assertEquals (req .url , url )
264+ self .assertEquals (req .normalized_url , normalized_url )
267265
268266 def test_get_parameter (self ):
269267 url = "http://example.com"
@@ -400,6 +398,30 @@ def test_to_url_with_query(self):
400398 self .assertEquals (b ['max-contacts' ], ['10' ])
401399 self .assertEquals (a , b )
402400
401+ def test_signature_base_string_with_query (self ):
402+ url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
403+ params = {
404+ 'oauth_version' : "1.0" ,
405+ 'oauth_nonce' : "4572616e48616d6d65724c61686176" ,
406+ 'oauth_timestamp' : "137131200" ,
407+ 'oauth_consumer_key' : "0685bd9184jfhq22" ,
408+ 'oauth_signature_method' : "HMAC-SHA1" ,
409+ 'oauth_token' : "ad180jjd733klru7" ,
410+ 'oauth_signature' : "wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D" ,
411+ }
412+ req = oauth .Request ("GET" , url , params )
413+ self .assertEquals (req .normalized_url , 'https://www.google.com/m8/feeds/contacts/default/full/' )
414+ self .assertEquals (req .url , 'https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10' )
415+ normalized_params = parse_qsl (req .get_normalized_parameters ())
416+ self .assertTrue (len (normalized_params ), len (params ) + 2 )
417+ normalized_params = dict (normalized_params )
418+ for key , value in params .iteritems ():
419+ if key == 'oauth_signature' :
420+ continue
421+ self .assertEquals (value , normalized_params [key ])
422+ self .assertEquals (normalized_params ['alt' ], 'json' )
423+ self .assertEquals (normalized_params ['max-contacts' ], '10' )
424+
403425 def test_get_normalized_parameters (self ):
404426 url = "http://sp.example.com/"
405427
@@ -871,6 +893,36 @@ def test_multipart_post_does_not_alter_body(self):
871893 self .assertEqual (result , random_result )
872894 self .mox .VerifyAll ()
873895
896+ def test_url_with_query_string (self ):
897+ self .mox .StubOutWithMock (httplib2 .Http , 'request' )
898+ uri = 'http://example.com/foo/bar/?show=thundercats&character=snarf'
899+ client = oauth .Client (self .consumer , None )
900+ expected_kwargs = {
901+ 'method' : 'GET' ,
902+ 'body' : None ,
903+ 'redirections' : httplib2 .DEFAULT_MAX_REDIRECTS ,
904+ 'connection_type' : None ,
905+ 'headers' : mox .IsA (dict ),
906+ }
907+ def oauth_verifier (url ):
908+ req = oauth .Request .from_consumer_and_token (self .consumer , None ,
909+ http_method = 'GET' , http_url = uri , parameters = {})
910+ req .sign_request (oauth .SignatureMethod_HMAC_SHA1 (), self .consumer , None )
911+ expected = parse_qsl (urlparse .urlparse (req .to_url ()).query )
912+ actual = parse_qsl (urlparse .urlparse (url ).query )
913+ if len (expected ) != len (actual ):
914+ return False
915+ actual = dict (actual )
916+ for key , value in expected :
917+ if key not in ('oauth_signature' , 'oauth_nonce' , 'oauth_timestamp' ):
918+ if actual [key ] != value :
919+ return False
920+ return True
921+ httplib2 .Http .request (client , mox .Func (oauth_verifier ), ** expected_kwargs )
922+ self .mox .ReplayAll ()
923+ client .request (uri , 'GET' )
924+ self .mox .VerifyAll ()
925+
874926if __name__ == "__main__" :
875927 unittest .main ()
876928
0 commit comments