4949import com .google .auth .oauth2 .ComputeEngineCredentialsTest .MockMetadataServerTransportFactory ;
5050import com .google .auth .oauth2 .GoogleCredentialsTest .MockHttpTransportFactory ;
5151import com .google .auth .oauth2 .GoogleCredentialsTest .MockTokenServerTransportFactory ;
52+ import java .io .BufferedReader ;
53+ import java .io .ByteArrayInputStream ;
5254import java .io .File ;
5355import java .io .FileNotFoundException ;
5456import java .io .IOException ;
5557import java .io .InputStream ;
58+ import java .io .StringReader ;
5659import java .net .URI ;
5760import java .nio .file .Paths ;
5861import java .security .AccessControlException ;
@@ -89,6 +92,7 @@ public class DefaultCredentialsProviderTest {
8992 private static final Collection <String > SCOPES = Collections .singletonList ("dummy.scope" );
9093 private static final URI CALL_URI = URI .create ("http://googleapis.com/testapi/v1/foo" );
9194 private static final String QUOTA_PROJECT = "sample-quota-project-id" ;
95+ private static final String SMBIOS_PATH_LINUX = "/sys/class/dmi/id/product_name" ;
9296
9397 static class MockRequestCountingTransportFactory implements HttpTransportFactory {
9498
@@ -101,7 +105,7 @@ public HttpTransport create() {
101105 }
102106
103107 @ Test
104- public void getDefaultCredentials_noCredentials_throws () throws Exception {
108+ public void getDefaultCredentials_noCredentials_throws () {
105109 MockHttpTransportFactory transportFactory = new MockHttpTransportFactory ();
106110 TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
107111
@@ -115,7 +119,7 @@ public void getDefaultCredentials_noCredentials_throws() throws Exception {
115119 }
116120
117121 @ Test
118- public void getDefaultCredentials_noCredentialsSandbox_throwsNonSecurity () throws Exception {
122+ public void getDefaultCredentials_noCredentialsSandbox_throwsNonSecurity () {
119123 MockHttpTransportFactory transportFactory = new MockHttpTransportFactory ();
120124 TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
121125 testProvider .setFileSandbox (true );
@@ -160,7 +164,8 @@ public void getDefaultCredentials_noCredentials_singleGceTestRequest() {
160164 testProvider .getDefaultCredentials (transportFactory );
161165 fail ("No credential expected." );
162166 } catch (IOException expected ) {
163- // Expected
167+ String message = expected .getMessage ();
168+ assertTrue (message .contains (DefaultCredentialsProvider .HELP_PERMALINK ));
164169 }
165170 assertEquals (
166171 transportFactory .transport .getRequestCount (),
@@ -176,6 +181,64 @@ public void getDefaultCredentials_noCredentials_singleGceTestRequest() {
176181 ComputeEngineCredentials .MAX_COMPUTE_PING_TRIES );
177182 }
178183
184+ @ Test
185+ public void getDefaultCredentials_noCredentials_linuxNotGce () throws IOException {
186+ TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
187+ testProvider .setProperty ("os.name" , "Linux" );
188+ String productFilePath = SMBIOS_PATH_LINUX ;
189+ InputStream productStream = new ByteArrayInputStream ("test" .getBytes ());
190+ testProvider .addFile (productFilePath , productStream );
191+
192+ assertFalse (ComputeEngineCredentials .checkStaticGceDetection (testProvider ));
193+ }
194+
195+ @ Test
196+ public void getDefaultCredentials_static_linux () throws IOException {
197+ TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
198+ testProvider .setProperty ("os.name" , "Linux" );
199+ String productFilePath = SMBIOS_PATH_LINUX ;
200+ File productFile = new File (productFilePath );
201+ InputStream productStream = new ByteArrayInputStream ("Googlekdjsfhg" .getBytes ());
202+ testProvider .addFile (productFile .getAbsolutePath (), productStream );
203+
204+ assertTrue (ComputeEngineCredentials .checkStaticGceDetection (testProvider ));
205+ }
206+
207+ @ Test
208+ public void getDefaultCredentials_static_windows_configuredAsLinux_notGce () throws IOException {
209+ TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
210+ testProvider .setProperty ("os.name" , "windows" );
211+ String productFilePath = SMBIOS_PATH_LINUX ;
212+ InputStream productStream = new ByteArrayInputStream ("Googlekdjsfhg" .getBytes ());
213+ testProvider .addFile (productFilePath , productStream );
214+
215+ assertFalse (ComputeEngineCredentials .checkStaticGceDetection (testProvider ));
216+ }
217+
218+ @ Test
219+ public void getDefaultCredentials_static_unsupportedPlatform_notGce () throws IOException {
220+ TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
221+ testProvider .setProperty ("os.name" , "macos" );
222+ String productFilePath = SMBIOS_PATH_LINUX ;
223+ InputStream productStream = new ByteArrayInputStream ("Googlekdjsfhg" .getBytes ());
224+ testProvider .addFile (productFilePath , productStream );
225+
226+ assertFalse (ComputeEngineCredentials .checkStaticGceDetection (testProvider ));
227+ }
228+
229+ @ Test
230+ public void checkGcpLinuxPlatformData () throws Exception {
231+ BufferedReader reader ;
232+ reader = new BufferedReader (new StringReader ("HP Z440 Workstation" ));
233+ assertFalse (ComputeEngineCredentials .checkProductNameOnLinux (reader ));
234+ reader = new BufferedReader (new StringReader ("Google" ));
235+ assertTrue (ComputeEngineCredentials .checkProductNameOnLinux (reader ));
236+ reader = new BufferedReader (new StringReader ("Google Compute Engine" ));
237+ assertTrue (ComputeEngineCredentials .checkProductNameOnLinux (reader ));
238+ reader = new BufferedReader (new StringReader ("Google Compute Engine " ));
239+ assertTrue (ComputeEngineCredentials .checkProductNameOnLinux (reader ));
240+ }
241+
179242 @ Test
180243 public void getDefaultCredentials_caches () throws IOException {
181244 MockMetadataServerTransportFactory transportFactory = new MockMetadataServerTransportFactory ();
@@ -342,6 +405,26 @@ public void getDefaultCredentials_envNoGceCheck_noGceRequest() throws IOExceptio
342405 assertEquals (transportFactory .transport .getRequestCount (), 0 );
343406 }
344407
408+ @ Test
409+ public void getDefaultCredentials_linuxSetup_envNoGceCheck_noGce () throws IOException {
410+ MockRequestCountingTransportFactory transportFactory =
411+ new MockRequestCountingTransportFactory ();
412+ TestDefaultCredentialsProvider testProvider = new TestDefaultCredentialsProvider ();
413+ testProvider .setEnv (DefaultCredentialsProvider .NO_GCE_CHECK_ENV_VAR , "true" );
414+ testProvider .setProperty ("os.name" , "Linux" );
415+ String productFilePath = SMBIOS_PATH_LINUX ;
416+ File productFile = new File (productFilePath );
417+ InputStream productStream = new ByteArrayInputStream ("Googlekdjsfhg" .getBytes ());
418+ testProvider .addFile (productFile .getAbsolutePath (), productStream );
419+ try {
420+ testProvider .getDefaultCredentials (transportFactory );
421+ fail ("No credential expected." );
422+ } catch (IOException expected ) {
423+ // Expected
424+ }
425+ assertEquals (transportFactory .transport .getRequestCount (), 0 );
426+ }
427+
345428 @ Test
346429 public void getDefaultCredentials_envGceMetadataHost_setsMetadataServerUrl () {
347430 String testUrl = "192.0.2.0" ;
0 commit comments