Skip to content

Commit 2444a19

Browse files
committed
chore: Add unit tests for setting the source
1 parent 28df732 commit 2444a19

File tree

6 files changed

+904
-795
lines changed

6 files changed

+904
-795
lines changed

oauth2_http/java/com/google/auth/oauth2/ComputeEngineCredentials.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,6 @@ public String getAccount() {
692692
if (serviceAccountEmail == null) {
693693
try {
694694
serviceAccountEmail = getDefaultServiceAccount();
695-
this.principal = serviceAccountEmail;
696695
} catch (IOException ex) {
697696
throw new RuntimeException("Failed to get service account", ex);
698697
}
@@ -763,7 +762,9 @@ private String getDefaultServiceAccount() throws IOException {
763762
responseData, LOGGER_PROVIDER, "Received default service account payload");
764763
Map<String, Object> defaultAccount =
765764
OAuth2Utils.validateMap(responseData, "default", PARSE_ERROR_ACCOUNT);
766-
return OAuth2Utils.validateString(defaultAccount, "email", PARSE_ERROR_ACCOUNT);
765+
String email = OAuth2Utils.validateString(defaultAccount, "email", PARSE_ERROR_ACCOUNT);
766+
principal = email;
767+
return email;
767768
}
768769

769770
public static class Builder extends GoogleCredentials.Builder {

oauth2_http/java/com/google/auth/oauth2/DefaultCredentialsProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ private final GoogleCredentials getDefaultCredentialsUnsynchronized(
223223
credentials =
224224
credentials.withSource(
225225
String.format(
226-
"Metadata Server URL set to %s", System.getenv(GCE_METADATA_HOST_ENV_VAR)));
226+
"Metadata Server URL set to %s", getEnv(GCE_METADATA_HOST_ENV_VAR)));
227227
}
228228
}
229229

oauth2_http/javatests/com/google/auth/oauth2/DefaultCredentialsProviderTest.java

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,104 @@ public AccessToken refreshAccessToken() throws IOException {
742742
}
743743
}
744744

