| # Copyright 2016 Google Inc. All Rights Reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import unittest | |
| import mock | |
| import google.auth.credentials | |
| import google_auth_httplib2 | |
| import httplib2 | |
| import oauth2client.client | |
| from googleapiclient import _auth | |
| class TestAuthWithGoogleAuth(unittest.TestCase): | |
| def setUp(self): | |
| _auth.HAS_GOOGLE_AUTH = True | |
| _auth.HAS_OAUTH2CLIENT = False | |
| def tearDown(self): | |
| _auth.HAS_GOOGLE_AUTH = True | |
| _auth.HAS_OAUTH2CLIENT = True | |
| def test_default_credentials(self): | |
| with mock.patch("google.auth.default", autospec=True) as default: | |
| default.return_value = (mock.sentinel.credentials, mock.sentinel.project) | |
| credentials = _auth.default_credentials() | |
| self.assertEqual(credentials, mock.sentinel.credentials) | |
| def test_credentials_from_file(self): | |
| with mock.patch( | |
| "google.auth.load_credentials_from_file", autospec=True | |
| ) as default: | |
| default.return_value = (mock.sentinel.credentials, mock.sentinel.project) | |
| credentials = _auth.credentials_from_file("credentials.json") | |
| self.assertEqual(credentials, mock.sentinel.credentials) | |
| default.assert_called_once_with( | |
| "credentials.json", scopes=None, quota_project_id=None | |
| ) | |
| def test_default_credentials_with_scopes(self): | |
| with mock.patch("google.auth.default", autospec=True) as default: | |
| default.return_value = (mock.sentinel.credentials, mock.sentinel.project) | |
| credentials = _auth.default_credentials(scopes=["1", "2"]) | |
| default.assert_called_once_with(scopes=["1", "2"], quota_project_id=None) | |
| self.assertEqual(credentials, mock.sentinel.credentials) | |
| def test_default_credentials_with_quota_project(self): | |
| with mock.patch("google.auth.default", autospec=True) as default: | |
| default.return_value = (mock.sentinel.credentials, mock.sentinel.project) | |
| credentials = _auth.default_credentials(quota_project_id="my-project") | |
| default.assert_called_once_with(scopes=None, quota_project_id="my-project") | |
| self.assertEqual(credentials, mock.sentinel.credentials) | |
| def test_with_scopes_non_scoped(self): | |
| credentials = mock.Mock(spec=google.auth.credentials.Credentials) | |
| returned = _auth.with_scopes(credentials, mock.sentinel.scopes) | |
| self.assertEqual(credentials, returned) | |
| def test_with_scopes_scoped(self): | |
| class CredentialsWithScopes( | |
| google.auth.credentials.Credentials, google.auth.credentials.Scoped | |
| ): | |
| pass | |
| credentials = mock.Mock(spec=CredentialsWithScopes) | |
| credentials.requires_scopes = True | |
| returned = _auth.with_scopes(credentials, mock.sentinel.scopes) | |
| self.assertNotEqual(credentials, returned) | |
| self.assertEqual(returned, credentials.with_scopes.return_value) | |
| credentials.with_scopes.assert_called_once_with(mock.sentinel.scopes, default_scopes=None) | |
| def test_authorized_http(self): | |
| credentials = mock.Mock(spec=google.auth.credentials.Credentials) | |
| authorized_http = _auth.authorized_http(credentials) | |
| self.assertIsInstance(authorized_http, google_auth_httplib2.AuthorizedHttp) | |
| self.assertEqual(authorized_http.credentials, credentials) | |
| self.assertIsInstance(authorized_http.http, httplib2.Http) | |
| self.assertIsInstance(authorized_http.http.timeout, int) | |
| self.assertGreater(authorized_http.http.timeout, 0) | |
| class TestAuthWithOAuth2Client(unittest.TestCase): | |
| def setUp(self): | |
| _auth.HAS_GOOGLE_AUTH = False | |
| _auth.HAS_OAUTH2CLIENT = True | |
| def tearDown(self): | |
| _auth.HAS_GOOGLE_AUTH = True | |
| _auth.HAS_OAUTH2CLIENT = True | |
| def test_default_credentials(self): | |
| default_patch = mock.patch( | |
| "oauth2client.client.GoogleCredentials.get_application_default" | |
| ) | |
| with default_patch as default: | |
| default.return_value = mock.sentinel.credentials | |
| credentials = _auth.default_credentials() | |
| self.assertEqual(credentials, mock.sentinel.credentials) | |
| def test_credentials_from_file(self): | |
| with self.assertRaises(EnvironmentError): | |
| credentials = _auth.credentials_from_file("credentials.json") | |
| def test_default_credentials_with_scopes_and_quota_project(self): | |
| with self.assertRaises(EnvironmentError): | |
| credentials = _auth.default_credentials( | |
| scopes=["1", "2"], quota_project_id="my-project" | |
| ) | |
| def test_with_scopes_non_scoped(self): | |
| credentials = mock.Mock(spec=oauth2client.client.Credentials) | |
| returned = _auth.with_scopes(credentials, mock.sentinel.scopes) | |
| self.assertEqual(credentials, returned) | |
| def test_with_scopes_scoped(self): | |
| credentials = mock.Mock(spec=oauth2client.client.GoogleCredentials) | |
| credentials.create_scoped_required.return_value = True | |
| returned = _auth.with_scopes(credentials, mock.sentinel.scopes) | |
| self.assertNotEqual(credentials, returned) | |
| self.assertEqual(returned, credentials.create_scoped.return_value) | |
| credentials.create_scoped.assert_called_once_with(mock.sentinel.scopes) | |
| def test_authorized_http(self): | |
| credentials = mock.Mock(spec=oauth2client.client.Credentials) | |
| authorized_http = _auth.authorized_http(credentials) | |
| http = credentials.authorize.call_args[0][0] | |
| self.assertEqual(authorized_http, credentials.authorize.return_value) | |
| self.assertIsInstance(http, httplib2.Http) | |
| self.assertIsInstance(http.timeout, int) | |
| self.assertGreater(http.timeout, 0) | |
| class TestAuthWithoutAuth(unittest.TestCase): | |
| def setUp(self): | |
| _auth.HAS_GOOGLE_AUTH = False | |
| _auth.HAS_OAUTH2CLIENT = False | |
| def tearDown(self): | |
| _auth.HAS_GOOGLE_AUTH = True | |
| _auth.HAS_OAUTH2CLIENT = True | |
| def test_default_credentials(self): | |
| with self.assertRaises(EnvironmentError): | |
| print(_auth.default_credentials()) | |
| class TestGoogleAuthWithoutHttplib2(unittest.TestCase): | |
| def setUp(self): | |
| _auth.google_auth_httplib2 = None | |
| def tearDown(self): | |
| _auth.google_auth_httplib2 = google_auth_httplib2 | |
| def test_default_credentials(self): | |
| credentials = mock.Mock(spec=google.auth.credentials.Credentials) | |
| with self.assertRaises(ValueError): | |
| _auth.authorized_http(credentials) |