summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpa834y <pa834y@att.com>2018-04-24 20:25:22 -0400
committerpa834y <pa834y@att.com>2018-04-24 20:25:55 -0400
commitb63b7672e6ba731c53198c69309c0d8e9ee7f138 (patch)
tree495b463c99b918803a4d609a25025ddddd8a7716
parent30b44d3e752d44f8f870594a05464c9e1c5158b6 (diff)
Add websocket client code.
Change-Id: I2d3939c698a0df6bec068063f08566226f65bfd3 Issue-ID: POLICY-756 Signed-off-by: pa834y <pa834y@att.com>
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java436
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java214
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java2
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java277
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java175
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 <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);
- }
}
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 <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();
+ }
}