Repository: kafka Updated Branches: refs/heads/0.10.2 6ca71c064 -> 758e3aa7e
KAFKA-5230; Fix conversion of Class configs to handle nested classes properly Author: Ewen Cheslack-Postava <[email protected]> Reviewers: Konstantine Karantasis <[email protected]>, Ismael Juma <[email protected]> Closes #3044 from ewencp/kafka-5230-nested-class-recommended-values (cherry picked from commit 885643ce100b3b74a2b6859bf0b85103d8c05ef8) Signed-off-by: Ismael Juma <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/kafka/repo Commit: http://git-wip-us.apache.org/repos/asf/kafka/commit/758e3aa7 Tree: http://git-wip-us.apache.org/repos/asf/kafka/tree/758e3aa7 Diff: http://git-wip-us.apache.org/repos/asf/kafka/diff/758e3aa7 Branch: refs/heads/0.10.2 Commit: 758e3aa7eb9fc7e7d60def9d055875a60161d2ba Parents: 6ca71c0 Author: Ewen Cheslack-Postava <[email protected]> Authored: Mon May 15 00:39:12 2017 +0100 Committer: Ismael Juma <[email protected]> Committed: Mon May 15 00:39:38 2017 +0100 ---------------------------------------------------------------------- .../apache/kafka/common/config/ConfigDef.java | 2 +- .../kafka/common/config/ConfigDefTest.java | 67 ++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kafka/blob/758e3aa7/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java ---------------------------------------------------------------------- diff --git a/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java b/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java index 312205f..8a116ef 100644 --- a/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java +++ b/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java @@ -727,7 +727,7 @@ public class ConfigDef { return Utils.join(valueList, ","); case CLASS: Class<?> clazz = (Class<?>) parsedValue; - return clazz.getCanonicalName(); + return clazz.getName(); default: throw new IllegalStateException("Unknown type."); } http://git-wip-us.apache.org/repos/asf/kafka/blob/758e3aa7/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java ---------------------------------------------------------------------- diff --git a/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java b/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java index 4305779..68a5448 100644 --- a/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java +++ b/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java @@ -105,6 +105,7 @@ public class ConfigDefTest { testBadInputs(Type.STRING, new Object()); testBadInputs(Type.LIST, 53, new Object()); testBadInputs(Type.BOOLEAN, "hello", "truee", "fals"); + testBadInputs(Type.CLASS, "ClassDoesNotExist"); } private void testBadInputs(Type type, Object... values) { @@ -132,6 +133,13 @@ public class ConfigDefTest { } @Test + public void testNestedClass() { + // getName(), not getSimpleName() or getCanonicalName(), is the version that should be able to locate the class + Map<String, Object> props = Collections.<String, Object>singletonMap("name", NestedClass.class.getName()); + new ConfigDef().define("name", Type.CLASS, Importance.HIGH, "docs").parse(props); + } + + @Test public void testValidators() { testValidators(Type.INT, Range.between(0, 10), 5, new Object[]{1, 5, 9}, new Object[]{-1, 11, null}); testValidators(Type.STRING, ValidString.in("good", "values", "default"), "default", @@ -481,4 +489,63 @@ public class ConfigDefTest { assertEquals(expectedRst, def.toEnrichedRst()); } + @Test + public void testConvertValueToStringBoolean() { + assertEquals("true", ConfigDef.convertToString(true, Type.BOOLEAN)); + } + + @Test + public void testConvertValueToStringShort() { + assertEquals("32767", ConfigDef.convertToString(Short.MAX_VALUE, Type.SHORT)); + } + + @Test + public void testConvertValueToStringInt() { + assertEquals("2147483647", ConfigDef.convertToString(Integer.MAX_VALUE, Type.INT)); + } + + @Test + public void testConvertValueToStringLong() { + assertEquals("9223372036854775807", ConfigDef.convertToString(Long.MAX_VALUE, Type.LONG)); + } + + @Test + public void testConvertValueToStringDouble() { + assertEquals("3.125", ConfigDef.convertToString(3.125, Type.DOUBLE)); + } + + @Test + public void testConvertValueToStringString() { + assertEquals("foobar", ConfigDef.convertToString("foobar", Type.STRING)); + } + + @Test + public void testConvertValueToStringPassword() { + assertEquals(Password.HIDDEN, ConfigDef.convertToString(new Password("foobar"), Type.PASSWORD)); + assertEquals("foobar", ConfigDef.convertToString("foobar", Type.PASSWORD)); + } + + @Test + public void testConvertValueToStringList() { + assertEquals("a,bc,d", ConfigDef.convertToString(Arrays.asList("a", "bc", "d"), Type.LIST)); + } + + @Test + public void testConvertValueToStringClass() throws ClassNotFoundException { + String actual = ConfigDef.convertToString(ConfigDefTest.class, Type.CLASS); + assertEquals("org.apache.kafka.common.config.ConfigDefTest", actual); + // Additionally validate that we can look up this class by this name + assertEquals(ConfigDefTest.class, Class.forName(actual)); + } + + @Test + public void testConvertValueToStringNestedClass() throws ClassNotFoundException { + String actual = ConfigDef.convertToString(NestedClass.class, Type.CLASS); + assertEquals("org.apache.kafka.common.config.ConfigDefTest$NestedClass", actual); + // Additionally validate that we can look up this class by this name + assertEquals(NestedClass.class, Class.forName(actual)); + } + + private class NestedClass { + } }
