Adding more branch coverage in client.py.
- Rename `_RequireCryptoOrDie()` to `_require_crypto_or_die()` - Testing un-traversed GAE and GCE branches in `GoogleCredentials.get_application_default()` - Missing env. var. branch in `_get_environment_variable_file` - Missing APPDATA branch (on Windows) for `_get_well_known_file` - Renaming some of the long ADC test names - Adding test for `GoogleCredentials.get_application_default()` that actually uses the well-known file - Branch in `GoogleCredentials.from_stream()` when filename is False-y - Testing `_get_application_default_credential_GAE` and `_get_application_default_credential_GCE` (these just wrap circular imports at run time) - Testing `_require_crypto_or_die`
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user