Add websocket client code. 41/44541/1
authorpa834y <pa834y@att.com>
Wed, 25 Apr 2018 00:25:22 +0000 (20:25 -0400)
committerpa834y <pa834y@att.com>
Wed, 25 Apr 2018 00:25:55 +0000 (20:25 -0400)
Change-Id: I2d3939c698a0df6bec068063f08566226f65bfd3
Issue-ID: POLICY-756
Signed-off-by: pa834y <pa834y@att.com>
PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java

index 3f97e19..9f9dc37 100644 (file)
 
 package org.onap.policy.std;
 
-import java.io.IOException;
 import java.net.URI;
-
 import javax.websocket.ClientEndpoint;
-import javax.websocket.OnClose;
-import javax.websocket.OnError;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-
 import org.java_websocket.client.WebSocketClient;
 import org.java_websocket.handshake.ServerHandshake;
 import org.onap.policy.api.NotificationHandler;
@@ -38,231 +30,211 @@ import org.onap.policy.api.NotificationType;
 import org.onap.policy.api.PDPNotification;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
-import org.onap.policy.xacml.api.XACMLErrorConstants; 
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 @ClientEndpoint
 public class AutoClientEnd extends WebSocketClient {
-       private static StdPDPNotification notification = null;
-       private static StdPDPNotification oldNotification = null;
-       private static AutoClientEnd client = null;
-       private static NotificationScheme scheme = null;
-       private static NotificationHandler handler = null;
-       private static String url = null;
-       private static Session session = null;
-       private static boolean status = false; 
-       private static boolean stop = false;
-       private static boolean message = false;
-       private static boolean error = false;
-       private static Logger logger = FlexLogger.getLogger(AutoClientEnd.class.getName());
-       
-       private AutoClientEnd(URI serverUri) {
-               super(serverUri);
-       }
-
-       @Override
-       public void onClose(int arg0, String arg1, boolean arg2) {
-               // Not implemented
-       }
-
-       @Override
-       public void onError(Exception arg0) {
-               // Not implemented
-       }
-
-       @Override
-       public void onMessage(String arg0) {
-               // Not implemented
-       }
-
-       @Override
-       public void onOpen(ServerHandshake arg0) {
-               // Not implemented
-       }
-
-       public static void setAuto(NotificationScheme scheme,
-                       NotificationHandler handler) {
-               AutoClientEnd.scheme = scheme;
-               AutoClientEnd.handler = handler;
-       }
-
-       public static void setScheme(NotificationScheme scheme) {
-               AutoClientEnd.scheme = scheme;
-       }
-       
-       public static boolean getStatus(){
-               return AutoClientEnd.status;
-       }
-
-       public static String getURL() {
-               return AutoClientEnd.url;
-       }
-
-       public static void start(String url) {
-               AutoClientEnd.url = url;
-               
-               if (scheme == null || handler == null ||
-                       ! (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS) ||
-                                       scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS) ) ||
-                       AutoClientEnd.client != null) {
-                       return;
-               }
-
-               if (url.contains("https")) {
-                       url = url.replaceAll("https", "wss");
-               }
-               else {
-                       url = url.replaceAll("http", "ws");
-               }
-               
-               
-               // Stop and Start needs to be done.
-               try {
-                       logger.info("Starting Auto Notification with the PDP server : " + url);
-                       client = new AutoClientEnd(new URI(url  + "notifications"));
-                       status = true;
-                       if(error){
-                               // The URL's will be in Sync according to design Spec. 
-                               ManualClientEnd.start(AutoClientEnd.url);
-                               StdPDPNotification notification = NotificationStore.getDeltaNotification((StdPDPNotification)ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
-                               if(notification.getNotificationType()!=null&&oldNotification!=notification){
-                                   oldNotification= notification;
-                                   AutoClientEnd.notification = notification;
-                                   callHandler();
-                               }
-                               error = false;
-                       }
-                       //
-               } catch (Exception e) {
-                       logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-                       client = null;
-                       status = false;
-                       changeURL();
-               }
-       }
-       
-       private static void changeURL(){
-               // Change the PDP if it is not Up. 
-               StdPolicyEngine.rotatePDPList();
-               start(StdPolicyEngine.getPDPURL());
-       }
-
-       public static void stop() {
-               if (client == null) {
-                       return;
-               }
-               client.close();
-               if(session!=null){
-                       try {
-                               stop = true;
-                               logger.info("\n Closing Auto Notification WebSocket Connection.. ");
-                               session.close();
-                               session = null;
-                       } catch (IOException e) {
-                               logger.error("Error closing websocket connection", e);
-                       }
-               }
-               client = null;
-               status = false;
-               stop = false;
-       }
-
-       private static void callHandler() {
-               if (handler == null || scheme == null) {
-                       return;
-               }
-               if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
-                       boolean removed = false;
-                       boolean updated = false;
-                       if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
-                               removed = true;
-                       }
-                       if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
-                               updated = true;
-                       }
-                       if (removed && updated) {
-                               notification.setNotificationType(NotificationType.BOTH);
-                       } else if (removed) {
-                               notification.setNotificationType(NotificationType.REMOVE);
-                       } else if (updated) {
-                               notification.setNotificationType(NotificationType.UPDATE);
-                       }
-                       try{
-                               handler.notificationReceived(notification);
-                       }catch (Exception e){
-                               logger.error("Error in Clients Handler Object : ", e);
-                       }
-               } else if (scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
-                       PDPNotification newNotification = MatchStore.checkMatch(notification);
-                       if (newNotification.getNotificationType() != null) {
-                               try{
-                                       handler.notificationReceived(newNotification);
-                               }catch (Exception e){
-                                       logger.error("Error in Clients Handler Object : ", e);
-                               }
-                       }
-               }
-       }
-
-       // WebSockets Code..
-       @OnOpen
-       public static void onOpen(Session session){
-               logger.debug("Auto Notification Session Started... " + session.getId());
-               if(AutoClientEnd.session == null){
-                       AutoClientEnd.session = session;
-               }
-       }
-
-       @OnError
-       public static void onError(Session session, Throwable e) {
-               // trying to Restart by self.
-               logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Session Error.. "+ session.getId() + "\n Error is : " + e );
-               stop();
-               if (url != null) {
-                       client = null;
-                       status = false;
-                       error= true;
-                       start(url);
-               }
-       }
-
-       @OnClose
-       public static void onClose(Session session) {
-               logger.info("Session ended with "+ session.getId());
-               if(!stop && !message){
-                       // This Block of code is executed if there is any Network Failure or if the Notification is Down. 
-                       logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Disconnected from Notification Server");
-                       client = null;
-                       status = false;
-                       AutoClientEnd.session=null;
-                       // Try to connect Back to available PDP.
-                       error = true;
-                       start(url);
-               }
-               AutoClientEnd.message=false;
-       }
-
-       @OnMessage
-       public static void onMessage(String message, Session session) throws IOException {
-               AutoClientEnd.message = true;
-               logger.debug("Auto Notification Recieved Message " + message + " Session info is : " + session.getId());
-               try {
-                       notification = NotificationUnMarshal.notificationJSON(message);
-               } catch (Exception e) {
-                       logger.error("PE500 " + e);
-               }
-               if(AutoClientEnd.session == session){
-                       try{
-                               NotificationStore.recordNotification(notification);
-                       }catch(Exception e){
-                               logger.error(e);
-                       }
-                       if(oldNotification!=notification){
-                               oldNotification= notification;
-                               callHandler();
-                       }
-               }else{
-                       session.close();
-               }
-               AutoClientEnd.message = false;
-       }
+    private static StdPDPNotification notification = null;
+    private static StdPDPNotification oldNotification = null;
+    private static AutoClientEnd client = null;
+    private static NotificationScheme scheme = null;
+    private static NotificationHandler handler = null;
+    private static String url = null;
+    private static boolean status = false;
+    private static boolean stop = false;
+    private static boolean message = false;
+    private static boolean error = false;
+    private static Logger logger = FlexLogger.getLogger(AutoClientEnd.class.getName());
+
+    private AutoClientEnd(URI serverUri) {
+        super(serverUri);
+    }
+
+    @Override
+    public void onMessage(String msg) {
+        logger.info("Received Auto Notification from : " + getURI() + ", Notification: " + msg);
+        AutoClientEnd.message = true;
+        try {
+            AutoClientEnd.notification = NotificationUnMarshal.notificationJSON(msg);
+        } catch (Exception e) {
+            logger.error("PE500 " + e);
+        }
+        try {
+            NotificationStore.recordNotification(notification);
+        } catch (Exception e) {
+            logger.error(e);
+        }
+        if (AutoClientEnd.oldNotification != AutoClientEnd.notification) {
+            AutoClientEnd.oldNotification = AutoClientEnd.notification;
+            callHandler();
+        }
+
+        AutoClientEnd.message = false;
+    }
+
+    @Override
+    public void onClose(int code, String reason, boolean remote) {
+        logger.info("AutoClientEnd disconnected from: " + getURI() + "; Code: " + code + ", reason :  " + reason);
+        if (!AutoClientEnd.stop && !AutoClientEnd.message) {
+            // This Block of code is executed if there is any Network Failure or
+            // if the Notification is Down.
+            logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Disconnected from Notification Server");
+            AutoClientEnd.client = null;
+            AutoClientEnd.status = false;
+            // Try to connect Back to available PDP.
+            AutoClientEnd.error = true;
+            start(url);
+        }
+        AutoClientEnd.message = false;
+    }
+
+    @Override
+    public void onError(Exception ex) {
+        logger.error("XACMLErrorConstants.ERROR_PROCESS_FLOW + Error connecting to: " + getURI()
+                + ", Exception occured ...\n" + ex);
+        // trying to Restart by self.
+        stop();
+        if (AutoClientEnd.url != null) {
+            AutoClientEnd.client = null;
+            AutoClientEnd.status = false;
+            AutoClientEnd.error = true;
+            AutoClientEnd.start(AutoClientEnd.url);
+        }
+    }
+
+    @Override
+    public void onOpen(ServerHandshake arg0) {
+        logger.info("Auto Notification Session Started... " + getURI());
+    }
+
+    /**
+     * Sets the auto.
+     *
+     * @param scheme the scheme
+     * @param handler the handler
+     */
+    public static void setAuto(NotificationScheme scheme, NotificationHandler handler) {
+        logger.info("Auto Notification setAuto, scheme: " + scheme);
+        AutoClientEnd.scheme = scheme;
+        AutoClientEnd.handler = handler;
+    }
+
+    public static void setScheme(NotificationScheme scheme) {
+        AutoClientEnd.scheme = scheme;
+    }
+
+    public static boolean getStatus() {
+        return AutoClientEnd.status;
+    }
+
+    public static String getUrl() {
+        return AutoClientEnd.url;
+    }
+
+    /**
+     * Start.
+     *
+     * @param url the url
+     */
+    public static void start(String url) {
+        AutoClientEnd.url = url;
+
+        if (scheme == null || handler == null || !(scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)
+                || scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) || AutoClientEnd.client != null) {
+            return;
+        }
+
+        if (url.contains("https")) {
+            url = url.replaceAll("https", "wss");
+        } else {
+            url = url.replaceAll("http", "ws");
+        }
+
+        // Stop and Start needs to be done.
+        try {
+            logger.info("Starting Auto Notification with the PDP server : " + url);
+            client = new AutoClientEnd(new URI(url + "notifications"));
+            client.connect();
+            status = true;
+            if (error) {
+                // will not trigger. leave it in to later add checks
+                // The URL's will be in Sync according to design Spec.
+                ManualClientEnd.start(AutoClientEnd.url);
+                StdPDPNotification notification = NotificationStore.getDeltaNotification(
+                        (StdPDPNotification) ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
+                if (notification.getNotificationType() != null && oldNotification != notification) {
+                    oldNotification = notification;
+                    AutoClientEnd.notification = notification;
+                    callHandler();
+                }
+                error = false;
+            }
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+            client = null;
+            status = false;
+            changeUrl();
+        }
+    }
+
+    private static void changeUrl() {
+        // Change the PDP if it is not Up.
+        StdPolicyEngine.rotatePDPList();
+        start(StdPolicyEngine.getPDPURL());
+    }
+
+    /**
+     * Stop the websocket connection.
+     */
+    public static void stop() {
+        if (client == null) {
+            return;
+        }
+        logger.info("\n Closing Auto Notification WebSocket Connection.. ");
+        stop = true;
+        try {
+            client.closeBlocking();
+        } catch (InterruptedException e) {
+            logger.info("\n Error Closing Auto Notification WebSocket Connection.. InterruptedException");
+        }
+        logger.info("\n Closed the Auto Notification WebSocket Connection.. ");
+        client = null;
+        status = false;
+        stop = false;
+    }
+
+    private static void callHandler() {
+        if (handler == null || scheme == null) {
+            return;
+        }
+        if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
+            boolean removed = false;
+            boolean updated = false;
+            if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
+                removed = true;
+                notification.setNotificationType(NotificationType.REMOVE);
+            }
+            if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
+                updated = true;
+                notification.setNotificationType(NotificationType.UPDATE);
+            }
+            if (removed && updated) {
+                notification.setNotificationType(NotificationType.BOTH);
+            }
+            try {
+                handler.notificationReceived(notification);
+            } catch (Exception e) {
+                logger.error("Error in Clients Handler Object : ", e);
+            }
+        } else if (scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
+            PDPNotification newNotification = MatchStore.checkMatch(notification);
+            if (newNotification.getNotificationType() != null) {
+                try {
+                    handler.notificationReceived(newNotification);
+                } catch (Exception e) {
+                    logger.error("Error in Clients Handler Object : ", e);
+                }
+            }
+        }
+    }
 }
