1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
from unittest import mock
from oauthlib.openid.connect.core.tokens import JWTToken
from tests.unittest import TestCase
class JWTTokenTestCase(TestCase):
def test_create_token_callable_expires_in(self):
"""
Test retrieval of the expires in value by calling the callable expires_in property
"""
expires_in_mock = mock.MagicMock()
request_mock = mock.MagicMock()
token = JWTToken(expires_in=expires_in_mock, request_validator=mock.MagicMock())
token.create_token(request=request_mock)
expires_in_mock.assert_called_once_with(request_mock)
def test_create_token_non_callable_expires_in(self):
"""
When a non callable expires in is set this should just be set to the request
"""
expires_in_mock = mock.NonCallableMagicMock()
request_mock = mock.MagicMock()
token = JWTToken(expires_in=expires_in_mock, request_validator=mock.MagicMock())
token.create_token(request=request_mock)
self.assertFalse(expires_in_mock.called)
self.assertEqual(request_mock.expires_in, expires_in_mock)
def test_create_token_calls_get_id_token(self):
"""
When create_token is called the call should be forwarded to the get_id_token on the token validator
"""
request_mock = mock.MagicMock()
with mock.patch('oauthlib.openid.RequestValidator',
autospec=True) as RequestValidatorMock:
request_validator = RequestValidatorMock()
token = JWTToken(expires_in=mock.MagicMock(), request_validator=request_validator)
token.create_token(request=request_mock)
request_validator.get_jwt_bearer_token.assert_called_once_with(None, None, request_mock)
def test_validate_request_token_from_headers(self):
"""
Bearer token get retrieved from headers.
"""
with mock.patch('oauthlib.common.Request', autospec=True) as RequestMock, \
mock.patch('oauthlib.openid.RequestValidator',
autospec=True) as RequestValidatorMock:
request_validator_mock = RequestValidatorMock()
token = JWTToken(request_validator=request_validator_mock)
request = RequestMock('/uri')
# Scopes is retrieved using the __call__ method which is not picked up correctly by mock.patch
# with autospec=True
request.scopes = mock.MagicMock()
request.headers = {
'Authorization': 'Bearer some-token-from-header'
}
token.validate_request(request=request)
request_validator_mock.validate_jwt_bearer_token.assert_called_once_with('some-token-from-header',
request.scopes,
request)
def test_validate_request_token_from_headers_basic(self):
"""
Wrong kind of token (Basic) retrieved from headers. Confirm token is not parsed.
"""
with mock.patch('oauthlib.common.Request', autospec=True) as RequestMock, \
mock.patch('oauthlib.openid.RequestValidator',
autospec=True) as RequestValidatorMock:
request_validator_mock = RequestValidatorMock()
token = JWTToken(request_validator=request_validator_mock)
request = RequestMock('/uri')
# Scopes is retrieved using the __call__ method which is not picked up correctly by mock.patch
# with autospec=True
request.scopes = mock.MagicMock()
request.headers = {
'Authorization': 'Basic some-token-from-header'
}
token.validate_request(request=request)
request_validator_mock.validate_jwt_bearer_token.assert_called_once_with(None,
request.scopes,
request)
def test_validate_token_from_request(self):
"""
Token get retrieved from request object.
"""
with mock.patch('oauthlib.common.Request', autospec=True) as RequestMock, \
mock.patch('oauthlib.openid.RequestValidator',
autospec=True) as RequestValidatorMock:
request_validator_mock = RequestValidatorMock()
token = JWTToken(request_validator=request_validator_mock)
request = RequestMock('/uri')
# Scopes is retrieved using the __call__ method which is not picked up correctly by mock.patch
# with autospec=True
request.scopes = mock.MagicMock()
request.access_token = 'some-token-from-request-object'
request.headers = {}
token.validate_request(request=request)
request_validator_mock.validate_jwt_bearer_token.assert_called_once_with('some-token-from-request-object',
request.scopes,
request)
def test_estimate_type(self):
"""
Estimate type results for a jwt token
"""
def test_token(token, expected_result):
with mock.patch('oauthlib.common.Request', autospec=True) as RequestMock:
jwt_token = JWTToken()
request = RequestMock('/uri')
# Scopes is retrieved using the __call__ method which is not picked up correctly by mock.patch
# with autospec=True
request.headers = {
'Authorization': 'Bearer {}'.format(token)
}
result = jwt_token.estimate_type(request=request)
self.assertEqual(result, expected_result)
test_items = (
('eyfoo.foo.foo', 10),
('eyfoo.foo.foo.foo.foo', 10),
('eyfoobar', 0)
)
for token, expected_result in test_items:
test_token(token, expected_result)
|