Skip to content

Commit bd87fa8

Browse files
authored
fix: allows setting user agent in any case (#1122)
Allows setting a custom user agent in any case, instead of only in lower case.
1 parent 2ef2230 commit bd87fa8

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,14 @@ public <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCalla
491491

492492
private static HeaderProvider headerProviderWithUserAgentFrom(HeaderProvider headerProvider) {
493493
final Map<String, String> headersWithUserAgent = new HashMap<>(headerProvider.getHeaders());
494-
final String userAgent = headersWithUserAgent.get(USER_AGENT_KEY);
494+
String userAgent = null;
495+
for (Map.Entry<String, String> entry : headersWithUserAgent.entrySet()) {
496+
if (entry.getKey().equalsIgnoreCase(USER_AGENT_KEY)) {
497+
userAgent = entry.getValue();
498+
headersWithUserAgent.remove(entry.getKey());
499+
break;
500+
}
501+
}
495502
headersWithUserAgent.put(
496503
USER_AGENT_KEY,
497504
userAgent == null ? DEFAULT_USER_AGENT : userAgent + " " + DEFAULT_USER_AGENT);

google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -526,27 +526,29 @@ public void testDefaultUserAgent() {
526526

527527
@Test
528528
public void testCustomUserAgent() {
529-
final HeaderProvider userAgentHeaderProvider =
530-
new HeaderProvider() {
531-
@Override
532-
public Map<String, String> getHeaders() {
533-
final Map<String, String> headers = new HashMap<>();
534-
headers.put("user-agent", "test-agent");
535-
return headers;
536-
}
537-
};
538-
final SpannerOptions options =
539-
createSpannerOptions().toBuilder().setHeaderProvider(userAgentHeaderProvider).build();
540-
try (Spanner spanner = options.getService()) {
541-
final DatabaseClient databaseClient =
542-
spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"));
529+
for (final String headerId : new String[] {"user-agent", "User-Agent", "USER-AGENT"}) {
530+
final HeaderProvider userAgentHeaderProvider =
531+
new HeaderProvider() {
532+
@Override
533+
public Map<String, String> getHeaders() {
534+
final Map<String, String> headers = new HashMap<>();
535+
headers.put(headerId, "test-agent");
536+
return headers;
537+
}
538+
};
539+
final SpannerOptions options =
540+
createSpannerOptions().toBuilder().setHeaderProvider(userAgentHeaderProvider).build();
541+
try (Spanner spanner = options.getService()) {
542+
final DatabaseClient databaseClient =
543+
spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"));
544+
545+
try (final ResultSet rs = databaseClient.singleUse().executeQuery(SELECT1AND2)) {
546+
rs.next();
547+
}
543548

544-
try (final ResultSet rs = databaseClient.singleUse().executeQuery(SELECT1AND2)) {
545-
rs.next();
549+
assertThat(seenHeaders.get(Key.of("user-agent", Metadata.ASCII_STRING_MARSHALLER)))
550+
.contains("test-agent " + defaultUserAgent);
546551
}
547-
548-
assertThat(seenHeaders.get(Key.of("user-agent", Metadata.ASCII_STRING_MARSHALLER)))
549-
.contains("test-agent " + defaultUserAgent);
550552
}
551553
}
552554

0 commit comments

Comments
 (0)