745+
@Test
746+
public void getDefaultCredentials_envVarSet_serviceAccountCredentials_correctCredentialInfo() throws IOException {
747+
MockTokenServerTransportFactory transportFactory =
748+
new MockTokenServerTransportFactory();
749+
transportFactory.transport.addServiceAccount(SA_CLIENT_EMAIL, ACCESS_TOKEN);
750+
InputStream serviceAccountStream =
751+
ServiceAccountCredentialsTest.writeServiceAccountStream(
752+
SA_CLIENT_ID, SA_CLIENT_EMAIL, SA_PRIVATE_KEY_PKCS8, SA_PRIVATE_KEY_ID);
753+
TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider();
754+
String serviceAccountPath = tempFilePath("service_account.json");
755+
testProvider.addFile(serviceAccountPath, serviceAccountStream);
756+
testProvider.setEnv(DefaultCredentialsProvider.CREDENTIAL_ENV_VAR, serviceAccountPath);
757+
758+
GoogleCredentials credentials = testProvider.getDefaultCredentials(transportFactory);
759+
760+
assertNotNull(credentials);
761+
assertTrue(credentials instanceof ServiceAccountCredentials);
762+
Map<String, String> credentialInfo = credentials.getCredentialInfo();
763+
assertEquals(
764+
String.format(
765+
"Env Var %s set to %s",
766+
DefaultCredentialsProvider.CREDENTIAL_ENV_VAR, serviceAccountPath),
767+
credentialInfo.get("Credential Source"));
768+
assertEquals("Service Account Credentials", credentialInfo.get("Credential Type"));
769+
assertEquals(SA_CLIENT_EMAIL, credentialInfo.get("Principal"));
770+
}
771+
772+
@Test
773+
public void getDefaultCredentials_envVarSet_userCredential_correctCredentialInfo() throws IOException {
774+
InputStream userStream =
775+
UserCredentialsTest.writeUserStream(
776+
USER_CLIENT_ID, USER_CLIENT_SECRET, REFRESH_TOKEN, QUOTA_PROJECT);
777+
TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider();
778+
String userPath = tempFilePath("user.json");
779+
testProvider.addFile(userPath, userStream);
780+
testProvider.setEnv(DefaultCredentialsProvider.CREDENTIAL_ENV_VAR, userPath);
781+
HttpTransportFactory transportFactory =
782+
new MockTokenServerTransportFactory();
783+
784+
GoogleCredentials credentials = testProvider.getDefaultCredentials(transportFactory);
785+
786+
assertNotNull(credentials);
787+
assertTrue(credentials instanceof UserCredentials);
788+
Map<String, String> credentialInfo = credentials.getCredentialInfo();
789+
assertEquals(
790+
String.format(
791+
"Env Var %s set to %s",
792+
DefaultCredentialsProvider.CREDENTIAL_ENV_VAR, userPath),
793+
credentialInfo.get("Credential Source"));
794+
assertEquals("User Credentials", credentialInfo.get("Credential Type"));
795+
assertNull(credentialInfo.get("Principal"));
796+
}
797+
798+
@Test
799+
public void getDefaultCredentials_wellKnownFile_userCredential_correctCredentialInfo() throws IOException {
800+
File cloudConfigDir = getTempDirectory();
801+
InputStream userStream =
802+
UserCredentialsTest.writeUserStream(
803+
USER_CLIENT_ID, USER_CLIENT_SECRET, REFRESH_TOKEN, QUOTA_PROJECT);
804+
File wellKnownFile =
805+
new File(cloudConfigDir, DefaultCredentialsProvider.WELL_KNOWN_CREDENTIALS_FILE);
806+
TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider();
807+
testProvider.setEnv("CLOUDSDK_CONFIG", cloudConfigDir.getAbsolutePath());
808+
testProvider.addFile(wellKnownFile.getAbsolutePath(), userStream);
809+
HttpTransportFactory transportFactory =
810+
new MockTokenServerTransportFactory();
811+
812+
GoogleCredentials credentials = testProvider.getDefaultCredentials(transportFactory);
813+
814+
assertNotNull(credentials);
815+
assertTrue(credentials instanceof UserCredentials);
816+
Map<String, String> credentialInfo = credentials.getCredentialInfo();
817+
assertEquals(
818+
String.format("Well Known File at %s", wellKnownFile.getCanonicalPath()),
819+
credentialInfo.get("Credential Source"));
820+
assertEquals("User Credentials", credentialInfo.get("Credential Type"));
821+
assertNull(credentialInfo.get("Principal"));
822+
}
823+
824+
@Test
825+
public void getDefaultCredentials_computeEngineCredentialscorrectCredentialInfo() throws IOException {
826+
MockMetadataServerTransportFactory transportFactory = new MockMetadataServerTransportFactory();
827+
TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider();
828+
String gceMetadataHost = "192.0.2.0";
829+
testProvider.setEnv(DefaultCredentialsProvider.GCE_METADATA_HOST_ENV_VAR, gceMetadataHost);
830+
831+
GoogleCredentials credentials = testProvider.getDefaultCredentials(transportFactory);
832+
833+
assertNotNull(credentials);
834+
assertTrue(credentials instanceof ComputeEngineCredentials);
835+
Map<String, String> credentialInfo = credentials.getCredentialInfo();
836+
assertEquals(
837+
String.format("Metadata Server URL set to %s", gceMetadataHost),
838+
credentials.getCredentialInfo().get("Credential Source"));
839+
assertEquals("Compute Engine Credentials", credentialInfo.get("Credential Type"));
840+
assertNull(credentialInfo.get("Principal"));
841+
}
842+
745843
/*
746844
* App Engine is detected by calling SystemProperty.environment.value() via Reflection.
747845
* The following mock types simulate the shape and behavior of that call sequence.
@@ -898,4 +996,14 @@ public HttpTransport create() {
898996
return transport;
899997
}
900998
}
901-
}
999+
1000+
static class MockTokenServerTransportFactory implements HttpTransportFactory {
1001+
1002+
MockTokenServerTransport transport = new MockTokenServerTransport();
1003+
1004+
@Override
1005+
public HttpTransport create() {
1006+
return transport;
1007+
}
1008+
}
1009+
}

0 commit comments

Comments
 (0)