diff options
Diffstat (limited to 'services')
10 files changed, 39 insertions, 1258 deletions
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 deleted file mode 100644 index 113d71cfe..000000000 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java +++ /dev/null @@ -1,482 +0,0 @@ -/*- - * ============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========================================================= - */ - -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; -import org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock.MessageBlock; -import org.onap.policy.apex.core.infrastructure.messaging.util.MessagingUtils; -import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; -import org.onap.policy.apex.core.protocols.Message; -import org.onap.policy.apex.core.protocols.engdep.EngDepAction; -import org.onap.policy.apex.core.protocols.engdep.messages.EngineServiceInfoResponse; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineInfo; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineServiceInfo; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineStatus; -import org.onap.policy.apex.core.protocols.engdep.messages.Response; -import org.onap.policy.apex.core.protocols.engdep.messages.StartEngine; -import org.onap.policy.apex.core.protocols.engdep.messages.StartPeriodicEvents; -import org.onap.policy.apex.core.protocols.engdep.messages.StopEngine; -import org.onap.policy.apex.core.protocols.engdep.messages.StopPeriodicEvents; -import org.onap.policy.apex.core.protocols.engdep.messages.UpdateModel; -import org.onap.policy.apex.model.basicmodel.concepts.ApexException; -import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; -import org.onap.policy.apex.service.engine.runtime.EngineService; -import org.slf4j.ext.XLogger; -import org.slf4j.ext.XLoggerFactory; - -/** - * The listener interface for receiving engDepMessage events. The class that is interested in processing a engDepMessage - * event implements this interface, and the object created with that class is registered with a component using the - * component's <code>addEngDepMessageListener</code> method. When the engDepMessage event occurs, that object's - * appropriate method is invoked. - * - * <p>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. - * - * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - */ -public class EngDepMessageListener implements MessageListener<Message>, Runnable { - private static final int LISTENER_STOP_WAIT_INTERVAL = 10; - - private static final XLogger LOGGER = XLoggerFactory.getXLogger(EngDepMessageListener.class); - - // The timeout to wait between queue poll timeouts in milliseconds - private static final long QUEUE_POLL_TIMEOUT = 50; - - // The Apex service itself - private final EngineService apexService; - - // The message listener thread and stopping flag - private Thread messageListenerThread; - private volatile boolean stopOrderedFlag = false; - - // The message queue is used to hold messages prior to forwarding to Apex - private final BlockingQueue<MessageBlock<Message>> messageQueue = new LinkedBlockingDeque<>(); - - /** - * Instantiates a new EngDep message listener for listening for messages coming in from the Deployment client. The - * <code>apexService</code> is the Apex service to send the messages onto. - * - * @param apexService the Apex engine service - */ - protected EngDepMessageListener(final EngineService apexService) { - this.apexService = apexService; - } - - /** - * This method is an implementation of the message listener. It receives a message and places it on the queue for - * processing by the message listening thread. - * - * @param data the data - * @see org.onap.policy.apex.core.infrastructure.messaging.MessageListener#onMessage - * (org.onap.policy.apex.core.infrastructure.messaging.impl.ws.data.Data) - */ - @Subscribe - @Override - public void onMessage(final MessageBlock<Message> data) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("message received from client application {} port {}", - data.getConnection().getRemoteSocketAddress().getAddress(), - data.getConnection().getRemoteSocketAddress().getPort()); - } - messageQueue.add(data); - } - - /** - * {@inheritDoc}. - */ - @Override - public void onMessage(final String messageString) { - throw new UnsupportedOperationException("String messages are not supported on the EngDep protocol"); - } - - /** - * This method gets a new message listening thread from the thread factory and starts it. - */ - public void startProcessorThread() { - LOGGER.entry(); - messageListenerThread = new Thread(this); - messageListenerThread.setDaemon(true); - messageListenerThread.start(); - LOGGER.exit(); - } - - /** - * Stops the message listening threads. - */ - public void stopProcessorThreads() { - LOGGER.entry(); - stopOrderedFlag = true; - - while (messageListenerThread.isAlive()) { - ThreadUtilities.sleep(LISTENER_STOP_WAIT_INTERVAL); - } - LOGGER.exit(); - } - - /** - * Runs the message listening thread. Here, the messages come in on the message queue and are processed one by one - */ - @Override - public void run() { - // Take messages off the queue and forward them to the Apex engine - while (!stopOrderedFlag) { - pollAndHandleMessage(); - } - } - - /** - * Poll the queue for a message and handle that message. - */ - private void pollAndHandleMessage() { - try { - final MessageBlock<Message> data = messageQueue.poll(QUEUE_POLL_TIMEOUT, TimeUnit.MILLISECONDS); - if (data != null) { - final List<Message> messages = data.getMessages(); - for (final Message message : messages) { - handleMessage(message, data.getConnection()); - } - } - } catch (final InterruptedException e) { - // restore the interrupt status - Thread.currentThread().interrupt(); - LOGGER.debug("message listener execution has been interrupted"); - } - } - - /** - * This method handles EngDep messages as they come in. It uses the inevitable switch statement to handle the - * messages. - * - * @param message the incoming EngDep message - * @param webSocket the web socket on which the message came in - */ - private void handleMessage(final Message message, final WebSocket webSocket) { - LOGGER.entry(webSocket.getRemoteSocketAddress().toString()); - if (message.getAction() == null) { - // This is a response message - return; - } - - try { - LOGGER.debug("Manager action {} being applied to engine", message.getAction()); - - // Get and check the incoming action for validity - EngDepAction enDepAction = null; - if (message.getAction() instanceof EngDepAction) { - enDepAction = (EngDepAction) message.getAction(); - } else { - throw new ApexException(message.getAction().getClass().getName() - + "action on received message invalid, action must be of type \"EnDepAction\""); - } - - handleIncomingMessages(message, webSocket, enDepAction); - } catch (final ApexException e) { - LOGGER.warn("apex failed to execute message", e); - sendReply(webSocket, message, false, e.getCascadedMessage()); - } catch (final Exception e) { - LOGGER.warn("system failure executing message", e); - sendReply(webSocket, message, false, e.getMessage()); - } - LOGGER.exit(); - } - - /** - * 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 - * @throws ApexException on message handling errors - */ - private void handleIncomingMessages(final Message message, final WebSocket webSocket, EngDepAction enDepAction) - throws ApexException { - // Handle each incoming message using the inevitable switch statement for the EngDep - // protocol - switch (enDepAction) { - case GET_ENGINE_SERVICE_INFO: - handleGetEngineServiceInfoMessage(message, webSocket); - break; - - case UPDATE_MODEL: - handleUpdateModelMessage(message, webSocket); - break; - - case START_ENGINE: - handleStartEngineMessage(message, webSocket); - break; - - case STOP_ENGINE: - handleStopEngineMessage(message, webSocket); - break; - - case START_PERIODIC_EVENTS: - handleStartPeriodicEventsMessage(message, webSocket); - break; - - case STOP_PERIODIC_EVENTS: - handleStopPeriodicEventsMessage(message, webSocket); - break; - - case GET_ENGINE_STATUS: - handleEngineStatusMessage(message, webSocket); - break; - - case GET_ENGINE_INFO: - handleEngineInfoMessage(message, webSocket); - break; - - default: - throw new ApexException("action " + enDepAction + " on received message not handled by engine"); - } - } - - /** - * 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 - */ - private void handleGetEngineServiceInfoMessage(final Message message, final WebSocket webSocket) { - final GetEngineServiceInfo engineServiceInformationMessage = (GetEngineServiceInfo) message; - LOGGER.debug("getting engine service information for engine service " + apexService.getKey().getId() - + " . . ."); - // Send a reply with the engine service information - sendServiceInfoReply(webSocket, engineServiceInformationMessage, apexService.getKey(), - apexService.getEngineKeys(), apexService.getApexModelKey()); - LOGGER.debug("returned engine service information for engine service " - + apexService.getKey().getId()); - } - - /** - * 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 - */ - private void handleUpdateModelMessage(final Message message, final WebSocket webSocket) throws ApexException { - final UpdateModel updateModelMessage = (UpdateModel) message; - LOGGER.debug("updating model in engine {} . . .", updateModelMessage.getTarget().getId()); - // Update the model - apexService.updateModel(updateModelMessage.getTarget(), updateModelMessage.getMessageData(), - updateModelMessage.isForceInstall()); - // Send a reply indicating the message action worked - sendReply(webSocket, updateModelMessage, true, - "updated model in engine " + updateModelMessage.getTarget().getId()); - LOGGER.debug("updated model in engine service {}", updateModelMessage.getTarget().getId()); - } - - /** - * 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 - */ - private void handleStartEngineMessage(final Message message, final WebSocket webSocket) throws ApexException { - final StartEngine startEngineMessage = (StartEngine) message; - LOGGER.debug("starting engine {} . . .", startEngineMessage.getTarget().getId()); - // Start the engine - apexService.start(startEngineMessage.getTarget()); - // Send a reply indicating the message action worked - sendReply(webSocket, startEngineMessage, true, - "started engine " + startEngineMessage.getTarget().getId()); - LOGGER.debug("started engine {}", startEngineMessage.getTarget().getId()); - } - - /** - * 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 - */ - private void handleStopEngineMessage(final Message message, final WebSocket webSocket) throws ApexException { - final StopEngine stopEngineMessage = (StopEngine) message; - LOGGER.debug("stopping engine {} . . .", stopEngineMessage.getTarget().getId()); - // Stop the engine - apexService.stop(stopEngineMessage.getTarget()); - // Send a reply indicating the message action worked - sendReply(webSocket, stopEngineMessage, true, - "stopped engine " + stopEngineMessage.getTarget().getId()); - LOGGER.debug("stopping engine {}", stopEngineMessage.getTarget().getId()); - } - - /** - * 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 - */ - private void handleStartPeriodicEventsMessage(final Message message, final WebSocket webSocket) - throws ApexException { - final StartPeriodicEvents startPeriodicEventsMessage = (StartPeriodicEvents) message; - LOGGER.debug("starting periodic events on engine {} . . .", - startPeriodicEventsMessage.getTarget().getId()); - // Start periodic events with the period specified in the message - final Long period = Long.parseLong(startPeriodicEventsMessage.getMessageData()); - apexService.startPeriodicEvents(period); - // Send a reply indicating the message action worked - String periodicStartedMessage = "started periodic events on engine " - + startPeriodicEventsMessage.getTarget().getId() + " with period " + period; - sendReply(webSocket, startPeriodicEventsMessage, true, periodicStartedMessage); - LOGGER.debug(periodicStartedMessage); - } - - /** - * 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 - */ - private void handleStopPeriodicEventsMessage(final Message message, final WebSocket webSocket) - throws ApexException { - final StopPeriodicEvents stopPeriodicEventsMessage = (StopPeriodicEvents) message; - LOGGER.debug("stopping periodic events on engine {} . . .", - stopPeriodicEventsMessage.getTarget().getId()); - // Stop periodic events - apexService.stopPeriodicEvents(); - // Send a reply indicating the message action worked - sendReply(webSocket, stopPeriodicEventsMessage, true, "stopped periodic events on engine " - + stopPeriodicEventsMessage.getTarget().getId()); - LOGGER.debug("stopped periodic events on engine " + stopPeriodicEventsMessage.getTarget().getId()); - } - - /** - * 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 - */ - private void handleEngineStatusMessage(final Message message, final WebSocket webSocket) throws ApexException { - final GetEngineStatus getEngineStatusMessage = (GetEngineStatus) message; - LOGGER.debug("getting status for engine{} . . .", getEngineStatusMessage.getTarget().getId()); - // Send a reply with the engine status - sendReply(webSocket, getEngineStatusMessage, true, - apexService.getStatus(getEngineStatusMessage.getTarget())); - LOGGER.debug("returned status for engine {}", getEngineStatusMessage.getTarget().getId()); - } - - /** - * 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 - */ - private void handleEngineInfoMessage(final Message message, final WebSocket webSocket) throws ApexException { - final GetEngineInfo getEngineInfo = (GetEngineInfo) message; - LOGGER.debug("getting runtime information for engine {} . . .", getEngineInfo.getTarget().getId()); - // Send a reply with the engine runtime information - sendReply(webSocket, getEngineInfo, true, apexService.getRuntimeInfo(getEngineInfo.getTarget())); - 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. - * - * @param client the client to which to send the response message - * @param requestMessage the message to which we are responding - * @param result the result indicating success or failure - * @param messageData the message data - */ - private void sendReply(final WebSocket client, final Message requestMessage, final boolean result, - final String messageData) { - LOGGER.entry(result, messageData); - - if (client == null || !client.isOpen()) { - LOGGER.debug("error sending reply {}, client has disconnected", requestMessage.getAction()); - return; - } - - String replyString = "sending " + requestMessage.getAction() + " to web socket " - + client.getRemoteSocketAddress().toString(); - LOGGER.debug(replyString); - - final Response responseMessage = new Response(requestMessage.getTarget(), result, requestMessage); - responseMessage.setMessageData(messageData); - - final MessageHolder<Message> messageHolder = new MessageHolder<>(getLocalAddress()); - messageHolder.addMessage(responseMessage); - client.send(MessagingUtils.serializeObject(messageHolder)); - - LOGGER.exit(); - } - - /** - * Send the EngineServiceInfoResponse message to the client. - * - * @param client the client to which to send the response message - * @param requestMessage the message to which we are responding - * @param engineServiceKey The key of this engine service - * @param engineKeyCollection The keys of the engines in this engine service - * @param apexModelKey the apex model key - */ - private void sendServiceInfoReply(final WebSocket client, final Message requestMessage, - final AxArtifactKey engineServiceKey, final Collection<AxArtifactKey> engineKeyCollection, - final AxArtifactKey apexModelKey) { - LOGGER.entry(); - String sendingMessage = "sending " + requestMessage.getAction() + " to web socket " - + client.getRemoteSocketAddress().toString(); - LOGGER.debug(sendingMessage); - - final EngineServiceInfoResponse responseMessage = new EngineServiceInfoResponse(requestMessage.getTarget(), - true, requestMessage); - responseMessage.setMessageData("engine service information"); - responseMessage.setEngineServiceKey(engineServiceKey); - responseMessage.setEngineKeyArray(engineKeyCollection); - responseMessage.setApexModelKey(apexModelKey); - - final MessageHolder<Message> messageHolder = new MessageHolder<>(getLocalAddress()); - messageHolder.addMessage(responseMessage); - client.send(MessagingUtils.serializeObject(messageHolder)); - - LOGGER.exit(); - } -} diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingService.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingService.java deleted file mode 100644 index 91c1fb13c..000000000 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingService.java +++ /dev/null @@ -1,113 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2016-2018 Ericsson. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import java.net.InetSocketAddress; -import org.onap.policy.apex.core.infrastructure.messaging.MessagingService; -import org.onap.policy.apex.core.infrastructure.messaging.MessagingServiceFactory; -import org.onap.policy.apex.core.infrastructure.messaging.util.MessagingUtils; -import org.onap.policy.apex.core.protocols.Message; -import org.onap.policy.apex.service.engine.runtime.EngineService; -import org.slf4j.ext.XLogger; -import org.slf4j.ext.XLoggerFactory; - -/** - * The Class EngDepMessagingService is used to encapsulate the server side of EngDep communication. This class allows - * users to create and start an EngDep server. - * - * @author Liam Fallon (liam.fallon@ericsson.com) - */ -public class EngDepMessagingService { - private static final XLogger LOGGER = XLoggerFactory.getXLogger(EngDepMessagingService.class); - - private final MessagingService<Message> messageService; - - // The listener that is listening for messages coming in on the EngDep protocol from clients - private final EngDepMessageListener messageListener; - - /** - * Instantiates a new EngDep messaging service. It creates the message service instance, a listener for incoming - * messages, and starts the message listener thread for handling incoming messages. - * - * @param service the Apex engine service that this EngDep service is running for - * @param port the port The port to use for EngDep communication - */ - public EngDepMessagingService(final EngineService service, final int port) { - LOGGER.entry(service); - - // Create the service and listener and add the listener. - messageService = getMessageService(port); - messageListener = new EngDepMessageListener(service); - messageService.addMessageListener(messageListener); - - // Start incoming message processing on the listener - messageListener.startProcessorThread(); - LOGGER.exit(); - } - - /** - * Start the server, open the communication mechanism for connections. - */ - public void start() { - LOGGER.info("engine<-->deployment messaging starting . . ."); - messageService.startConnection(); - LOGGER.info("engine<-->deployment messaging started"); - } - - /** - * Start the server, close the communication mechanism. - */ - public void stop() { - LOGGER.info("engine<-->deployment messaging stopping . . ."); - messageService.stopConnection(); - messageListener.stopProcessorThreads(); - LOGGER.info("engine<-->deployment messaging stopped"); - } - - /** - * Is the server started?. - * - * @return true, if checks if is started - */ - public boolean isStarted() { - return messageService.isStarted(); - } - - /** - * Is the server stopped?. - * - * @return true, if checks if is stopped - */ - public boolean isStopped() { - return !messageService.isStarted(); - } - - /** - * Get a message service instance. This method is protected so that it can be intercepted in unit test. - * @param port the message service port - * @return the message service - */ - protected MessagingService<Message> getMessageService(final int port) { - // Messaging service is used to transmit and receive messages over a communication protocol - MessagingServiceFactory<Message> factory = new MessagingServiceFactory<>(); - return factory.createServer(new InetSocketAddress(MessagingUtils.checkPort(port))); - } -} diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/package-info.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/package-info.java deleted file mode 100644 index 41f644465..000000000 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/package-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2016-2018 Ericsson. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -/** - * Gives access to the APEX EngDep protocol for APEX engine management at runtime over a Java API. - * - * @author Liam Fallon (liam.fallon@ericsson.com) - */ -package org.onap.policy.apex.service.engine.engdep; diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java index a928f208c..233fa1aa0 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java @@ -43,7 +43,6 @@ import org.onap.policy.apex.model.basicmodel.service.ModelService; import org.onap.policy.apex.model.enginemodel.concepts.AxEngineModel; import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; import org.onap.policy.apex.model.policymodel.handling.PolicyModelMerger; -import org.onap.policy.apex.service.engine.engdep.EngDepMessagingService; import org.onap.policy.apex.service.engine.event.ApexEventException; import org.onap.policy.apex.service.engine.runtime.EngineService; import org.onap.policy.apex.service.engine.runtime.impl.EngineServiceImpl; @@ -58,8 +57,8 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; /** - * This class wraps an Apex engine so that it can be activated as a complete service together with all its context, - * executor, and event plugins. + * This class wraps an Apex engine so that it can be activated as a complete + * service together with all its context, executor, and event plugins. * * @author Liam Fallon (liam.fallon@ericsson.com) */ @@ -83,7 +82,8 @@ public class ApexActivator { // Event marshalers are used to send events asynchronously from Apex private final Map<String, ApexEventMarshaller> marshallerMap = new LinkedHashMap<>(); - // The engine service handler holds the references to the engine and its EngDep deployment + // The engine service handler holds the references to the engine and its EngDep + // deployment // interface. It also acts as a receiver for asynchronous // and synchronous events from the engine. private ApexEngineServiceHandler engineServiceHandler = null; @@ -130,8 +130,8 @@ public class ApexActivator { policyModelsMap = new LinkedHashMap<>(); Map<String, EventHandlerParameters> inputParametersMap = new LinkedHashMap<>(); Map<String, EventHandlerParameters> outputParametersMap = new LinkedHashMap<>(); - Set<Entry<ToscaPolicyIdentifier, ApexParameters>> apexParamsEntrySet = - new LinkedHashSet<>(apexParametersMap.entrySet()); + Set<Entry<ToscaPolicyIdentifier, ApexParameters>> apexParamsEntrySet = new LinkedHashSet<>( + apexParametersMap.entrySet()); apexParamsEntrySet.stream().forEach(apexParamsEntry -> { ApexParameters apexParams = apexParamsEntry.getValue(); List<String> duplicateInputParameters = new ArrayList<>(apexParams.getEventInputParameters().keySet()); @@ -180,11 +180,12 @@ public class ApexActivator { } private AxPolicyModel aggregatePolicyModels(Map<ToscaPolicyIdentifier, AxPolicyModel> policyModelsMap) { - // Doing a deep copy so that original values in policyModelsMap is retained after reduction operation + // Doing a deep copy so that original values in policyModelsMap is retained + // after reduction operation Set<Entry<ToscaPolicyIdentifier, AxPolicyModel>> policyModelsEntries = policyModelsMap.entrySet().stream() .map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue())).collect(Collectors.toSet()); - Optional<Entry<ToscaPolicyIdentifier, AxPolicyModel>> finalPolicyModelEntry = - policyModelsEntries.stream().reduce((entry1, entry2) -> { + Optional<Entry<ToscaPolicyIdentifier, AxPolicyModel>> finalPolicyModelEntry = policyModelsEntries.stream() + .reduce((entry1, entry2) -> { try { entry1.setValue( PolicyModelMerger.getMergedPolicyModel(entry1.getValue(), entry2.getValue(), true, true)); @@ -207,7 +208,8 @@ public class ApexActivator { Map<String, EventHandlerParameters> inputParametersMap, Map<String, EventHandlerParameters> outputParametersMap) throws ApexEventException { - // Producer parameters specify what event marshalers to handle events leaving Apex are + // Producer parameters specify what event marshalers to handle events leaving + // Apex are // set up and how they are set up for (Entry<String, EventHandlerParameters> outputParameters : outputParametersMap.entrySet()) { final ApexEventMarshaller marshaller = new ApexEventMarshaller(outputParameters.getKey(), @@ -217,7 +219,8 @@ public class ApexActivator { marshallerMap.put(outputParameters.getKey(), marshaller); } - // Consumer parameters specify what event unmarshalers to handle events coming into Apex + // Consumer parameters specify what event unmarshalers to handle events coming + // into Apex // are set up and how they are set up for (final Entry<String, EventHandlerParameters> inputParameters : inputParametersMap.entrySet()) { final ApexEventUnmarshaller unmarshaller = new ApexEventUnmarshaller(inputParameters.getKey(), @@ -229,7 +232,8 @@ public class ApexActivator { private void handleExistingMarshallerAndUnmarshaller(Map<String, EventHandlerParameters> inputParametersMap, Map<String, EventHandlerParameters> outputParametersMap) { - // stop and remove any marshaller/unmarshaller that is part of a policy that is undeployed + // stop and remove any marshaller/unmarshaller that is part of a policy that is + // undeployed marshallerMap.entrySet().stream() .filter(marshallerEntry -> !outputParametersMap.containsKey(marshallerEntry.getKey())) .forEach(marshallerEntry -> marshallerEntry.getValue().stop()); @@ -239,7 +243,8 @@ public class ApexActivator { .forEach(unmarshallerEntry -> unmarshallerEntry.getValue().stop()); unmarshallerMap.keySet().removeIf(unmarshallerKey -> !inputParametersMap.containsKey(unmarshallerKey)); - // If a marshaller/unmarshaller is already initialized, they don't need to be reinitialized during model update. + // If a marshaller/unmarshaller is already initialized, they don't need to be + // reinitialized during model update. outputParametersMap.keySet().removeIf(marshallerMap::containsKey); inputParametersMap.keySet().removeIf(unmarshallerMap::containsKey); } @@ -252,20 +257,16 @@ public class ApexActivator { LOGGER.debug("starting apex engine service . . ."); apexEngineService = EngineServiceImpl.create(apexParameters.getEngineServiceParameters()); - // Instantiate and start the messaging service for Deployment - LOGGER.debug("starting apex deployment service . . ."); - final EngDepMessagingService engDepService = new EngDepMessagingService(apexEngineService, - apexParameters.getEngineServiceParameters().getDeploymentPort()); - engDepService.start(); - - // Create the engine holder to hold the engine's references and act as an event receiver - engineServiceHandler = new ApexEngineServiceHandler(apexEngineService, engDepService); + // Create the engine holder to hold the engine's references and act as an event + // receiver + engineServiceHandler = new ApexEngineServiceHandler(apexEngineService); } /** - * Set up unmarshaler/marshaler pairing for synchronized event handling. We only need to traverse the unmarshalers - * because the unmarshalers and marshalers are paired one to one uniquely so if we find a synchronized unmarshaler - * we'll also find its paired marshaler + * Set up unmarshaler/marshaler pairing for synchronized event handling. We only + * need to traverse the unmarshalers because the unmarshalers and marshalers are + * paired one to one uniquely so if we find a synchronized unmarshaler we'll + * also find its paired marshaler * * @param inputParametersMap the apex parameters */ @@ -278,8 +279,8 @@ public class ApexActivator { // Check if the unmarshaler is synchronized with a marshaler if (inputParameters.getValue().isPeeredMode(peeredMode)) { // Find the unmarshaler and marshaler - final ApexEventMarshaller peeredMarshaler = - marshallerMap.get(inputParameters.getValue().getPeer(peeredMode)); + final ApexEventMarshaller peeredMarshaler = marshallerMap + .get(inputParameters.getValue().getPeer(peeredMode)); // Connect the unmarshaler and marshaler unmarshaller.connectMarshaler(peeredMode, peeredMarshaler); @@ -289,7 +290,8 @@ public class ApexActivator { } /** - * Start up event processing, this happens once all marshaller to unmarshaller wiring has been done. + * Start up event processing, this happens once all marshaller to unmarshaller + * wiring has been done. * * @param inputParametersMap the apex parameters */ diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java index 516ea4f2a..f278fd59d 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2020 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,16 +22,15 @@ package org.onap.policy.apex.service.engine.main; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; -import org.onap.policy.apex.service.engine.engdep.EngDepMessagingService; import org.onap.policy.apex.service.engine.event.ApexEvent; import org.onap.policy.apex.service.engine.runtime.EngineService; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; /** - * The Class ApexEngineServiceHandler holds the reference to the Apex engine service and the EngDep - * service for that engine. It also acts as an event receiver for asynchronous and synchronous - * events. + * The Class ApexEngineServiceHandler holds the reference to the Apex engine + * service and the EngDep service for that engine. It also acts as an event + * receiver for asynchronous and synchronous events. */ public class ApexEngineServiceHandler { // The logger for this class @@ -39,23 +39,19 @@ public class ApexEngineServiceHandler { // The Apex engine service, the Apex engine itself private final EngineService apexEngineService; - // The interface between the Apex engine and Apex policy deployment for the Apex engine - private final EngDepMessagingService engDepService; - /** * Instantiates a new engine holder with its engine service and EngDep service. * * @param apexEngineService the apex engine service - * @param engDepService the EngDep service + * @param engDepService the EngDep service */ - ApexEngineServiceHandler(final EngineService apexEngineService, final EngDepMessagingService engDepService) { + ApexEngineServiceHandler(final EngineService apexEngineService) { this.apexEngineService = apexEngineService; - this.engDepService = engDepService; } /** * This method forwards an event to the Apex service. - * + * * @param apexEvent The event to forward to Apex */ public void forwardEvent(final ApexEvent apexEvent) { @@ -75,11 +71,6 @@ public class ApexEngineServiceHandler { * @throws ApexException on termination errors */ public void terminate() throws ApexException { - // Shut down engine management - if (engDepService != null) { - engDepService.stop(); - } - // Shut down each engine instance if (apexEngineService != null) { apexEngineService.stop(); diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyAction.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyAction.java deleted file mode 100644 index 6b59b0754..000000000 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyAction.java +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import org.apache.commons.lang3.NotImplementedException; -import org.onap.policy.apex.core.protocols.Action; - -/** - * Bad action class. - */ -public class DummyAction implements Action { - private static final long serialVersionUID = -6562765120898697138L; - - private String actionString; - - public DummyAction(final String actionString) { - this.actionString = actionString; - } - - @Override - public String getActionString() { - if (actionString == "throw exception") { - throw new NotImplementedException("dummy IO excepton"); - } - return actionString; - } -} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyEngineService.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyEngineService.java deleted file mode 100644 index 52d4a7d5d..000000000 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyEngineService.java +++ /dev/null @@ -1,276 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 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========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import org.apache.commons.lang3.NotImplementedException; -import org.onap.policy.apex.model.basicmodel.concepts.ApexException; -import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; -import org.onap.policy.apex.model.enginemodel.concepts.AxEngineModel; -import org.onap.policy.apex.model.enginemodel.concepts.AxEngineState; -import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; -import org.onap.policy.apex.service.engine.runtime.ApexEventListener; -import org.onap.policy.apex.service.engine.runtime.EngineService; -import org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface; - -/** - * A dummy engine service class. - */ -public class DummyEngineService implements EngineService { - - private AxArtifactKey startEngineKey; - private AxArtifactKey stopEngineKey; - private long periodicPeriod; - private AxArtifactKey statusKey; - private AxArtifactKey runtimeInfoKey; - private int modelKeyGetCalled; - private AxArtifactKey updateModelKey; - - /** - * {@inheritDoc}. - */ - @Override - public void registerActionListener(String listenerName, ApexEventListener listener) { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void deregisterActionListener(String listenerName) { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public EngineServiceEventInterface getEngineServiceEventInterface() { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public AxArtifactKey getKey() { - return new AxArtifactKey("DummyEngineService:0.0.1"); - } - - /** - * {@inheritDoc}. - */ - @Override - public Collection<AxArtifactKey> getEngineKeys() { - List<AxArtifactKey> keys = new ArrayList<>(); - keys.add(new AxArtifactKey("DummyEngineService:0.0.1")); - return keys; - } - - /** - * {@inheritDoc}. - */ - @Override - public AxArtifactKey getApexModelKey() { - modelKeyGetCalled++; - - return new AxArtifactKey("DummyApexModelKey:0.0.1"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void updateModel(AxArtifactKey engineServiceKey, String apexModelString, boolean forceFlag) - throws ApexException { - updateModelKey = engineServiceKey; - } - - /** - * {@inheritDoc}. - */ - @Override - public void updateModel(AxArtifactKey engineServiceKey, AxPolicyModel apexModel, boolean forceFlag) - throws ApexException { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public AxEngineState getState() { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public List<AxEngineModel> getEngineStats() { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void startAll() throws ApexException { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void start(AxArtifactKey engineKey) throws ApexException { - startEngineKey = engineKey; - } - - /** - * {@inheritDoc}. - */ - @Override - public void stop() throws ApexException { - } - - /** - * {@inheritDoc}. - */ - @Override - public void stop(AxArtifactKey engineKey) throws ApexException { - stopEngineKey = engineKey; - } - - /** - * {@inheritDoc}. - */ - @Override - public void clear() throws ApexException { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void clear(AxArtifactKey engineKey) throws ApexException { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean isStarted() { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean isStarted(AxArtifactKey engineKey) { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean isStopped() { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean isStopped(AxArtifactKey engineKey) { - throw new NotImplementedException("Not implemented on dummy class"); - } - - /** - * {@inheritDoc}. - */ - @Override - public void startPeriodicEvents(long period) throws ApexException { - periodicPeriod = period; - } - - /** - * {@inheritDoc}. - */ - @Override - public void stopPeriodicEvents() throws ApexException { - periodicPeriod = 0; - } - - /** - * {@inheritDoc}. - */ - @Override - public String getStatus(AxArtifactKey engineKey) throws ApexException { - statusKey = engineKey; - return "The Status"; - } - - /** - * {@inheritDoc}. - */ - @Override - public String getRuntimeInfo(AxArtifactKey engineKey) throws ApexException { - runtimeInfoKey = engineKey; - return "The Runtime Info"; - } - - public AxArtifactKey getStartEngineKey() { - return startEngineKey; - } - - public AxArtifactKey getStopEngineKey() { - return stopEngineKey; - } - - public long getPeriodicPeriod() { - return periodicPeriod; - } - - public AxArtifactKey getStatusKey() { - return statusKey; - } - - public AxArtifactKey getRuntimeInfoKey() { - return runtimeInfoKey; - } - - public int getModelKeyGetCalled() { - return modelKeyGetCalled; - } - - public AxArtifactKey getUpdateModelKey() { - return updateModelKey; - } -} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyMessage.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyMessage.java deleted file mode 100644 index 5d1b1ce8e..000000000 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/DummyMessage.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import org.onap.policy.apex.core.protocols.Action; -import org.onap.policy.apex.core.protocols.Message; -import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; - -/** - * Bad protocol message. - */ -public class DummyMessage extends Message { - private static final long serialVersionUID = 3827403727783909797L; - - /** - * Constructor. - * @param action the message action - * @param targetKey the message target key - */ - public DummyMessage(Action action, AxArtifactKey targetKey) { - super(action, targetKey); - } -} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListenerTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListenerTest.java deleted file mode 100644 index 079be6bd2..000000000 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListenerTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 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========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.awaitility.Awaitility.await; -import static org.junit.Assert.assertEquals; - -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.BlockingQueue; -import org.java_websocket.WebSocket; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.internal.util.reflection.Whitebox; -import org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock.MessageBlock; -import org.onap.policy.apex.core.protocols.Message; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineInfo; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineServiceInfo; -import org.onap.policy.apex.core.protocols.engdep.messages.GetEngineStatus; -import org.onap.policy.apex.core.protocols.engdep.messages.Response; -import org.onap.policy.apex.core.protocols.engdep.messages.StartEngine; -import org.onap.policy.apex.core.protocols.engdep.messages.StartPeriodicEvents; -import org.onap.policy.apex.core.protocols.engdep.messages.StopEngine; -import org.onap.policy.apex.core.protocols.engdep.messages.StopPeriodicEvents; -import org.onap.policy.apex.core.protocols.engdep.messages.UpdateModel; -import org.onap.policy.apex.model.basicmodel.concepts.ApexException; -import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; - -/** - * Test the EngDep messaging Service. - */ -public class EngDepMessageListenerTest { - @Mock - private WebSocket webSocketMock; - - /** - * Set up mocking of the engine service facade. - * - * @throws ApexException on engine service facade setup errors - */ - @Before - public void initializeMocking() throws ApexException { - MockitoAnnotations.initMocks(this); - - Mockito.doReturn(new InetSocketAddress("HostAddress", 123)).when(webSocketMock).getRemoteSocketAddress(); - Mockito.doReturn(true).when(webSocketMock).isOpen(); - } - - @Test - public void testMessageListener() throws ApexException { - DummyEngineService dummyEngineService = new DummyEngineService(); - EngDepMessageListener listener = new EngDepMessageListener(dummyEngineService); - listener.startProcessorThread(); - - assertThatThrownBy(() -> listener.onMessage("bad string message")) - .hasMessage("String messages are not supported on the EngDep protocol"); - List<Message> messageList = new ArrayList<>(); - messageList.add(new StartEngine(new AxArtifactKey("Start:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - BlockingQueue<?> messageQueue = (BlockingQueue<?>) Whitebox.getInternalState(listener, "messageQueue"); - await().until(messageQueue::isEmpty); - assertEquals("Start:0.0.1", dummyEngineService.getStartEngineKey().getId()); - - messageList.clear(); - messageList.add(new StopEngine(new AxArtifactKey("Stop:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals("Stop:0.0.1", dummyEngineService.getStopEngineKey().getId()); - - messageList.clear(); - messageList.add(new StartPeriodicEvents(new AxArtifactKey("StartPeriodic:0.0.1"), "12345")); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals(12345, dummyEngineService.getPeriodicPeriod()); - - messageList.clear(); - messageList.add(new StopPeriodicEvents(new AxArtifactKey("StopPeriodic:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals(0, dummyEngineService.getPeriodicPeriod()); - - messageList.clear(); - messageList.add(new GetEngineInfo(new AxArtifactKey("EngineInfo:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals("EngineInfo:0.0.1", dummyEngineService.getRuntimeInfoKey().getId()); - - messageList.clear(); - messageList.add(new GetEngineStatus(new AxArtifactKey("EngineStatus:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals("EngineStatus:0.0.1", dummyEngineService.getStatusKey().getId()); - - messageList.clear(); - messageList.add(new GetEngineServiceInfo(new AxArtifactKey("EngineServiceInfo:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals(1, dummyEngineService.getModelKeyGetCalled()); - - messageList.clear(); - messageList.add(new UpdateModel(new AxArtifactKey("UpdateModel:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals("UpdateModel:0.0.1", dummyEngineService.getUpdateModelKey().getId()); - - messageList.clear(); - messageList.add(new Response(new AxArtifactKey("UpdateModel:0.0.1"), false, - new GetEngineInfo(new AxArtifactKey("EngineInfo:0.0.1")))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - assertEquals("UpdateModel:0.0.1", dummyEngineService.getUpdateModelKey().getId()); - messageList.clear(); - Message badMessage0 = new DummyMessage(null, null); - messageList.add(badMessage0); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - - messageList.clear(); - Message badMessage1 = new DummyMessage(new DummyAction(null), null); - messageList.add(badMessage1); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - - messageList.clear(); - Message badMessage2 = new DummyMessage(new DummyAction("throw exception"), null); - messageList.add(badMessage2); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - - messageList.clear(); - Mockito.doReturn(false).when(webSocketMock).isOpen(); - messageList.add(new StartEngine(new AxArtifactKey("Start:0.0.1"))); - listener.onMessage(new MessageBlock<>(messageList, webSocketMock)); - await().until(messageQueue::isEmpty); - - listener.stopProcessorThreads(); - } -} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingServiceTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingServiceTest.java deleted file mode 100644 index 10eece1cd..000000000 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/engdep/EngDepMessagingServiceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 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========================================================= - */ - -package org.onap.policy.apex.service.engine.engdep; - -import static org.awaitility.Awaitility.await; -import static org.junit.Assert.assertFalse; - -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.onap.policy.apex.core.infrastructure.messaging.MessagingService; -import org.onap.policy.apex.core.protocols.Message; -import org.onap.policy.apex.model.basicmodel.concepts.ApexException; - -/** - * Test the EngDep messaging Service. - */ -public class EngDepMessagingServiceTest { - @Mock - private MessagingService<Message> messageServiceMock; - private EngDepMessagingService edMessagingService; - - /** - * Set up mocking of the engine service facade. - * - * @throws ApexException on engine service facade setup errors - */ - @Before - public void initializeMocking() throws ApexException { - MockitoAnnotations.initMocks(this); - - edMessagingService = Mockito.spy(new EngDepMessagingService(new DummyEngineService(), 12345)); - Mockito.doReturn(messageServiceMock).when(edMessagingService).getMessageService(12345); - } - - @Test - public void testStartStop() throws ApexException { - edMessagingService.start(); - await().atMost(1, TimeUnit.SECONDS).until(() -> edMessagingService.isStarted()); - assertFalse(edMessagingService.isStopped()); - edMessagingService.stop(); - await().atMost(1, TimeUnit.SECONDS).until(() -> edMessagingService.isStopped()); - assertFalse(edMessagingService.isStarted()); - } -} |