# 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 mock import google.auth.credentials import google_auth_httplib2 import httplib2 import oauth2client.client import unittest2 as unittest 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_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) 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_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)