Merge pull request #482 from dhermes/cover-client-v4

Adding more branch coverage in client.py.
This commit is contained in:
Danny Hermes
2016-04-06 17:34:59 -07:00
2 changed files with 127 additions and 7 deletions

View File

@@ -1628,7 +1628,7 @@ class AssertionCredentials(GoogleCredentials):
raise NotImplementedError('This method is abstract.')
def _RequireCryptoOrDie():
def _require_crypto_or_die():
"""Ensure we have a crypto library, or throw CryptoUnavailableError.
The oauth2client.crypt module requires either PyCrypto or PyOpenSSL
@@ -1667,7 +1667,7 @@ def verify_id_token(id_token, audience, http=None,
oauth2client.crypt.AppIdentityError: if the JWT fails to verify.
CryptoUnavailableError: if no crypto library is available.
"""
_RequireCryptoOrDie()
_require_crypto_or_die()
if http is None:
http = _cached_http

View File

@@ -342,6 +342,40 @@ class GoogleCredentialsTests(unittest2.TestCase):
self.assertEqual(credentials,
credentials.create_scoped(['dummy_scope']))
@mock.patch.object(GoogleCredentials,
'_implicit_credentials_from_files')
@mock.patch.object(GoogleCredentials,
'_implicit_credentials_from_gce')
@mock.patch.object(client, '_in_gae_environment',
return_value=True)
@mock.patch.object(client, '_get_application_default_credential_GAE',
return_value=object())
def test_get_application_default_in_gae(self, gae_adc, in_gae,
from_gce, from_files):
credentials = GoogleCredentials.get_application_default()
self.assertEqual(credentials, gae_adc.return_value)
in_gae.assert_called_once_with()
from_files.assert_not_called()
from_gce.assert_not_called()
@mock.patch.object(GoogleCredentials,
'_implicit_credentials_from_gae',
return_value=None)
@mock.patch.object(GoogleCredentials,
'_implicit_credentials_from_files',
return_value=None)
@mock.patch.object(client, '_in_gce_environment',
return_value=True)
@mock.patch.object(client, '_get_application_default_credential_GCE',
return_value=object())
def test_get_application_default_in_gce(self, gce_adc, in_gce,
from_files, from_gae):
credentials = GoogleCredentials.get_application_default()
self.assertEqual(credentials, gce_adc.return_value)
in_gce.assert_called_once_with()
from_gae.assert_called_once_with()
from_files.assert_called_once_with()
def test_environment_check_gae_production(self):
with mock_module_import('google.appengine'):
self._environment_check_gce_helper(
@@ -461,6 +495,10 @@ class GoogleCredentialsTests(unittest2.TestCase):
expected_err_msg):
_get_environment_variable_file()
@mock.patch.dict(os.environ, {}, clear=True)
def test_get_environment_variable_file_without_env_var(self):
self.assertIsNone(_get_environment_variable_file())
@mock.patch('os.name', new='nt')
@mock.patch.dict(os.environ, {'APPDATA': DATA_DIR}, clear=True)
def test_get_well_known_file_on_windows(self):
@@ -469,6 +507,14 @@ class GoogleCredentialsTests(unittest2.TestCase):
_WELL_KNOWN_CREDENTIALS_FILE))
self.assertEqual(well_known_file, _get_well_known_file())
@mock.patch('os.name', new='nt')
@mock.patch.dict(os.environ, {'SystemDrive': 'G:'}, clear=True)
def test_get_well_known_file_on_windows_without_appdata(self):
well_known_file = os.path.join('G:', '\\',
client._CLOUDSDK_CONFIG_DIRECTORY,
client._WELL_KNOWN_CREDENTIALS_FILE)
self.assertEqual(well_known_file, _get_well_known_file())
@mock.patch.dict(os.environ,
{client._CLOUDSDK_CONFIG_ENV_VAR: 'CUSTOM_DIR'},
clear=True)
@@ -593,7 +639,7 @@ class GoogleCredentialsTests(unittest2.TestCase):
@mock.patch('oauth2client.client._in_gae_environment', return_value=False)
@mock.patch('oauth2client.client._get_environment_variable_file')
@mock.patch('oauth2client.client._get_well_known_file')
def test_get_adc_from_environment_variable_service_account(self, *stubs):
def test_get_adc_from_env_var_service_account(self, *stubs):
# Set up stubs.
get_well_known, get_env_file, in_gae, in_gce = stubs
get_env_file.return_value = datafile(
@@ -609,14 +655,14 @@ class GoogleCredentialsTests(unittest2.TestCase):
def test_env_name(self):
self.assertEqual(None, client.SETTINGS.env_name)
self.test_get_adc_from_environment_variable_service_account()
self.test_get_adc_from_env_var_service_account()
self.assertEqual(DEFAULT_ENV_NAME, client.SETTINGS.env_name)
@mock.patch('oauth2client.client._in_gce_environment')
@mock.patch('oauth2client.client._in_gae_environment', return_value=False)
@mock.patch('oauth2client.client._get_environment_variable_file')
@mock.patch('oauth2client.client._get_well_known_file')
def test_get_adc_from_environment_variable_authorized_user(self, *stubs):
def test_get_adc_from_env_var_authorized_user(self, *stubs):
# Set up stubs.
get_well_known, get_env_file, in_gae, in_gce = stubs
get_env_file.return_value = datafile(os.path.join(
@@ -635,7 +681,7 @@ class GoogleCredentialsTests(unittest2.TestCase):
@mock.patch('oauth2client.client._in_gae_environment', return_value=False)
@mock.patch('oauth2client.client._get_environment_variable_file')
@mock.patch('oauth2client.client._get_well_known_file')
def test_get_adc_from_environment_variable_malformed_file(self, *stubs):
def test_get_adc_from_env_var_malformed_file(self, *stubs):
# Set up stubs.
get_well_known, get_env_file, in_gae, in_gce = stubs
get_env_file.return_value = datafile(
@@ -662,7 +708,7 @@ class GoogleCredentialsTests(unittest2.TestCase):
return_value=None)
@mock.patch('oauth2client.client._get_well_known_file',
return_value='BOGUS_FILE')
def test_get_application_default_environment_not_set_up(self, *stubs):
def test_get_adc_env_not_set_up(self, *stubs):
# Unpack stubs.
get_well_known, get_env_file, in_gae, in_gce = stubs
# Make sure the well-known file actually doesn't exist.
@@ -678,6 +724,33 @@ class GoogleCredentialsTests(unittest2.TestCase):
in_gae.assert_called_once_with()
in_gce.assert_called_once_with()
@mock.patch('oauth2client.client._in_gce_environment', return_value=False)
@mock.patch('oauth2client.client._in_gae_environment', return_value=False)
@mock.patch('oauth2client.client._get_environment_variable_file',
return_value=None)
@mock.patch('oauth2client.client._get_well_known_file')
def test_get_adc_env_from_well_known(self, *stubs):
# Unpack stubs.
get_well_known, get_env_file, in_gae, in_gce = stubs
# Make sure the well-known file is an actual file.
get_well_known.return_value = __file__
# Make sure the well-known file actually doesn't exist.
self.assertTrue(os.path.exists(get_well_known.return_value))
method_name = ('oauth2client.client.'
'_get_application_default_credential_from_file')
result_creds = object()
with mock.patch(method_name,
return_value=result_creds) as get_from_file:
result = GoogleCredentials.get_application_default()
self.assertEqual(result, result_creds)
get_from_file.assert_called_once_with(__file__)
get_well_known.assert_called_once_with()
get_env_file.assert_called_once_with()
in_gae.assert_called_once_with()
in_gce.assert_not_called()
def test_from_stream_service_account(self):
credentials_file = datafile(
os.path.join('gcloud', _WELL_KNOWN_CREDENTIALS_FILE))
@@ -693,6 +766,15 @@ class GoogleCredentialsTests(unittest2.TestCase):
credentials_file)
self.validate_google_credentials(credentials)
def test_from_stream_missing_file(self):
credentials_filename = None
expected_err_msg = (r'The parameter passed to the from_stream\(\) '
r'method should point to a file.')
with self.assertRaisesRegexp(ApplicationDefaultCredentialsError,
expected_err_msg):
self.get_a_google_credentials_object().from_stream(
credentials_filename)
def test_from_stream_malformed_file_1(self):
credentials_file = datafile(
os.path.join('gcloud',
@@ -1867,5 +1949,43 @@ class Test__save_private_file(unittest2.TestCase):
self._save_helper(filename)
class Test__get_application_default_credential_GAE(unittest2.TestCase):
@mock.patch.dict('sys.modules', {
'oauth2client.contrib.appengine': mock.Mock()})
def test_it(self):
gae_mod = sys.modules['oauth2client.contrib.appengine']
gae_mod.AppAssertionCredentials = creds_kls = mock.Mock()
creds_kls.return_value = object()
credentials = client._get_application_default_credential_GAE()
self.assertEqual(credentials, creds_kls.return_value)
creds_kls.assert_called_once_with([])
class Test__get_application_default_credential_GCE(unittest2.TestCase):
@mock.patch.dict('sys.modules', {
'oauth2client.contrib.gce': mock.Mock()})
def test_it(self):
gce_mod = sys.modules['oauth2client.contrib.gce']
gce_mod.AppAssertionCredentials = creds_kls = mock.Mock()
creds_kls.return_value = object()
credentials = client._get_application_default_credential_GCE()
self.assertEqual(credentials, creds_kls.return_value)
creds_kls.assert_called_once_with()
class Test__require_crypto_or_die(unittest2.TestCase):
@mock.patch.object(client, 'HAS_CRYPTO', new=True)
def test_with_crypto(self):
self.assertIsNone(client._require_crypto_or_die())
@mock.patch.object(client, 'HAS_CRYPTO', new=False)
def test_without_crypto(self):
with self.assertRaises(client.CryptoUnavailableError):
client._require_crypto_or_die()
if __name__ == '__main__': # pragma: NO COVER
unittest2.main()