OK. I called Cox and they gave me the ip addresses that don’t redirect but I was still getting their ipv6 DNS that does. I had to set that to go to OpenDNS instead (see https://www.opendns.com/about/innovations/ipv6/ <https://www.opendns.com/about/innovations/ipv6/>). Now the test passes.
Ralph > On Jan 9, 2017, at 7:43 PM, Matt Sicker <boa...@gmail.com> wrote: > > I'm trying an invalid IP address instead. If that still doesn't work, then > I'll add an Assume.assumeThat() to the test so it's ignored with weird DNS > servers. > > A lot of people like 8.8.8.8 (Google) and 4.2.2.2 (Level3) for DNS. There's > also 75.75.75.75 which is Comcast (or 2001:558:feed::1 which is their IPv6 > version apparently). > > On 9 January 2017 at 20:39, Apache <ralph.go...@dslextreme.com > <mailto:ralph.go...@dslextreme.com>> wrote: > It appears I need to use a different DNS server for it to stop redirecting > me. I need to figure out which one to use. > > Ralph > >> On Jan 9, 2017, at 7:34 PM, Apache <ralph.go...@dslextreme.com >> <mailto:ralph.go...@dslextreme.com>> wrote: >> >> >> Didn’t run the test. Don’t really have to. >> >> nslookup "#$%^&*(*&^%$" >> Server: 2001:578:3f::30 >> Address: 2001:578:3f::30#53 >> >> Non-authoritative answer: >> Name: #\$%^&*\(*&^%\$ >> Address: 92.242.140.2 >> >> >> Ralph >> >> >> >>> On Jan 9, 2017, at 7:31 PM, Matt Sicker <boa...@gmail.com >>> <mailto:boa...@gmail.com>> wrote: >>> >>> Let me know if my updated test still causes issues. >>> >>> On 9 January 2017 at 20:30, Apache <ralph.go...@dslextreme.com >>> <mailto:ralph.go...@dslextreme.com>> wrote: >>> I suspect this is my ISP at work. When I enter an invalid domain I get a >>> web site from cox.net <http://cox.net/> saying it can’t find the domain and >>> it offers suggestions for other sites. >>> >>> I think this test has to be removed. >>> >>> Ralph >>> >>>> On Jan 9, 2017, at 7:28 PM, Matt Sicker <boa...@gmail.com >>>> <mailto:boa...@gmail.com>> wrote: >>>> >>>> Well technically a UUID can be a valid hostname itself besides being >>>> interpreted as a hex-encoded IP address (if the rest of it gets chopped >>>> off). I've updated the test to use a jumble of invalid hostname characters >>>> instead. >>>> >>>> On 9 January 2017 at 20:26, Apache <ralph.go...@dslextreme.com >>>> <mailto:ralph.go...@dslextreme.com>> wrote: >>>> nslookup dcc071ab-bc05-46ed-bfc0-be5fe876f6ea >>>> Server: 2001:578:3f::30 >>>> Address: 2001:578:3f::30#53 >>>> >>>> Non-authoritative answer: >>>> Name: dcc071ab-bc05-46ed-bfc0-be5fe876f6ea >>>> Address: 92.242.140.2 >>>> >>>> >>>> >>>>> On Jan 9, 2017, at 7:24 PM, Matt Sicker <boa...@gmail.com >>>>> <mailto:boa...@gmail.com>> wrote: >>>>> >>>>> 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 >>>>> <mailto: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 >>>>>> <mailto: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 >>>>>> <mailto: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 >>>>>> > <mailto: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 >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo> >>>>>> > Commit: >>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4254e255 >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4254e255> >>>>>> > Tree: >>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4254e255 >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4254e255> >>>>>> > Diff: >>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4254e255 >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4254e255> >>>>>> > >>>>>> > Branch: refs/heads/master >>>>>> > Commit: 4254e2558d27351774c4bf2ad24471ca05e00018 >>>>>> > Parents: 367d26b >>>>>> > Author: Matt Sicker <matt.sic...@spr.com <mailto:matt.sic...@spr.com>> >>>>>> > Authored: Fri Dec 30 15:00:17 2016 -0600 >>>>>> > Committer: Matt Sicker <matt.sic...@spr.com >>>>>> > <mailto: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/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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/config/plugins/convert/TypeConverters.java >>>>>> > +++ >>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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 <http://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/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidHost.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidHost.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidHost.java >>>>>> > >>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.constraints; >>>>>> > + >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.Constraint; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.validators.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/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidPort.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidPort.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidPort.java >>>>>> > >>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.constraints; >>>>>> > + >>>>>> > +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.Constraint; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.validators.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/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidator.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidator.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidator.java >>>>>> > >>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.validators; >>>>>> > + >>>>>> > +import org.apache.logging.log4j.Logger; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.ConstraintValidator; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.constraints.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.to >>>>>> > <http://value.to/>String()); >>>>>> > + return true; >>>>>> > + } catch (final UnknownHostException e) { >>>>>> > + LOGGER.error(annotation.message(), e); >>>>>> > + return false; >>>>>> > + } >>>>>> > + } >>>>>> > +} >>>>>> > >>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidator.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidator.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidator.java >>>>>> > >>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.validators; >>>>>> > + >>>>>> > +import org.apache.logging.log4j.Logger; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.ConstraintValidator; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.constraints.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/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/HostAndPort.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/HostAndPort.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.constraints.ValidHost; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.constraints.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/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java >>>>>> > >>>>>> > b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.validators; >>>>>> > + >>>>>> > +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.PluginBuilder; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.util.PluginManager; >>>>>> > +import org.apache.logging.log4j.core.config.plugins.util.PluginType; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.HostAndPort; >>>>>> > +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/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidatorTest.java >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidatorTest.java> >>>>>> > ---------------------------------------------------------------------- >>>>>> > diff --git >>>>>> > a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidatorTest.java >>>>>> > >>>>>> > b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/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/config/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 >>>>>> > <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.validators; >>>>>> > + >>>>>> > +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.PluginBuilder; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.util.PluginManager; >>>>>> > +import org.apache.logging.log4j.core.config.plugins.util.PluginType; >>>>>> > +import >>>>>> > org.apache.logging.log4j.core.config.plugins.validation.HostAndPort; >>>>>> > +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/4254e255/src/changes/changes.xml >>>>>> > >>>>>> > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4254e255/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 >>>>>> <mailto:log4j-dev-unsubscr...@logging.apache.org> >>>>>> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >>>>>> <mailto:log4j-dev-h...@logging.apache.org> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>> >>>> >>>> >>>> >>>> >>>> -- >>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>> >>> >>> >>> >>> >>> -- >>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>> >> > > > > > -- > Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>