@@ -53,6 +53,10 @@
import org .junit .rules .ExpectedException ;
public class ServiceOptionsTest {
private static GoogleCredentials credentials ;
private static GoogleCredentials credentialsWithProjectId ;
private static GoogleCredentials credentialsWithQuotaProject ;
private static final String JSON_KEY =
"{\n"
+ " \"private_key_id\": \"somekeyid\",\n"
@@ -80,16 +84,6 @@ public class ServiceOptionsTest {
+ " \"client_id\": \"someclientid.apps.googleusercontent.com\",\n"
+ " \"type\": \"service_account\"\n"
+ "}" ;
private static GoogleCredentials credentials ;
static {
try {
InputStream keyStream = new ByteArrayInputStream (JSON_KEY .getBytes ());
credentials = GoogleCredentials .fromStream (keyStream );
} catch (IOException e ) {
fail ("Couldn't create fake JSON credentials." );
}
}
private static final String JSON_KEY_PROJECT_ID =
"{\n"
@@ -119,15 +113,51 @@ public class ServiceOptionsTest {
+ " \"client_id\": \"someclientid.apps.googleusercontent.com\",\n"
+ " \"type\": \"service_account\"\n"
+ "}" ;
private static GoogleCredentials credentialsWithProjectId ;
private static final String JSON_KEY_QUOTA_PROJECT_ID =
"{\n"
+ " \"private_key_id\": \"somekeyid\",\n"
+ " \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggS"
+ "kAgEAAoIBAQC+K2hSuFpAdrJI\\nnCgcDz2M7t7bjdlsadsasad+fvRSW6TjNQZ3p5LLQY1kSZRqBqylRkzteMOyHg"
+ "aR\\n0Pmxh3ILCND5men43j3h4eDbrhQBuxfEMalkG92sL+PNQSETY2tnvXryOvmBRwa/\\nQP/9dJfIkIDJ9Fw9N4"
+ "Bhhhp6mCcRpdQjV38H7JsyJ7lih/oNjECgYAt\\nknddadwkwewcVxHFhcZJO+XWf6ofLUXpRwiTZakGMn8EE1uVa2"
+ "LgczOjwWHGi99MFjxSer5m9\\n1tCa3/KEGKiS/YL71JvjwX3mb+cewlkcmweBKZHM2JPTk0ZednFSpVZMtycjkbLa"
+ "\\ndYOS8V85AgMBewECggEBAKksaldajfDZDV6nGqbFjMiizAKJolr/M3OQw16K6o3/\\n0S31xIe3sSlgW0+UbYlF"
+ "4U8KifhManD1apVSC3csafaspP4RZUHFhtBywLO9pR5c\\nr6S5aLp+gPWFyIp1pfXbWGvc5VY/v9x7ya1VEa6rXvL"
+ "sKupSeWAW4tMj3eo/64ge\\nsdaceaLYw52KeBYiT6+vpsnYrEkAHO1fF/LavbLLOFJmFTMxmsNaG0tuiJHgjshB\\"
+ "n82DpMCbXG9YcCgI/DbzuIjsdj2JC1cascSP//3PmefWysucBQe7Jryb6NQtASmnv\\nCdDw/0jmZTEjpe4S1lxfHp"
+ "lAhHFtdgYTvyYtaLZiVVkCgYEA8eVpof2rceecw/I6\\n5ng1q3Hl2usdWV/4mZMvR0fOemacLLfocX6IYxT1zA1FF"
+ "JlbXSRsJMf/Qq39mOR2\\nSpW+hr4jCoHeRVYLgsbggtrevGmILAlNoqCMpGZ6vDmJpq6ECV9olliDvpPgWOP+\\nm"
+ "YPDreFBGxWvQrADNbRt2dmGsrsCgYEAyUHqB2wvJHFqdmeBsaacewzV8x9WgmeX\\ngUIi9REwXlGDW0Mz50dxpxcK"
+ "CAYn65+7TCnY5O/jmL0VRxU1J2mSWyWTo1C+17L0\\n3fUqjxL1pkefwecxwecvC+gFFYdJ4CQ/MHHXU81Lwl1iWdF"
+ "Cd2UoGddYaOF+KNeM\\nHC7cmqra+JsCgYEAlUNywzq8nUg7282E+uICfCB0LfwejuymR93CtsFgb7cRd6ak\\nECR"
+ "8FGfCpH8ruWJINllbQfcHVCX47ndLZwqv3oVFKh6pAS/vVI4dpOepP8++7y1u\\ncoOvtreXCX6XqfrWDtKIvv0vjl"
+ "HBhhhp6mCcRpdQjV38H7JsyJ7lih/oNjECgYAt\\nkndj5uNl5SiuVxHFhcZJO+XWf6ofLUregtevZakGMn8EE1uVa"
+ "2AY7eafmoU/nZPT\\n00YB0TBATdCbn/nBSuKDESkhSg9s2GEKQZG5hBmL5uCMfo09z3SfxZIhJdlerreP\\nJ7gSi"
+ "dI12N+EZxYd4xIJh/HFDgp7RRO87f+WJkofMQKBgGTnClK1VMaCRbJZPriw\\nEfeFCoOX75MxKwXs6xgrw4W//AYG"
+ "GUjDt83lD6AZP6tws7gJ2IwY/qP7+lyhjEqN\\nHtfPZRGFkGZsdaksdlaksd323423d+15/UvrlRSFPNj1tWQmNKk"
+ "XyRDW4IG1Oa2p\\nrALStNBx5Y9t0/LQnFI4w3aG\\n-----END PRIVATE KEY-----\\n\",\n"
+ " \"project_id\": \"someprojectid\",\n"
+ " \"client_email\": \"someclientid@developer.gserviceaccount.com\",\n"
+ " \"client_id\": \"someclientid.apps.googleusercontent.com\",\n"
+ " \"type\": \"service_account\",\n"
+ " \"quota_project_id\": \"some-quota-project-id\"\n"
+ "}" ;
static {
credentials = loadCredentials (JSON_KEY );
credentialsWithProjectId = loadCredentials (JSON_KEY_PROJECT_ID );
credentialsWithQuotaProject = loadCredentials (JSON_KEY_QUOTA_PROJECT_ID );
}
static GoogleCredentials loadCredentials (String credentialFile ) {
try {
InputStream keyStream = new ByteArrayInputStream (JSON_KEY_PROJECT_ID .getBytes ());
credentialsWithProjectId = GoogleCredentials .fromStream (keyStream );
InputStream keyStream = new ByteArrayInputStream (credentialFile .getBytes ());
return GoogleCredentials .fromStream (keyStream );
} catch (IOException e ) {
fail ("Couldn't create fake JSON credentials." );
}
return null ;
}
private static final ApiClock TEST_CLOCK = new TestClock ();
@@ -138,6 +168,7 @@ public class ServiceOptionsTest {
.setHost ("host" )
.setProjectId ("project-id" )
.setRetrySettings (ServiceOptions .getNoRetrySettings ())
.setQuotaProjectId ("quota-project-id" )
.build ();
private static final TestServiceOptions OPTIONS_NO_CREDENTIALS =
TestServiceOptions .newBuilder ()
@@ -146,6 +177,7 @@ public class ServiceOptionsTest {
.setHost ("host" )
.setProjectId ("project-id" )
.setRetrySettings (ServiceOptions .getNoRetrySettings ())
.setQuotaProjectId ("quota-project-id" )
.build ();
private static final TestServiceOptions DEFAULT_OPTIONS =
TestServiceOptions .newBuilder ().setProjectId ("project-id" ).build ();
@@ -283,6 +315,39 @@ public void testBuilder() {
assertSame (ServiceOptions .getDefaultRetrySettings (), DEFAULT_OPTIONS .getRetrySettings ());
}
@ Test
public void testBuilder_quotaProjectServiceOptionTakesPrecedence () {
TestServiceOptions noCredsWithQuotaProject =
TestServiceOptions .newBuilder ()
.setCredentials (NoCredentials .getInstance ())
.setProjectId ("project-id" )
.setQuotaProjectId ("quota-project-id" )
.build ();
TestServiceOptions quotaProjectCredsWithQuotaProject =
TestServiceOptions .newBuilder ()
.setQuotaProjectId ("quota-project-id" )
.setCredentials (credentialsWithQuotaProject )
.build ();
TestServiceOptions quotaProjectCredsWithQuotaProject2 =
TestServiceOptions .newBuilder ()
.setCredentials (credentialsWithQuotaProject )
.setQuotaProjectId ("quota-project-id" )
.build ();
TestServiceOptions quotaProjectCreds =
TestServiceOptions .newBuilder ().setCredentials (credentialsWithQuotaProject ).build ();
TestServiceOptions none =
TestServiceOptions .newBuilder ()
.setCredentials (NoCredentials .getInstance ())
.setProjectId ("project-id" )
.build ();
assertEquals ("quota-project-id" , noCredsWithQuotaProject .getQuotaProjectId ());
assertEquals ("quota-project-id" , quotaProjectCredsWithQuotaProject .getQuotaProjectId ());
assertEquals ("quota-project-id" , quotaProjectCredsWithQuotaProject2 .getQuotaProjectId ());
assertEquals ("some-quota-project-id" , quotaProjectCreds .getQuotaProjectId ());
assertEquals (null , none .getQuotaProjectId ());
}
@ Test
public void testBuilderNoCredentials () {
assertEquals (NoCredentials .getInstance (), OPTIONS_NO_CREDENTIALS .getCredentials ());
@@ -293,6 +358,7 @@ public void testBuilderNoCredentials() {
assertEquals ("host" , OPTIONS_NO_CREDENTIALS .getHost ());
assertEquals ("project-id" , OPTIONS_NO_CREDENTIALS .getProjectId ());
assertSame (ServiceOptions .getNoRetrySettings (), OPTIONS_NO_CREDENTIALS .getRetrySettings ());
assertEquals ("quota-project-id" , OPTIONS .getQuotaProjectId ());
}
@ Test
@@ -372,7 +438,8 @@ public void testGetServiceAccountProjectId() throws Exception {
Files .write ("{\"project_id\":\"my-project-id\"}" .getBytes (), credentialsFile );
assertEquals (
"my-project-id" , ServiceOptions .getServiceAccountProjectId (credentialsFile .getPath ()));
"my-project-id" ,
ServiceOptions .getValueFromCredentialsFile (credentialsFile .getPath (), "project_id" ));
}
@ Test
@@ -381,14 +448,14 @@ public void testGetServiceAccountProjectId_badJson() throws Exception {
credentialsFile .deleteOnExit ();
Files .write ("asdfghj" .getBytes (), credentialsFile );
assertNull (ServiceOptions .getServiceAccountProjectId (credentialsFile .getPath ()));
assertNull (ServiceOptions .getValueFromCredentialsFile (credentialsFile .getPath (), "project_id" ));
}
@ Test
public void testGetServiceAccountProjectId_nonExistentFile () throws Exception {
File credentialsFile = new File ("/doesnotexist" );
assertNull (ServiceOptions .getServiceAccountProjectId (credentialsFile .getPath ()));
assertNull (ServiceOptions .getValueFromCredentialsFile (credentialsFile .getPath (), "project_id" ));
}
@ Test