From b40acf2d244058c162a8597968e59f2708e6abf4 Mon Sep 17 00:00:00 2001 From: mmis Date: Fri, 20 Jul 2018 15:28:25 +0100 Subject: Copy policy-endpoints from drools-pdp to common Issue-ID: POLICY-967 Change-Id: I374c155ee102c3e157c60d0a22d7191544abb76a Signed-off-by: mmis --- utils/pom.xml | 7 ++ .../policy/common/utils/network/NetworkUtil.java | 113 +++++++++++++++++++++ .../common/utils/network/NetworkUtilTest.java | 40 ++++++++ 3 files changed, 160 insertions(+) create mode 100644 utils/src/main/java/org/onap/policy/common/utils/network/NetworkUtil.java create mode 100644 utils/src/test/java/org/onap/policy/common/utils/network/NetworkUtilTest.java (limited to 'utils') diff --git a/utils/pom.xml b/utils/pom.xml index 8375408e..1152d3ad 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -34,6 +34,7 @@ 1.6.6 + 1.7.25 @@ -53,6 +54,12 @@ ${javax.persistence.api.version} provided + + org.slf4j + slf4j-api + ${slf4j.version} + provided + org.powermock powermock-api-mockito diff --git a/utils/src/main/java/org/onap/policy/common/utils/network/NetworkUtil.java b/utils/src/main/java/org/onap/policy/common/utils/network/NetworkUtil.java new file mode 100644 index 00000000..c9afa19e --- /dev/null +++ b/utils/src/main/java/org/onap/policy/common/utils/network/NetworkUtil.java @@ -0,0 +1,113 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.utils.network; + +import java.io.IOException; +import java.net.ConnectException; +import java.net.InetAddress; +import java.net.Socket; +import java.net.UnknownHostException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Network Utilities + */ +public class NetworkUtil { + + public static final Logger logger = LoggerFactory.getLogger(NetworkUtil.class.getName()); + + /** + * IPv4 Wildcard IP address + */ + public static final String IPv4_WILDCARD_ADDRESS = "0.0.0.0"; + + private NetworkUtil() { + // Empty constructor + } + + /** + * try to connect to $host:$port $retries times while we are getting connection failures. + * + * @param host host + * @param port port + * @param retries number of attempts + * @return true is port is open, false otherwise + * @throws InterruptedException if execution has been interrupted + */ + public static boolean isTcpPortOpen(String host, int port, int retries, long interval) + throws InterruptedException, IOException { + int retry = 0; + while (retry < retries) { + try (Socket s = new Socket(host, port)) { + logger.debug("{}:{} connected - retries={} interval={}", host, port, retries, interval); + return true; + } catch (final ConnectException e) { + retry++; + logger.trace("{}:{} connected - retries={} interval={}", host, port, retries, interval, e); + Thread.sleep(interval); + } + } + + logger.warn("{}:{} closed = retries={} interval={}", host, port, retries, interval); + return false; + } + + /** + * gets host name + * + * @return host name + */ + public static String getHostname() { + + String hostname = System.getenv("HOSTNAME"); + if (hostname != null && !hostname.isEmpty()) { + return hostname; + } + + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + logger.warn("cannot resolve local hostname", e); + /* continue */ + } + + return "localhost"; + } + + /** + * gets host's IP + * + * @return host IP + */ + public static String getHostIp() { + + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + logger.warn("cannot resolve local hostname", e); + /* continue */ + } + + return "127.0.0.1"; + } +} diff --git a/utils/src/test/java/org/onap/policy/common/utils/network/NetworkUtilTest.java b/utils/src/test/java/org/onap/policy/common/utils/network/NetworkUtilTest.java new file mode 100644 index 00000000..1e402d2a --- /dev/null +++ b/utils/src/test/java/org/onap/policy/common/utils/network/NetworkUtilTest.java @@ -0,0 +1,40 @@ +/*- + * ============LICENSE_START======================================================= + * policy-utils + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.utils.network; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +public class NetworkUtilTest { + + @Test + public void test() throws InterruptedException, IOException { + assertNotNull(NetworkUtil.IPv4_WILDCARD_ADDRESS); + assertFalse(NetworkUtil.isTcpPortOpen("localhost", 8080, 1, 5)); + assertNotNull(NetworkUtil.getHostname()); + assertNotNull(NetworkUtil.getHostIp()); + } + +} -- cgit 1.2.3-korg