diff options
author | Michael DÜrre <michael.duerre@highstreet-technologies.com> | 2021-04-08 06:34:22 +0200 |
---|---|---|
committer | Michael DÜrre <michael.duerre@highstreet-technologies.com> | 2021-04-08 06:34:46 +0200 |
commit | f3969004c6ccac18e742c5fc48c844e315991023 (patch) | |
tree | f5486a62e842bb16ca7d3af47a8663df08feef55 /sdnr/wt/websocketmanager2/provider | |
parent | a252be83694ae33260d99d5371ed48c1558aa2e8 (diff) |
update websocketmanager
update complete notification flow
Issue-ID: CCSDK-3252
Signed-off-by: Michael DÜrre <michael.duerre@highstreet-technologies.com>
Change-Id: I87ba00f615707b942471fcace57bcda50ce37e61
Diffstat (limited to 'sdnr/wt/websocketmanager2/provider')
19 files changed, 0 insertions, 1685 deletions
diff --git a/sdnr/wt/websocketmanager2/provider/pom.xml b/sdnr/wt/websocketmanager2/provider/pom.xml deleted file mode 100644 index 16f643cd8..000000000 --- a/sdnr/wt/websocketmanager2/provider/pom.xml +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ ============LICENSE_START======================================================= - ~ ONAP : ccsdk features - ~ ================================================================================ - ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - ~ All rights reserved. - ~ ================================================================================ - ~ Update Copyright (C) 2020 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======================================================= - ~ - --> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.onap.ccsdk.parent</groupId> - <artifactId>binding-parent</artifactId> - <version>2.2.0-SNAPSHOT</version> - <relativePath/> - </parent> - - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> - <artifactId>sdnr-wt-websocketmanager2-provider</artifactId> - <version>1.2.0-SNAPSHOT</version> - <packaging>bundle</packaging> - - <name>ccsdk-features :: ${project.artifactId}</name> - <licenses> - <license> - <name>Apache License, Version 2.0</name> - <url>http://www.apache.org/licenses/LICENSE-2.0</url> - </license> - </licenses> - - <properties> - <maven.javadoc.skip>true</maven.javadoc.skip> - </properties> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>sdnr-wt-websocketmanager2-model</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - </dependency> - <dependency> - <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-api</artifactId> - </dependency> - <dependency> - <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-servlet</artifactId> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-transport</artifactId> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-all</artifactId> - <!-- <version>${netty.version}</version> --> - </dependency> - <dependency> - <groupId>org.json</groupId> - <artifactId>json</artifactId> - </dependency> - <dependency> - <groupId>com.typesafe.akka</groupId> - <artifactId>akka-actor_2.13</artifactId> - </dependency> - <dependency> - <groupId>com.typesafe.akka</groupId> - <artifactId>akka-cluster_2.13</artifactId> - </dependency> - <dependency> - <groupId>org.java-websocket</groupId> - <artifactId>Java-WebSocket</artifactId> - </dependency> - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-core</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.opendaylight.mdsal</groupId> - <artifactId>mdsal-binding-api</artifactId> - </dependency> - <dependency> - <groupId>org.osgi</groupId> - <artifactId>org.osgi.core</artifactId> - </dependency> - <dependency> - <groupId>org.osgi</groupId> - <artifactId>org.osgi.compendium</artifactId> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-server</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-servlet</artifactId> - <scope>test</scope> - </dependency> - </dependencies> -</project> diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java deleted file mode 100644 index 7deefa940..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2; - -import org.opendaylight.mdsal.binding.api.RpcProviderService; - -public abstract class Blueprint implements AutoCloseable { - - private RpcProviderService rpcProviderRegistry = null; - - public abstract void init(); - - public void setRpcProviderRegistry(RpcProviderService rpcProviderRegistry) { - this.rpcProviderRegistry = rpcProviderRegistry; - } - - public RpcProviderService getRpcProviderRegistry() { - return this.rpcProviderRegistry; - } - - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java deleted file mode 100644 index 00e776a74..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2; - -import com.google.common.util.concurrent.ListenableFuture; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.websocket.servlet.WebSocketServlet; -import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; -import org.json.JSONObject; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerSocket.EventInputCallback; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig.ClusterConfig; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig.ClusterNodeInfo; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.websocket.SyncWebSocketClient; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebSocketManager extends WebSocketServlet implements WebsocketmanagerService { - - private static final long serialVersionUID = -681665669062744439L; - - private static final Logger LOG = LoggerFactory.getLogger(WebSocketManager.class.getName()); - private static final String APPLICATION_NAME = WebSocketManager.class.getName(); - private static final int PORT = 8181; - private final EventInputCallback rpcEventInputCallback; - private final AkkaConfig akkaConfig; - /** - * timeout for websocket with no messages in ms - */ - //private static final long IDLE_TIMEOUT = 5 * 60 * 1000L; - private static final long IDLE_TIMEOUT = 0L; - - private final ArrayList<URI> clusterNodeClients = new ArrayList<>(); - - public WebSocketManager() { - this(null, null); - } - - public WebSocketManager(AkkaConfig akkaconfig, EventInputCallback cb) { - super(); - this.akkaConfig = akkaconfig; - if (cb != null) { - this.rpcEventInputCallback = cb; - } else { - this.rpcEventInputCallback = message -> { - LOG.debug("onMessagePushed: " + message); - SyncWebSocketClient client; - for (URI clientURI : WebSocketManager.this.clusterNodeClients) { - client = new SyncWebSocketClient(clientURI); - LOG.debug("try to push message to " + client.getURI()); - client.openAndSendAndCloseSync(message); - } - }; - } - LOG.info("Create servlet for {}", APPLICATION_NAME); - } - - @Override - public void configure(WebSocketServletFactory factory) { - LOG.info("Configure provider for {}", APPLICATION_NAME); - // set a second timeout - factory.getPolicy().setIdleTimeout(IDLE_TIMEOUT); - factory.getPolicy().setMaxBinaryMessageSize(1); - factory.getPolicy().setMaxTextMessageSize(64 * 1024); - - // register Socket as the WebSocket to create on Upgrade - factory.register(WebSocketManagerSocket.class); - - AkkaConfig cfg = this.akkaConfig; - if (cfg == null) { - try { - cfg = AkkaConfig.load(); - } catch (Exception e) { - LOG.warn("problem loading akka config: " + e.getMessage()); - } - } - if (cfg != null && cfg.isCluster()) { - this.initWSClients(cfg.getClusterConfig()); - } - } - - // ODL in Dublin version generates ListenableFuture that is child of Future. - @Override - public ListenableFuture<RpcResult<WebsocketEventOutput>> websocketEvent(WebsocketEventInput input) { - LOG.debug("Send message '{}'", input); - RpcResultBuilder<WebsocketEventOutput> result; - - final String eventAsXmlString = input.getXmlEvent(); - if (eventAsXmlString != null) { - WebSocketManagerSocket.broadCast(input.getNodeName(), input.getEventType(), eventAsXmlString); - try { - JSONObject o = new JSONObject(); - o.put(WebSocketManagerSocket.KEY_NODENAME, input.getNodeName()); - o.put(WebSocketManagerSocket.KEY_EVENTTYPE, input.getEventType()); - o.put(WebSocketManagerSocket.KEY_XMLEVENT, input.getXmlEvent()); - this.rpcEventInputCallback.onMessagePushed(o.toString()); - - WebsocketEventOutputBuilder outputBuilder = new WebsocketEventOutputBuilder(); - outputBuilder.setResponse("OK"); - result = RpcResultBuilder.success(outputBuilder); - } catch (Exception err) { - LOG.warn("problem pushing messsage to other nodes: " + err.getMessage()); - result = RpcResultBuilder.failed(); - result.withError(ErrorType.APPLICATION, "Exception", err); - } - } else { - String msg = "Emtpy event received"; - LOG.warn(msg); - result = RpcResultBuilder.failed(); - result.withError(ErrorType.APPLICATION, msg); - } - return result.buildFuture(); - } - - /********************************************************** - * Private functions - */ - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (req.getHeader("Upgrade") != null) { - /* Accept upgrade request */ - resp.setStatus(101); - resp.setHeader("Upgrade", "XYZP"); - resp.setHeader("Connection", "Upgrade"); - resp.setHeader("OtherHeaderB", "Value"); - } - } - - private void initWSClients(ClusterConfig clusterConfig) { - for (ClusterNodeInfo nodeConfig : clusterConfig.getSeedNodes()) { - if (clusterConfig.isMe(nodeConfig)) { - continue; - } - String url = String.format("ws://%s:%d/websocket", nodeConfig.getRemoteAddress(), PORT); - try { - LOG.debug("registering ws client for " + url); - clusterNodeClients.add(new URI(url)); - } catch (URISyntaxException e) { - LOG.warn("problem instantiating wsclient for url: " + url); - } - } - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java deleted file mode 100644 index 7e82b5e0f..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2; - -import com.google.common.util.concurrent.ListenableFuture; -import javax.servlet.ServletException; -import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService; -import org.opendaylight.yangtools.concepts.ObjectRegistration; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebSocketManagerProvider extends Blueprint implements WebsocketmanagerService { - - private static final Logger LOG = LoggerFactory.getLogger(WebSocketManagerProvider.class); - private static final String APPLICATION_NAME = WebSocketManagerProvider.class.getName(); - private static final String ALIAS = "/websocket"; - - private WebSocketManager wsServlet = null; - private ObjectRegistration<WebSocketManager> websocketService = null; - - public WebSocketManagerProvider() { - LOG.info("Creating provider for {}", APPLICATION_NAME); - } - - @Override - public void init() { - LOG.info("Init provider for {}", APPLICATION_NAME); - RpcProviderService rpcProviderRegistry = this.getRpcProviderRegistry(); - if (rpcProviderRegistry != null) { - if (wsServlet != null) { - this.websocketService = - rpcProviderRegistry.registerRpcImplementation(WebsocketmanagerService.class, wsServlet); - LOG.info("websocketservice initialized"); - } else { - LOG.debug("wsServlet not yet provided"); - } - } else { - LOG.error("rpcProviderRegistry not provided"); - } - } - - @Override - public void close() throws Exception { - LOG.info("Close provider for {}", APPLICATION_NAME); - if (websocketService != null) { - websocketService.close(); - } - } - - public void onUnbindService(HttpService httpService) { - httpService.unregister(ALIAS); - wsServlet = null; - } - - public void onBindService(HttpService httpService) throws ServletException, NamespaceException { - if (httpService == null) { - LOG.warn("Unable to inject HttpService into DluxLoader. dlux modules won't work without httpService"); - } else { - - if (wsServlet == null) { - wsServlet = new WebSocketManager(); - httpService.registerServlet(ALIAS, wsServlet, null, null); - LOG.info("websocket servlet registered."); - if (this.websocketService == null) { - this.init(); - } else { - LOG.info("websocketservice already initialized"); - } - } else { - LOG.warn("Servelt "); - } - } - - } - - public WebSocketManager getWsServlet() { - return wsServlet; - } - - public void setWsServlet(WebSocketManager wsServlet) { - this.wsServlet = wsServlet; - } - - @Override - public ListenableFuture<RpcResult<WebsocketEventOutput>> websocketEvent(WebsocketEventInput input) { - if (wsServlet != null) { - return wsServlet.websocketEvent(input); - } else { - RpcResultBuilder<WebsocketEventOutput> result = RpcResultBuilder.failed(); - return result.withError(ErrorType.APPLICATION, "Not intialized").buildFuture(); - } - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java deleted file mode 100644 index c2c67be2e..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; - -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketAdapter; -import org.json.JSONObject; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.UserScopes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebSocketManagerSocket extends WebSocketAdapter { - - private static final Logger LOG = LoggerFactory.getLogger(WebSocketManagerSocket.class.getName()); - public static final String MSG_KEY_DATA = "data"; - public static final String MSG_KEY_SCOPES = "scopes"; - public static final String MSG_KEY_PARAM = "param"; - public static final String MSG_KEY_VALUE = "value"; - public static final String MSG_KEY_SCOPE = "scope"; - - public static final String KEY_NODENAME = "nodename"; - public static final String KEY_EVENTTYPE = "eventtype"; - public static final String KEY_XMLEVENT = "xmlevent"; - - private static final Random RND = new Random(); - - - /** - * list of all sessionids - */ - private static final List<String> sessionIds = new ArrayList<>(); - /** - * map of sessionid <=> UserScopes - */ - private static final HashMap<String, UserScopes> userScopesList = new HashMap<>(); - /** - * map of class.hashCode <=> class - */ - private static final HashMap<String, WebSocketManagerSocket> clientList = new HashMap<>(); - private final String myUniqueSessionId; - - private Session session = null; - - public interface EventInputCallback { - void onMessagePushed(final String message) throws Exception; - } - - public WebSocketManagerSocket() { - this.myUniqueSessionId = _genSessionId(); - } - - @Override - protected void finalize() throws Throwable { - sessionIds.remove(this.myUniqueSessionId); - } - - private static String _genSessionId() { - String sid = String.valueOf(RND.nextLong()); - while (sessionIds.contains(sid)) { - sid = String.valueOf(RND.nextLong()); - } - sessionIds.add(sid); - return sid; - } - - @Override - public void onWebSocketText(String message) { - LOG.info("{} has sent {}", this.getRemoteAdr(), message); - if (!this.manageClientRequest(message)) { - this.manageClientRequest2(message); - } - } - - @Override - public void onWebSocketBinary(byte[] payload, int offset, int len) { - LOG.debug("Binary not supported"); - } - - @Override - public void onWebSocketConnect(Session sess) { - this.session = sess; - clientList.put(String.valueOf(this.hashCode()), this); - LOG.debug("client connected from " + this.getRemoteAdr()); - } - - @Override - public void onWebSocketClose(int statusCode, String reason) { - clientList.remove(String.valueOf(this.hashCode())); - LOG.debug("client disconnected from " + this.getRemoteAdr()); - } - - @Override - public void onWebSocketError(Throwable cause) { - LOG.debug("error caused on " + this.getRemoteAdr() + " :" + cause.getMessage()); - // super.onWebSocketError(cause); - } - - private String getRemoteAdr() { - String adr = "unknown"; - try { - adr = this.session.getRemoteAddress().toString(); - } catch (Exception e) { - LOG.debug("error resolving adr: {}", e.getMessage()); - } - return adr; - } - - /** - * - * @param request is a json object {"data":"scopes","scopes":["scope1","scope2",...]} - * @return if handled - */ - private boolean manageClientRequest(String request) { - boolean ret = false; - try { - JSONObject jsonMessage = new JSONObject(request); - if (jsonMessage.has(MSG_KEY_DATA)) { - String data = jsonMessage.getString(MSG_KEY_DATA); - if (data.equals(MSG_KEY_SCOPES)) { - ret = true; - String sessionId = this.getSessionId(); - UserScopes clientDto = new UserScopes(); - clientDto.setScopes(jsonMessage.getJSONArray(MSG_KEY_SCOPES)); - userScopesList.put(sessionId, clientDto); - this.send( - "You are connected to the Opendaylight Websocket server and scopes are : " + request + ""); - } - } - } catch (Exception e) { - LOG.warn("problem set scope: " + e.getMessage()); - this.send("Your request to the Opendaylight Websocket server is >> " + request - + " << which failed because of following exception >> " + e.toString()); - } - return ret; - } - - /* - * broadcast message to all your clients - */ - private void manageClientRequest2(String request) { - try { - JSONObject o = new JSONObject(request); - if (o.has(KEY_NODENAME) && o.has(KEY_EVENTTYPE)) { - this.sendToAll(o.getString(KEY_NODENAME), o.getString(KEY_EVENTTYPE), o.getString(KEY_XMLEVENT)); - } - } catch (Exception e) { - LOG.warn("handle ws request failed:" + e.getMessage()); - } - } - - public void send(String msg) { - try { - LOG.trace("sending {}", msg); - this.session.getRemote().sendString(msg); - } catch (Exception e) { - LOG.warn("problem sending message: " + e.getMessage()); - } - } - - public String getSessionId() { - return this.myUniqueSessionId; - } - - private void sendToAll(String nodeName, String eventType, String xmlEvent) { - if (clientList.size() > 0) { - for (Map.Entry<String, WebSocketManagerSocket> entry : clientList.entrySet()) { - WebSocketManagerSocket socket = entry.getValue(); - if (socket != null) { - try { - UserScopes clientScopes = userScopesList.get(socket.getSessionId()); - if (clientScopes != null) { - if (clientScopes.hasScope(eventType)) { - socket.send(xmlEvent); - } else { - LOG.debug("client has not scope {}", eventType); - } - } else { - LOG.debug("no scopes for notifications registered"); - } - } catch (Exception ioe) { - LOG.warn(ioe.getMessage()); - } - } else { - LOG.debug("cannot broadcast. socket is null"); - } - } - } - } - - public static void broadCast(String nodeName, String eventType, String xmlEvent) { - if (clientList.size() > 0) { - Set<Entry<String, WebSocketManagerSocket>> e = clientList.entrySet(); - WebSocketManagerSocket s = e.iterator().next().getValue(); - if (s != null) { - s.sendToAll(nodeName, eventType, xmlEvent); - } - } - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java deleted file mode 100644 index b61462b49..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.utils; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.typesafe.config.Config; -import com.typesafe.config.ConfigFactory; - -public class AkkaConfig { - - private static final Logger LOG = LoggerFactory.getLogger(WebSocketManager.class.getName()); - - public static class ClusterNodeInfo { - @Override - public String toString() { - return "ClusterNodeInfo [protocol=" + protocol + ", clusterName=" + clusterName + ", remoteAdr=" + remoteAdr - + ", port=" + port + "]"; - } - - private final String protocol; - private final String clusterName; - private final String remoteAdr; - private final int port; - - public String getRemoteAddress() { - return this.remoteAdr; - } - - public ClusterNodeInfo(String s) throws Exception { - final String regex = "([a-z.]*):\\/\\/([a-zA-Z0-9-]*)@([a-zA-Z0-9.-]*):([0-9]*)"; - final Pattern pattern = Pattern.compile(regex); - final Matcher matcher = pattern.matcher(s); - if (!matcher.find()) { - throw new Exception("invalid seedNode format"); - } - this.protocol = matcher.group(1); - this.clusterName = matcher.group(2); - this.remoteAdr = matcher.group(3); - this.port = Integer.parseInt(matcher.group(4)); - } - } - public static class ClusterRoleInfo { - @Override - public String toString() { - return "ClusterRoleInfo [Role=" + Role + ", Index=" + Index + "]"; - } - - private final String Role; - private final int Index; - - public ClusterRoleInfo(String s) throws Exception { - final String regex = "([a-z]*)-([0-9]*)"; - final Pattern pattern = Pattern.compile(regex); - final Matcher matcher = pattern.matcher(s); - if (!matcher.find()) { - throw new Exception("invalid role format"); - } - this.Role = matcher.group(1); - this.Index = Integer.parseInt(matcher.group(2)); - } - - } - public static class ClusterConfig { - @Override - public String toString() { - return "ClusterConfig [seedNodes=" + seedNodes + ", roles=" + roles + "]"; - } - - private final List<ClusterNodeInfo> seedNodes; - private final List<ClusterRoleInfo> roles; - private final ClusterNodeInfo ismeInfo; - - public ClusterConfig(Config o) throws Exception { - { - this.seedNodes = new ArrayList<>(); - List<String> a = o.getStringList("seed-nodes"); - for (int i = 0; i < a.size(); i++) { - ClusterNodeInfo info = new ClusterNodeInfo(a.get(i)); - this.seedNodes.add(info); - } - this.roles = new ArrayList<>(); - a = o.getStringList("roles"); - for (int i = 0; i < a.size(); i++) { - ClusterRoleInfo s = new ClusterRoleInfo(a.get(i)); - this.roles.add(s); - } - int idx = this.roles.get(0).Index - 1; - if (idx >= 0 && idx < this.seedNodes.size()) { - this.ismeInfo = this.seedNodes.get(idx); - } else { - this.ismeInfo = null; - } - } - - } - - public boolean isCluster() { - return this.seedNodes != null ? this.seedNodes.size() > 1 : false; - } - - public boolean isMe(ClusterNodeInfo i) { - return this.ismeInfo != null ? this.ismeInfo.equals(i) : false; - } - - public List<ClusterNodeInfo> getSeedNodes() { - return this.seedNodes; - } - } - - private static final String DEFAULT_FILENAME = "configuration/initial/akka.conf"; - private final File file; - private final String resourceFilename; - private final String fileContent; - private ClusterConfig cluserConfig; - - public ClusterConfig getClusterConfig() { - return this.cluserConfig; - } - - private AkkaConfig(File file, boolean isResource) { - this.file = isResource ? null : file; - this.fileContent = null; - this.resourceFilename = isResource ? file.getName() : null; - } - - private AkkaConfig(String fileContent) { - this.file = null; - this.fileContent = fileContent; - this.resourceFilename = null; - } - - - @Override - public String toString() { - return "AkkaConfig [filename=" + file + ", cluserConfig=" + cluserConfig + "]"; - } - - private void loadFromFile() throws Exception { - Config cfg = null; - if (this.file != null) { - cfg = ConfigFactory.parseFile(this.file); - } else if (this.fileContent != null) { - cfg = ConfigFactory.parseString(this.fileContent); - } else if (this.resourceFilename != null) { - cfg = ConfigFactory.parseResources(this.getClass(), this.resourceFilename); - } - - if (cfg != null) { - this.cluserConfig = - new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster")); - } else { - LOG.warn("unable to parse config file"); - this.cluserConfig = null; - } - } - - public boolean isCluster() { - return this.cluserConfig != null ? this.cluserConfig.isCluster() : false; - } - - public static AkkaConfig load() throws Exception { - return load(DEFAULT_FILENAME); - } - - public static AkkaConfig load(String filename) throws Exception { - return load(filename, false); - } - - public static AkkaConfig load(String filename, boolean isResource) throws Exception { - AkkaConfig cfg = new AkkaConfig(new File(filename), isResource); - cfg.loadFromFile(); - - return cfg; - } - - public static AkkaConfig loadContent(String content) throws Exception { - AkkaConfig cfg = new AkkaConfig(content); - cfg.loadFromFile(); - - return cfg; - } - - - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java deleted file mode 100644 index affa27e45..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.utils; - -import org.json.JSONArray; - -public class UserScopes { - - private JSONArray scopes; - - /** - * - * @param jsonArray array of Strings - */ - public void setScopes(JSONArray jsonArray) { - this.scopes = jsonArray; - } - - public boolean hasScope(String scope) { - if (this.scopes == null) - return false; - for (int i = 0, l = this.scopes.length(); i < l; i++) { - if (this.scopes.get(i).toString().equals(scope)) { - return true; - } - } - - return false; - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java deleted file mode 100644 index 6512e7171..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.websocket; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; - -import org.java_websocket.client.WebSocketClient; -import org.java_websocket.handshake.ServerHandshake; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SyncWebSocketClient extends WebSocketClient { - - public interface WebsocketEventHandler { - void onMessageReceived(String message); - - void onOpen(ServerHandshake arg0); - - void onClose(int arg0, String arg1, boolean arg2); - - void onError(Exception e); - } - - private static final Logger LOG = LoggerFactory.getLogger(SyncWebSocketClient.class.getName()); - private String messageToSend; - private final List<WebsocketEventHandler> handlers; - - public SyncWebSocketClient(URI serverUri) { - super(serverUri); - this.handlers = new ArrayList<WebsocketEventHandler>(); - } - - public SyncWebSocketClient(String uri) throws URISyntaxException { - this(new URI(uri)); - } - - public void addEventHandler(WebsocketEventHandler h) { - this.handlers.add(h); - } - - public void removeEventHandler(WebsocketEventHandler h) { - this.handlers.remove(h); - } - - @Override - public void onClose(int arg0, String arg1, boolean arg2) { - LOG.debug("socket closed: {} {} {}", arg0, arg1, arg2); - for (WebsocketEventHandler h : this.handlers) { - h.onClose(arg0, arg1, arg2); - } - } - - @Override - public void onError(Exception arg0) { - LOG.warn("error on socket: {}", arg0.getMessage()); - for (WebsocketEventHandler h : this.handlers) { - h.onError(arg0); - } - } - - @Override - public void onMessage(String arg0) { - LOG.debug("received message: {}", arg0); - for (WebsocketEventHandler h : this.handlers) { - h.onMessageReceived(arg0); - } - } - - @Override - public void onOpen(ServerHandshake arg0) { - LOG.debug("socket opened"); - if (this.messageToSend != null) { - LOG.debug("try to send: " + this.messageToSend); - this.send(this.messageToSend); - this.messageToSend = null; - } - for (WebsocketEventHandler h : this.handlers) { - h.onOpen(arg0); - } - } - - public void openAndSendAsync(String message) { - this.messageToSend = message; - this.connect(); - } - - public void openAndSendAndCloseSync(String message) { - try { - this.connectBlocking(); - } catch (InterruptedException e) { - LOG.warn("problem connecting:" + e.getMessage()); - Thread.currentThread().interrupt(); - } - this.send(message); - try { - this.closeBlocking(); - } catch (InterruptedException e) { - LOG.warn("problem disconnecting:" + e.getMessage()); - Thread.currentThread().interrupt(); - } - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml deleted file mode 100644 index d92738ada..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ ============LICENSE_START======================================================= - ~ ONAP : ccsdk features - ~ ================================================================================ - ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - ~ All rights reserved. - ~ ================================================================================ - ~ Update Copyright (C) 2020 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======================================================= - ~ - --> - -<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" - xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" - odl:use-default-for-reference-types="true"> - - <reference id="rpcProviderRegistry" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/> - - <bean id="provider" class="org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerProvider" init-method="init" destroy-method="close"> - <property name="rpcProviderRegistry" ref="rpcProviderRegistry"/> - </bean> - - <reference id="onBindService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"> - <reference-listener ref="provider" bind-method="onBindService" unbind-method="onUnbindService"/> - </reference> - - <service id="registerWebsocketmanagerService" - interface="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService" - ref="provider"/> - -</blueprint> diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/AkkaConfigTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/AkkaConfigTest.java deleted file mode 100644 index 486aaaccc..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/AkkaConfigTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.*; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Paths; -import org.junit.Test; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig; - -public class AkkaConfigTest { - - @Test - public void test() throws URISyntaxException, IOException { - - AkkaConfig config = null; - try { - //config = AkkaConfig.load("akka-singlenode.cfg", true); - config = AkkaConfig.loadContent(loadResourceContentAsString("akka-singlenode.cfg")); - } catch (Exception e) { - e.printStackTrace(); - fail("error loading singlenode config"); - } - assertEquals("no singlenode config detected", false, config.isCluster()); - assertEquals("more than one node detected", 1, config.getClusterConfig().getSeedNodes().size()); - - try { - config = AkkaConfig.loadContent(loadResourceContentAsString("akka-cluster.cfg")); - } catch (Exception e) { - fail("error loading cluster config"); - } - assertEquals("no cluster config detected", true, config.isCluster()); - assertTrue("only one node detected", config.getClusterConfig().getSeedNodes().size() > 1); - } - - public static String loadResourceContentAsString(String resourceName) - throws URISyntaxException, FileNotFoundException, IOException { - - StringBuilder sb = new StringBuilder(); - - ClassLoader classLoader = AkkaConfigTest.class.getClassLoader(); - File file = Paths.get(classLoader.getResource(resourceName).toURI()).toFile(); - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append(System.lineSeparator()); - line = br.readLine(); - } - } - return sb.toString(); - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/UserScopeTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/UserScopeTest.java deleted file mode 100644 index 3f04ac09d..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/UserScopeTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.*; - -import org.json.JSONArray; -import org.junit.Test; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.UserScopes; - -public class UserScopeTest { - - private static final String SCOPE1 = "scope1"; - private static final String SCOPE2 = "scope2"; - private static final String SCOPE3 = "scope3"; - private static final String SCOPE4 = "scope4"; - - @Test - public void test() { - UserScopes scopes1 = new UserScopes(); - JSONArray json1 = new JSONArray(); - json1.put(SCOPE1); - json1.put(SCOPE2); - json1.put(SCOPE3); - scopes1.setScopes(json1); - - assertTrue(scopes1.hasScope(SCOPE1)); - assertFalse(scopes1.hasScope(SCOPE4)); - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsockerProviderTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsockerProviderTest.java deleted file mode 100644 index d6f0bcf4c..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsockerProviderTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.*; -import org.junit.Test; -import org.mockito.Mockito; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerProvider; -import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.osgi.service.http.HttpService; - -public class WebsockerProviderTest extends Mockito { - - @Test - public void test() { - RpcProviderService rpcProviderServiceMock = mock(RpcProviderService.class); - HttpService httpService = mock(HttpService.class); - - try (WebSocketManagerProvider provider = new WebSocketManagerProvider();) { - provider.setRpcProviderRegistry(rpcProviderServiceMock); - provider.init(); - provider.onBindService(httpService); - provider.close(); - } catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); - } - - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketClientTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketClientTest.java deleted file mode 100644 index df68ff3a2..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketClientTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.*; -import org.java_websocket.handshake.ServerHandshake; -import org.junit.Test; -import org.mockito.Mockito; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.websocket.SyncWebSocketClient; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.websocket.SyncWebSocketClient.WebsocketEventHandler; - -public class WebsocketClientTest extends Mockito { - - @Test - public void test() { - - WebsocketEventHandler clientHandlerMock = mock(WebsocketEventHandler.class); - ServerHandshake serverHandshakeMock = mock(ServerHandshake.class); - - try { - SyncWebSocketClient client = new SyncWebSocketClient("url"); - - client.addEventHandler(clientHandlerMock); - client.onMessage("TestMessage"); - client.onOpen(serverHandshakeMock); - client.close(); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception " + e.getMessage()); - } - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketMessageTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketMessageTest.java deleted file mode 100644 index 0e4db163a..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketMessageTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; - -import java.net.InetSocketAddress; - -import org.eclipse.jetty.websocket.api.Session; -import org.junit.Test; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerSocket; - -public class WebsocketMessageTest { - - private static final String MSG1 = "{\"data\":\"scopes\",\"scopes\":[\"scope1\"]}"; - private static final String MSG2 = "{}"; - private static final String MSG3 = "{\"" + WebSocketManagerSocket.KEY_NODENAME + ":\"xy\"," - + WebSocketManagerSocket.KEY_EVENTTYPE + ":\"zu\"}"; - private static final String MSG4 = "{ Not correct messga}"; - - @Test - public void test() { - MyWebSocketManagerSocket socketToTest = new MyWebSocketManagerSocket(); - Session sess = mock(Session.class); - InetSocketAddress remoteAdr = new InetSocketAddress("127.0.0.1", 4444); - when(sess.getRemoteAddress()).thenReturn(remoteAdr); - socketToTest.onWebSocketConnect(sess); - // message from client - socketToTest.setExpected(MSG1); - socketToTest.onWebSocketText(MSG1); - socketToTest.setExpected(MSG2); - socketToTest.onWebSocketText(MSG2); - socketToTest.setExpected(MSG3); - socketToTest.onWebSocketText(MSG3); - socketToTest.setExpected(MSG4); - socketToTest.onWebSocketText(MSG4); - socketToTest.onWebSocketClose(0, "by default"); - sess.close(); - - } - - private static class MyWebSocketManagerSocket extends WebSocketManagerSocket { - - private String expected; - - public MyWebSocketManagerSocket() {} - - void setExpected(String expected) { - this.expected = expected; - } - - @Override - public void send(String msg) { - System.out.println(msg); - assertTrue("Expected '" + expected + "' answer '" + msg + "'", msg.contains(expected)); - } - - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketServerConnectTest.java b/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketServerConnectTest.java deleted file mode 100644 index c9a96f5f3..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/WebsocketServerConnectTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import com.google.common.util.concurrent.ListenableFuture; -import java.util.concurrent.ExecutionException; -import org.eclipse.jetty.websocket.api.WebSocketPolicy; -import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; -import org.json.JSONObject; -import org.junit.Test; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManager; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerSocket; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerSocket.EventInputCallback; -import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput; -import org.opendaylight.yangtools.yang.common.RpcResult; - -public class WebsocketServerConnectTest { - - private static final String XML1 = "<notification></notification>"; - private static final String NODENAME = "abc"; - private static final String EVENTTYPE = "test"; - protected boolean responseReceived; - - @Test - public void test() { - responseReceived = false; - AkkaConfig config = null; - try { - // config = AkkaConfig.load("akka-singlenode.cfg", true); - config = AkkaConfig.loadContent(AkkaConfigTest.loadResourceContentAsString("akka-cluster-local.cfg")); - } catch (Exception e) { - e.printStackTrace(); - fail("error loading singlenode config"); - } - EventInputCallback callback = message -> { - JSONObject o = new JSONObject(message); - assertEquals("message which was pushed is not as expected", XML1, - o.get(WebSocketManagerSocket.KEY_XMLEVENT)); - assertEquals("nodename which was pushed is not as expected", NODENAME, - o.get(WebSocketManagerSocket.KEY_NODENAME)); - assertEquals("eventtype which was pushed is not as expected", EVENTTYPE, - o.get(WebSocketManagerSocket.KEY_EVENTTYPE)); - responseReceived = true; - }; - WebSocketManager servlet = new WebSocketManager(config, callback); - WebsocketEventInput input = mock(WebsocketEventInput.class); - when(input.getXmlEvent()).thenReturn(XML1); - when(input.getNodeName()).thenReturn(NODENAME); - when(input.getEventType()).thenReturn(EVENTTYPE); - ListenableFuture<RpcResult<WebsocketEventOutput>> result = servlet.websocketEvent(input); - assertNotNull(result); - RpcResult<WebsocketEventOutput> rpc = null; - try { - rpc = result.get(); - } catch (InterruptedException | ExecutionException e) { - fail(e.getMessage()); - } - assertNotNull(rpc); - assertTrue("rpc result was not successful", rpc.isSuccessful()); - assertTrue(rpc.getResult().getResponse().equals("OK")); - while (!responseReceived) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - - e.printStackTrace(); - } - } - - WebSocketServletFactory factory = mock(WebSocketServletFactory.class); - WebSocketPolicy wspolicy = mock(WebSocketPolicy.class); - when(factory.getPolicy()).thenReturn(wspolicy); - servlet.configure(factory); - - } - -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster-local.cfg b/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster-local.cfg deleted file mode 100644 index 465dcad83..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster-local.cfg +++ /dev/null @@ -1,49 +0,0 @@ -odl-cluster-data { - akka { - remote { - artery { - enabled = off - canonical.hostname = "192.168.178.143" - canonical.port = 2550 - } - netty.tcp { - hostname = "192.168.178.143" - port = 2550 - } - # when under load we might trip a false positive on the failure detector - # transport-failure-detector { - # heartbeat-interval = 4 s - # acceptable-heartbeat-pause = 16s - # } - } - - cluster { - # Remove ".tcp" when using artery. - seed-nodes = ["akka.tcp://opendaylight-cluster-data@192.168.178.142:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.143:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.144:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.145:2550"] - - roles = ["member-2"] - - } - - persistence { - # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by - # modifying the following two properties. The directory location specified may be a relative or absolute path. - # The relative path is always relative to KARAF_HOME. - - # snapshot-store.local.dir = "target/snapshots" - # journal.leveldb.dir = "target/journal" - - journal { - leveldb { - # Set native = off to use a Java-only implementation of leveldb. - # Note that the Java-only version is not currently considered by Akka to be production quality. - - # native = off - } - } - } - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster.cfg b/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster.cfg deleted file mode 100644 index 465dcad83..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-cluster.cfg +++ /dev/null @@ -1,49 +0,0 @@ -odl-cluster-data { - akka { - remote { - artery { - enabled = off - canonical.hostname = "192.168.178.143" - canonical.port = 2550 - } - netty.tcp { - hostname = "192.168.178.143" - port = 2550 - } - # when under load we might trip a false positive on the failure detector - # transport-failure-detector { - # heartbeat-interval = 4 s - # acceptable-heartbeat-pause = 16s - # } - } - - cluster { - # Remove ".tcp" when using artery. - seed-nodes = ["akka.tcp://opendaylight-cluster-data@192.168.178.142:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.143:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.144:2550", - "akka.tcp://opendaylight-cluster-data@192.168.178.145:2550"] - - roles = ["member-2"] - - } - - persistence { - # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by - # modifying the following two properties. The directory location specified may be a relative or absolute path. - # The relative path is always relative to KARAF_HOME. - - # snapshot-store.local.dir = "target/snapshots" - # journal.leveldb.dir = "target/journal" - - journal { - leveldb { - # Set native = off to use a Java-only implementation of leveldb. - # Note that the Java-only version is not currently considered by Akka to be production quality. - - # native = off - } - } - } - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-singlenode.cfg b/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-singlenode.cfg deleted file mode 100644 index 19e723319..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/resources/akka-singlenode.cfg +++ /dev/null @@ -1,48 +0,0 @@ -odl-cluster-data { - akka { - remote { - artery { - enabled = off - canonical.hostname = "127.0.0.1" - canonical.port = 2550 - } - netty.tcp { - hostname = "127.0.0.1" - port = 2550 - } - # when under load we might trip a false positive on the failure detector - # transport-failure-detector { - # heartbeat-interval = 4 s - # acceptable-heartbeat-pause = 16s - # } - } - - cluster { - # Remove ".tcp" when using artery. - seed-nodes = ["akka.tcp://opendaylight-cluster-data@127.0.0.1:2550"] - - roles = [ - "member-1" - ] - - } - - persistence { - # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by - # modifying the following two properties. The directory location specified may be a relative or absolute path. - # The relative path is always relative to KARAF_HOME. - - # snapshot-store.local.dir = "target/snapshots" - # journal.leveldb.dir = "target/journal" - - journal { - leveldb { - # Set native = off to use a Java-only implementation of leveldb. - # Note that the Java-only version is not currently considered by Akka to be production quality. - - # native = off - } - } - } - } -} diff --git a/sdnr/wt/websocketmanager2/provider/src/test/resources/simplelogger.properties b/sdnr/wt/websocketmanager2/provider/src/test/resources/simplelogger.properties deleted file mode 100644 index 1aa3824a1..000000000 --- a/sdnr/wt/websocketmanager2/provider/src/test/resources/simplelogger.properties +++ /dev/null @@ -1,58 +0,0 @@ -# -# ============LICENSE_START======================================================= -# ONAP : ccsdk features -# ================================================================================ -# Copyright (C) 2020 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======================================================= -# -# - -# SLF4J's SimpleLogger configuration file -# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. - -# Default logging detail level for all instances of SimpleLogger. -# Must be one of ("trace", "debug", "info", "warn", or "error"). -# If not specified, defaults to "info". -org.slf4j.simpleLogger.defaultLogLevel=trace - -# Logging detail level for a SimpleLogger instance named "xxx.yyy.zzz". -# Must be one of ("trace", "debug", "info", "warn", or "error"). -# If not specified, the default logging detail level is used. -# org.slf4j.simpleLogger.log.xxx.yyy=debug -org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager=debug -org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources=info -org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container=trace - -# Set to true if you want the current date and time to be included in output messages. -# Default is false, and will output the number of milliseconds elapsed since startup. -#org.slf4j.simpleLogger.showDateTime=false - -# The date and time format to be used in the output messages. -# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. -# If the format is not specified or is invalid, the default format is used. -# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. -#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z - -# Set to true if you want to output the current thread name. -# Defaults to true. -#org.slf4j.simpleLogger.showThreadName=true - -# Set to true if you want the Logger instance name to be included in output messages. -# Defaults to true. -#org.slf4j.simpleLogger.showLogName=true - -# Set to true if you want the last component of the name to be included in output messages. -# Defaults to false. -#org.slf4j.simpleLogger.showShortLogName=false |