blob: 5e09d6f0ad89aa9d73e4d5cf0a1c0019668be6d3 [file] [log] [blame]
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -07001# Copyright 2016 Google Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import datetime
16
17import mock
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070018
19from google.auth import _helpers
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070020from google.auth import transport
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070021from google.oauth2 import credentials
22
23
24class TestCredentials(object):
25 TOKEN_URI = 'https://example.com/oauth2/token'
26 REFRESH_TOKEN = 'refresh_token'
27 CLIENT_ID = 'client_id'
28 CLIENT_SECRET = 'client_secret'
29
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070030 @classmethod
31 def make_credentials(cls):
32 return credentials.Credentials(
33 token=None, refresh_token=cls.REFRESH_TOKEN,
34 token_uri=cls.TOKEN_URI, client_id=cls.CLIENT_ID,
35 client_secret=cls.CLIENT_SECRET)
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070036
37 def test_default_state(self):
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070038 credentials = self.make_credentials()
39 assert not credentials.valid
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070040 # Expiration hasn't been set yet
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070041 assert not credentials.expired
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070042 # Scopes aren't required for these credentials
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070043 assert not credentials.requires_scopes
Jon Wayne Parrott2d0549a2017-03-01 09:27:16 -080044 # Test properties
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070045 assert credentials.refresh_token == self.REFRESH_TOKEN
46 assert credentials.token_uri == self.TOKEN_URI
47 assert credentials.client_id == self.CLIENT_ID
48 assert credentials.client_secret == self.CLIENT_SECRET
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070049
Jon Wayne Parrott8784b232016-11-10 12:53:55 -080050 @mock.patch('google.oauth2._client.refresh_grant', autospec=True)
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070051 @mock.patch(
Jon Wayne Parrotte60c1242017-03-23 16:00:24 -070052 'google.auth._helpers.utcnow',
53 return_value=datetime.datetime.min + _helpers.CLOCK_SKEW)
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070054 def test_refresh_success(self, unused_utcnow, refresh_grant):
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070055 token = 'token'
56 expiry = _helpers.utcnow() + datetime.timedelta(seconds=500)
Jon Wayne Parrott26a16372017-03-28 13:03:33 -070057 grant_response = {'id_token': mock.sentinel.id_token}
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070058 refresh_grant.return_value = (
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070059 # Access token
60 token,
61 # New refresh token
62 None,
63 # Expiry,
64 expiry,
65 # Extra data
Jon Wayne Parrott26a16372017-03-28 13:03:33 -070066 grant_response)
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070067
68 request = mock.create_autospec(transport.Request)
69 credentials = self.make_credentials()
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070070
71 # Refresh credentials
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070072 credentials.refresh(request)
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070073
74 # Check jwt grant call.
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070075 refresh_grant.assert_called_with(
76 request, self.TOKEN_URI, self.REFRESH_TOKEN, self.CLIENT_ID,
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070077 self.CLIENT_SECRET)
78
79 # Check that the credentials have the token and expiry
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070080 assert credentials.token == token
81 assert credentials.expiry == expiry
82 assert credentials.id_token == mock.sentinel.id_token
Jon Wayne Parrott10ec7e92016-10-17 10:46:38 -070083
84 # Check that the credentials are valid (have a token and are not
85 # expired)
Jon Wayne Parrott78fec2c2017-06-30 10:25:08 -070086 assert credentials.valid