Polish "Allow Undertow's options to be configured via the environment

See gh-17356
This commit is contained in:
Madhura Bhave 2019-07-03 17:48:56 -07:00
parent 417f4dd7fa
commit 3bd7760f9c
2 changed files with 16 additions and 5 deletions

View File

@ -142,12 +142,12 @@ public class UndertowWebServerFactoryCustomizer
return this.serverProperties.getForwardHeadersStrategy().equals(ServerProperties.ForwardHeadersStrategy.NATIVE);
}
@SuppressWarnings("unchecked")
private <T> void setCustomOption(ConfigurableUndertowWebServerFactory factory, String key, String value,
String type) {
Field[] fields = UndertowOptions.class.getDeclaredFields();
for (Field field : fields) {
String name = getLetterAndNumber(key);
if (getLetterAndNumber(field.getName()).equals(name)) {
if (getCanonicalName(field.getName()).equals(getCanonicalName(key))) {
Option<T> option = (Option<T>) Option.fromString(
UndertowOptions.class.getName() + '.' + field.getName(), getClass().getClassLoader());
T parsed = option.parseValue(value, getClass().getClassLoader());
@ -162,9 +162,9 @@ public class UndertowWebServerFactoryCustomizer
}
}
private String getLetterAndNumber(String name) {
StringBuilder canonicalName = new StringBuilder(name.length());
name.chars().map((c) -> (char) c).filter(Character::isLetterOrDigit).map(Character::toLowerCase)
private String getCanonicalName(String key) {
StringBuilder canonicalName = new StringBuilder(key.length());
key.chars().map((c) -> (char) c).filter(Character::isLetterOrDigit).map(Character::toLowerCase)
.forEach((c) -> canonicalName.append((char) c));
return canonicalName.toString();
}

View File

@ -161,12 +161,23 @@ class UndertowWebServerFactoryCustomizerTests {
assertThat(boundServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void customServerOptionShouldBeRelaxed() {
bind("server.undertow.options.server.always-set-keep-alive=false");
assertThat(boundServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void customSocketOption() {
bind("server.undertow.options.socket.ALWAYS_SET_KEEP_ALIVE=false");
assertThat(boundSocketOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
void customSocketOptionShouldBeRelaxed() {
bind("server.undertow.options.socket.always-set-keep-alive=false");
assertThat(boundSocketOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void deduceUseForwardHeaders() {
this.environment.setProperty("DYNO", "-");