index 991bdca..2fe6dc0 100644 (file)
 
 package org.onap.policy.std;
 
-import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.CountDownLatch;
-
 import javax.websocket.ClientEndpoint;
-import javax.websocket.OnClose;
-import javax.websocket.OnError;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-
 import org.java_websocket.client.WebSocketClient;
 import org.java_websocket.handshake.ServerHandshake;
 import org.onap.policy.api.NotificationScheme;
 import org.onap.policy.api.NotificationType;
 import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.std.StdPDPNotification;
-
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 
-import org.onap.policy.common.logging.flexlogger.*; 
-
 @ClientEndpoint
 public class ManualClientEnd extends WebSocketClient {
-       private static CountDownLatch latch;
-       private static StdPDPNotification notification = null;
-       private static String resultJson = null;
-       private static Logger logger = FlexLogger.getLogger(ManualClientEnd.class.getName());
-       private static ManualClientEnd client;
-       
-       public ManualClientEnd(URI serverUri) {
-               super(serverUri);
-       }
+    private static CountDownLatch latch;
+    private static StdPDPNotification notification = null;
+    private static String resultJson = null;
+    private static Logger logger = FlexLogger.getLogger(ManualClientEnd.class.getName());
+    private static ManualClientEnd client;
+
+    public ManualClientEnd(URI serverUri) {
+        super(serverUri);
+    }
+
+    @Override
+    public void onClose(int code, String reason, boolean remote) {
+        logger.info("ManualClientEnd disconnected from: " + getURI() + "; Code: " + code + ", reason :  " + reason);
+        latch.countDown();
+    }
 
-       @Override
-       public void onClose(int arg0, String arg1, boolean arg2) {
-               // Not implemented
-       }
+    @Override
+    public void onError(Exception ex) {
+        logger.error("XACMLErrorConstants.ERROR_PROCESS_FLOW + ManualClientEnd - Error connecting to: " + getURI()
+                + ", Exception occured ...\n" + ex);
+        latch.countDown();
+    }
 
-       @Override
-       public void onError(Exception arg0) {
-               // Not implemented
-       }
+    @Override
+    public void onMessage(String message) {
+        logger.info("Manual Notification Recieved Message from : " + getURI() + ", Notification: " + message);
+        ManualClientEnd.resultJson = message;
+        try {
+            ManualClientEnd.notification = NotificationUnMarshal.notificationJSON(message);
+            latch.countDown();
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+            latch.countDown();
+        }
+    }
 
-       @Override
-       public void onMessage(String arg0) {
-               // Not implemented
-       }
+    @Override
+    public void onOpen(ServerHandshake arg0) {
+        logger.info("Manual Notification Session Started... " + getURI());
+        send("Manual");
+    }
 
-       @Override
-       public void onOpen(ServerHandshake arg0) {
-               // Not implemented
-       }
+    /**
+     * Start.
+     *
+     * @param url the url
+     */
+    public static void start(String url) {
+        latch = new CountDownLatch(1);
 
-       public static void start(String url) {
-               latch = new CountDownLatch(1);
+        if (url.contains("https")) {
+            url = url.replaceAll("https", "wss");
+        } else {
+            url = url.replaceAll("http", "ws");
+        }
 
-               if (url.contains("https")) {
-                       url = url.replaceAll("https", "wss");
-               }
-               else {
-                       url = url.replaceAll("http", "ws");
-               }
-               
-               try {
-                       client = new ManualClientEnd(new URI(url+"notifications"));
-                       latch.await();
-               } catch (Exception e) {
-                       logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-               }
-       }
+        try {
+            client = new ManualClientEnd(new URI(url + "notifications"));
+            client.connect();
+            latch.await();
+            client.close();
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+        }
+    }
 
-       public static PDPNotification result(NotificationScheme scheme) {
-               if (resultJson == null || notification == null) {
-                       logger.debug("No Result" );
-                       return null;
-               } else {
-                       if(scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
-                               boolean removed = false;
-                               boolean updated = false; 
-                               if(notification.getRemovedPolicies()!=null && !notification.getRemovedPolicies().isEmpty()){
-                                       removed = true;
-                               }
-                               if(notification.getLoadedPolicies()!=null && !notification.getLoadedPolicies().isEmpty()){
-                                       updated = true;
-                               }
-                               if(removed && updated) {
-                                       notification.setNotificationType(NotificationType.BOTH);
-                               }else if(removed){
-                                       notification.setNotificationType(NotificationType.REMOVE);
-                               }else if(updated){
-                                       notification.setNotificationType(NotificationType.UPDATE);
-                               }
-                               return notification;
-                       }else if(scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
-                               return MatchStore.checkMatch(notification);
-                       }else {
-                               return null;
-                       }
-               }
-       }
-       
-       // WebSockets Code.. 
-       @OnOpen
-       public void onOpen(Session session) throws IOException {
-               logger.info("Session Started with : " + session.getId());
-               session.getBasicRemote().sendText("Manual");
-       }
-       
-       @OnError
-       public void onError(Session session, Throwable e) {
-               logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in: "+ session.getId());
-               latch.countDown();
-       }
-       
-       @OnClose
-       public void onClose(Session session) {
-               logger.info("Session ended with "+ session.getId());
-               latch.countDown();
-               client.close();
-       }
-       
-       @OnMessage
-       public static void onMessage(String message, Session session){
-               logger.debug(" Manual Notification Recieved Message : " + message +" Session info is : "+ session.getId());
-               resultJson = message;
-               try {
-                       notification = NotificationUnMarshal.notificationJSON(message);
-               } catch (Exception e) {
-                       logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
-                       latch.countDown();
-               }
-               try {
-                       session.close();
-               } catch (IOException e) {
-                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
-                       latch.countDown();
-               } // For Manual Client..
-               latch.countDown();
-       }
+    /**
+     * Result.
+     *
+     * @param scheme the scheme
+     * @return the PDP notification
+     */
+    public static PDPNotification result(NotificationScheme scheme) {
+        if (resultJson == null || notification == null) {
+            logger.info("ManualClientENd - No Result available");
+            return null;
+        } else {
+            if (scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
+                boolean removed = false;
+                boolean updated = false;
+                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
+                    removed = true;
+                    notification.setNotificationType(NotificationType.REMOVE);
+                }
+                if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
+                    updated = true;
+                    notification.setNotificationType(NotificationType.UPDATE);
+                }
+                if (removed && updated) {
+                    notification.setNotificationType(NotificationType.BOTH);
+                }
+                return notification;
+            } else if (scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
+                return MatchStore.checkMatch(notification);
+            } else {
+                return null;
+            }
+        }
+    }
 }
