Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

Commit 1d41b10

Browse files
committed
working IT test
1 parent fa7ea61 commit 1d41b10

3 files changed

Lines changed: 54 additions & 70 deletions

File tree

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITMutableCredentialsTest.java

Lines changed: 41 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,17 @@
1717
package com.google.cloud.spanner.connection.it;
1818

1919
import static org.junit.Assert.*;
20-
import static org.junit.Assume.assumeTrue;
2120

2221
import com.google.auth.oauth2.GoogleCredentials;
2322
import com.google.auth.oauth2.ServiceAccountCredentials;
2423
import com.google.cloud.spanner.*;
2524
import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient;
26-
import com.google.cloud.spanner.connection.ITAbstractSpannerTest;
2725
import com.google.cloud.spanner.connection.MutableCredentials;
2826
import com.google.spanner.admin.database.v1.Database;
2927
import com.google.spanner.admin.database.v1.InstanceName;
3028
import java.io.IOException;
3129
import java.io.InputStream;
32-
import java.util.ArrayList;
30+
import java.util.Collections;
3331
import java.util.List;
3432
import org.junit.Test;
3533
import org.junit.experimental.categories.Category;
@@ -38,78 +36,64 @@
3836

3937
@Category(SerialIntegrationTest.class)
4038
@RunWith(JUnit4.class)
41-
public class ITMutableCredentialsTest extends ITAbstractSpannerTest {
42-
private static final String VALID_KEY_RESOURCE =
43-
"/com/google/cloud/spanner/connection/test-key.json";
39+
public class ITMutableCredentialsTest {
40+
private static final String MISSING_PERM_KEY =
41+
"/com/google/cloud/spanner/connection/test-key-missing-permissions.json";
4442

45-
private static final String INVALID_KEY_RESOURCE =
46-
"/com/google/cloud/spanner/connection/invalid-test-key.json";
43+
private static final String INVALID_KEY = "/com/google/cloud/spanner/connection/test-key.json";
4744

4845
@Test
4946
public void testMutableCredentialsUpdateAuthorizationForRunningClient() throws IOException {
5047

51-
GoogleCredentials credentialsFromFile;
48+
GoogleCredentials missingPermissionCredentials;
5249
try (InputStream stream =
53-
ITMutableCredentialsTest.class.getResourceAsStream(VALID_KEY_RESOURCE)) {
54-
assertNotNull("Missing test resource: " + VALID_KEY_RESOURCE, stream);
55-
credentialsFromFile = GoogleCredentials.fromStream(stream);
50+
ITMutableCredentialsTest.class.getResourceAsStream(MISSING_PERM_KEY)) {
51+
missingPermissionCredentials = GoogleCredentials.fromStream(stream);
5652
}
57-
assumeTrue(
58-
"This test requires service account credentials",
59-
credentialsFromFile instanceof ServiceAccountCredentials);
60-
61-
ServiceAccountCredentials validCredentials = (ServiceAccountCredentials) credentialsFromFile;
6253
ServiceAccountCredentials invalidCredentials;
63-
try (InputStream stream =
64-
ITMutableCredentialsTest.class.getResourceAsStream(INVALID_KEY_RESOURCE)) {
65-
assertNotNull("Missing test resource: " + INVALID_KEY_RESOURCE, stream);
54+
try (InputStream stream = ITMutableCredentialsTest.class.getResourceAsStream(INVALID_KEY)) {
6655
invalidCredentials = ServiceAccountCredentials.fromStream(stream);
6756
}
68-
69-
List<String> scopes = new ArrayList<>(getTestEnv().getTestHelper().getOptions().getScopes());
70-
MutableCredentials mutableCredentials = new MutableCredentials(validCredentials, scopes);
57+
List<String> scopes =
58+
Collections.singletonList("https://www.googleapis.com/auth/cloud-platform");
59+
// create MutableCredentials first with missing permissions
60+
MutableCredentials mutableCredentials =
61+
new MutableCredentials((ServiceAccountCredentials) missingPermissionCredentials, scopes);
7162

7263
SpannerOptions options = SpannerOptions.newBuilder().setCredentials(mutableCredentials).build();
73-
7464
try (Spanner spanner = options.getService();
7565
DatabaseAdminClient databaseAdminClient = spanner.createDatabaseAdminClient()) {
76-
/* String dbName =
77-
DatabaseName.of(
78-
getTestEnv().getTestHelper().getInstanceId().getProject(),
79-
getTestEnv().getTestHelper().getInstanceId().getInstance(),
80-
"TEST")
81-
.toString();
82-
Database database = databaseAdminClient.getDatabase(dbName);*/
83-
InstanceName instanceName =
84-
InstanceName.of(
85-
getTestEnv().getTestHelper().getInstanceId().getProject(),
86-
getTestEnv().getTestHelper().getInstanceId().getInstance());
87-
DatabaseAdminClient.ListDatabasesPagedResponse response =
88-
databaseAdminClient.listDatabases(instanceName);
89-
90-
boolean databaseFound = false;
91-
for (DatabaseAdminClient.ListDatabasesPage page : response.iteratePages()) {
92-
for (Database database : page.iterateAll()) {
93-
System.out.println("\t" + database.getName());
94-
databaseFound = true;
95-
}
66+
String project = "gcloud-devel";
67+
String instance = "java-client-integration-tests";
68+
try {
69+
listDatabases(databaseAdminClient, project, instance);
70+
} catch (Exception e) {
71+
// specifically validate the permission denied error message
72+
assertTrue(e.getMessage().contains("PERMISSION_DENIED"));
73+
assertFalse(e.getMessage().contains("UNAUTHENTICATED"));
9674
}
97-
assertTrue(databaseFound);
75+
76+
// update mutableCredentials now to use an invalid credential
77+
mutableCredentials.updateCredentials(invalidCredentials);
9878
try {
99-
mutableCredentials.updateCredentials(invalidCredentials);
100-
DatabaseAdminClient.ListDatabasesPagedResponse responseFailure =
101-
databaseAdminClient.listDatabases(instanceName);
102-
for (DatabaseAdminClient.ListDatabasesPage page : responseFailure.iteratePages()) {
103-
for (Database database : page.iterateAll()) {
104-
System.out.println("\t" + database.getName());
105-
}
106-
}
79+
listDatabases(databaseAdminClient, project, instance);
10780
fail("Expected UNAUTHENTICATED after switching to invalid credentials");
108-
} catch (SpannerException e) {
109-
assertEquals(ErrorCode.UNAUTHENTICATED, e.getErrorCode());
81+
} catch (Exception e) {
82+
assertTrue(e.getMessage().contains("UNAUTHENTICATED"));
83+
assertFalse(e.getMessage().contains("PERMISSION_DENIED"));
84+
}
85+
}
86+
}
87+
88+
private static void listDatabases(
89+
DatabaseAdminClient databaseAdminClient, String projectId, String instanceId) {
90+
DatabaseAdminClient.ListDatabasesPagedResponse response =
91+
databaseAdminClient.listDatabases(InstanceName.of(projectId, instanceId));
92+
93+
for (DatabaseAdminClient.ListDatabasesPage page : response.iteratePages()) {
94+
for (Database database : page.iterateAll()) {
95+
// no-op
11096
}
111-
} finally {
112-
closeSpanner();
11397
}
11498
}
11599
}

google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/invalid-test-key.json

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"type": "service_account",
3+
"project_id": "ldetmer-sanbox",
4+
"private_key_id": "1f9be0fd206d51e759ab8577c32301333dda9103",
5+
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDgwaPePW0yK6Wg\nm0n0PgrmJbwbf0HgFQ9E5I5e+rZ+hl79pCxCkXcTVH6HsIgh+Lp1tyCTExjsE0cN\nDVRy9YD/BR4wKsxOhz5UKwmRhOg127EGvqMAwomEGOIyOuS+AMmdy710B/iBjc01\nLYTzNe1ldZ5SK69AJer9g1+mPn2H7AbZGQ8/ThKvzEAErmgd7PMATRwg6sAc5n6O\nIvcfQp4XApcYuCNH4KVmnXD3K9f0ySV5WKA14eHRIIxwjHagFvHaiMvU4/HXqCao\nClVoNmmoraUBfaDGj4JGMvj1JjTyz4VB0KGXxYTJJrViYhkKZs4zSo2k2qatPczn\nNHH6PkjLAgMBAAECggEAD+QWYPfjiOuQb1WWGgBqUYa+JmI4rHjwtm9D0wVTnTMv\nniwFu8MrMcuvPTVxupfVHyOOgwzo8zATEveBTrYlo7efQHVA3WsvMKZGVpVDZyNx\nqxy+y6agMHMjSGfk6mYwhclKS4eQviA3hRit0MBcWOhtruOgesmeNBnIy9PumOB+\nWVRp7uz8D/xaq55lFAShaH2DAEt316qetZW+LtNq473pPq9GlnFYsj+OPyWT84X2\nmeoWLxVwOpkx1RmmlAEOQCCK24H7GbZwsADiyHQ37cwQ/MfTs9qsib56TByVHSSb\nYD+lTMPT+5N/YY51AVq4op4kGPuVTHLE4D3uZduSEQKBgQDwmuSCjfvHr1LZxo/r\nVPR6+KiQC+o8qBzK0413D3rn+0pAWCcrkb9//PGwXxtRzjEodwbX9B+g8UGzkbfD\nH5scogl3Nd+3zUTsSp5D5IZUJsVv1lN2klv4y48zidey2qELOC8n6hPnrbOHfZqZ\nR22/o2/TeWxnWbmMUN2kx9r++QKBgQDvIyWePiJgFvlRLSLQQpZOiDV4z61Ixows\nDBrTeQyfAYG8gROA0LUS3zS4njA2Yr6xFj6M8rhUD9bLQ1+mGIJWi7ZI2cD+TDtH\ntdxTS7jBU8s26H2nisD8kvKpq61RxI1A2H7u+9gPzDweM0boBlERNqjyPUZhNbdD\n0+7AwmJC4wKBgB91kTVEzUvxr5qL7NtvUzwU8S1McYcW0BTxDkkn/AEDCVVacVyw\nBOL+NrfB57eNhz3sOjfYUp5fjSCmh+l6Y3Sd9zDgGW1V6JIgu4rTAYFVRHF4C5ew\nUVg5fXLWrh5TmcT2xquoXovnWVb45FLwVPg+rWtwL+1ffPRMyn42J3s5AoGAf6CR\ndigRLpl0THe7aczv7U/SwfyMrheRPfzj4FNtgftK43E8GHbK/Rx1RcbfUldXEKof\njhgIeozNhUQa60mPXmNIUQ8uakoDJV2RDj+OhleTUGW6kk2CfAptSlKeuNIe1Sn2\nbNOqV5wXxcJ2KGUepQI4HrjHNCB4A9I7TVMxICMCgYAPXO4/xTZJ/0Nmjd085yRo\nhDFBUTwWPHUTbUA1bBMd908F4RD0WnnLPzSC1hSxhhCGm119JGgusZfwL2Ey1nYh\n9B3b/EwArE/vC+Fl/tyILQR2G/D/f70dISuDut139cKEM8qBLJ2JRuYbKlEBPhGW\nw0x8SmTkNYepAG0SSaBu7g==\n-----END PRIVATE KEY-----\n",
6+
"client_email": "test-mutable-credentials@ldetmer-sanbox.iam.gserviceaccount.com",
7+
"client_id": "110488447517330409458",
8+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
9+
"token_uri": "https://oauth2.googleapis.com/token",
10+
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11+
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-mutable-credentials%40ldetmer-sanbox.iam.gserviceaccount.com",
12+
"universe_domain": "googleapis.com"
13+
}

0 commit comments

Comments
 (0)