From 9f0678f3ab333949076b5b9747158cf40e08fbef Mon Sep 17 00:00:00 2001 From: JohnKeeney Date: Tue, 2 Jul 2019 15:50:56 +0000 Subject: ApexPDP: Fixed jenkin failure in Nordix getLocalHost() fails in Nordix jenkins test build - misconfiguration of nordix jenkins vms/containers Change-Id: I726fc141ced07f15cfaa8a9815b4d090dbb74c9a Issue-ID: POLICY-1879 Signed-off-by: JohnKeeney --- .../apex/core/deployment/DeploymentClient.java | 25 ++++++++--- .../core/deployment/PeriodicEventManagerTest.java | 32 +++++++------- .../stringmessaging/WsStringMessageServer.java | 31 ++++++++++---- .../messaging/util/MessagingUtils.java | 5 ++- .../engine/engdep/EngDepMessageListener.java | 50 ++++++++++++++-------- 5 files changed, 93 insertions(+), 50 deletions(-) diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java index eb51271d5..900e0a2f8 100644 --- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java +++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,12 +22,12 @@ package org.onap.policy.apex.core.deployment; import com.google.common.eventbus.Subscribe; - +import java.net.InetAddress; import java.net.URI; +import java.net.UnknownHostException; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; - import org.onap.policy.apex.core.infrastructure.messaging.MessageHolder; import org.onap.policy.apex.core.infrastructure.messaging.MessageListener; import org.onap.policy.apex.core.infrastructure.messaging.MessagingService; @@ -66,7 +67,7 @@ public class DeploymentClient implements Runnable { // Thread management fields private boolean started = false; private Thread thisThread = null; - + // Number of messages processed private long messagesSent = 0; private long messagesReceived = 0; @@ -127,7 +128,8 @@ public class DeploymentClient implements Runnable { } // Send the message in its message holder - final MessageHolder messageHolder = new MessageHolder<>(MessagingUtils.getHost()); + InetAddress local = getLocalAddress(); + final MessageHolder messageHolder = new MessageHolder<>(local); messageHolder.addMessage(messageForSending); service.send(messageHolder); messagesSent++; @@ -138,10 +140,23 @@ public class DeploymentClient implements Runnable { thisThread.interrupt(); return false; } - + return true; } + /** + * Get the local address for the WS MessageHolder, or null if there is a problem. + */ + private InetAddress getLocalAddress() { + try { + return MessagingUtils.getLocalHostLanAddress(); + } + catch (UnknownHostException e) { + LOGGER.debug("engine<-->deployment client failed to find the localhost address - continuing ...", e); + return null; + } + } + /** * Gets the host. * diff --git a/core/core-deployment/src/test/java/org/onap/policy/apex/core/deployment/PeriodicEventManagerTest.java b/core/core-deployment/src/test/java/org/onap/policy/apex/core/deployment/PeriodicEventManagerTest.java index 816c528bb..22344cfc4 100644 --- a/core/core-deployment/src/test/java/org/onap/policy/apex/core/deployment/PeriodicEventManagerTest.java +++ b/core/core-deployment/src/test/java/org/onap/policy/apex/core/deployment/PeriodicEventManagerTest.java @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * 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. - * + * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ @@ -28,7 +29,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.PrintStream; - import org.junit.Test; /** @@ -133,26 +133,26 @@ public class PeriodicEventManagerTest { } catch (ApexDeploymentException ade) { assertEquals("model deployment failed on parameters localhost 12345 true", ade.getMessage()); } - + try { peManager.init(); } catch (ApexDeploymentException ade) { ade.printStackTrace(); fail("test should not throw an exception"); } - + try { peManager.runCommand(); } catch (ApexDeploymentException ade) { assertEquals("failed response Operation failed received from serverlocalhost:12345", ade.getMessage()); } - + try { peManager.runCommand(); } catch (ApexDeploymentException ade) { fail("test should not throw an exception"); } - + peManager.close(); } @@ -176,26 +176,26 @@ public class PeriodicEventManagerTest { } catch (ApexDeploymentException ade) { assertEquals("model deployment failed on parameters localhost 12345 true", ade.getMessage()); } - + try { peManager.init(); } catch (ApexDeploymentException ade) { ade.printStackTrace(); fail("test should not throw an exception"); } - + try { peManager.runCommand(); } catch (ApexDeploymentException ade) { assertEquals("failed response Operation failed received from serverlocalhost:12345", ade.getMessage()); } - + try { peManager.runCommand(); } catch (ApexDeploymentException ade) { fail("test should not throw an exception"); } - + peManager.close(); } @@ -220,7 +220,7 @@ public class PeriodicEventManagerTest { } catch (ApexDeploymentException ade) { assertEquals("connection to apex is not initialized", ade.getMessage()); } - + try { peManager.runCommand(); fail("test should throw an exception"); @@ -228,7 +228,7 @@ public class PeriodicEventManagerTest { assertEquals("connection to apex is not initialized", ade.getMessage()); ade.printStackTrace(); } - + peManager.close(); } @@ -253,13 +253,13 @@ public class PeriodicEventManagerTest { } catch (ApexDeploymentException ade) { assertEquals("connection to apex is not initialized", ade.getMessage()); } - + peManager.close(); } /** * Run the application. - * + * * @param eventArgs the command arguments * @return a string containing the command output */ diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java index b244feab0..41fb82a9e 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,10 +22,9 @@ package org.onap.policy.apex.core.infrastructure.messaging.stringmessaging; import com.google.common.eventbus.Subscribe; - import java.net.InetAddress; import java.net.InetSocketAddress; - +import java.net.UnknownHostException; import org.onap.policy.apex.core.infrastructure.messaging.MessageListener; import org.onap.policy.apex.core.infrastructure.messaging.MessagingException; import org.onap.policy.apex.core.infrastructure.messaging.MessagingService; @@ -66,19 +66,32 @@ public class WsStringMessageServer implements WsStringMessager { */ @Override public void start(final WsStringMessageListener newWsStringMessageListener) throws MessagingException { - this.wsStringMessageListener = newWsStringMessageListener; LOGGER.entry("web socket event consumer server starting . . ."); + if (LOGGER.isDebugEnabled()) { + String lanaddress = "unknown"; + try { + lanaddress = MessagingUtils.getLocalHostLanAddress().getHostAddress(); + } + catch (final UnknownHostException ignore) { + LOGGER.debug("Failed to find name of local address name",ignore); + } + LOGGER.debug("web socket string message server LAN address=" + lanaddress); + String hostaddress = "unknown"; + try { + hostaddress = InetAddress.getLocalHost().getHostAddress(); + } + catch (final UnknownHostException ignore) { + LOGGER.debug("Failed to find name of local address",ignore); + } + LOGGER.debug("web socket string message server host address=" + hostaddress); + } - try { - final InetAddress addrLan = MessagingUtils.getLocalHostLanAddress(); - LOGGER.debug("web socket string message server LAN address=" + addrLan.getHostAddress()); - final InetAddress addr = InetAddress.getLocalHost(); - LOGGER.debug("web socket string message server host address=" + addr.getHostAddress()); + this.wsStringMessageListener = newWsStringMessageListener; + try { service = factory.createServer(new InetSocketAddress(port)); service.addMessageListener(new WsStringMessageServerListener()); - service.startConnection(); } catch (final Exception e) { LOGGER.warn("web socket string message server start failed", e); diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java index a501a66d6..a6c3c5854 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +29,6 @@ import java.net.NetworkInterface; import java.net.Socket; import java.net.UnknownHostException; import java.util.Enumeration; - import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -101,7 +101,7 @@ public final class MessagingUtils { /** * Check if port is available or not. - * + * * @param port the port to test * @return true if port is available */ @@ -118,6 +118,7 @@ public final class MessagingUtils { * Returns the local host address. * * @return the local host address + * @throws IllegalStateException if the local host's address cannot be found */ public static InetAddress getHost() { try { diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java index 358069657..2e8218a99 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * 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. - * + * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ @@ -21,13 +22,13 @@ package org.onap.policy.apex.service.engine.engdep; import com.google.common.eventbus.Subscribe; - +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.Collection; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; - import org.java_websocket.WebSocket; import org.onap.policy.apex.core.infrastructure.messaging.MessageHolder; import org.onap.policy.apex.core.infrastructure.messaging.MessageListener; @@ -57,7 +58,7 @@ import org.slf4j.ext.XLoggerFactory; * event implements this interface, and the object created with that class is registered with a component using the * component's addEngDepMessageListener method. When the engDepMessage event occurs, that object's * appropriate method is invoked. - * + * *

This class uses a queue to buffer incoming messages. When the listener is called, it places the incoming message * on the queue. A thread runs which removes the messages from the queue and forwards them to the Apex engine. * @@ -211,7 +212,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle incoming EngDep messages. - * + * * @param message the incoming message * @param webSocket the web socket the message came in on * @param enDepAction the action from the message @@ -253,7 +254,7 @@ public class EngDepMessageListener implements MessageListener, Runnable case GET_ENGINE_INFO: handleEngineInfoMessage(message, webSocket); break; - + default: throw new ApexException("action " + enDepAction + " on received message not handled by engine"); } @@ -261,7 +262,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the get engine service information message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -279,7 +280,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the update model message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -298,7 +299,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the start engine message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -316,7 +317,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the stop engine message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -334,7 +335,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the start periodic events message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -356,7 +357,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the stop periodic events message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -376,7 +377,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the engine status message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -392,7 +393,7 @@ public class EngDepMessageListener implements MessageListener, Runnable /** * Handle the engine information message. - * + * * @param message the message * @param webSocket the web socket that the message came on * @throws ApexException on message handling exceptions @@ -405,6 +406,19 @@ public class EngDepMessageListener implements MessageListener, Runnable LOGGER.debug("returned runtime information for engine {}", getEngineInfo.getTarget().getId()); } + /** + * Get the local address for the WS MessageHolder, or null if there is a problem. + */ + private InetAddress getLocalAddress() { + try { + return MessagingUtils.getLocalHostLanAddress(); + } + catch (UnknownHostException e) { + LOGGER.debug("failed to find the localhost address - continuing ...", e); + return null; + } + } + /** * Send the Response message to the client. * @@ -429,7 +443,7 @@ public class EngDepMessageListener implements MessageListener, Runnable final Response responseMessage = new Response(requestMessage.getTarget(), result, requestMessage); responseMessage.setMessageData(messageData); - final MessageHolder messageHolder = new MessageHolder<>(MessagingUtils.getHost()); + final MessageHolder messageHolder = new MessageHolder<>(getLocalAddress()); messageHolder.addMessage(responseMessage); client.send(MessagingUtils.serializeObject(messageHolder)); @@ -460,7 +474,7 @@ public class EngDepMessageListener implements MessageListener, Runnable responseMessage.setEngineKeyArray(engineKeyCollection); responseMessage.setApexModelKey(apexModelKey); - final MessageHolder messageHolder = new MessageHolder<>(MessagingUtils.getHost()); + final MessageHolder messageHolder = new MessageHolder<>(getLocalAddress()); messageHolder.addMessage(responseMessage); client.send(MessagingUtils.serializeObject(messageHolder)); -- cgit 1.2.3-korg