Fix random failures in ManualClientEndTest
[policy/engine.git] / PolicyEngineAPI / src / test / java / org / onap / policy / std / test / ManualClientEndTest.java
index 2ae522c..a9fa3f5 100644 (file)
@@ -1,8 +1,8 @@
-/*-
+/*
  * ============LICENSE_START=======================================================
  * PolicyEngineAPI
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,105 +22,87 @@ package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
-import org.junit.After;
-import org.junit.Before;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+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>.
  *
- * @generatedBy CodePro at 6/1/16 1:41 PM
- * @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 result = new ManualClientEnd();
-               assertNotNull(result);
-               // add additional test code here
-       }
-
+    private static WebSocketServer ws;
 
-       /**
-        * 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;
+    private static final int port = SocketUtils.findAvailableTcpPort();
+    private static volatile String recvMsg = null;
+    private static volatile Exception webEx = null;
 
-               PDPNotification result = ManualClientEnd.result(scheme);
+    /**
+     * Start server.
+     *
+     * @throws Exception the exception
+     */
+    @BeforeClass
+    public static void startServer() throws Exception {
+        ws = new WebSocketServer(new InetSocketAddress(port), 1) {
+            @Override
+            public void onOpen(WebSocket conn, ClientHandshake handshake) {}
 
-               assertNull(result);
-       }
+            @Override
+            public void onClose(WebSocket conn, int code, String reason, boolean remote) {}
 
+            @Override
+            public void onMessage(WebSocket conn, String message) {
+               
+               // NOTE: must copy to recvMsg BEFORE invoking conn.send()
+                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\"}");
+            }
 
-       /**
-        * 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 = "";
+            @Override
+            public void onError(WebSocket conn, Exception ex) {
+               webEx = ex;
+                ex.printStackTrace();
+            }
 
-               ManualClientEnd.start(url);
+            @Override
+            public void onStart() {}
+        };
 
-       }
+        ws.setConnectionLostTimeout(0);
+        ws.setReuseAddr(true);
+        ws.start();
+    }
 
-       /**
-        * 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
-       }
+    @Test
+    public void testManualClient() throws Exception {
+       
+        ManualClientEnd.start("http://localhost:" + port + "/");
 
-       /**
-        * 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
-       }
+        assertNull(webEx);
+        assertNotNull(ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
+        assertTrue("Manual".equalsIgnoreCase(recvMsg));
+    }
 
-       /**
-        * 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);
-       }
+    @AfterClass
+    public static void successTests() throws InterruptedException, IOException {
+        ws.stop(5000);
+    }
 }