aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2018-10-26 10:10:28 -0400
committerJim Hahn <jrh3@att.com>2018-10-26 10:18:33 -0400
commit01a357b4e27480844686eb83ef81809a28056e41 (patch)
tree03a690e659fc552fd0ce8f39a637f8e91b1a0c88
parent7f961c34cd224b9d38f3549e3660b25a8aafd799 (diff)
Fix random failures in ManualClientEndTest3.0.0-ONAP
Don't know if this is the cause of the intermittent failures, but it could be, and it is certainly a bug: the classes manipulate data, that isn't marked volatile, from more than one thread at a time. Updated licenses. Change-Id: Ifca84cf8f915ec703a9ce8980db2475dacf97980 Issue-ID: POLICY-1092 Signed-off-by: Jim Hahn <jrh3@att.com>
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java24
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java12
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java14
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java37
4 files changed, 41 insertions, 46 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 aabda96c8..342af2c0f 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
@@ -35,18 +35,18 @@ import org.onap.policy.common.logging.flexlogger.Logger;
import org.onap.policy.xacml.api.XACMLErrorConstants;
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 boolean status = false;
- private static boolean stop = false;
- private static boolean error = false;
- private static boolean restartNeeded = false;
- private static ScheduledExecutorService restartExecutorService = null;
- private static Logger logger = FlexLogger.getLogger(AutoClientEnd.class.getName());
+ private static volatile StdPDPNotification notification = null;
+ private static volatile StdPDPNotification oldNotification = null;
+ private static volatile AutoClientEnd client = null;
+ private static volatile NotificationScheme scheme = null;
+ private static volatile NotificationHandler handler = null;
+ private static volatile String url = null;
+ private static volatile boolean status = false;
+ private static volatile boolean stop = false;
+ private static volatile boolean error = false;
+ private static volatile boolean restartNeeded = false;
+ private static volatile ScheduledExecutorService restartExecutorService = null;
+ private static final Logger logger = FlexLogger.getLogger(AutoClientEnd.class.getName());
private AutoClientEnd(URI serverUri) {
super(serverUri);
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 778acd716..b274fa1a9 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
@@ -2,7 +2,7 @@
* ============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.
@@ -33,11 +33,11 @@ import org.onap.policy.std.StdPDPNotification;
import org.onap.policy.xacml.api.XACMLErrorConstants;
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;
+ private static volatile CountDownLatch latch;
+ private static volatile StdPDPNotification notification = null;
+ private static volatile String resultJson = null;
+ private static final Logger logger = FlexLogger.getLogger(ManualClientEnd.class.getName());
+ private static volatile ManualClientEnd client;
public ManualClientEnd(URI serverUri) {
super(serverUri);
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 b10f69a74..a8879329e 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
@@ -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.
@@ -20,12 +20,13 @@
package org.onap.policy.std.test;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
+
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
@@ -45,9 +46,8 @@ import org.springframework.util.SocketUtils;
public class AutoClientEndTest {
private static WebSocketServer ws;
- private static int port = SocketUtils.findAvailableTcpPort();
- private static CountDownLatch countServerDownLatch = null;
- private static PDPNotification notification = null;
+ private static final int port = SocketUtils.findAvailableTcpPort();
+ private static volatile CountDownLatch countServerDownLatch = null;
/**
* Start server.
@@ -56,7 +56,6 @@ public class AutoClientEndTest {
*/
@BeforeClass
public static void startServer() throws Exception {
- notification = null;
ws = new WebSocketServer(new InetSocketAddress(port), 1) {
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
@@ -100,7 +99,6 @@ public class AutoClientEndTest {
@Override
public void notificationReceived(PDPNotification notify) {
- notification = notify;
countServerDownLatch.countDown();
}
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 7d31c24b5..a9fa3f5fe 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
@@ -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.
@@ -21,12 +21,12 @@
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 java.util.concurrent.TimeUnit;
+
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
@@ -44,9 +44,9 @@ import org.springframework.util.SocketUtils;
public class ManualClientEndTest {
private static WebSocketServer ws;
- private static int port = SocketUtils.findAvailableTcpPort();
- 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,18 +57,17 @@ public class ManualClientEndTest {
public static void startServer() throws Exception {
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\","
@@ -79,9 +78,8 @@ public class ManualClientEndTest {
@Override
public void onError(WebSocket conn, Exception ex) {
-
+ webEx = ex;
ex.printStackTrace();
- fail("There should be no exception!");
}
@Override
@@ -95,17 +93,16 @@ public class ManualClientEndTest {
@Test
public void testManualClient() throws Exception {
- countServerDownLatch = new CountDownLatch(1);
-
+
ManualClientEnd.start("http://localhost:" + port + "/");
- countServerDownLatch.await(45, TimeUnit.SECONDS);
+ assertNull(webEx);
assertNotNull(ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
assertTrue("Manual".equalsIgnoreCase(recvMsg));
}
@AfterClass
public static void successTests() throws InterruptedException, IOException {
- ws.stop(30000);
+ ws.stop(5000);
}
}