diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocol.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocol.java index f1a30655779..eda0ae5d277 100644 --- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocol.java +++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocol.java @@ -17,10 +17,15 @@ package org.apache.hertzbeat.common.entity.job.protocol; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.apache.hertzbeat.common.util.CommonUtil; /** * Kafka protocol @@ -58,8 +63,17 @@ public class KafkaProtocol implements CommonRequestProtocol, Protocol { @Override public boolean isInvalid() { - - // todo: add - return true; + if (!validateIpDomain(host) || !validPort(port)) { + return true; + } + if (StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout)) { + return true; + } + if (StringUtils.isNotBlank(monitorInternalTopic) + && !"true".equalsIgnoreCase(monitorInternalTopic) + && !"false".equalsIgnoreCase(monitorInternalTopic)) { + return true; + } + return false; } } diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocol.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocol.java index e80f6604445..b38665cc943 100644 --- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocol.java +++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocol.java @@ -17,11 +17,15 @@ package org.apache.hertzbeat.common.entity.job.protocol; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.apache.hertzbeat.common.util.CommonUtil; /** * mqtt protocol @@ -111,9 +115,47 @@ public boolean hasAuth() { @Override public boolean isInvalid() { - - // todo: add - return true; + if (!validateIpDomain(host) || !validPort(port)) { + return true; + } + if (StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout)) { + return true; + } + if (StringUtils.isNotBlank(keepalive) && !CommonUtil.isNumeric(keepalive)) { + return true; + } + if (StringUtils.isNotBlank(protocol) + && !"MQTT".equalsIgnoreCase(protocol) + && !"MQTTS".equalsIgnoreCase(protocol)) { + return true; + } + if (StringUtils.isNotBlank(tlsVersion) + && !"TLSv1.2".equalsIgnoreCase(tlsVersion) + && !"TLSv1.3".equalsIgnoreCase(tlsVersion)) { + return true; + } + if (StringUtils.isNotBlank(insecureSkipVerify) + && !"true".equalsIgnoreCase(insecureSkipVerify) + && !"false".equalsIgnoreCase(insecureSkipVerify)) { + return true; + } + if (StringUtils.isNotBlank(enableMutualAuth) + && !"true".equalsIgnoreCase(enableMutualAuth) + && !"false".equalsIgnoreCase(enableMutualAuth)) { + return true; + } + if (StringUtils.isNotBlank(username) && StringUtils.isBlank(password)) { + return true; + } + if (StringUtils.isBlank(username) && StringUtils.isNotBlank(password)) { + return true; + } + if ("true".equalsIgnoreCase(enableMutualAuth)) { + if (StringUtils.isBlank(clientCert) || StringUtils.isBlank(clientKey)) { + return true; + } + } + return false; } } diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocol.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocol.java index 48d999984a0..df6e8cfe3a4 100644 --- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocol.java +++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocol.java @@ -17,10 +17,15 @@ package org.apache.hertzbeat.common.entity.job.protocol; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.apache.hertzbeat.common.util.CommonUtil; /** * NebulaGraph Protocol @@ -59,9 +64,16 @@ public class NebulaGraphProtocol implements CommonRequestProtocol, Protocol { @Override public boolean isInvalid() { - - // todo: add - return true; + if (!validateIpDomain(host) || !validPort(port)) { + return true; + } + if (StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout)) { + return true; + } + if (StringUtils.isNotBlank(timePeriod) && !CommonUtil.isNumeric(timePeriod)) { + return true; + } + return false; } } diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocol.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocol.java index 62ca0e38c5a..54a5d1b65cf 100644 --- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocol.java +++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocol.java @@ -17,11 +17,15 @@ package org.apache.hertzbeat.common.entity.job.protocol; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.apache.hertzbeat.common.util.CommonUtil; /** * nginx protocol @@ -62,6 +66,17 @@ public class NginxProtocol implements CommonRequestProtocol, Protocol { */ @Override public boolean isInvalid() { - return StringUtils.isAnyBlank(host, port, timeout); + if (!validateIpDomain(host) || !validPort(port)) { + return true; + } + if (StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout)) { + return true; + } + if (StringUtils.isNotBlank(ssl) + && !"true".equalsIgnoreCase(ssl) + && !"false".equalsIgnoreCase(ssl)) { + return true; + } + return false; } } diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocol.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocol.java index 3688e23a548..b5f482be8ac 100644 --- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocol.java +++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocol.java @@ -17,10 +17,14 @@ package org.apache.hertzbeat.common.entity.job.protocol; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort; +import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; /** * rocketmq protocol @@ -68,8 +72,15 @@ public void setPort(String port) { @Override public boolean isInvalid() { - - // todo: add - return true; + if (!validateIpDomain(namesrvHost) || !validPort(namesrvPort)) { + return true; + } + if (StringUtils.isNotBlank(accessKey) && StringUtils.isBlank(secretKey)) { + return true; + } + if (StringUtils.isBlank(accessKey) && StringUtils.isNotBlank(secretKey)) { + return true; + } + return false; } } diff --git a/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocolTest.java b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocolTest.java new file mode 100644 index 00000000000..368592a1a0c --- /dev/null +++ b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocolTest.java @@ -0,0 +1,178 @@ +/* + * 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.hertzbeat.common.entity.job.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class KafkaProtocolTest { + + @Test + void isInvalidValidProtocol() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithDomain() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("kafka.example.com") + .port("9092") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithLocalhost() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("localhost") + .port("9092") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidHost() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("") + .port("9092") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullHost() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host(null) + .port("9092") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidPort() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("99999") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankPort() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullPort() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port(null) + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTimeout() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .timeout("5000") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidBlankTimeout() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .timeout("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidNullTimeout() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .timeout(null) + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTimeout() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .timeout("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidMonitorInternalTopicTrue() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .monitorInternalTopic("true") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidMonitorInternalTopicFalse() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .monitorInternalTopic("false") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidMonitorInternalTopic() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .monitorInternalTopic("invalid") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankMonitorInternalTopic() { + KafkaProtocol protocol = KafkaProtocol.builder() + .host("192.168.1.1") + .port("9092") + .monitorInternalTopic("") + .build(); + assertFalse(protocol.isInvalid()); + } +} \ No newline at end of file diff --git a/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocolTest.java b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocolTest.java new file mode 100644 index 00000000000..15b10a22510 --- /dev/null +++ b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/MqttProtocolTest.java @@ -0,0 +1,322 @@ +/* + * 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.hertzbeat.common.entity.job.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class MqttProtocolTest { + + @Test + void isInvalidValidProtocol() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithDomain() { + MqttProtocol protocol = MqttProtocol.builder() + .host("mqtt.example.com") + .port("1883") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithLocalhost() { + MqttProtocol protocol = MqttProtocol.builder() + .host("localhost") + .port("1883") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidHost() { + MqttProtocol protocol = MqttProtocol.builder() + .host("") + .port("1883") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullHost() { + MqttProtocol protocol = MqttProtocol.builder() + .host(null) + .port("1883") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidPort() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("99999") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankPort() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullPort() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port(null) + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTimeout() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .timeout("5000") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidBlankTimeout() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .timeout("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTimeout() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .timeout("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidKeepalive() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .keepalive("60") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidKeepalive() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .keepalive("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolMqtt() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .protocol("MQTT") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolMqtts() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .protocol("MQTTS") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidProtocol() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .protocol("INVALID") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTlsVersion() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .tlsVersion("TLSv1.2") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidTlsVersionV13() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .tlsVersion("TLSv1.3") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTlsVersion() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .tlsVersion("TLSv1.0") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidInsecureSkipVerify() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .insecureSkipVerify("true") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidInsecureSkipVerify() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .insecureSkipVerify("invalid") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidEnableMutualAuth() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .enableMutualAuth("true") + .clientCert("/path/to/cert") + .clientKey("/path/to/key") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidEnableMutualAuthWithoutClientCert() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .enableMutualAuth("true") + .clientKey("/path/to/key") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidEnableMutualAuthWithoutClientKey() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .enableMutualAuth("true") + .clientCert("/path/to/cert") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidEnableMutualAuthFalseWithoutCert() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .enableMutualAuth("false") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidEnableMutualAuth() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("8883") + .enableMutualAuth("invalid") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidAuth() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .username("user") + .password("pass") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidOnlyUsername() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .username("user") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidOnlyPassword() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .password("pass") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNoAuth() { + MqttProtocol protocol = MqttProtocol.builder() + .host("192.168.1.1") + .port("1883") + .build(); + assertFalse(protocol.isInvalid()); + } +} \ No newline at end of file diff --git a/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocolTest.java b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocolTest.java new file mode 100644 index 00000000000..e5890807de2 --- /dev/null +++ b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NebulaGraphProtocolTest.java @@ -0,0 +1,188 @@ +/* + * 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.hertzbeat.common.entity.job.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class NebulaGraphProtocolTest { + + @Test + void isInvalidValidProtocol() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithDomain() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("nebula.example.com") + .port("19669") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithLocalhost() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("localhost") + .port("19669") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidHost() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("") + .port("19669") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullHost() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host(null) + .port("19669") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidPort() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("99999") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankPort() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullPort() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port(null) + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTimeout() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timeout("5000") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidBlankTimeout() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timeout("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidNullTimeout() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timeout(null) + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTimeout() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timeout("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTimePeriod() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timePeriod("60") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidBlankTimePeriod() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timePeriod("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTimePeriod() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .timePeriod("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidWithUrl() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19669") + .url("/stats") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidStoragePort() { + NebulaGraphProtocol protocol = NebulaGraphProtocol.builder() + .host("192.168.1.1") + .port("19779") + .url("/rocksdb_stats") + .build(); + assertFalse(protocol.isInvalid()); + } +} \ No newline at end of file diff --git a/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocolTest.java b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocolTest.java new file mode 100644 index 00000000000..dc1378634b6 --- /dev/null +++ b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/NginxProtocolTest.java @@ -0,0 +1,197 @@ +/* + * 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.hertzbeat.common.entity.job.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class NginxProtocolTest { + + @Test + void isInvalidValidProtocol() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithDomain() { + NginxProtocol protocol = NginxProtocol.builder() + .host("nginx.example.com") + .port("80") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithLocalhost() { + NginxProtocol protocol = NginxProtocol.builder() + .host("localhost") + .port("80") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidHost() { + NginxProtocol protocol = NginxProtocol.builder() + .host("") + .port("80") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullHost() { + NginxProtocol protocol = NginxProtocol.builder() + .host(null) + .port("80") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidPort() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("99999") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankPort() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullPort() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port(null) + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidTimeout() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .timeout("5000") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidBlankTimeout() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .timeout("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidNullTimeout() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .timeout(null) + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidTimeout() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .timeout("abc") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidSslTrue() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("443") + .ssl("true") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidSslFalse() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .ssl("false") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidSsl() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .ssl("invalid") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankSsl() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .ssl("") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidWithUrl() { + NginxProtocol protocol = NginxProtocol.builder() + .host("192.168.1.1") + .port("80") + .url("/nginx_status") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidIpv6() { + NginxProtocol protocol = NginxProtocol.builder() + .host("::1") + .port("80") + .build(); + assertFalse(protocol.isInvalid()); + } +} \ No newline at end of file diff --git a/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocolTest.java b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocolTest.java new file mode 100644 index 00000000000..2930f7c12dd --- /dev/null +++ b/hertzbeat-common-core/src/test/java/org/apache/hertzbeat/common/entity/job/protocol/RocketmqProtocolTest.java @@ -0,0 +1,148 @@ +/* + * 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.hertzbeat.common.entity.job.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class RocketmqProtocolTest { + + @Test + void isInvalidValidProtocol() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithDomain() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("rocketmq.example.com") + .namesrvPort("9876") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidProtocolWithLocalhost() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("localhost") + .namesrvPort("9876") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidHost() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("") + .namesrvPort("9876") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullHost() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost(null) + .namesrvPort("9876") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidInvalidPort() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("99999") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidBlankPort() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNullPort() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort(null) + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidValidWithAccessKey() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .accessKey("testAccessKey") + .secretKey("testSecretKey") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidOnlyAccessKey() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .accessKey("testAccessKey") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidOnlySecretKey() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .secretKey("testSecretKey") + .build(); + assertTrue(protocol.isInvalid()); + } + + @Test + void isInvalidNoAuth() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .build(); + assertFalse(protocol.isInvalid()); + } + + @Test + void isInvalidValidWithParseScript() { + RocketmqProtocol protocol = RocketmqProtocol.builder() + .namesrvHost("192.168.1.1") + .namesrvPort("9876") + .parseScript("$.data") + .build(); + assertFalse(protocol.isInvalid()); + } +} \ No newline at end of file