Skip to content

Commit fe51c86

Browse files
committed
use ImmutableSortedSet
1 parent 331cb37 commit fe51c86

2 files changed

Lines changed: 86 additions & 99 deletions

File tree

java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryConnection.java

Lines changed: 65 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import com.google.cloud.bigquery.storage.v1.BigQueryWriteClient;
4242
import com.google.cloud.bigquery.storage.v1.BigQueryWriteSettings;
4343
import com.google.cloud.http.HttpTransportOptions;
44-
import com.google.common.collect.ImmutableSet;
44+
import com.google.common.collect.ImmutableSortedSet;
4545
import java.io.IOException;
4646
import java.io.InputStream;
4747
import java.sql.CallableStatement;
@@ -78,67 +78,69 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
7878
private static final String DEFAULT_JDBC_TOKEN_VALUE = "Google-BigQuery-JDBC-Driver";
7979
private static final String DEFAULT_VERSION = "0.0.0";
8080
private static final Set<String> SAFE_TO_LOG_PROPERTIES =
81-
ImmutableSet.of(
82-
BigQueryJdbcUrlUtility.PROJECT_ID_PROPERTY_NAME.toLowerCase(),
83-
BigQueryJdbcUrlUtility.DEFAULT_DATASET_PROPERTY_NAME.toLowerCase(),
84-
BigQueryJdbcUrlUtility.LOCATION_PROPERTY_NAME.toLowerCase(),
85-
BigQueryJdbcUrlUtility.ENABLE_HTAPI_PROPERTY_NAME.toLowerCase(),
86-
BigQueryJdbcUrlUtility.UNSUPPORTED_HTAPI_FALLBACK_PROPERTY_NAME.toLowerCase(),
87-
BigQueryJdbcUrlUtility.HTAPI_MIN_TABLE_SIZE_PROPERTY_NAME.toLowerCase(),
88-
BigQueryJdbcUrlUtility.HTAPI_ACTIVATION_RATIO_PROPERTY_NAME.toLowerCase(),
89-
BigQueryJdbcUrlUtility.KMS_KEY_NAME_PROPERTY_NAME.toLowerCase(),
90-
BigQueryJdbcUrlUtility.QUERY_PROPERTIES_NAME.toLowerCase(),
91-
BigQueryJdbcUrlUtility.ENABLE_SESSION_PROPERTY_NAME.toLowerCase(),
92-
BigQueryJdbcUrlUtility.LOG_LEVEL_PROPERTY_NAME.toLowerCase(),
93-
BigQueryJdbcUrlUtility.LOG_PATH_PROPERTY_NAME.toLowerCase(),
94-
BigQueryJdbcUrlUtility.OAUTH_TYPE_PROPERTY_NAME.toLowerCase(),
95-
BigQueryJdbcUrlUtility.OAUTH_ACCESS_TOKEN_READONLY_PROPERTY_NAME.toLowerCase(),
96-
BigQueryJdbcUrlUtility.USE_QUERY_CACHE_PROPERTY_NAME.toLowerCase(),
97-
BigQueryJdbcUrlUtility.QUERY_DIALECT_PROPERTY_NAME.toLowerCase(),
98-
BigQueryJdbcUrlUtility.ALLOW_LARGE_RESULTS_PROPERTY_NAME.toLowerCase(),
99-
BigQueryJdbcUrlUtility.LARGE_RESULTS_TABLE_PROPERTY_NAME.toLowerCase(),
100-
BigQueryJdbcUrlUtility.LARGE_RESULTS_DATASET_PROPERTY_NAME.toLowerCase(),
101-
BigQueryJdbcUrlUtility.DESTINATION_DATASET_EXPIRATION_TIME_PROPERTY_NAME.toLowerCase(),
102-
BigQueryJdbcUrlUtility.UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME.toLowerCase(),
103-
BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME.toLowerCase(),
104-
BigQueryJdbcUrlUtility.PROXY_PORT_PROPERTY_NAME.toLowerCase(),
105-
BigQueryJdbcUrlUtility.JOB_CREATION_MODE_PROPERTY_NAME.toLowerCase(),
106-
BigQueryJdbcUrlUtility.MAX_RESULTS_PROPERTY_NAME.toLowerCase(),
107-
BigQueryJdbcUrlUtility.PARTNER_TOKEN_PROPERTY_NAME.toLowerCase(),
108-
BigQueryJdbcUrlUtility.ENDPOINT_OVERRIDES_PROPERTY_NAME.toLowerCase(),
109-
BigQueryJdbcUrlUtility.PRIVATE_SERVICE_CONNECT_PROPERTY_NAME.toLowerCase(),
110-
BigQueryJdbcUrlUtility.METADATA_FETCH_THREAD_COUNT_PROPERTY_NAME.toLowerCase(),
111-
BigQueryJdbcUrlUtility.RETRY_TIMEOUT_IN_SECS_PROPERTY_NAME.toLowerCase(),
112-
BigQueryJdbcUrlUtility.JOB_TIMEOUT_PROPERTY_NAME.toLowerCase(),
113-
BigQueryJdbcUrlUtility.RETRY_INITIAL_DELAY_PROPERTY_NAME.toLowerCase(),
114-
BigQueryJdbcUrlUtility.RETRY_MAX_DELAY_PROPERTY_NAME.toLowerCase(),
115-
BigQueryJdbcUrlUtility.ADDITIONAL_PROJECTS_PROPERTY_NAME.toLowerCase(),
116-
BigQueryJdbcUrlUtility.CONNECTION_POOL_SIZE_PROPERTY_NAME.toLowerCase(),
117-
BigQueryJdbcUrlUtility.LISTENER_POOL_SIZE_PROPERTY_NAME.toLowerCase(),
118-
BigQueryJdbcUrlUtility.ENABLE_WRITE_API_PROPERTY_NAME.toLowerCase(),
119-
BigQueryJdbcUrlUtility.SWA_APPEND_ROW_COUNT_PROPERTY_NAME.toLowerCase(),
120-
BigQueryJdbcUrlUtility.SWA_ACTIVATION_ROW_COUNT_PROPERTY_NAME.toLowerCase(),
121-
BigQueryJdbcUrlUtility.FILTER_TABLES_ON_DEFAULT_DATASET_PROPERTY_NAME.toLowerCase(),
122-
BigQueryJdbcUrlUtility.REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME.toLowerCase(),
123-
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PROPERTY_NAME.toLowerCase(),
124-
BigQueryJdbcUrlUtility.MAX_BYTES_BILLED_PROPERTY_NAME.toLowerCase(),
125-
BigQueryJdbcUrlUtility.LABELS_PROPERTY_NAME.toLowerCase(),
126-
BigQueryJdbcUrlUtility.REQUEST_REASON_PROPERTY_NAME.toLowerCase(),
127-
BigQueryJdbcUrlUtility.HTTP_CONNECT_TIMEOUT_PROPERTY_NAME.toLowerCase(),
128-
BigQueryJdbcUrlUtility.HTTP_READ_TIMEOUT_PROPERTY_NAME.toLowerCase(),
129-
BigQueryJdbcUrlUtility.BYOID_AUDIENCE_URI_PROPERTY_NAME.toLowerCase(),
130-
BigQueryJdbcUrlUtility.BYOID_CREDENTIAL_SOURCE_PROPERTY_NAME.toLowerCase(),
131-
BigQueryJdbcUrlUtility.BYOID_POOL_USER_PROJECT_PROPERTY_NAME.toLowerCase(),
132-
BigQueryJdbcUrlUtility.BYOID_SA_IMPERSONATION_URI_PROPERTY_NAME.toLowerCase(),
133-
BigQueryJdbcUrlUtility.BYOID_SUBJECT_TOKEN_TYPE_PROPERTY_NAME.toLowerCase(),
134-
BigQueryJdbcUrlUtility.BYOID_TOKEN_URI_PROPERTY_NAME.toLowerCase(),
135-
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME.toLowerCase(),
136-
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME.toLowerCase(),
137-
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME.toLowerCase(),
138-
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME.toLowerCase(),
139-
BigQueryJdbcUrlUtility.OAUTH_SA_EMAIL_PROPERTY_NAME.toLowerCase(),
140-
BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME.toLowerCase(),
141-
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME.toLowerCase());
81+
ImmutableSortedSet.orderedBy(String.CASE_INSENSITIVE_ORDER)
82+
.add(
83+
BigQueryJdbcUrlUtility.PROJECT_ID_PROPERTY_NAME,
84+
BigQueryJdbcUrlUtility.DEFAULT_DATASET_PROPERTY_NAME,
85+
BigQueryJdbcUrlUtility.LOCATION_PROPERTY_NAME,
86+
BigQueryJdbcUrlUtility.ENABLE_HTAPI_PROPERTY_NAME,
87+
BigQueryJdbcUrlUtility.UNSUPPORTED_HTAPI_FALLBACK_PROPERTY_NAME,
88+
BigQueryJdbcUrlUtility.HTAPI_MIN_TABLE_SIZE_PROPERTY_NAME,
89+
BigQueryJdbcUrlUtility.HTAPI_ACTIVATION_RATIO_PROPERTY_NAME,
90+
BigQueryJdbcUrlUtility.KMS_KEY_NAME_PROPERTY_NAME,
91+
BigQueryJdbcUrlUtility.QUERY_PROPERTIES_NAME,
92+
BigQueryJdbcUrlUtility.ENABLE_SESSION_PROPERTY_NAME,
93+
BigQueryJdbcUrlUtility.LOG_LEVEL_PROPERTY_NAME,
94+
BigQueryJdbcUrlUtility.LOG_PATH_PROPERTY_NAME,
95+
BigQueryJdbcUrlUtility.OAUTH_TYPE_PROPERTY_NAME,
96+
BigQueryJdbcUrlUtility.OAUTH_ACCESS_TOKEN_READONLY_PROPERTY_NAME,
97+
BigQueryJdbcUrlUtility.USE_QUERY_CACHE_PROPERTY_NAME,
98+
BigQueryJdbcUrlUtility.QUERY_DIALECT_PROPERTY_NAME,
99+
BigQueryJdbcUrlUtility.ALLOW_LARGE_RESULTS_PROPERTY_NAME,
100+
BigQueryJdbcUrlUtility.LARGE_RESULTS_TABLE_PROPERTY_NAME,
101+
BigQueryJdbcUrlUtility.LARGE_RESULTS_DATASET_PROPERTY_NAME,
102+
BigQueryJdbcUrlUtility.DESTINATION_DATASET_EXPIRATION_TIME_PROPERTY_NAME,
103+
BigQueryJdbcUrlUtility.UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME,
104+
BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME,
105+
BigQueryJdbcUrlUtility.PROXY_PORT_PROPERTY_NAME,
106+
BigQueryJdbcUrlUtility.JOB_CREATION_MODE_PROPERTY_NAME,
107+
BigQueryJdbcUrlUtility.MAX_RESULTS_PROPERTY_NAME,
108+
BigQueryJdbcUrlUtility.PARTNER_TOKEN_PROPERTY_NAME,
109+
BigQueryJdbcUrlUtility.ENDPOINT_OVERRIDES_PROPERTY_NAME,
110+
BigQueryJdbcUrlUtility.PRIVATE_SERVICE_CONNECT_PROPERTY_NAME,
111+
BigQueryJdbcUrlUtility.METADATA_FETCH_THREAD_COUNT_PROPERTY_NAME,
112+
BigQueryJdbcUrlUtility.RETRY_TIMEOUT_IN_SECS_PROPERTY_NAME,
113+
BigQueryJdbcUrlUtility.JOB_TIMEOUT_PROPERTY_NAME,
114+
BigQueryJdbcUrlUtility.RETRY_INITIAL_DELAY_PROPERTY_NAME,
115+
BigQueryJdbcUrlUtility.RETRY_MAX_DELAY_PROPERTY_NAME,
116+
BigQueryJdbcUrlUtility.ADDITIONAL_PROJECTS_PROPERTY_NAME,
117+
BigQueryJdbcUrlUtility.CONNECTION_POOL_SIZE_PROPERTY_NAME,
118+
BigQueryJdbcUrlUtility.LISTENER_POOL_SIZE_PROPERTY_NAME,
119+
BigQueryJdbcUrlUtility.ENABLE_WRITE_API_PROPERTY_NAME,
120+
BigQueryJdbcUrlUtility.SWA_APPEND_ROW_COUNT_PROPERTY_NAME,
121+
BigQueryJdbcUrlUtility.SWA_ACTIVATION_ROW_COUNT_PROPERTY_NAME,
122+
BigQueryJdbcUrlUtility.FILTER_TABLES_ON_DEFAULT_DATASET_PROPERTY_NAME,
123+
BigQueryJdbcUrlUtility.REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME,
124+
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PROPERTY_NAME,
125+
BigQueryJdbcUrlUtility.MAX_BYTES_BILLED_PROPERTY_NAME,
126+
BigQueryJdbcUrlUtility.LABELS_PROPERTY_NAME,
127+
BigQueryJdbcUrlUtility.REQUEST_REASON_PROPERTY_NAME,
128+
BigQueryJdbcUrlUtility.HTTP_CONNECT_TIMEOUT_PROPERTY_NAME,
129+
BigQueryJdbcUrlUtility.HTTP_READ_TIMEOUT_PROPERTY_NAME,
130+
BigQueryJdbcUrlUtility.BYOID_AUDIENCE_URI_PROPERTY_NAME,
131+
BigQueryJdbcUrlUtility.BYOID_CREDENTIAL_SOURCE_PROPERTY_NAME,
132+
BigQueryJdbcUrlUtility.BYOID_POOL_USER_PROJECT_PROPERTY_NAME,
133+
BigQueryJdbcUrlUtility.BYOID_SA_IMPERSONATION_URI_PROPERTY_NAME,
134+
BigQueryJdbcUrlUtility.BYOID_SUBJECT_TOKEN_TYPE_PROPERTY_NAME,
135+
BigQueryJdbcUrlUtility.BYOID_TOKEN_URI_PROPERTY_NAME,
136+
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME,
137+
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME,
138+
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME,
139+
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME,
140+
BigQueryJdbcUrlUtility.OAUTH_SA_EMAIL_PROPERTY_NAME,
141+
BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME,
142+
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME)
143+
.build();
142144
private HeaderProvider headerProvider;
143145
BigQueryReadClient bigQueryReadClient = null;
144146
BigQueryWriteClient bigQueryWriteClient = null;
@@ -220,8 +222,7 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
220222
Properties maskedProps = new Properties();
221223
for (String name : connectionProps.stringPropertyNames()) {
222224
String value = connectionProps.getProperty(name);
223-
String lowerName = name.toLowerCase();
224-
if (!SAFE_TO_LOG_PROPERTIES.contains(lowerName)) {
225+
if (!SAFE_TO_LOG_PROPERTIES.contains(name)) {
225226
value = "*****";
226227
}
227228
maskedProps.setProperty(name, value);

java-bigquery/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryConnectionTest.java

Lines changed: 21 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,17 @@
2929
import java.io.IOException;
3030
import java.io.InputStream;
3131
import java.sql.SQLException;
32+
import java.util.Optional;
3233
import java.util.Properties;
34+
import java.util.logging.Level;
35+
import java.util.logging.LogRecord;
36+
import java.util.logging.Logger;
3337
import org.junit.jupiter.api.BeforeEach;
3438
import org.junit.jupiter.api.Test;
3539
import org.junit.jupiter.params.ParameterizedTest;
3640
import org.junit.jupiter.params.provider.CsvSource;
3741

38-
public class BigQueryConnectionTest {
42+
public class BigQueryConnectionTest extends BigQueryJdbcLoggingBaseTest {
3943

4044
private static final String DEFAULT_VERSION = "0.0.0";
4145
private static final String DEFAULT_JDBC_TOKEN_VALUE = "Google-BigQuery-JDBC-Driver";
@@ -459,50 +463,32 @@ public void testIsReadOnlyTokenProvided(String readonlyProp, boolean expectedIsR
459463

460464
@Test
461465
public void testConnectionPropertiesLoggingAndMasking() throws IOException, SQLException {
462-
java.util.logging.Logger rootLogger = BigQueryJdbcRootLogger.getRootLogger();
463-
java.util.logging.Level originalLevel = rootLogger.getLevel();
464-
rootLogger.setLevel(java.util.logging.Level.CONFIG);
465-
466-
java.util.List<java.util.logging.LogRecord> records = new java.util.ArrayList<>();
467-
java.util.logging.Handler handler =
468-
new java.util.logging.Handler() {
469-
@Override
470-
public void publish(java.util.logging.LogRecord record) {
471-
records.add(record);
472-
}
473-
474-
@Override
475-
public void flush() {}
476-
477-
@Override
478-
public void close() throws SecurityException {}
479-
};
480-
rootLogger.addHandler(handler);
466+
Logger rootLogger = BigQueryJdbcRootLogger.getRootLogger();
467+
Level originalLevel = rootLogger.getLevel();
468+
rootLogger.setLevel(Level.CONFIG);
481469

482470
try {
483471
String url =
484472
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
485473
+ "OAuthType=2;ProjectId=MyTestProjectId;"
486-
+ "OAuthAccessToken=secretAccessToken;Location=US;"
487-
+ "PartnerToken=GPN:secretPartnerToken;";
474+
+ "OAuthAccessToken=secretAccessToken;Location=US;";
488475
try (BigQueryConnection connection = new BigQueryConnection(url)) {
489476
// Just trigger the constructor
490477
}
491478

492-
boolean foundLog = false;
493-
for (java.util.logging.LogRecord record : records) {
494-
if (record.getMessage().contains("Connection properties:")) {
495-
foundLog = true;
496-
String logMessage = record.getMessage();
497-
assertTrue(logMessage.contains("ProjectId=MyTestProjectId"));
498-
assertTrue(logMessage.contains("Location=US"));
499-
assertTrue(logMessage.contains("OAuthAccessToken=*****"));
500-
assertFalse(logMessage.contains("secretAccessToken"));
501-
}
502-
}
503-
assertTrue(foundLog, "Log message about Connection properties was not found");
479+
Optional<LogRecord> connectionPropertiesLog =
480+
capturedLogs.stream()
481+
.filter(r -> r.getMessage().contains("Connection properties:"))
482+
.findFirst();
483+
assertTrue(
484+
connectionPropertiesLog.isPresent(),
485+
"Log message about Connection properties was not found");
486+
String logMessage = connectionPropertiesLog.get().getMessage();
487+
assertTrue(logMessage.contains("ProjectId=MyTestProjectId"));
488+
assertTrue(logMessage.contains("Location=US"));
489+
assertTrue(logMessage.contains("OAuthAccessToken=*****"));
490+
assertFalse(logMessage.contains("secretAccessToken"));
504491
} finally {
505-
rootLogger.removeHandler(handler);
506492
rootLogger.setLevel(originalLevel);
507493
}
508494
}

0 commit comments

Comments
 (0)