From b63b7672e6ba731c53198c69309c0d8e9ee7f138 Mon Sep 17 00:00:00 2001 From: pa834y Date: Tue, 24 Apr 2018 20:25:22 -0400 Subject: [PATCH] Add websocket client code. Change-Id: I2d3939c698a0df6bec068063f08566226f65bfd3 Issue-ID: POLICY-756 Signed-off-by: pa834y --- .../java/org/onap/policy/std/AutoClientEnd.java | 436 ++++++++++----------- .../java/org/onap/policy/std/ManualClientEnd.java | 214 +++++----- .../java/org/onap/policy/std/StdPolicyEngine.java | 2 +- .../onap/policy/std/test/AutoClientEndTest.java | 277 +++++-------- .../onap/policy/std/test/ManualClientEndTest.java | 175 ++++----- 5 files changed, 475 insertions(+), 629 deletions(-) diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java index 3f97e19f7..9f9dc37e4 100644 --- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java +++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java @@ -20,16 +20,8 @@ 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); + } + } + } + } } diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java index 991bdca9c..2fe6dc006 100644 --- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java +++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java @@ -20,144 +20,118 @@ 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; + } + } + } } diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java index 2349c2e2f..f09b5779c 100644 --- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java +++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java @@ -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(); diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java index 664dcc808..4f1ce6f59 100644 --- a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java +++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java @@ -21,196 +21,111 @@ 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 AutoClientEndTest contains tests for the class {@link AutoClientEnd}. * - * @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.(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); - } } diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java index b87fa74bd..4a09164b5 100644 --- a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java +++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java @@ -21,17 +21,21 @@ 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 ManualClientEndTest contains tests for the class {@link ManualClientEnd}. @@ -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(); + } } -- 2.16.6