I suppose technically the first part of a UUID can be an IPv4 address encoded in hex. I'll make a better invalid value.
On 9 January 2017 at 20:20, Apache <ralph.go...@dslextreme.com> wrote: > Debugging this and InetAddress.getByName is returning an InetAddress > object. The value is > Host: dcc071ab-bc05-46ed-bfc0-be5fe876f6ea > Address: 92.242.140.2 > > Ralph > > On Jan 9, 2017, at 7:12 PM, Matt Sicker <boa...@gmail.com> wrote: > > Not sure how that's possible, but I added a better assert message. Let me > know if you're still having an issue with it. Is it a failure from IntelliJ > or Maven? > > On 9 January 2017 at 19:47, Apache <ralph.go...@dslextreme.com> wrote: > >> This commit appears to be failing for me. The testInvalidIpAddress method >> is failing on the assert. >> >> Ralph >> >> > On Dec 30, 2016, at 2:01 PM, mattsic...@apache.org wrote: >> > >> > Repository: logging-log4j2 >> > Updated Branches: >> > refs/heads/master 367d26b09 -> 4254e2558 >> > >> > >> > [LOG4J2-1755]: Add converters and validators for hostnames/ports >> > >> > >> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit >> /4254e255 >> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4 >> 254e255 >> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4 >> 254e255 >> > >> > Branch: refs/heads/master >> > Commit: 4254e2558d27351774c4bf2ad24471ca05e00018 >> > Parents: 367d26b >> > Author: Matt Sicker <matt.sic...@spr.com> >> > Authored: Fri Dec 30 15:00:17 2016 -0600 >> > Committer: Matt Sicker <matt.sic...@spr.com> >> > Committed: Fri Dec 30 15:01:26 2016 -0600 >> > >> > ---------------------------------------------------------------------- >> > .../config/plugins/convert/TypeConverters.java | 13 +++- >> > .../validation/constraints/ValidHost.java | 41 +++++++++++ >> > .../validation/constraints/ValidPort.java | 44 ++++++++++++ >> > .../validators/ValidHostValidator.java | 58 +++++++++++++++ >> > .../validators/ValidPortValidator.java | 53 ++++++++++++++ >> > .../config/plugins/validation/HostAndPort.java | 46 ++++++++++++ >> > .../validators/ValidHostValidatorTest.java | 74 >> ++++++++++++++++++++ >> > .../validators/ValidPortValidatorTest.java | 70 ++++++++++++++++++ >> > src/changes/changes.xml | 3 + >> > 9 files changed, 401 insertions(+), 1 deletion(-) >> > ---------------------------------------------------------------------- >> > >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/config/plugins/convert/TypeConverters.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/convert/TypeConverters.java b/log4j-core/src/main/java/org >> /apache/logging/log4j/core/config/plugins/convert/TypeConverters.java >> > index 2895e52..421d711 100644 >> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/convert/TypeConverters.java >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/convert/TypeConverters.java >> > @@ -20,6 +20,7 @@ package org.apache.logging.log4j.core. >> config.plugins.convert; >> > import java.io.File; >> > import java.math.BigDecimal; >> > import java.math.BigInteger; >> > +import java.net.InetAddress; >> > import java.net.MalformedURLException; >> > import java.net.URI; >> > import java.net.URISyntaxException; >> > @@ -28,7 +29,6 @@ import java.nio.charset.Charset; >> > import java.security.Provider; >> > import java.security.Security; >> > import java.util.regex.Pattern; >> > - >> > import javax.xml.bind.DatatypeConverter; >> > >> > import org.apache.logging.log4j.Level; >> > @@ -233,6 +233,17 @@ public final class TypeConverters { >> > } >> > >> > /** >> > + * Converts a {@link String} into an {@link InetAddress}. >> > + */ >> > + @Plugin(name = "InetAddress", category = CATEGORY) >> > + public static class InetAddressConverter implements >> TypeConverter<InetAddress> { >> > + @Override >> > + public InetAddress convert(final String s) throws Exception { >> > + return InetAddress.getByName(s); >> > + } >> > + } >> > + >> > + /** >> > * Converts a {@link String} into a {@link Integer}. >> > */ >> > @Plugin(name = "Integer", category = CATEGORY) >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/config/plugins/validation/constraints/ValidHost.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidHost.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidHost.java >> > new file mode 100644 >> > index 0000000..c652d40 >> > --- /dev/null >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidHost.java >> > @@ -0,0 +1,41 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.cons >> traints; >> > + >> > +import org.apache.logging.log4j.core.config.plugins.validation.Cons >> traint; >> > +import org.apache.logging.log4j.core.config.plugins.validation.vali >> dators.ValidHostValidator; >> > + >> > +import java.lang.annotation.*; >> > +import java.net.InetAddress; >> > + >> > +/** >> > + * Indicates that a plugin attribute must be a valid host. This relies >> on the same validation rules as >> > + * {@link InetAddress#getByName(String)}. >> > + * >> > + * @since 2.8 >> > + */ >> > +@Documented >> > +@Retention(RetentionPolicy.RUNTIME) >> > +@Target({ElementType.FIELD, ElementType.PARAMETER}) >> > +@Constraint(ValidHostValidator.class) >> > +public @interface ValidHost { >> > + >> > + /** >> > + * The message to be logged if this constraint is violated. This >> should normally be overridden. >> > + */ >> > + String message() default "The hostname is invalid"; >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/config/plugins/validation/constraints/ValidPort.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidPort.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidPort.java >> > new file mode 100644 >> > index 0000000..a7c68b1 >> > --- /dev/null >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/constraints/ValidPort.java >> > @@ -0,0 +1,44 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.cons >> traints; >> > + >> > +import java.lang.annotation.Documented; >> > +import java.lang.annotation.ElementType; >> > +import java.lang.annotation.Retention; >> > +import java.lang.annotation.RetentionPolicy; >> > +import java.lang.annotation.Target; >> > + >> > +import org.apache.logging.log4j.core.config.plugins.validation.Cons >> traint; >> > +import org.apache.logging.log4j.core.config.plugins.validation.vali >> dators.ValidPortValidator; >> > + >> > +/** >> > + * Indicates that a plugin attribute must be a valid port number. A >> valid port number is an integer between 0 and >> > + * 65535. >> > + * >> > + * @since 2.8 >> > + */ >> > +@Documented >> > +@Retention(RetentionPolicy.RUNTIME) >> > +@Target({ElementType.FIELD, ElementType.PARAMETER}) >> > +@Constraint(ValidPortValidator.class) >> > +public @interface ValidPort { >> > + >> > + /** >> > + * The message to be logged if this constraint is violated. This >> should normally be overridden. >> > + */ >> > + String message() default "The port number is invalid"; >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/config/plugins/validation/validators/ValidHostValidator.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidator.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidator.java >> > new file mode 100644 >> > index 0000000..3669915 >> > --- /dev/null >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidator.java >> > @@ -0,0 +1,58 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.vali >> dators; >> > + >> > +import org.apache.logging.log4j.Logger; >> > +import org.apache.logging.log4j.core.config.plugins.validation.Cons >> traintValidator; >> > +import org.apache.logging.log4j.core.config.plugins.validation.cons >> traints.ValidHost; >> > +import org.apache.logging.log4j.status.StatusLogger; >> > + >> > +import java.net.InetAddress; >> > +import java.net.UnknownHostException; >> > + >> > +/** >> > + * Validator that checks an object to verify it is a valid hostname or >> IP address. Validation rules follow the same >> > + * logic as in {@link InetAddress#getByName(String)}. >> > + * >> > + * @since 2.8 >> > + */ >> > +public class ValidHostValidator implements >> ConstraintValidator<ValidHost> { >> > + >> > + private static final Logger LOGGER = StatusLogger.getLogger(); >> > + >> > + private ValidHost annotation; >> > + >> > + @Override >> > + public void initialize(ValidHost annotation) { >> > + this.annotation = annotation; >> > + } >> > + >> > + @Override >> > + public boolean isValid(String name, Object value) { >> > + if (value == null) { >> > + LOGGER.error(annotation.message()); >> > + return false; >> > + } >> > + try { >> > + InetAddress.getByName(value.toString()); >> > + return true; >> > + } catch (final UnknownHostException e) { >> > + LOGGER.error(annotation.message(), e); >> > + return false; >> > + } >> > + } >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/config/plugins/validation/validators/ValidPortValidator.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidator.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidator.java >> > new file mode 100644 >> > index 0000000..f18f8fc >> > --- /dev/null >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidator.java >> > @@ -0,0 +1,53 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.vali >> dators; >> > + >> > +import org.apache.logging.log4j.Logger; >> > +import org.apache.logging.log4j.core.config.plugins.validation.Cons >> traintValidator; >> > +import org.apache.logging.log4j.core.config.plugins.validation.cons >> traints.ValidPort; >> > +import org.apache.logging.log4j.status.StatusLogger; >> > + >> > +/** >> > + * Validator that checks an object to verify it is a valid port number >> (an integer between 0 and 65535). >> > + * >> > + * @since 2.8 >> > + */ >> > +public class ValidPortValidator implements >> ConstraintValidator<ValidPort> { >> > + >> > + private static final Logger LOGGER = StatusLogger.getLogger(); >> > + >> > + private ValidPort annotation; >> > + >> > + @Override >> > + public void initialize(final ValidPort annotation) { >> > + this.annotation = annotation; >> > + } >> > + >> > + @Override >> > + public boolean isValid(final String name, final Object value) { >> > + if (!Integer.class.isInstance(value)) { >> > + LOGGER.error(annotation.message()); >> > + return false; >> > + } >> > + int port = (int) value; >> > + if (port < 0 || port > 65535) { >> > + LOGGER.error(annotation.message()); >> > + return false; >> > + } >> > + return true; >> > + } >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/test/java/org/apache/logging/log4j/co >> re/config/plugins/validation/HostAndPort.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/HostAndPort.java b/log4j-core/src/test/java/org >> /apache/logging/log4j/core/config/plugins/validation/HostAndPort.java >> > new file mode 100644 >> > index 0000000..4f05d68 >> > --- /dev/null >> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/HostAndPort.java >> > @@ -0,0 +1,46 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation; >> > + >> > +import java.net.InetSocketAddress; >> > + >> > +import org.apache.logging.log4j.core.config.plugins.Plugin; >> > +import org.apache.logging.log4j.core.config.plugins.PluginAttribute; >> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory; >> > +import org.apache.logging.log4j.core.config.plugins.validation.cons >> traints.ValidHost; >> > +import org.apache.logging.log4j.core.config.plugins.validation.cons >> traints.ValidPort; >> > + >> > +@Plugin(name = "HostAndPort", category = "Test") >> > +public class HostAndPort { >> > + >> > + private final InetSocketAddress address; >> > + >> > + private HostAndPort(final InetSocketAddress address) { >> > + this.address = address; >> > + } >> > + >> > + public boolean isValid() { >> > + return !address.isUnresolved(); >> > + } >> > + >> > + @PluginFactory >> > + public static HostAndPort createPlugin( >> > + @ValidHost(message = "Unit test (host)") >> @PluginAttribute("host") final String host, >> > + @ValidPort(message = "Unit test (port)") >> @PluginAttribute("port") final int port) { >> > + return new HostAndPort(new InetSocketAddress(host, port)); >> > + } >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/test/java/org/apache/logging/log4j/co >> re/config/plugins/validation/validators/ValidHostValidatorTest.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidatorTest.java >> b/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidatorTest.java >> > new file mode 100644 >> > index 0000000..3b0480d >> > --- /dev/null >> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidHostValidatorTest.java >> > @@ -0,0 +1,74 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.vali >> dators; >> > + >> > +import java.util.UUID; >> > + >> > +import org.apache.logging.log4j.core.config.Node; >> > +import org.apache.logging.log4j.core.config.NullConfiguration; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginBuil >> der; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginMana >> ger; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginType; >> > +import org.apache.logging.log4j.core.config.plugins.validation.Host >> AndPort; >> > +import org.junit.Before; >> > +import org.junit.Test; >> > + >> > +import static org.junit.Assert.*; >> > + >> > +public class ValidHostValidatorTest { >> > + >> > + private PluginType<HostAndPort> plugin; >> > + private Node node; >> > + >> > + @SuppressWarnings("unchecked") >> > + @Before >> > + public void setUp() throws Exception { >> > + final PluginManager manager = new PluginManager("Test"); >> > + manager.collectPlugins(); >> > + plugin = (PluginType<HostAndPort>) >> manager.getPluginType("HostAndPort"); >> > + assertNotNull("Rebuild this module to ensure annotation >> processing has been done.", plugin); >> > + node = new Node(null, "HostAndPort", plugin); >> > + } >> > + >> > + @Test >> > + public void testNullHost() throws Exception { >> > + assertNull(buildPlugin()); >> > + } >> > + >> > + @Test >> > + public void testInvalidIpAddress() throws Exception { >> > + node.getAttributes().put("host", >> UUID.randomUUID().toString()); >> > + node.getAttributes().put("port", "1"); >> > + assertNull(buildPlugin()); >> > + } >> > + >> > + @Test >> > + public void testLocalhost() throws Exception { >> > + node.getAttributes().put("host", "localhost"); >> > + node.getAttributes().put("port", "1"); >> > + final HostAndPort hostAndPort = buildPlugin(); >> > + assertNotNull(hostAndPort); >> > + assertTrue(hostAndPort.isValid()); >> > + } >> > + >> > + private HostAndPort buildPlugin() { >> > + return (HostAndPort) new PluginBuilder(plugin) >> > + .withConfiguration(new NullConfiguration()) >> > + .withConfigurationNode(node) >> > + .build(); >> > + } >> > +} >> > \ No newline at end of file >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/log4j-core/src/test/java/org/apache/logging/log4j/co >> re/config/plugins/validation/validators/ValidPortValidatorTest.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidatorTest.java >> b/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidatorTest.java >> > new file mode 100644 >> > index 0000000..3aab08d >> > --- /dev/null >> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/con >> fig/plugins/validation/validators/ValidPortValidatorTest.java >> > @@ -0,0 +1,70 @@ >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You under the Apache license, Version >> 2.0 >> > + * (the "License"); you may not use this file except in compliance with >> > + * the License. You may obtain a copy of the License at >> > + * >> > + * http://www.apache.org/licenses/LICENSE-2.0 >> > + * >> > + * Unless required by applicable law or agreed to in writing, software >> > + * distributed under the License is distributed on an "AS IS" BASIS, >> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > + * See the license for the specific language governing permissions and >> > + * limitations under the license. >> > + */ >> > +package org.apache.logging.log4j.core.config.plugins.validation.vali >> dators; >> > + >> > +import org.apache.logging.log4j.core.config.Node; >> > +import org.apache.logging.log4j.core.config.NullConfiguration; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginBuil >> der; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginMana >> ger; >> > +import org.apache.logging.log4j.core.config.plugins.util.PluginType; >> > +import org.apache.logging.log4j.core.config.plugins.validation.Host >> AndPort; >> > +import org.junit.Before; >> > +import org.junit.Test; >> > + >> > +import static org.junit.Assert.*; >> > + >> > +public class ValidPortValidatorTest { >> > + private PluginType<HostAndPort> plugin; >> > + private Node node; >> > + >> > + @SuppressWarnings("unchecked") >> > + @Before >> > + public void setUp() throws Exception { >> > + final PluginManager manager = new PluginManager("Test"); >> > + manager.collectPlugins(); >> > + plugin = (PluginType<HostAndPort>) >> manager.getPluginType("HostAndPort"); >> > + assertNotNull("Rebuild this module to ensure annotation >> processing has been done.", plugin); >> > + node = new Node(null, "HostAndPort", plugin); >> > + node.getAttributes().put("host", "localhost"); >> > + } >> > + >> > + @Test >> > + public void testNegativePort() throws Exception { >> > + node.getAttributes().put("port", "-1"); >> > + assertNull(buildPlugin()); >> > + } >> > + >> > + @Test >> > + public void testValidPort() throws Exception { >> > + node.getAttributes().put("port", "10"); >> > + assertNotNull(buildPlugin()); >> > + } >> > + >> > + @Test >> > + public void testInvalidPort() throws Exception { >> > + node.getAttributes().put("port", "1234567890"); >> > + assertNull(buildPlugin()); >> > + } >> > + >> > + private HostAndPort buildPlugin() { >> > + return (HostAndPort) new PluginBuilder(plugin) >> > + .withConfiguration(new NullConfiguration()) >> > + .withConfigurationNode(node) >> > + .build(); >> > + } >> > + >> > +} >> > \ No newline at end of file >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4 >> 254e255/src/changes/changes.xml >> > ---------------------------------------------------------------------- >> > diff --git a/src/changes/changes.xml b/src/changes/changes.xml >> > index c05de09..bc08dbb 100644 >> > --- a/src/changes/changes.xml >> > +++ b/src/changes/changes.xml >> > @@ -213,6 +213,9 @@ >> > <action issue="LOG4J2-1302" dev="rpopma" type="update"> >> > The log4j-slf4j-impl module now declares a runtime dependency >> on log4j-core. While not technically required, this makes the >> log4j-slf4j-impl module behave similarly to slf4j-log4j12, and facilitates >> migration to Log4j 2. >> > </action> >> > + <action issue="LOG4J2-1755" dev="mattsicker" type="add"> >> > + Add converters and validators related to hostnames and ports. >> > + </action> >> > <action issue="LOG4J2-969" dev="ggregory" type="add"> >> > Refactor SyslogAppender so that Layout is a Plugin element. >> > </action> >> > >> > >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org >> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >> >> > > > -- > Matt Sicker <boa...@gmail.com> > > > -- Matt Sicker <boa...@gmail.com>