aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBu Sun Kim <8822365+busunkim96@users.noreply.github.com>2021-02-05 10:26:54 -0700
committerGitHub <noreply@github.com>2021-02-05 10:26:54 -0700
commit94c76e0873e5b2f42331d5b1ad286c1e63b61395 (patch)
tree1d0dcf2632c00048f5c78e7485940d411102ba05 /tests
parentdb48ea3f8f69cd5039cdc2e35a0a3604d731bc70 (diff)
downloadpython-api-core-94c76e0873e5b2f42331d5b1ad286c1e63b61395.tar.gz
feat: allow default_host and default_scopes to be passed to create_channel (#134)
Add `default_host` and `default_scopes` parameters to `create_channel` so self-signed JWTs can be used.
Diffstat (limited to 'tests')
-rw-r--r--tests/asyncio/test_grpc_helpers_async.py174
-rw-r--r--tests/unit/test_grpc_helpers.py195
2 files changed, 350 insertions, 19 deletions
diff --git a/tests/asyncio/test_grpc_helpers_async.py b/tests/asyncio/test_grpc_helpers_async.py
index 766e11a..3461cbe 100644
--- a/tests/asyncio/test_grpc_helpers_async.py
+++ b/tests/asyncio/test_grpc_helpers_async.py
@@ -18,6 +18,7 @@ import mock
import pytest
from google.api_core import exceptions
+from google.api_core import grpc_helpers
from google.api_core import grpc_helpers_async
import google.auth.credentials
@@ -263,6 +264,7 @@ def test_wrap_errors_streaming(wrap_stream_errors):
@mock.patch("grpc.composite_channel_credentials")
@mock.patch(
"google.auth.default",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.projet),
)
@mock.patch("grpc.experimental.aio.secure_channel")
@@ -273,7 +275,45 @@ def test_create_channel_implicit(grpc_secure_channel, default, composite_creds_c
channel = grpc_helpers_async.create_channel(target)
assert channel is grpc_secure_channel.return_value
- default.assert_called_once_with(scopes=None)
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=None)
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("google.auth.transport.grpc.AuthMetadataPlugin", autospec=True)
+@mock.patch(
+ "google.auth.transport.requests.Request",
+ autospec=True,
+ return_value=mock.sentinel.Request
+)
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch(
+ "google.auth.default",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.projet),
+)
+@mock.patch("grpc.experimental.aio.secure_channel")
+def test_create_channel_implicit_with_default_host(grpc_secure_channel, default, composite_creds_call, request, auth_metadata_plugin):
+ target = "example.com:443"
+ default_host = "example.com"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers_async.create_channel(target, default_host=default_host)
+
+ assert channel is grpc_secure_channel.return_value
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ auth_metadata_plugin.assert_called_once_with(mock.sentinel.credentials, mock.sentinel.Request, default_host=default_host)
+ else:
+ default.assert_called_once_with(scopes=None)
+ auth_metadata_plugin.assert_called_once_with(mock.sentinel.credentials, mock.sentinel.Request)
+
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -292,7 +332,12 @@ def test_create_channel_implicit_with_ssl_creds(
grpc_helpers_async.create_channel(target, ssl_credentials=ssl_creds)
- default.assert_called_once_with(scopes=None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=None)
+
composite_creds_call.assert_called_once_with(ssl_creds, mock.ANY)
composite_creds = composite_creds_call.return_value
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -301,6 +346,7 @@ def test_create_channel_implicit_with_ssl_creds(
@mock.patch("grpc.composite_channel_credentials")
@mock.patch(
"google.auth.default",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.projet),
)
@mock.patch("grpc.experimental.aio.secure_channel")
@@ -313,7 +359,39 @@ def test_create_channel_implicit_with_scopes(
channel = grpc_helpers_async.create_channel(target, scopes=["one", "two"])
assert channel is grpc_secure_channel.return_value
- default.assert_called_once_with(scopes=["one", "two"])
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=["one", "two"], default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=["one", "two"])
+
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch(
+ "google.auth.default",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.projet),
+)
+@mock.patch("grpc.experimental.aio.secure_channel")
+def test_create_channel_implicit_with_default_scopes(
+ grpc_secure_channel, default, composite_creds_call
+):
+ target = "example.com:443"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers_async.create_channel(target, default_scopes=["three", "four"])
+
+ assert channel is grpc_secure_channel.return_value
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=["three", "four"])
+ else:
+ default.assert_called_once_with(scopes=["three", "four"])
+
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -331,7 +409,7 @@ def test_create_channel_explicit_with_duplicate_credentials():
@mock.patch("grpc.composite_channel_credentials")
-@mock.patch("google.auth.credentials.with_scopes_if_required")
+@mock.patch("google.auth.credentials.with_scopes_if_required", autospec=True)
@mock.patch("grpc.experimental.aio.secure_channel")
def test_create_channel_explicit(grpc_secure_channel, auth_creds, composite_creds_call):
target = "example.com:443"
@@ -339,7 +417,12 @@ def test_create_channel_explicit(grpc_secure_channel, auth_creds, composite_cred
channel = grpc_helpers_async.create_channel(target, credentials=mock.sentinel.credentials)
- auth_creds.assert_called_once_with(mock.sentinel.credentials, None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ auth_creds.assert_called_once_with(mock.sentinel.credentials, scopes=None, default_scopes=None)
+ else:
+ auth_creds.assert_called_once_with(mock.sentinel.credentials, scopes=None)
+
assert channel is grpc_secure_channel.return_value
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -357,8 +440,36 @@ def test_create_channel_explicit_scoped(grpc_secure_channel, composite_creds_cal
channel = grpc_helpers_async.create_channel(
target, credentials=credentials, scopes=scopes
)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes, default_scopes=None)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes)
+
+ assert channel is grpc_secure_channel.return_value
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch("grpc.experimental.aio.secure_channel")
+def test_create_channel_explicit_default_scopes(grpc_secure_channel, composite_creds_call):
+ target = "example.com:443"
+ default_scopes = ["3", "4"]
+ composite_creds = composite_creds_call.return_value
+
+ credentials = mock.create_autospec(google.auth.credentials.Scoped, instance=True)
+ credentials.requires_scopes = True
+
+ channel = grpc_helpers_async.create_channel(
+ target, credentials=credentials, default_scopes=default_scopes
+ )
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes=None, default_scopes=default_scopes)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes=default_scopes)
- credentials.with_scopes.assert_called_once_with(scopes)
assert channel is grpc_secure_channel.return_value
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -384,6 +495,7 @@ def test_create_channel_explicit_with_quota_project(grpc_secure_channel, composi
@mock.patch("grpc.experimental.aio.secure_channel")
@mock.patch(
"google.auth.load_credentials_from_file",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.project)
)
def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
@@ -396,7 +508,12 @@ def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_
target, credentials_file=credentials_file
)
- google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=None)
+ else:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None)
+
assert channel is grpc_secure_channel.return_value
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -405,6 +522,7 @@ def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_
@mock.patch("grpc.experimental.aio.secure_channel")
@mock.patch(
"google.auth.load_credentials_from_file",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.project)
)
def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
@@ -418,7 +536,40 @@ def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_f
target, credentials_file=credentials_file, scopes=scopes
)
- google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes, default_scopes=None)
+ else:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes)
+
+ assert channel is grpc_secure_channel.return_value
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch("grpc.experimental.aio.secure_channel")
+@mock.patch(
+ "google.auth.load_credentials_from_file",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.project)
+)
+def test_create_channel_with_credentials_file_and_default_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
+ target = "example.com:443"
+ default_scopes = ["3", "4"]
+
+ credentials_file = "/path/to/credentials/file.json"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers_async.create_channel(
+ target, credentials_file=credentials_file, default_scopes=default_scopes
+ )
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=default_scopes)
+ else:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=default_scopes)
+
assert channel is grpc_secure_channel.return_value
grpc_secure_channel.assert_called_once_with(target, composite_creds)
@@ -434,7 +585,12 @@ def test_create_channel_without_grpc_gcp(grpc_secure_channel):
grpc_helpers_async.create_channel(target, credentials=credentials, scopes=scopes)
grpc_secure_channel.assert_called()
- credentials.with_scopes.assert_called_once_with(scopes)
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes, default_scopes=None)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes)
@pytest.mark.asyncio
diff --git a/tests/unit/test_grpc_helpers.py b/tests/unit/test_grpc_helpers.py
index d6ec60a..4e0ab80 100644
--- a/tests/unit/test_grpc_helpers.py
+++ b/tests/unit/test_grpc_helpers.py
@@ -222,6 +222,7 @@ def test_wrap_errors_streaming(wrap_stream_errors):
@mock.patch("grpc.composite_channel_credentials")
@mock.patch(
"google.auth.default",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.projet),
)
@mock.patch("grpc.secure_channel")
@@ -232,7 +233,51 @@ def test_create_channel_implicit(grpc_secure_channel, default, composite_creds_c
channel = grpc_helpers.create_channel(target)
assert channel is grpc_secure_channel.return_value
- default.assert_called_once_with(scopes=None)
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=None)
+
+ if grpc_helpers.HAS_GRPC_GCP:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
+ else:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("google.auth.transport.grpc.AuthMetadataPlugin", autospec=True)
+@mock.patch(
+ "google.auth.transport.requests.Request",
+ autospec=True,
+ return_value=mock.sentinel.Request
+)
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch(
+ "google.auth.default",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.project),
+)
+@mock.patch("grpc.secure_channel")
+def test_create_channel_implicit_with_default_host(grpc_secure_channel, default, composite_creds_call, request, auth_metadata_plugin):
+ target = "example.com:443"
+ default_host = "example.com"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers.create_channel(target, default_host=default_host)
+
+ assert channel is grpc_secure_channel.return_value
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ print(grpc_helpers._GOOGLE_AUTH_VERSION)
+ print(grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST)
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ auth_metadata_plugin.assert_called_once_with(mock.sentinel.credentials, mock.sentinel.Request, default_host=default_host)
+ else:
+ default.assert_called_once_with(scopes=None)
+ auth_metadata_plugin.assert_called_once_with(mock.sentinel.credentials, mock.sentinel.Request)
+
if grpc_helpers.HAS_GRPC_GCP:
grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
else:
@@ -242,6 +287,7 @@ def test_create_channel_implicit(grpc_secure_channel, default, composite_creds_c
@mock.patch("grpc.composite_channel_credentials")
@mock.patch(
"google.auth.default",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.projet),
)
@mock.patch("grpc.secure_channel")
@@ -254,7 +300,12 @@ def test_create_channel_implicit_with_ssl_creds(
grpc_helpers.create_channel(target, ssl_credentials=ssl_creds)
- default.assert_called_once_with(scopes=None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=None)
+
composite_creds_call.assert_called_once_with(ssl_creds, mock.ANY)
composite_creds = composite_creds_call.return_value
if grpc_helpers.HAS_GRPC_GCP:
@@ -266,6 +317,7 @@ def test_create_channel_implicit_with_ssl_creds(
@mock.patch("grpc.composite_channel_credentials")
@mock.patch(
"google.auth.default",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.projet),
)
@mock.patch("grpc.secure_channel")
@@ -278,7 +330,42 @@ def test_create_channel_implicit_with_scopes(
channel = grpc_helpers.create_channel(target, scopes=["one", "two"])
assert channel is grpc_secure_channel.return_value
- default.assert_called_once_with(scopes=["one", "two"])
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=["one", "two"], default_scopes=None)
+ else:
+ default.assert_called_once_with(scopes=["one", "two"])
+
+ if grpc_helpers.HAS_GRPC_GCP:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
+ else:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch(
+ "google.auth.default",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.projet),
+)
+@mock.patch("grpc.secure_channel")
+def test_create_channel_implicit_with_default_scopes(
+ grpc_secure_channel, default, composite_creds_call
+):
+ target = "example.com:443"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers.create_channel(target, default_scopes=["three", "four"])
+
+ assert channel is grpc_secure_channel.return_value
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ default.assert_called_once_with(scopes=None, default_scopes=["three", "four"])
+ else:
+ default.assert_called_once_with(scopes=["three", "four"])
+
if grpc_helpers.HAS_GRPC_GCP:
grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
else:
@@ -297,7 +384,7 @@ def test_create_channel_explicit_with_duplicate_credentials():
@mock.patch("grpc.composite_channel_credentials")
-@mock.patch("google.auth.credentials.with_scopes_if_required")
+@mock.patch("google.auth.credentials.with_scopes_if_required", autospec=True)
@mock.patch("grpc.secure_channel")
def test_create_channel_explicit(grpc_secure_channel, auth_creds, composite_creds_call):
target = "example.com:443"
@@ -305,7 +392,11 @@ def test_create_channel_explicit(grpc_secure_channel, auth_creds, composite_cred
channel = grpc_helpers.create_channel(target, credentials=mock.sentinel.credentials)
- auth_creds.assert_called_once_with(mock.sentinel.credentials, None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ auth_creds.assert_called_once_with(mock.sentinel.credentials, scopes=None, default_scopes=None)
+ else:
+ auth_creds.assert_called_once_with(mock.sentinel.credentials, scopes=None)
assert channel is grpc_secure_channel.return_value
if grpc_helpers.HAS_GRPC_GCP:
grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
@@ -327,7 +418,39 @@ def test_create_channel_explicit_scoped(grpc_secure_channel, composite_creds_cal
target, credentials=credentials, scopes=scopes
)
- credentials.with_scopes.assert_called_once_with(scopes)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes, default_scopes=None)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes)
+
+ assert channel is grpc_secure_channel.return_value
+ if grpc_helpers.HAS_GRPC_GCP:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
+ else:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch("grpc.secure_channel")
+def test_create_channel_explicit_default_scopes(grpc_secure_channel, composite_creds_call):
+ target = "example.com:443"
+ default_scopes = ["3", "4"]
+ composite_creds = composite_creds_call.return_value
+
+ credentials = mock.create_autospec(google.auth.credentials.Scoped, instance=True)
+ credentials.requires_scopes = True
+
+ channel = grpc_helpers.create_channel(
+ target, credentials=credentials, default_scopes=default_scopes
+ )
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes=None, default_scopes=default_scopes)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes=default_scopes)
+
assert channel is grpc_secure_channel.return_value
if grpc_helpers.HAS_GRPC_GCP:
grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
@@ -362,6 +485,7 @@ def test_create_channel_explicit_with_quota_project(grpc_secure_channel, composi
@mock.patch("grpc.secure_channel")
@mock.patch(
"google.auth.load_credentials_from_file",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.project)
)
def test_create_channel_with_credentials_file(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
@@ -374,7 +498,11 @@ def test_create_channel_with_credentials_file(load_credentials_from_file, grpc_s
target, credentials_file=credentials_file
)
- google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=None)
+ else:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None)
assert channel is grpc_secure_channel.return_value
if grpc_helpers.HAS_GRPC_GCP:
@@ -387,6 +515,7 @@ def test_create_channel_with_credentials_file(load_credentials_from_file, grpc_s
@mock.patch("grpc.secure_channel")
@mock.patch(
"google.auth.load_credentials_from_file",
+ autospec=True,
return_value=(mock.sentinel.credentials, mock.sentinel.project)
)
def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
@@ -400,7 +529,43 @@ def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_f
target, credentials_file=credentials_file, scopes=scopes
)
- google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes)
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes, default_scopes=None)
+ else:
+ google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes)
+
+ assert channel is grpc_secure_channel.return_value
+ if grpc_helpers.HAS_GRPC_GCP:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
+ else:
+ grpc_secure_channel.assert_called_once_with(target, composite_creds)
+
+
+@mock.patch("grpc.composite_channel_credentials")
+@mock.patch("grpc.secure_channel")
+@mock.patch(
+ "google.auth.load_credentials_from_file",
+ autospec=True,
+ return_value=(mock.sentinel.credentials, mock.sentinel.project)
+)
+def test_create_channel_with_credentials_file_and_default_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call):
+ target = "example.com:443"
+ default_scopes = ["3", "4"]
+
+ credentials_file = "/path/to/credentials/file.json"
+ composite_creds = composite_creds_call.return_value
+
+ channel = grpc_helpers.create_channel(
+ target, credentials_file=credentials_file, default_scopes=default_scopes
+ )
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=default_scopes)
+ else:
+ load_credentials_from_file.assert_called_once_with(credentials_file, scopes=default_scopes)
+
assert channel is grpc_secure_channel.return_value
if grpc_helpers.HAS_GRPC_GCP:
grpc_secure_channel.assert_called_once_with(target, composite_creds, None)
@@ -421,7 +586,12 @@ def test_create_channel_with_grpc_gcp(grpc_gcp_secure_channel):
grpc_helpers.create_channel(target, credentials=credentials, scopes=scopes)
grpc_gcp_secure_channel.assert_called()
- credentials.with_scopes.assert_called_once_with(scopes)
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes, default_scopes=None)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes)
@pytest.mark.skipif(grpc_helpers.HAS_GRPC_GCP, reason="grpc_gcp module not available")
@@ -435,7 +605,12 @@ def test_create_channel_without_grpc_gcp(grpc_secure_channel):
grpc_helpers.create_channel(target, credentials=credentials, scopes=scopes)
grpc_secure_channel.assert_called()
- credentials.with_scopes.assert_called_once_with(scopes)
+
+ # TODO: remove this if/else once google-auth >= 1.25.0 is required
+ if grpc_helpers._GOOGLE_AUTH_HAS_DEFAULT_SCOPES_AND_DEFAULT_HOST:
+ credentials.with_scopes.assert_called_once_with(scopes, default_scopes=None)
+ else:
+ credentials.with_scopes.assert_called_once_with(scopes)
class TestChannelStub(object):