index 2349c2e..f09b577 100644 (file)
@@ -1103,7 +1103,7 @@ public class StdPolicyEngine {
                 this.dmaapThread = true;
             } else {
                 if (pdps.get(0) != null) {
-                    if (AutoClientEnd.getURL() == null) {
+                    if (AutoClientEnd.getUrl() == null) {
                         AutoClientEnd.start(pdps.get(0));
                     } else {
                         AutoClientEnd.stop();
index 664dcc8..4f1ce6f 100644 (file)
 package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
-
-import org.junit.After;
-import org.junit.Before;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.CountDownLatch;
+import org.java_websocket.WebSocket;
+import org.java_websocket.handshake.ClientHandshake;
+import org.java_websocket.server.WebSocketServer;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.api.NotificationHandler;
 import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PDPNotification;
 import org.onap.policy.std.AutoClientEnd;
-import org.onap.policy.std.StdPolicyEngine;
+import org.onap.policy.std.StdPDPNotification;
+import org.springframework.util.SocketUtils;
 
 /**
  * The class <code>AutoClientEndTest</code> contains tests for the class <code>{@link AutoClientEnd}</code>.
  *
- * @generatedBy CodePro at 6/1/16 1:40 PM
- * @version $Revision: 1.0 $
  */
 public class AutoClientEndTest {
+    private static WebSocketServer ws;
+
+    private static int port = 18080;
+    private static CountDownLatch countServerDownLatch = null;
+    private StdPDPNotification notification = null;
+
+    /**
+     * Start server.
+     *
+     * @throws Exception the exception
+     */
+    @BeforeClass
+    public static void startServer() throws Exception {
+        port = SocketUtils.findAvailableTcpPort();
+        ws = new WebSocketServer(new InetSocketAddress(port), 16) {
+            @Override
+            public void onOpen(WebSocket conn, ClientHandshake handshake) {
+                conn.send("{\"removedPolicies\": [],\"loadedPolicies\": "
+                        + "[{\"policyName\": \"Test.Config_BRMS_Param_BrmsParamTestPa.1.xml\","
+                        + "\"versionNo\": \"1\",\"matches\": {\"ECOMPName\": \"DROOLS\","
+                        + "\"ONAPName\": \"DROOLS\",\"ConfigName\": \"BRMS_PARAM_RULE\","
+                        + "\"guard\": \"false\",\"TTLDate\": \"NA\",\"RiskLevel\": \"5\","
+                        + "\"RiskType\": \"default\"},\"updateType\": \"NEW\"}],\"notificationType\": \"UPDATE\"}");
+            }
+
+            @Override
+            public void onClose(WebSocket conn, int code, String reason, boolean remote) {
+
+            }
+
+            @Override
+            public void onMessage(WebSocket conn, String message) {}
+
+            @Override
+            public void onError(WebSocket conn, Exception ex) {
+
+                ex.printStackTrace();
+                fail("There should be no exception!");
+            }
+
+            @Override
+            public void onStart() {}
+
+
+        };
+
+        ws.setConnectionLostTimeout(30);
+        ws.start();
+    }
+
+    @Test
+    public void testAutoClient() throws Exception {
+
+        NotificationScheme scheme = NotificationScheme.AUTO_ALL_NOTIFICATIONS;
+        NotificationHandler handler = new NotificationHandler() {
+
+            @Override
+            public void notificationReceived(PDPNotification notifi) {
+                notification = (StdPDPNotification) notifi;
+                countServerDownLatch.countDown();
+
+            }
+        };
+
+        AutoClientEnd.setAuto(scheme, handler);
+        countServerDownLatch = new CountDownLatch(1);
+
+        AutoClientEnd.start("http://localhost:" + port + "/");
+        countServerDownLatch.await();
+
+
+        assertNotNull(notification);
+        assertTrue(AutoClientEnd.getStatus());
+    }
+
+    @AfterClass
+    public static void successTests() throws InterruptedException, IOException {
+        AutoClientEnd.stop();
+        ws.stop();
+    }
+
+
 
-       /**
-        * Run the boolean getStatus() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testGetStatus_1()
-               throws Exception {
-
-               boolean result = AutoClientEnd.getStatus();
-
-               assertNotNull(result);
-       }
-
-       /**
-        * Run the String getURL() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testGetURL_1()
-               throws Exception {
-
-               String result = AutoClientEnd.getURL();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
-               assertNotNull(result);
-       }
-
-
-       /**
-        * Run the void setAuto(NotificationScheme,NotificationHandler) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testSetAuto()
-               throws Exception {
-               NotificationScheme scheme = NotificationScheme.AUTO_ALL_NOTIFICATIONS;
-               NotificationHandler handler = null;
-
-               AutoClientEnd.setAuto(scheme, handler);
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.ExceptionInInitializerError
-               //       at org.apache.log4j.Logger.getLogger(Logger.java:104)
-               //       at org.onap.policy.std.AutoClientEnd.<clinit>(AutoClientEnd.java:39)
-       }
-
-       /**
-        * Run the void setScheme(NotificationScheme) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testSetScheme()
-               throws Exception {
-               
-               NotificationScheme scheme = NotificationScheme.AUTO_ALL_NOTIFICATIONS;
-               AutoClientEnd.setScheme(scheme);
-
-       }
-
-       /**
-        * Run the void start(String) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testStart()
-               throws Exception {
-               String url = "http://test.com";
-
-               AutoClientEnd.start(url);
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
-       }
-
-
-       /**
-        * Run the void start(String) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testStart_2()
-               throws Exception {
-               String url = null;
-
-               AutoClientEnd.start(url);
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
-       }
-
-       /**
-        * Run the void stop() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testStop_1()
-               throws Exception {
-
-               AutoClientEnd.stop();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
-       }
-
-       /**
-        * Perform pre-test initialization.
-        *
-        * @throws Exception
-        *         if the initialization fails for some reason
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Before
-       public void setUp()
-               throws Exception {
-               // add set up code here
-               StdPolicyEngine policyEngine = new StdPolicyEngine("Test/config_pass.properties", (String) null);
-               
-               NotificationHandler handler = policyEngine.getNotificationHandler();
-               AutoClientEnd.setAuto(NotificationScheme.AUTO_ALL_NOTIFICATIONS, handler);
-               AutoClientEnd.start("http://testurl.com");
-               
-       }
-
-       /**
-        * Perform post-test clean-up.
-        *
-        * @throws Exception
-        *         if the clean-up fails for some reason
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @After
-       public void tearDown()
-               throws Exception {
-               // Add additional tear down code here
-       }
-
-       /**
-        * Launch the test.
-        *
-        * @param args the command line arguments
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       public static void main(String[] args) {
-               new org.junit.runner.JUnitCore().run(AutoClientEndTest.class);
-       }
 }
index b87fa74..4a09164 100644 (file)
 package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.net.URI;
-import java.net.URL;
-
-import org.junit.After;
-import org.junit.Before;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.CountDownLatch;
+import org.java_websocket.WebSocket;
+import org.java_websocket.handshake.ClientHandshake;
+import org.java_websocket.server.WebSocketServer;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.api.NotificationScheme;
-import org.onap.policy.api.PDPNotification;
 import org.onap.policy.std.ManualClientEnd;
+import org.springframework.util.SocketUtils;
 
 /**
  * The class <code>ManualClientEndTest</code> contains tests for the class <code>{@link ManualClientEnd}</code>.
@@ -40,91 +44,72 @@ import org.onap.policy.std.ManualClientEnd;
  * @version $Revision: 1.0 $
  */
 public class ManualClientEndTest {
-       /**
-        * Run the ManualClientEnd() constructor test.
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       @Test
-       public void testManualClientEnd_1()
-               throws Exception {
-               ManualClientEnd mce = new ManualClientEnd(new URI("http://www.onap.org"));
-               assertNotNull(mce);
-               mce.close();
-               // add additional test code here
-       }
-
-
-       /**
-        * Run the PDPNotification result(NotificationScheme) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       @Test
-       public void testResult_1()
-               throws Exception {
-               NotificationScheme scheme = NotificationScheme.AUTO_ALL_NOTIFICATIONS;
-
-               PDPNotification result = ManualClientEnd.result(scheme);
-
-               assertNull(result);
-       }
-
-
-       /**
-        * Run the void start(String) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       @Test
-       public void testStart_1()
-               throws Exception {
-               String url = "This is not a URL";
-
-               ManualClientEnd.start(url);
-
-       }
-
-       /**
-        * Perform pre-test initialization.
-        *
-        * @throws Exception
-        *         if the initialization fails for some reason
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       @Before
-       public void setUp()
-               throws Exception {
-               // add additional set up code here
-       }
-
-       /**
-        * Perform post-test clean-up.
-        *
-        * @throws Exception
-        *         if the clean-up fails for some reason
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       @After
-       public void tearDown()
-               throws Exception {
-               // Add additional tear down code here
-       }
-
-       /**
-        * Launch the test.
-        *
-        * @param args the command line arguments
-        *
-        * @generatedBy CodePro at 6/1/16 1:41 PM
-        */
-       public static void main(String[] args) {
-               new org.junit.runner.JUnitCore().run(ManualClientEndTest.class);
-       }
+    private static WebSocketServer ws;
+
+    private static int port = 18080;
+    private static CountDownLatch countServerDownLatch = null;
+    private static String recvMsg = null;
+
+    /**
+     * Start server.
+     *
+     * @throws Exception the exception
+     */
+    @BeforeClass
+    public static void startServer() throws Exception {
+        port = SocketUtils.findAvailableTcpPort();
+        ws = new WebSocketServer(new InetSocketAddress(port), 16) {
+            @Override
+            public void onOpen(WebSocket conn, ClientHandshake handshake) {
+
+            }
+
+            @Override
+            public void onClose(WebSocket conn, int code, String reason, boolean remote) {
+                countServerDownLatch.countDown();
+            }
+
+            @Override
+            public void onMessage(WebSocket conn, String message) {
+                recvMsg = message;
+                conn.send("{\"removedPolicies\": [],\"loadedPolicies\":"
+                        + "[{\"policyName\": \"Test.Config_BRMS_Param_BrmsParamTestPa.1.xml\","
+                        + "\"versionNo\": \"1\",\"matches\": {\"ECOMPName\": \"DROOLS\","
+                        + "\"ONAPName\": \"DROOLS\",\"ConfigName\": \"BRMS_PARAM_RULE\","
+                        + "\"guard\": \"false\",\"TTLDate\": \"NA\",\"RiskLevel\": \"5\","
+                        + "\"RiskType\": \"default\"},\"updateType\": \"NEW\"}],\"notificationType\": \"UPDATE\"}");
+            }
+
+            @Override
+            public void onError(WebSocket conn, Exception ex) {
+
+                ex.printStackTrace();
+                fail("There should be no exception!");
+            }
+
+            @Override
+            public void onStart() {}
+
+
+        };
+
+        ws.setConnectionLostTimeout(30);
+        ws.start();
+    }
+
+    @Test
+    public void testAutoClient() throws Exception {
+        countServerDownLatch = new CountDownLatch(1);
+
+        ManualClientEnd.start("http://localhost:" + port + "/");
+        countServerDownLatch.await();
+
+        assertNotNull(ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
+        assertTrue("Manual".equalsIgnoreCase(recvMsg));
+    }
+
+    @AfterClass
+    public static void successTests() throws InterruptedException, IOException {
+        ws.stop();
+    }
 }