Skip to content

Commit 019cca1

Browse files
committed
Adding Java vendor to user agent and using it everywhere
1 parent 7438933 commit 019cca1

File tree

8 files changed

+35
-4
lines changed

8 files changed

+35
-4
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Adds the Java vendor the user agent as well as using the updated user agent for all HTTP calls"
5+
}

core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ContainerCredentialsProviderTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.auth.credentials;
1717

1818
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
19+
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
1920
import static com.github.tomakehurst.wiremock.client.WireMock.get;
2021
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
2122
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
@@ -30,6 +31,7 @@
3031
import org.junit.ClassRule;
3132
import org.junit.Test;
3233
import software.amazon.awssdk.core.exception.SdkClientException;
34+
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
3335
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;
3436
import software.amazon.awssdk.testutils.EnvironmentVariableHelper;
3537

@@ -93,6 +95,7 @@ public void testGetCredentialsReturnsValidResponseFromEcsEndpoint() {
9395
private void stubForSuccessResponse() {
9496
stubFor(
9597
get(urlPathEqualTo(CREDENTIALS_PATH))
98+
.withHeader("User-Agent", equalTo(UserAgentUtils.getUserAgent()))
9699
.willReturn(aResponse()
97100
.withStatus(200)
98101
.withHeader("Content-Type", "application/json")

core/auth/src/test/java/software/amazon/awssdk/auth/credentials/HttpCredentialsProviderTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.auth.credentials;
1717

1818
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
19+
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
1920
import static com.github.tomakehurst.wiremock.client.WireMock.get;
2021
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
2122
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
@@ -34,6 +35,7 @@
3435
import org.junit.ClassRule;
3536
import org.junit.Test;
3637
import software.amazon.awssdk.core.exception.SdkClientException;
38+
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
3739
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;
3840
import software.amazon.awssdk.utils.DateUtils;
3941
import software.amazon.awssdk.utils.IoUtils;
@@ -130,6 +132,7 @@ public void basicCachingFunctionalityWorks() {
130132
private void stubForSuccessResponseWithCustomBody(String body) {
131133
stubFor(
132134
get(urlPathEqualTo(CREDENTIALS_PATH))
135+
.withHeader("User-Agent", equalTo(UserAgentUtils.getUserAgent()))
133136
.willReturn(aResponse()
134137
.withStatus(200)
135138
.withHeader("Content-Type", "application/json")

core/regions/src/main/java/software/amazon/awssdk/regions/util/ResourcesEndpointProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.util.HashMap;
2121
import java.util.Map;
2222
import software.amazon.awssdk.annotations.SdkProtectedApi;
23-
import software.amazon.awssdk.core.util.VersionInfo;
23+
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
2424

2525
/**
2626
* <p>
@@ -57,7 +57,7 @@ default ResourcesEndpointRetryPolicy retryPolicy() {
5757
*/
5858
default Map<String, String> headers() {
5959
Map<String, String> requestHeaders = new HashMap<>();
60-
requestHeaders.put("User-Agent", String.format("aws-sdk-java/%s", VersionInfo.SDK_VERSION));
60+
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
6161
requestHeaders.put("Accept", "*/*");
6262
requestHeaders.put("Connection", "keep-alive");
6363

core/regions/src/test/java/software/amazon/awssdk/regions/util/HttpCredentialsUtilsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.mockito.runners.MockitoJUnitRunner;
3737
import software.amazon.awssdk.core.exception.SdkClientException;
3838
import software.amazon.awssdk.core.exception.SdkServiceException;
39+
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
3940
import software.amazon.awssdk.core.util.VersionInfo;
4041
import software.amazon.awssdk.regions.internal.util.ConnectionUtils;
4142
import software.amazon.awssdk.regions.internal.util.SocketUtils;
@@ -52,7 +53,7 @@ public class HttpCredentialsUtilsTest {
5253
private static Map<String, String> headers = new HashMap<String, String>()
5354
{
5455
{
55-
put("User-Agent", String.format("aws-sdk-java/%s", VersionInfo.SDK_VERSION));
56+
put("User-Agent", UserAgentUtils.getUserAgent());
5657
put("Accept", "*/*");
5758
put("Connection", "keep-alive");
5859
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/util/UserAgentUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
public final class UserAgentUtils {
3434

3535
private static final String UA_STRING = "aws-sdk-{platform}/{version} {os.name}/{os.version} {java.vm.name}/{java.vm"
36-
+ ".version} Java/{java.version}{language.and.region}{additional.languages}";
36+
+ ".version} Java/{java.version}{language.and.region}{additional.languages} "
37+
+ "vendor/{java.vendor}";
3738

3839
/** Disallowed characters in the user agent token: @see <a href="https://tools.ietf.org/html/rfc7230#section-3.2.6">RFC 7230</a> */
3940
private static final String UA_BLACKLIST_REGEX = "[() ,/:;<=>?@\\[\\]{}\\\\]";
@@ -84,6 +85,7 @@ static String userAgent() {
8485
.replace("{java.vm.name}", sanitizeInput(JavaSystemSetting.JAVA_VM_NAME.getStringValue().orElse(null)))
8586
.replace("{java.vm.version}", sanitizeInput(JavaSystemSetting.JAVA_VM_VERSION.getStringValue().orElse(null)))
8687
.replace("{java.version}", sanitizeInput(JavaSystemSetting.JAVA_VERSION.getStringValue().orElse(null)))
88+
.replace("{java.vendor}", sanitizeInput(JavaSystemSetting.JAVA_VENDOR.getStringValue().orElse(null)))
8789
.replace("{additional.languages}", getAdditionalJvmLanguages());
8890

8991
Optional<String> language = JavaSystemSetting.USER_LANGUAGE.getStringValue();

core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/util/UserAgentUtilsTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Arrays;
2222
import org.junit.Test;
2323
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
24+
import software.amazon.awssdk.utils.JavaSystemSetting;
2425

2526
public class UserAgentUtilsTest {
2627

@@ -31,6 +32,21 @@ public void userAgent() {
3132
Arrays.stream(userAgent.split(" ")).forEach(str -> assertThat(isValidInput(str)).isTrue());
3233
}
3334

35+
@Test
36+
public void userAgent_HasVendor() {
37+
System.setProperty(JavaSystemSetting.JAVA_VENDOR.property(), "finks");
38+
String userAgent = UserAgentUtils.userAgent();
39+
System.clearProperty(JavaSystemSetting.JAVA_VENDOR.property());
40+
assertThat(userAgent).contains("vendor/finks");
41+
}
42+
43+
@Test
44+
public void userAgent_HasUnknownVendor() {
45+
System.clearProperty(JavaSystemSetting.JAVA_VENDOR.property());
46+
String userAgent = UserAgentUtils.userAgent();
47+
assertThat(userAgent).contains("vendor/unknown");
48+
}
49+
3450
private boolean isValidInput(String input) {
3551
return input.startsWith("(") || input.contains("/") && input.split("/").length == 2;
3652
}

utils/src/main/java/software/amazon/awssdk/utils/JavaSystemSetting.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
@SdkProtectedApi
2424
public enum JavaSystemSetting implements SystemSetting {
2525
JAVA_VERSION("java.version"),
26+
JAVA_VENDOR("java.vendor"),
2627
TEMP_DIRECTORY("java.io.tmpdir"),
2728
JAVA_VM_NAME("java.vm.name"),
2829
JAVA_VM_VERSION("java.vm.version"),

0 commit comments

Comments
 (0)