Skip to content

Commit 11238a5

Browse files
authored
Add UserAgents.of(UserAgent, Iterable<Agent>) (#902)
Add UserAgents.of(UserAgent, Iterable<Agent>)
1 parent 4148974 commit 11238a5

File tree

3 files changed

+51
-7
lines changed

3 files changed

+51
-7
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type: improvement
2+
improvement:
3+
description: Add UserAgents.of(UserAgent, Iterable<Agent>)
4+
links:
5+
- https://github.com/palantir/conjure-java-runtime-api/pull/902

service-config/src/main/java/com/palantir/conjure/java/api/config/service/UserAgent.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.palantir.logsafe.Preconditions;
2020
import com.palantir.logsafe.SafeArg;
21+
import com.palantir.logsafe.exceptions.SafeIllegalArgumentException;
2122
import java.util.List;
2223
import java.util.Optional;
2324
import org.immutables.value.Value;
@@ -56,6 +57,16 @@ static UserAgent of(Agent agent) {
5657
return ImmutableUserAgent.builder().primary(agent).build();
5758
}
5859

60+
/**
61+
* Returns a user agent with the given base agent combined with specified additional informational agents.
62+
*/
63+
static UserAgent of(UserAgent base, Iterable<Agent> additional) {
64+
return ImmutableUserAgent.builder()
65+
.from(base)
66+
.addAllInformational(additional)
67+
.build();
68+
}
69+
5970
/**
6071
* Returns a new {@link UserAgent} instance whose {@link #informational} agents are this instance's agents plus the
6172
* given agent.
@@ -86,13 +97,14 @@ interface Agent {
8697

8798
@Value.Check
8899
default void check() {
89-
Preconditions.checkArgument(
90-
UserAgents.isValidName(name()), "Illegal agent name format", SafeArg.of("name", name()));
91-
// Should never hit the following.
92-
Preconditions.checkArgument(
93-
UserAgents.isValidVersion(version()),
94-
"Illegal version format. This is a bug",
95-
SafeArg.of("version", version()));
100+
if (!UserAgents.isValidName(name())) {
101+
throw new SafeIllegalArgumentException("Illegal agent name format", SafeArg.of("name", name()));
102+
}
103+
if (!UserAgents.isValidVersion(version())) {
104+
// Should never hit the following.
105+
throw new SafeIllegalArgumentException(
106+
"Illegal version format. This is a bug", SafeArg.of("version", version()));
107+
}
96108
}
97109

98110
static Agent of(String name, String version) {

service-config/src/test/java/com/palantir/conjure/java/api/config/service/UserAgentTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@
1919
import static com.palantir.logsafe.testing.Assertions.assertThatLoggableExceptionThrownBy;
2020
import static org.assertj.core.api.Assertions.assertThat;
2121

22+
import com.google.common.collect.ImmutableList;
23+
import com.google.common.collect.Iterables;
24+
import com.palantir.conjure.java.api.config.service.UserAgent.Agent;
2225
import com.palantir.logsafe.SafeArg;
26+
import java.util.List;
2327
import org.junit.jupiter.api.Test;
2428

2529
public class UserAgentTest {
@@ -59,6 +63,29 @@ public void testCorrectHeaderFormatWithoutNodeId() {
5963
assertThat(UserAgents.format(derivedAgent)).isEqualTo("service/1.0.0 conjure/2.0.0");
6064
}
6165

66+
@Test
67+
void testPrimaryWithInformational() {
68+
UserAgent baseUserAgent = UserAgent.of(Agent.of("service", "1.0.0"));
69+
List<Agent> info = ImmutableList.of(Agent.of("conjure", "1.2.3"), Agent.of("jdk", "17.0.4.1"));
70+
UserAgent first = UserAgent.of(baseUserAgent, info);
71+
assertThat(first).satisfies(agent -> {
72+
assertThat(agent.primary()).isEqualTo(baseUserAgent.primary());
73+
assertThat(agent.informational()).hasSize(2).isEqualTo(info);
74+
assertThat(UserAgents.format(agent)).isEqualTo("service/1.0.0 conjure/1.2.3 jdk/17.0.4.1");
75+
assertThat(UserAgents.parse(UserAgents.format(agent))).isEqualTo(agent);
76+
assertThat(UserAgent.of(agent, ImmutableList.of())).isEqualTo(agent);
77+
});
78+
79+
List<Agent> moreInfo = ImmutableList.of(Agent.of("test", "4.5.6"));
80+
assertThat(UserAgent.of(first, moreInfo)).satisfies(agent -> {
81+
assertThat(agent.primary()).isEqualTo(baseUserAgent.primary());
82+
assertThat(agent.informational()).hasSize(3).containsExactlyElementsOf(Iterables.concat(info, moreInfo));
83+
assertThat(UserAgents.format(agent)).isEqualTo("service/1.0.0 conjure/1.2.3 jdk/17.0.4.1 test/4.5.6");
84+
assertThat(UserAgents.parse(UserAgents.format(agent))).isEqualTo(agent);
85+
assertThat(UserAgent.of(agent, ImmutableList.of())).isEqualTo(agent);
86+
});
87+
}
88+
6289
@Test
6390
public void testInvalidServiceName() {
6491
assertThatLoggableExceptionThrownBy(() -> UserAgent.Agent.of("invalid service name", "1.0.0"))

0 commit comments

Comments
 (0)