diff --git a/system_tests/conftest.py b/system_tests/conftest.py
index ebbae48..5969bee 100644
--- a/system_tests/conftest.py
+++ b/system_tests/conftest.py
@@ -40,13 +40,13 @@
 
 
 @pytest.fixture
-def request():
+def http_request():
     """A transport.request object."""
     yield google.auth.transport.urllib3.Request(HTTP)
 
 
 @pytest.fixture
-def token_info(request):
+def token_info(http_request):
     """Returns a function that obtains OAuth2 token info."""
     def _token_info(access_token=None, id_token=None):
         query_params = {}
@@ -60,7 +60,7 @@
 
         url = _helpers.update_query(TOKEN_INFO_URL, query_params)
 
-        response = request(url=url, method='GET')
+        response = http_request(url=url, method='GET')
 
         return json.loads(response.data.decode('utf-8'))
 
diff --git a/system_tests/test_compute_engine.py b/system_tests/test_compute_engine.py
index c4b0c7b..7fd31b4 100644
--- a/system_tests/test_compute_engine.py
+++ b/system_tests/test_compute_engine.py
@@ -20,15 +20,15 @@
 
 
 @pytest.fixture(autouse=True)
-def check_gce_environment(request):
-    if not _metadata.ping(request):
+def check_gce_environment(http_request):
+    if not _metadata.ping(http_request):
         pytest.skip('Compute Engine metadata service is not available.')
 
 
-def test_refresh(request, token_info):
+def test_refresh(http_request, token_info):
     credentials = compute_engine.Credentials()
 
-    credentials.refresh(request)
+    credentials.refresh(http_request)
 
     assert credentials.token is not None
     assert credentials._service_account_email is not None
diff --git a/system_tests/test_default.py b/system_tests/test_default.py
new file mode 100644
index 0000000..02242e9
--- /dev/null
+++ b/system_tests/test_default.py
@@ -0,0 +1,121 @@
+# Copyright 2016 Google Inc.
+#
+# 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 os
+
+import py
+
+import google.auth
+from google.auth import environment_vars
+import google.oauth2.credentials
+from google.oauth2 import service_account
+
+
+def validate_refresh(credentials, http_request):
+    if credentials.requires_scopes:
+        credentials = credentials.with_scopes(['email', 'profile'])
+
+    credentials.refresh(http_request)
+
+    assert credentials.token
+    assert credentials.valid
+
+
+def test_explicit_credentials_service_account(
+        monkeypatch, service_account_file, http_request):
+    monkeypatch.setitem(
+        os.environ, environment_vars.CREDENTIALS, service_account_file)
+
+    credentials, project_id = google.auth.default()
+
+    assert isinstance(credentials, service_account.Credentials)
+    assert project_id is not None
+
+    validate_refresh(credentials, http_request)
+
+
+def test_explicit_credentials_authorized_user(
+        monkeypatch, authorized_user_file, http_request):
+    monkeypatch.setitem(
+        os.environ, environment_vars.CREDENTIALS, authorized_user_file)
+
+    credentials, project_id = google.auth.default()
+
+    assert isinstance(credentials, google.oauth2.credentials.Credentials)
+    assert project_id is None
+
+    validate_refresh(credentials, http_request)
+
+
+def test_explicit_credentials_explicit_project_id(
+        monkeypatch, service_account_file, http_request):
+    project = 'system-test-project'
+    monkeypatch.setitem(
+        os.environ, environment_vars.CREDENTIALS, service_account_file)
+    monkeypatch.setitem(
+        os.environ, environment_vars.PROJECT, project)
+
+    _, project_id = google.auth.default()
+
+    assert project_id == project
+
+
+def generate_cloud_sdk_config(
+        tmpdir, credentials_file, active_config='default', project=None):
+    tmpdir.join('active_config').write(
+        '{}\n'.format(active_config), ensure=True)
+
+    if project is not None:
+        config_file = tmpdir.join(
+            'configurations', 'config_{}'.format(active_config))
+        config_file.write(
+            '[core]\nproject = {}'.format(project), ensure=True)
+
+    py.path.local(credentials_file).copy(
+        tmpdir.join('application_default_credentials.json'))
+
+
+def test_cloud_sdk_credentials_service_account(
+        tmpdir, monkeypatch, service_account_file, http_request):
+    # Create the Cloud SDK configuration tree
+    project = 'system-test-project'
+    generate_cloud_sdk_config(tmpdir, service_account_file, project=project)
+    monkeypatch.setitem(
+        os.environ, environment_vars.CLOUD_SDK_CONFIG_DIR, str(tmpdir))
+
+    credentials, project_id = google.auth.default()
+
+    assert isinstance(credentials, service_account.Credentials)
+    assert project_id is not None
+    # The project ID should be the project ID specified in the the service
+    # account file, not the project in the config.
+    assert project_id is not project
+
+    validate_refresh(credentials, http_request)
+
+
+def test_cloud_sdk_credentials_authorized_user(
+        tmpdir, monkeypatch, authorized_user_file, http_request):
+    # Create the Cloud SDK configuration tree
+    project = 'system-test-project'
+    generate_cloud_sdk_config(tmpdir, authorized_user_file, project=project)
+    monkeypatch.setitem(
+        os.environ, environment_vars.CLOUD_SDK_CONFIG_DIR, str(tmpdir))
+
+    credentials, project_id = google.auth.default()
+
+    assert isinstance(credentials, google.oauth2.credentials.Credentials)
+    assert project_id == project
+
+    validate_refresh(credentials, http_request)
diff --git a/system_tests/test_oauth2_credentials.py b/system_tests/test_oauth2_credentials.py
index e268519..ded0630 100644
--- a/system_tests/test_oauth2_credentials.py
+++ b/system_tests/test_oauth2_credentials.py
@@ -20,7 +20,7 @@
 GOOGLE_OAUTH2_TOKEN_ENDPOINT = 'https://accounts.google.com/o/oauth2/token'
 
 
-def test_refresh(authorized_user_file, request, token_info):
+def test_refresh(authorized_user_file, http_request, token_info):
     with open(authorized_user_file, 'r') as fh:
         info = json.load(fh)
 
@@ -31,7 +31,7 @@
         client_id=info['client_id'],
         client_secret=info['client_secret'])
 
-    credentials.refresh(request)
+    credentials.refresh(http_request)
 
     assert credentials.token
 
diff --git a/system_tests/test_service_account.py b/system_tests/test_service_account.py
index 4ac0b43..6b41ca2 100644
--- a/system_tests/test_service_account.py
+++ b/system_tests/test_service_account.py
@@ -25,15 +25,15 @@
         service_account_file)
 
 
-def test_refresh_no_scopes(request, credentials):
+def test_refresh_no_scopes(http_request, credentials):
     with pytest.raises(exceptions.RefreshError):
-        credentials.refresh(request)
+        credentials.refresh(http_request)
 
 
-def test_refresh_success(request, credentials, token_info):
+def test_refresh_success(http_request, credentials, token_info):
     credentials = credentials.with_scopes(['email', 'profile'])
 
-    credentials.refresh(request)
+    credentials.refresh(http_request)
 
     assert credentials.token
 
