From 0fbeafe11f9904b292f3cbbf36a5c583fbb266b6 Mon Sep 17 00:00:00 2001 From: Eugene Pakhomov Date: Wed, 27 Jun 2018 13:16:57 +0200 Subject: [PATCH 1/3] JSONServer fixed to be backward compatible with previous versions of clients Minor clenup issues fixed in WebSocketListener --- .../src/main/java/eu/chargetime/ocpp/JSONServer.java | 8 ++++++-- .../java/eu/chargetime/ocpp/WebSocketListener.java | 11 ++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java index 81b1f46bd..3f9274d99 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java @@ -63,8 +63,12 @@ public class JSONServer implements IServerAPI { public JSONServer(ServerCoreProfile coreProfile, JSONConfiguration configuration) { featureRepository = new FeatureRepository(); SessionFactory sessionFactory = new SessionFactory(featureRepository); - draftOcppOnly = new Draft_6455(Collections.emptyList(), - Collections.singletonList(new Protocol("ocpp1.6"))); + + ArrayList protocols = new ArrayList<>(); + protocols.add(new Protocol("ocpp1.6")); + protocols.add(new Protocol("")); + draftOcppOnly = new Draft_6455(Collections.emptyList(), protocols); + this.listener = new WebSocketListener(sessionFactory, configuration, draftOcppOnly); server = new Server(this.listener, featureRepository, new PromiseRepository()); featureRepository.addFeatureProfile(coreProfile); diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java index c9847727d..5ac7e67c7 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java @@ -107,8 +107,13 @@ public void relay(String message) { public void onClose(WebSocket webSocket, int code, String reason, boolean remote) { logger.debug("On connection close (resource descriptor: {}, code: {}, reason: {}, remote: {})", webSocket.getResourceDescriptor(), code, reason, remote); - sockets.get(webSocket).disconnect(); - sockets.remove(webSocket); + WebSocketReceiver receiver = sockets.get(webSocket); + if(receiver != null) { + receiver.disconnect(); + sockets.remove(webSocket); + } else { + logger.debug("Receiver for socket not found: {}", webSocket); + } } @Override @@ -167,8 +172,8 @@ public void close() { } try { - sockets.clear(); server.stop(TIMEOUT_IN_MILLIS); + sockets.clear(); } catch (InterruptedException e) { // Do second try try { From 7cd50d33c7a219f90cde73e69fad6287a44d66b8 Mon Sep 17 00:00:00 2001 From: Eugene Pakhomov Date: Wed, 27 Jun 2018 13:26:35 +0200 Subject: [PATCH 2/3] Missing imports added --- ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java index 3f9274d99..f938d944c 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONServer.java @@ -33,12 +33,14 @@ of this software and associated documentation files (the "Software"), to deal import eu.chargetime.ocpp.wss.WssFactoryBuilder; import org.java_websocket.drafts.Draft; import org.java_websocket.drafts.Draft_6455; +import org.java_websocket.protocols.IProtocol; import org.java_websocket.protocols.Protocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.SSLContext; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.UUID; import java.util.concurrent.CompletionStage; From 4e6628e784a40e5e2ad163ca450398630e2df434 Mon Sep 17 00:00:00 2001 From: Eugene Pakhomov Date: Wed, 27 Jun 2018 13:53:55 +0200 Subject: [PATCH 3/3] Seems like random integration test failure due to concurrency issues (locally test runs ok) Some logging added and timeouts increased (to be slightly greater than server shutdown timeout) to debug the issue --- .../java/eu/chargetime/ocpp/test/FakeCentralSystem.java | 6 ++++-- .../eu/chargetime/ocpp/test/base/json/JSONBaseSpec.groovy | 4 ++-- .../main/java/eu/chargetime/ocpp/WebSocketTransmitter.java | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java b/ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java index 074863ad9..1846bfc48 100644 --- a/ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java +++ b/ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java @@ -104,14 +104,16 @@ public void clientLost() { } public void started() throws Exception { + final String host = "127.0.0.1"; + if (!isStarted) { int port = 8890; if (server instanceof JSONTestServer) { port = 8887; } - server.open("127.0.0.1", port, dummyHandlers.generateServerEventsHandler()); - logger.info("Server started on port: {}", port); + server.open(host, port, dummyHandlers.generateServerEventsHandler()); + logger.info("Server started on host: {}, port: {}", host, port); isStarted = true; } } diff --git a/ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/base/json/JSONBaseSpec.groovy b/ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/base/json/JSONBaseSpec.groovy index 4afb46742..5c4d57b05 100644 --- a/ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/base/json/JSONBaseSpec.groovy +++ b/ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/base/json/JSONBaseSpec.groovy @@ -14,7 +14,7 @@ abstract class JSONBaseSpec extends Specification { FakeChargePoint chargePoint = new FakeChargePoint() def setupSpec() { - def conditions = new PollingConditions(timeout: 10) + def conditions = new PollingConditions(timeout: 11) // When a Central System is running centralSystem.started() @@ -36,7 +36,7 @@ abstract class JSONBaseSpec extends Specification { } def cleanupSpec() { - def conditions = new PollingConditions(timeout: 10) + def conditions = new PollingConditions(timeout: 11) centralSystem.stopped() diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java index 88f021473..d06eee936 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java @@ -112,6 +112,9 @@ public void onError(Exception ex) { } configure(); + + logger.debug("Trying to connect to: {}", resource); + try { client.connectBlocking(); closed = false;