Fix random failures in ManualClientEndTest
[policy/engine.git] / PolicyEngineAPI / src / test / java / org / onap / policy / std / test / ManualClientEndTest.java
index 4a09164..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.
 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 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;
@@ -40,15 +40,13 @@ 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 {
     private static WebSocketServer ws;
 
-    private static int port = 18080;
-    private static CountDownLatch countServerDownLatch = null;
-    private static String recvMsg = null;
+    private static final int port = SocketUtils.findAvailableTcpPort();
+    private static volatile String recvMsg = null;
+    private static volatile Exception webEx = null;
 
     /**
      * Start server.
@@ -57,21 +55,19 @@ public class ManualClientEndTest {
      */
     @BeforeClass
     public static void startServer() throws Exception {
-        port = SocketUtils.findAvailableTcpPort();
-        ws = new WebSocketServer(new InetSocketAddress(port), 16) {
+        ws = new WebSocketServer(new InetSocketAddress(port), 1) {
             @Override
-            public void onOpen(WebSocket conn, ClientHandshake handshake) {
-
-            }
+            public void onOpen(WebSocket conn, ClientHandshake handshake) {}
 
             @Override
-            public void onClose(WebSocket conn, int code, String reason, boolean remote) {
-                countServerDownLatch.countDown();
-            }
+            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\","
@@ -82,34 +78,31 @@ public class ManualClientEndTest {
 
             @Override
             public void onError(WebSocket conn, Exception ex) {
-
+               webEx = ex;
                 ex.printStackTrace();
-                fail("There should be no exception!");
             }
 
             @Override
             public void onStart() {}
-
-
         };
 
-        ws.setConnectionLostTimeout(30);
+        ws.setConnectionLostTimeout(0);
+        ws.setReuseAddr(true);
         ws.start();
     }
 
     @Test
-    public void testAutoClient() throws Exception {
-        countServerDownLatch = new CountDownLatch(1);
-
+    public void testManualClient() throws Exception {
+       
         ManualClientEnd.start("http://localhost:" + port + "/");
-        countServerDownLatch.await();
 
+        assertNull(webEx);
         assertNotNull(ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
         assertTrue("Manual".equalsIgnoreCase(recvMsg));
     }
 
     @AfterClass
     public static void successTests() throws InterruptedException, IOException {
-        ws.stop();
+        ws.stop(5000);
     }
 }