Support '.' in endpoint names

Update the `EndpointId` constraints to allow '.' in names.

Closes gh-14773
This commit is contained in:
Phillip Webb 2018-10-15 09:37:44 -07:00
parent 99a45bdef8
commit d8b9685635
2 changed files with 14 additions and 6 deletions

View File

@ -22,16 +22,16 @@ import java.util.regex.Pattern;
import org.springframework.util.Assert;
/**
* An identifier for an actuator endpoint. Endpoint IDs may contain only letters and
* numbers and must begin with a lower-case letter. Case is ignored when comparing
* endpoint IDs.
* An identifier for an actuator endpoint. Endpoint IDs may contain only letters, numbers
* and {@code '.'}. They must begin with a lower-case letter. Case is ignored when
* comparing endpoint IDs.
*
* @author Phillip Webb
* @since 2.0.6
*/
public final class EndpointId {
private static final Pattern ALPHA_NUMERIC = Pattern.compile("[a-zA-Z0-9]+");
private static final Pattern VALID_CHARS = Pattern.compile("[a-zA-Z0-9\\.]+");
private final String value;
@ -39,8 +39,8 @@ public final class EndpointId {
private EndpointId(String value) {
Assert.hasText(value, "Value must not be empty");
Assert.isTrue(ALPHA_NUMERIC.matcher(value).matches(),
"Value must be alpha-numeric");
Assert.isTrue(VALID_CHARS.matcher(value).matches(),
"Value must be alpha-numeric or '.'");
Assert.isTrue(!Character.isDigit(value.charAt(0)),
"Value must not start with a number");
Assert.isTrue(!Character.isUpperCase(value.charAt(0)),

View File

@ -74,6 +74,14 @@ public class EndpointIdTests {
EndpointId.of("Foo");
}
@Test
public void ofWhenContainsDotIsValid() {
// Ideally we wouldn't support this but there are existing endpoints using the
// pattern. See gh-14773
EndpointId endpointId = EndpointId.of("foo.bar");
assertThat(endpointId.toString()).isEqualTo("foo.bar");
}
@Test
public void equalsAndHashCode() {
EndpointId one = EndpointId.of("foobar");