kafka-1698; Validator.ensureValid() only validates default config value; patched by Ewen Cheslack-Postava; reviewed by Jun Rao

This commit is contained in:
Ewen Cheslack-Postava 2014-10-20 18:02:00 -07:00 committed by Jun Rao
parent 2d322a7bd1
commit 4b095760cb
2 changed files with 43 additions and 0 deletions

View File

@ -124,6 +124,8 @@ public class ConfigDef {
throw new ConfigException("Missing required configuration \"" + key.name + "\" which has no default value.");
else
value = key.defaultValue;
if (key.validator != null)
key.validator.ensureValid(key.name, value);
values.put(key.name, value);
}
return values;

View File

@ -16,12 +16,15 @@ import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.kafka.common.config.ConfigDef.Importance;
import org.apache.kafka.common.config.ConfigDef.Validator;
import org.apache.kafka.common.config.ConfigDef.Range;
import org.apache.kafka.common.config.ConfigDef.ValidString;
import org.apache.kafka.common.config.ConfigDef.Type;
import org.junit.Test;
@ -97,4 +100,42 @@ public class ConfigDefTest {
}
}
}
@Test(expected = ConfigException.class)
public void testInvalidDefaultRange() {
ConfigDef def = new ConfigDef().define("name", Type.INT, -1, Range.between(0,10), Importance.HIGH, "docs");
}
@Test(expected = ConfigException.class)
public void testInvalidDefaultString() {
ConfigDef def = new ConfigDef().define("name", Type.STRING, "bad", ValidString.in(Arrays.asList("valid", "values")), Importance.HIGH, "docs");
}
@Test
public void testValidators() {
testValidators(Type.INT, Range.between(0,10), 5, new Object[]{1, 5, 9}, new Object[]{-1, 11});
testValidators(Type.STRING, ValidString.in(Arrays.asList("good", "values", "default")), "default",
new Object[]{"good", "values", "default"}, new Object[]{"bad", "inputs"});
}
private void testValidators(Type type, Validator validator, Object defaultVal, Object[] okValues, Object[] badValues) {
ConfigDef def = new ConfigDef().define("name", type, defaultVal, validator, Importance.HIGH, "docs");
for (Object value : okValues) {
Map<String, Object> m = new HashMap<String, Object>();
m.put("name", value);
def.parse(m);
}
for (Object value : badValues) {
Map<String, Object> m = new HashMap<String, Object>();
m.put("name", value);
try {
def.parse(m);
fail("Expected a config exception due to invalid value " + value);
} catch (ConfigException e) {
// this is good
}
}
}
}