Skip to content

Commit 77eb526

Browse files
committed
Added a bunch of new tests. 100% coverage has lapsed a bit. Fixing now.
1 parent 82c7b7f commit 77eb526

File tree

2 files changed

+83
-3
lines changed

2 files changed

+83
-3
lines changed

oauth2/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,9 @@ class SignatureMethod_HMAC_SHA1(SignatureMethod):
687687
name = 'HMAC-SHA1'
688688

689689
def signing_base(self, request, consumer, token):
690+
if request.normalized_url is None:
691+
raise ValueError("Base URL for request is not set.")
692+
690693
sig = (
691694
escape(request.method),
692695
escape(request.normalized_url),

tests/test_oauth.py

+80-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
THE SOFTWARE.
2323
"""
24-
import sys, os
25-
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),]
26-
24+
import sys
25+
import os
2726
import unittest
2827
import oauth2 as oauth
2928
import random
@@ -41,6 +40,9 @@
4140
from cgi import parse_qs, parse_qsl
4241

4342

43+
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),]
44+
45+
4446
class TestError(unittest.TestCase):
4547
def test_message(self):
4648
try:
@@ -283,6 +285,38 @@ def test_url(self):
283285
self.assertEquals(req.normalized_url, exp2)
284286
self.assertEquals(req.url, url2)
285287

288+
def test_bad_url(self):
289+
request = oauth.Request()
290+
try:
291+
request.url = "ftp://example.com"
292+
self.fail("Invalid URL scheme was accepted.")
293+
except ValueError:
294+
pass
295+
296+
def test_unset_consumer_and_token(self):
297+
consumer = oauth.Consumer('my_consumer_key', 'my_consumer_secret')
298+
token = oauth.Token('my_key', 'my_secret')
299+
request = oauth.Request("GET", "http://example.com/fetch.php")
300+
request.sign_request(oauth.SignatureMethod_HMAC_SHA1(), consumer,
301+
token)
302+
303+
self.assertEquals(consumer.key, request['oauth_consumer_key'])
304+
self.assertEquals(token.key, request['oauth_token'])
305+
306+
def test_no_url_set(self):
307+
consumer = oauth.Consumer('my_consumer_key', 'my_consumer_secret')
308+
token = oauth.Token('my_key', 'my_secret')
309+
request = oauth.Request()
310+
311+
try:
312+
try:
313+
request.sign_request(oauth.SignatureMethod_HMAC_SHA1(),
314+
consumer, token)
315+
except TypeError:
316+
self.fail("Signature method didn't check for a normalized URL.")
317+
except ValueError:
318+
pass
319+
286320
def test_url_query(self):
287321
url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
288322
normalized_url = urlparse.urlunparse(urlparse.urlparse(url)[:3] + (None, None, None))
@@ -495,6 +529,23 @@ def test_get_normalized_parameters_ignores_auth_signature(self):
495529
del foo["oauth_signature"]
496530
self.assertEqual(urllib.urlencode(sorted(foo.items())), res)
497531

532+
def test_set_signature_method(self):
533+
consumer = oauth.Consumer('key', 'secret')
534+
client = oauth.Client(consumer)
535+
536+
class Blah:
537+
pass
538+
539+
try:
540+
client.set_signature_method(Blah())
541+
self.fail("Client.set_signature_method() accepted invalid method.")
542+
except ValueError:
543+
pass
544+
545+
m = oauth.SignatureMethod_HMAC_SHA1()
546+
client.set_signature_method(m)
547+
self.assertEquals(m, client.method)
548+
498549
def test_get_normalized_string_escapes_spaces_properly(self):
499550
url = "http://sp.example.com/"
500551
params = {
@@ -604,12 +655,14 @@ def test_from_consumer_and_token(self):
604655
url = "http://sp.example.com/"
605656

606657
tok = oauth.Token(key="tok-test-key", secret="tok-test-secret")
658+
tok.set_verifier('this_is_a_test_verifier')
607659
con = oauth.Consumer(key="con-test-key", secret="con-test-secret")
608660
req = oauth.Request.from_consumer_and_token(con, token=tok,
609661
http_method="GET", http_url=url)
610662

611663
self.assertEquals(req['oauth_token'], tok.key)
612664
self.assertEquals(req['oauth_consumer_key'], con.key)
665+
self.assertEquals(tok.verifier, req['oauth_verifier'])
613666

614667
class SignatureMethod_Bad(oauth.SignatureMethod):
615668
name = "BAD"
@@ -682,6 +735,13 @@ def test_verify_request(self):
682735
self.assertEquals(parameters['foo'], 59)
683736
self.assertEquals(parameters['multi'], ['FOO','BAR'])
684737

738+
def test_build_authenticate_header(self):
739+
server = oauth.Server()
740+
headers = server.build_authenticate_header('example.com')
741+
self.assertTrue('WWW-Authenticate' in headers)
742+
self.assertEquals('OAuth realm="example.com"',
743+
headers['WWW-Authenticate'])
744+
685745
def test_no_version(self):
686746
url = "http://sp.example.com/"
687747

@@ -861,6 +921,23 @@ def create_simple_multipart_data(self, data):
861921
content_type = 'multipart/form-data; boundary=%s' % boundary
862922
return content_type, crlf.join(items)
863923

924+
def test_init(self):
925+
class Blah():
926+
pass
927+
928+
try:
929+
client = oauth.Client(Blah())
930+
self.fail("Client.__init__() accepted invalid Consumer.")
931+
except ValueError:
932+
pass
933+
934+
consumer = oauth.Consumer('token', 'secret')
935+
try:
936+
client = oauth.Client(consumer, Blah())
937+
self.fail("Client.__init__() accepted invalid Token.")
938+
except ValueError:
939+
pass
940+
864941
def test_access_token_get(self):
865942
"""Test getting an access token via GET."""
866943
client = oauth.Client(self.consumer, None)

0 commit comments

Comments
 (0)