|
21 | 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22 | 22 | THE SOFTWARE.
|
23 | 23 | """
|
24 |
| -import sys, os |
25 |
| -sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),] |
26 |
| - |
| 24 | +import sys |
| 25 | +import os |
27 | 26 | import unittest
|
28 | 27 | import oauth2 as oauth
|
29 | 28 | import random
|
|
41 | 40 | from cgi import parse_qs, parse_qsl
|
42 | 41 |
|
43 | 42 |
|
| 43 | +sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),] |
| 44 | + |
| 45 | + |
44 | 46 | class TestError(unittest.TestCase):
|
45 | 47 | def test_message(self):
|
46 | 48 | try:
|
@@ -283,6 +285,38 @@ def test_url(self):
|
283 | 285 | self.assertEquals(req.normalized_url, exp2)
|
284 | 286 | self.assertEquals(req.url, url2)
|
285 | 287 |
|
| 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 | + |
286 | 320 | def test_url_query(self):
|
287 | 321 | url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
|
288 | 322 | normalized_url = urlparse.urlunparse(urlparse.urlparse(url)[:3] + (None, None, None))
|
@@ -495,6 +529,23 @@ def test_get_normalized_parameters_ignores_auth_signature(self):
|
495 | 529 | del foo["oauth_signature"]
|
496 | 530 | self.assertEqual(urllib.urlencode(sorted(foo.items())), res)
|
497 | 531 |
|
| 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 | + |
498 | 549 | def test_get_normalized_string_escapes_spaces_properly(self):
|
499 | 550 | url = "http://sp.example.com/"
|
500 | 551 | params = {
|
@@ -604,12 +655,14 @@ def test_from_consumer_and_token(self):
|
604 | 655 | url = "http://sp.example.com/"
|
605 | 656 |
|
606 | 657 | tok = oauth.Token(key="tok-test-key", secret="tok-test-secret")
|
| 658 | + tok.set_verifier('this_is_a_test_verifier') |
607 | 659 | con = oauth.Consumer(key="con-test-key", secret="con-test-secret")
|
608 | 660 | req = oauth.Request.from_consumer_and_token(con, token=tok,
|
609 | 661 | http_method="GET", http_url=url)
|
610 | 662 |
|
611 | 663 | self.assertEquals(req['oauth_token'], tok.key)
|
612 | 664 | self.assertEquals(req['oauth_consumer_key'], con.key)
|
| 665 | + self.assertEquals(tok.verifier, req['oauth_verifier']) |
613 | 666 |
|
614 | 667 | class SignatureMethod_Bad(oauth.SignatureMethod):
|
615 | 668 | name = "BAD"
|
@@ -682,6 +735,13 @@ def test_verify_request(self):
|
682 | 735 | self.assertEquals(parameters['foo'], 59)
|
683 | 736 | self.assertEquals(parameters['multi'], ['FOO','BAR'])
|
684 | 737 |
|
| 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 | + |
685 | 745 | def test_no_version(self):
|
686 | 746 | url = "http://sp.example.com/"
|
687 | 747 |
|
@@ -861,6 +921,23 @@ def create_simple_multipart_data(self, data):
|
861 | 921 | content_type = 'multipart/form-data; boundary=%s' % boundary
|
862 | 922 | return content_type, crlf.join(items)
|
863 | 923 |
|
| 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 | + |
864 | 941 | def test_access_token_get(self):
|
865 | 942 | """Test getting an access token via GET."""
|
866 | 943 | client = oauth.Client(self.consumer, None)
|
|
0 commit comments