Commit 9a80e88a authored by Phillip Webb's avatar Phillip Webb

Merge branch '2.0.x'

parents edf4045c d8b96856
...@@ -22,16 +22,16 @@ import java.util.regex.Pattern; ...@@ -22,16 +22,16 @@ import java.util.regex.Pattern;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
* An identifier for an actuator endpoint. Endpoint IDs may contain only letters and * An identifier for an actuator endpoint. Endpoint IDs may contain only letters, numbers
* numbers and must begin with a lower-case letter. Case is ignored when comparing * and {@code '.'}. They must begin with a lower-case letter. Case is ignored when
* endpoint IDs. * comparing endpoint IDs.
* *
* @author Phillip Webb * @author Phillip Webb
* @since 2.0.6 * @since 2.0.6
*/ */
public final class EndpointId { 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; private final String value;
...@@ -39,8 +39,8 @@ public final class EndpointId { ...@@ -39,8 +39,8 @@ public final class EndpointId {
private EndpointId(String value) { private EndpointId(String value) {
Assert.hasText(value, "Value must not be empty"); Assert.hasText(value, "Value must not be empty");
Assert.isTrue(ALPHA_NUMERIC.matcher(value).matches(), Assert.isTrue(VALID_CHARS.matcher(value).matches(),
"Value must be alpha-numeric"); "Value must be alpha-numeric or '.'");
Assert.isTrue(!Character.isDigit(value.charAt(0)), Assert.isTrue(!Character.isDigit(value.charAt(0)),
"Value must not start with a number"); "Value must not start with a number");
Assert.isTrue(!Character.isUpperCase(value.charAt(0)), Assert.isTrue(!Character.isUpperCase(value.charAt(0)),
......
...@@ -43,13 +43,13 @@ public class EndpointIdTests { ...@@ -43,13 +43,13 @@ public class EndpointIdTests {
@Test @Test
public void ofWhenContainsDashThrowsException() { public void ofWhenContainsDashThrowsException() {
assertThatIllegalArgumentException().isThrownBy(() -> EndpointId.of("foo-bar")) assertThatIllegalArgumentException().isThrownBy(() -> EndpointId.of("foo-bar"))
.withMessage("Value must be alpha-numeric"); .withMessageContaining("Value must be alpha-numeric");
} }
@Test @Test
public void ofWhenHasBadCharThrowsException() { public void ofWhenHasBadCharThrowsException() {
assertThatIllegalArgumentException().isThrownBy(() -> EndpointId.of("foo!bar")) assertThatIllegalArgumentException().isThrownBy(() -> EndpointId.of("foo!bar"))
.withMessage("Value must be alpha-numeric"); .withMessageContaining("Value must be alpha-numeric");
} }
@Test @Test
...@@ -64,6 +64,14 @@ public class EndpointIdTests { ...@@ -64,6 +64,14 @@ public class EndpointIdTests {
.withMessage("Value must not start with an uppercase letter"); .withMessage("Value must not start with an uppercase letter");
} }
@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 @Test
public void equalsAndHashCode() { public void equalsAndHashCode() {
EndpointId one = EndpointId.of("foobar"); EndpointId one = EndpointId.of("foobar");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment