From 7a81f5ccd29718fb4fd5e5f38cb6b3539fc1948e Mon Sep 17 00:00:00 2001 From: Eugene Pakhomov Date: Wed, 25 Apr 2018 16:22:38 +0200 Subject: [PATCH 1/2] Critical Sonar complains resolved BaseWssFactoryBuilder and BaseWssSocketBUilder updated to be more flexible and testable Tests added for wss/* classes --- .../eu/chargetime/ocpp/JSONCommunicator.java | 3 + .../eu/chargetime/ocpp/SOAPCommunicator.java | 29 +++-- .../ocpp/wss/BaseWssFactoryBuilder.java | 2 + .../ocpp/wss/BaseWssSocketBuilder.java | 40 +++++- .../ocpp/wss/BaseWssFactoryBuilderTest.java | 65 ++++++++++ .../ocpp/wss/BaseWssSocketBuilderTest.java | 119 ++++++++++++++++++ .../CustomSSLWebSocketServerFactoryTest.java | 103 +++++++++++++++ 7 files changed, 343 insertions(+), 18 deletions(-) create mode 100644 ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java create mode 100644 ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java create mode 100644 ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java index a8b1d1d33..c49889ffe 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java @@ -154,7 +154,10 @@ protected Message parse(Object json) { ((CallErrorMessage) message).setErrorCode(array.get(INDEX_CALLERROR_ERRORCODE).getAsString()); ((CallErrorMessage) message).setErrorDescription(array.get(INDEX_CALLERROR_DESCRIPTION).getAsString()); ((CallErrorMessage) message).setRawPayload(array.get(INDEX_CALLERROR_PAYLOAD).toString()); + } else { + throw new IllegalArgumentException("Unknown message type"); } + message.setId(array.get(INDEX_UNIQUEID).getAsString()); return message; diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java index 29b19bd29..214eb2c67 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java @@ -1,4 +1,6 @@ -package eu.chargetime.ocpp;/* +package eu.chargetime.ocpp; + +/* ChargeTime.eu - Java-OCA-OCPP MIT License @@ -63,9 +65,9 @@ public T unpackPayload(Object payload, Class type) { T output = null; try { Document input = (Document) payload; - input = setNamespace(input, "urn://Ocpp/Cs/2015/10/"); + setNamespace(input, "urn://Ocpp/Cs/2015/10/"); Unmarshaller unmarshaller = JAXBContext.newInstance(type).createUnmarshaller(); - JAXBElement jaxbElement = (JAXBElement) unmarshaller.unmarshal(input, type); + JAXBElement jaxbElement = unmarshaller.unmarshal(input, type); output = jaxbElement.getValue(); } catch (JAXBException e) { logger.warn("unpackPayload() failed", e); @@ -82,17 +84,14 @@ public Object packPayload(Object payload) { factory.setNamespaceAware(false); document = factory.newDocumentBuilder().newDocument(); marshaller.marshal(payload, document); - document = setNamespace(document, hostInfo.getNamespace()); - } catch (JAXBException e) { + setNamespace(document, hostInfo.getNamespace()); + } catch (JAXBException | ParserConfigurationException e) { logger.warn("packPayload() failed", e); - } catch (ParserConfigurationException e) { - logger.warn("packPayload() failed", e); } return document; } - private Document setNamespace(Document document, String namespace) { - Document output = document; + private void setNamespace(Document document, String namespace) { Element orgElement = document.getDocumentElement(); Element newElement = document.createElementNS(namespace, orgElement.getNodeName()); @@ -101,8 +100,7 @@ private Document setNamespace(Document document, String namespace) { appendChildNS(document, newElement, childNodes.item(i), namespace); } - output.replaceChild(newElement, orgElement); - return output; + document.replaceChild(newElement, orgElement); } private void appendChildNS(Document doc, Node destination, Node child, String namespace) { @@ -173,7 +171,7 @@ private Object createMessage(String uniqueId, String action, Document payload, b createMessageHeader(uniqueId, action, isResponse, message); if (isResponse) { - payload = setNamespace(payload, hostInfo.isClient() ? SOAPHostInfo.NAMESPACE_CHARGEBOX : SOAPHostInfo.NAMESPACE_CENTRALSYSTEM); + setNamespace(payload, hostInfo.isClient() ? SOAPHostInfo.NAMESPACE_CHARGEBOX : SOAPHostInfo.NAMESPACE_CENTRALSYSTEM); } message.getSOAPBody().addDocument(payload); @@ -260,7 +258,8 @@ public Message parseMessage() { String relatesTo = getElementValue(HEADER_RELATESTO); String action = getElementValue(HEADER_ACTION); - if (relatesTo != null && !"".equals(relatesTo) && action.endsWith("Response")) { + + if (relatesTo != null && !relatesTo.isEmpty() && action != null && action.endsWith("Response")) { if (soapMessage.getSOAPBody().hasFault()) output = parseError(); else @@ -269,7 +268,7 @@ public Message parseMessage() { output = parseCall(); } - if (action != null && !"".equals(action)) + if (action != null && !action.isEmpty()) output.setAction(action.substring(1)); if (!soapMessage.getSOAPBody().hasFault()) @@ -302,7 +301,7 @@ private CallErrorMessage parseError() { message.setErrorDescription(fault.getFaultReasonTexts().next().toString()); } catch (SOAPException e) { - e.printStackTrace(); + logger.error("Parse error", e); } return message; diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilder.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilder.java index 7861fa988..853a7ad85 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilder.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilder.java @@ -59,6 +59,8 @@ public BaseWssFactoryBuilder sslContext(SSLContext sslContext) { @Override public WebSocketServerFactory build() { + verify(); + return ciphers == null ? new DefaultSSLWebSocketServerFactory(sslContext) : new CustomSSLWebSocketServerFactory(sslContext, ciphers); diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilder.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilder.java index 6f3583bd6..55b6eed93 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilder.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilder.java @@ -40,11 +40,14 @@ public class BaseWssSocketBuilder implements WssSocketBuilder { public static final int DEFAULT_WSS_PORT = 443; private Proxy proxy = Proxy.NO_PROXY; + private SocketFactory socketFactory = Socket::new; private SSLSocketFactory sslSocketFactory; private boolean tcpNoDelay; private boolean reuseAddr; private boolean autoClose = true; private URI uri; + private InetSocketAddressFactory inetSocketAddressFactory = + (host, port) -> new InetSocketAddress(host, port); // 0 for infinite timeout private int connectionTimeout = 0; @@ -65,6 +68,16 @@ public BaseWssSocketBuilder sslSocketFactory(SSLSocketFactory sslSocketFactory) return this; } + public BaseWssSocketBuilder socketFactory(SocketFactory socketFactory) { + this.socketFactory = socketFactory; + return this; + } + + public BaseWssSocketBuilder inetSocketAddressFactory(InetSocketAddressFactory inetSocketAddressFactory) { + this.inetSocketAddressFactory = inetSocketAddressFactory; + return this; + } + public BaseWssSocketBuilder tcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; return this; @@ -93,12 +106,15 @@ public BaseWssSocketBuilder connectionTimeout(int connectionTimeout) { @Override public Socket build() throws IOException { - Socket socket = new Socket(proxy); + verify(true); + + Socket socket = socketFactory.getSocket(proxy); socket.setTcpNoDelay(tcpNoDelay); socket.setReuseAddress(reuseAddr); - if( !socket.isBound() ) { - socket.connect(new InetSocketAddress(uri.getHost(), getPort(uri)), connectionTimeout); + if(!socket.isBound()) { + socket.connect(inetSocketAddressFactory.getInetSocketAddress(uri.getHost(), getPort(uri)), + connectionTimeout); } return sslSocketFactory.createSocket(socket, uri.getHost(), getPort(uri), autoClose); @@ -106,9 +122,27 @@ public Socket build() throws IOException { @Override public void verify() { + verify(false); + } + + public interface SocketFactory { + Socket getSocket(Proxy proxy); + } + + public interface InetSocketAddressFactory { + InetSocketAddress getInetSocketAddress(String host, int port); + } + + private void verify(boolean complete) { if(sslSocketFactory == null) { throw new IllegalStateException("sslSocketFactory must be set"); } + + if(complete) { + if(uri == null) { + throw new IllegalStateException("uri must be set"); + } + } } private int getPort(URI uri) { diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java new file mode 100644 index 000000000..2b9f47d58 --- /dev/null +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java @@ -0,0 +1,65 @@ +package eu.chargetime.ocpp.wss; + +import org.java_websocket.WebSocketServerFactory; +import org.java_websocket.server.DefaultSSLWebSocketServerFactory; +import org.junit.Test; + +import javax.net.ssl.SSLContext; + +import java.util.List; + +import static org.hamcrest.CoreMatchers.any; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; + +/** + * Test for {@link BaseWssFactoryBuilder} + */ +public class BaseWssFactoryBuilderTest { + + @Test + public void builder() { + BaseWssFactoryBuilder builder = BaseWssFactoryBuilder.builder(); + assertThat(builder, is(any(BaseWssFactoryBuilder.class))); + } + + @Test + public void sslContext() { + SSLContext sslContext = mock(SSLContext.class); + BaseWssFactoryBuilder.builder().sslContext(sslContext).verify(); + } + + @Test + public void buildWithCiphers() { + SSLContext sslContext = mock(SSLContext.class); + List cihpers = mock(List.class); + WebSocketServerFactory factory = BaseWssFactoryBuilder.builder() + .sslContext(sslContext) + .ciphers(cihpers) + .build(); + + assertThat(factory, is(instanceOf(CustomSSLWebSocketServerFactory.class))); + } + + @Test + public void buildWithoutCiphers() { + SSLContext sslContext = mock(SSLContext.class); + WebSocketServerFactory factory = BaseWssFactoryBuilder.builder() + .sslContext(sslContext) + .build(); + + assertThat(factory, is(instanceOf(DefaultSSLWebSocketServerFactory.class))); + } + + @Test(expected = IllegalStateException.class) + public void failBuild() { + BaseWssFactoryBuilder.builder().build(); + } + + @Test(expected = IllegalStateException.class) + public void verify() { + BaseWssFactoryBuilder.builder().verify(); + } +} diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java new file mode 100644 index 000000000..80ed69b6e --- /dev/null +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java @@ -0,0 +1,119 @@ +package eu.chargetime.ocpp.wss; + +import org.hamcrest.CoreMatchers; +import org.junit.Test; + +import javax.net.ssl.SSLSocketFactory; + +import java.io.IOException; +import java.net.*; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +/** + * Test for {@link BaseWssFactoryBuilder} + */ +public class BaseWssSocketBuilderTest { + + @Test + public void builder() { + BaseWssSocketBuilder builder = BaseWssSocketBuilder.builder(); + assertThat(builder, is(CoreMatchers.any(BaseWssSocketBuilder.class))); + } + + + @Test + public void build() throws IOException, URISyntaxException { + SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); + Socket expectedSocket = mock(Socket.class); + Socket socket = mock(Socket.class); + when(socket.isBound()).thenReturn(false); + when(sslSocketFactory.createSocket(socket,"fake", 101, false)).thenReturn(expectedSocket); + Proxy proxy = mock(Proxy.class); + BaseWssSocketBuilder.SocketFactory socketFactory = mock(BaseWssSocketBuilder.SocketFactory.class); + when(socketFactory.getSocket(any(Proxy.class))).thenReturn(socket); + BaseWssSocketBuilder.InetSocketAddressFactory inetSocketAddressFactory = + mock(BaseWssSocketBuilder.InetSocketAddressFactory.class); + InetSocketAddress inetSocketAddress = mock(InetSocketAddress.class); + when(inetSocketAddressFactory.getInetSocketAddress(any(String.class), any(int.class))) + .thenReturn(inetSocketAddress); + + Socket builtSocket = BaseWssSocketBuilder.builder() + .socketFactory(socketFactory) + .sslSocketFactory(sslSocketFactory) + .inetSocketAddressFactory(inetSocketAddressFactory) + .proxy(proxy) + .tcpNoDelay(true) + .reuseAddr(true) + .autoClose(false) + .connectionTimeout(5000) + .uri(new URI("http://fake:101")) + .build(); + + assertThat(builtSocket, is(expectedSocket)); + + verify(socketFactory).getSocket(proxy); + verify(socket).setTcpNoDelay(true); + verify(socket).setReuseAddress(true); + verify(inetSocketAddressFactory).getInetSocketAddress("fake", 101); + verify(socket).connect(inetSocketAddress, 5000); + verify(sslSocketFactory).createSocket(socket, "fake", 101, false); + } + + @Test + public void buildSocketIsBound() throws IOException, URISyntaxException { + SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); + Socket expectedSocket = mock(Socket.class); + Socket socket = mock(Socket.class); + when(socket.isBound()).thenReturn(true); + when(sslSocketFactory.createSocket(socket,"fake", 101, false)).thenReturn(expectedSocket); + Proxy proxy = mock(Proxy.class); + BaseWssSocketBuilder.SocketFactory socketFactory = mock(BaseWssSocketBuilder.SocketFactory.class); + when(socketFactory.getSocket(any(Proxy.class))).thenReturn(socket); + BaseWssSocketBuilder.InetSocketAddressFactory inetSocketAddressFactory = + mock(BaseWssSocketBuilder.InetSocketAddressFactory.class); + InetSocketAddress inetSocketAddress = mock(InetSocketAddress.class); + when(inetSocketAddressFactory.getInetSocketAddress(any(String.class), any(int.class))) + .thenReturn(inetSocketAddress); + + Socket builtSocket = BaseWssSocketBuilder.builder() + .socketFactory(socketFactory) + .sslSocketFactory(sslSocketFactory) + .inetSocketAddressFactory(inetSocketAddressFactory) + .proxy(proxy) + .tcpNoDelay(true) + .reuseAddr(true) + .autoClose(false) + .connectionTimeout(5000) + .uri(new URI("http://fake:101")) + .build(); + + assertThat(builtSocket, is(expectedSocket)); + + verify(socketFactory).getSocket(proxy); + verify(socket).setTcpNoDelay(true); + verify(socket).setReuseAddress(true); + verify(inetSocketAddressFactory, never()).getInetSocketAddress(any(String.class), any(int.class)); + verify(socket, never()).connect(any(InetSocketAddress.class), any(int.class)); + verify(sslSocketFactory).createSocket(socket, "fake", 101, false); + } + + @Test(expected = IllegalStateException.class) + public void failBuildNoFactory() throws IOException { + BaseWssSocketBuilder.builder().build(); + } + + @Test(expected = IllegalStateException.class) + public void failBuildNoUri() throws IOException { + SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); + BaseWssSocketBuilder.builder().sslSocketFactory(sslSocketFactory).build(); + } + + @Test(expected = IllegalStateException.class) + public void testVerify() { + BaseWssSocketBuilder.builder().verify(); + } +} diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java new file mode 100644 index 000000000..7be0149a5 --- /dev/null +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java @@ -0,0 +1,103 @@ +package eu.chargetime.ocpp.wss; + +import org.java_websocket.SSLSocketChannel2; +import org.junit.Test; + +import javax.net.ssl.*; + +import java.io.IOException; +import java.nio.channels.ByteChannel; +import java.nio.channels.SelectionKey; +import java.nio.channels.SocketChannel; +import java.security.KeyManagementException; +import java.security.Provider; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * Test for {@link CustomSSLWebSocketServerFactory} + */ +public class CustomSSLWebSocketServerFactoryTest { + + @Test + public void wrapChannel() throws IOException { + SSLEngine sslEngine = mock(SSLEngine.class); + SSLSession sslSession = mock(SSLSession.class); + SSLContextSpi sslContextSpi = new TestSSLContextSpi(sslEngine); + SSLContext sslContext = new TestSSLContext(sslContextSpi); + SocketChannel channel = mock(SocketChannel.class); + SelectionKey key = mock(SelectionKey.class); + List ciphers = Arrays.asList("cipher2", "cipher3", "cipher4"); + + when(sslEngine.getEnabledCipherSuites()).thenReturn(new String[]{"cipher1", "cipher2", "cipher3"}); + when(sslEngine.getHandshakeStatus()).thenReturn(SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING); + when(sslEngine.getSession()).thenReturn(sslSession); + + CustomSSLWebSocketServerFactory factory = new CustomSSLWebSocketServerFactory(sslContext, ciphers); + ByteChannel byteChannel = factory.wrapChannel(channel, key); + + assertThat(byteChannel, instanceOf(SSLSocketChannel2.class)); + + verify(sslEngine).setEnabledCipherSuites(new String[]{"cipher2", "cipher3"}); + verify(sslEngine).setUseClientMode(false); + } + + static class TestSSLContext extends SSLContext { + protected TestSSLContext(SSLContextSpi sslContextSpi) { + super(sslContextSpi, null, null); + } + } + + static class TestSSLContextSpi extends SSLContextSpi { + + private SSLEngine sslEngine; + + public TestSSLContextSpi(SSLEngine sslEngine) { + this.sslEngine = sslEngine; + } + + @Override + protected void engineInit(KeyManager[] keyManagers, TrustManager[] trustManagers, SecureRandom secureRandom) throws KeyManagementException { + throw new UnsupportedOperationException(); + } + + @Override + protected SSLSocketFactory engineGetSocketFactory() { + throw new UnsupportedOperationException(); + } + + @Override + protected SSLServerSocketFactory engineGetServerSocketFactory() { + throw new UnsupportedOperationException(); + } + + @Override + protected SSLEngine engineCreateSSLEngine() { + return sslEngine; + } + + @Override + protected SSLEngine engineCreateSSLEngine(String s, int i) { + return sslEngine; + } + + @Override + protected SSLSessionContext engineGetServerSessionContext() { + throw new UnsupportedOperationException(); + } + + @Override + protected SSLSessionContext engineGetClientSessionContext() { + throw new UnsupportedOperationException(); + } + } +} From 84f123f6fafda5867e3742d205e895241500d7b2 Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 21 May 2018 18:02:50 +0200 Subject: [PATCH 2/2] Tests in wss package are renamed according to the common pattern Logging of message body added to JSON communicator in case of unknown message type Cosmetics --- .../eu/chargetime/ocpp/JSONCommunicator.java | 7 ++++++- .../ocpp/wss/BaseWssFactoryBuilderTest.java | 12 ++++++------ .../ocpp/wss/BaseWssSocketBuilderTest.java | 16 ++++++++-------- .../wss/CustomSSLWebSocketServerFactoryTest.java | 2 +- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java index c49889ffe..e5b941f76 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java @@ -5,6 +5,8 @@ import eu.chargetime.ocpp.model.CallMessage; import eu.chargetime.ocpp.model.CallResultMessage; import eu.chargetime.ocpp.model.Message; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.Type; import java.text.ParseException; @@ -46,6 +48,8 @@ of this software and associated documentation files (the "Software"), to deal */ public class JSONCommunicator extends Communicator { + private static final Logger logger = LoggerFactory.getLogger(JSONCommunicator.class); + private static final int INDEX_MESSAGEID = 0; private static final int TYPENUMBER_CALL = 2; private static final int INDEX_CALL_ACTION = 2; @@ -138,7 +142,7 @@ protected Object makeCallError(String uniqueId, String action, String errorCode, @Override protected Message parse(Object json) { - Message message = null; + Message message; JsonParser parser = new JsonParser(); JsonArray array = parser.parse(json.toString()).getAsJsonArray(); @@ -155,6 +159,7 @@ protected Message parse(Object json) { ((CallErrorMessage) message).setErrorDescription(array.get(INDEX_CALLERROR_DESCRIPTION).getAsString()); ((CallErrorMessage) message).setRawPayload(array.get(INDEX_CALLERROR_PAYLOAD).toString()); } else { + logger.error("Unknown message type of message: {}", json.toString()); throw new IllegalArgumentException("Unknown message type"); } diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java index 2b9f47d58..defb4b553 100644 --- a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssFactoryBuilderTest.java @@ -20,19 +20,19 @@ public class BaseWssFactoryBuilderTest { @Test - public void builder() { + public void builder_returnsBuilder() { BaseWssFactoryBuilder builder = BaseWssFactoryBuilder.builder(); assertThat(builder, is(any(BaseWssFactoryBuilder.class))); } @Test - public void sslContext() { + public void builder_withSSLContextSet_throwsNoException() { SSLContext sslContext = mock(SSLContext.class); BaseWssFactoryBuilder.builder().sslContext(sslContext).verify(); } @Test - public void buildWithCiphers() { + public void builder_builtWithCiphers_returnsCustomSSLWebSocketServerFactory() { SSLContext sslContext = mock(SSLContext.class); List cihpers = mock(List.class); WebSocketServerFactory factory = BaseWssFactoryBuilder.builder() @@ -44,7 +44,7 @@ public void buildWithCiphers() { } @Test - public void buildWithoutCiphers() { + public void builder_builtWithoutCiphers_returnsDefaultSSLWebSocketServerFactory() { SSLContext sslContext = mock(SSLContext.class); WebSocketServerFactory factory = BaseWssFactoryBuilder.builder() .sslContext(sslContext) @@ -54,12 +54,12 @@ public void buildWithoutCiphers() { } @Test(expected = IllegalStateException.class) - public void failBuild() { + public void builder_withoutSSLContextSet_failsBuildWithException() { BaseWssFactoryBuilder.builder().build(); } @Test(expected = IllegalStateException.class) - public void verify() { + public void builder_withoutSSLContextSet_failsVerificationWithException() { BaseWssFactoryBuilder.builder().verify(); } } diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java index 80ed69b6e..168ba7f15 100644 --- a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/BaseWssSocketBuilderTest.java @@ -19,19 +19,19 @@ public class BaseWssSocketBuilderTest { @Test - public void builder() { + public void builder_returnsBuilder() { BaseWssSocketBuilder builder = BaseWssSocketBuilder.builder(); assertThat(builder, is(CoreMatchers.any(BaseWssSocketBuilder.class))); } @Test - public void build() throws IOException, URISyntaxException { + public void builder_withUnboundedSocket_connectsAndReturnsProperlyInitializedSocket() throws IOException, URISyntaxException { SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); Socket expectedSocket = mock(Socket.class); Socket socket = mock(Socket.class); when(socket.isBound()).thenReturn(false); - when(sslSocketFactory.createSocket(socket,"fake", 101, false)).thenReturn(expectedSocket); + when(sslSocketFactory.createSocket(socket, "fake", 101, false)).thenReturn(expectedSocket); Proxy proxy = mock(Proxy.class); BaseWssSocketBuilder.SocketFactory socketFactory = mock(BaseWssSocketBuilder.SocketFactory.class); when(socketFactory.getSocket(any(Proxy.class))).thenReturn(socket); @@ -64,12 +64,12 @@ public void build() throws IOException, URISyntaxException { } @Test - public void buildSocketIsBound() throws IOException, URISyntaxException { + public void builder_withBoundedSocket_returnsProperlyInitializedSocket() throws IOException, URISyntaxException { SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); Socket expectedSocket = mock(Socket.class); Socket socket = mock(Socket.class); when(socket.isBound()).thenReturn(true); - when(sslSocketFactory.createSocket(socket,"fake", 101, false)).thenReturn(expectedSocket); + when(sslSocketFactory.createSocket(socket, "fake", 101, false)).thenReturn(expectedSocket); Proxy proxy = mock(Proxy.class); BaseWssSocketBuilder.SocketFactory socketFactory = mock(BaseWssSocketBuilder.SocketFactory.class); when(socketFactory.getSocket(any(Proxy.class))).thenReturn(socket); @@ -102,18 +102,18 @@ public void buildSocketIsBound() throws IOException, URISyntaxException { } @Test(expected = IllegalStateException.class) - public void failBuildNoFactory() throws IOException { + public void builder_withNoFactorySet_failsBuildWithException() throws IOException { BaseWssSocketBuilder.builder().build(); } @Test(expected = IllegalStateException.class) - public void failBuildNoUri() throws IOException { + public void builder_withNoURISet_failsBuildWithException() throws IOException { SSLSocketFactory sslSocketFactory = mock(SSLSocketFactory.class); BaseWssSocketBuilder.builder().sslSocketFactory(sslSocketFactory).build(); } @Test(expected = IllegalStateException.class) - public void testVerify() { + public void builder_withNoFactorySet_failsVerificationWithException() { BaseWssSocketBuilder.builder().verify(); } } diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java index 7be0149a5..041480016 100644 --- a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/wss/CustomSSLWebSocketServerFactoryTest.java @@ -29,7 +29,7 @@ public class CustomSSLWebSocketServerFactoryTest { @Test - public void wrapChannel() throws IOException { + public void factory_initializedProperly_returnsSSLWrappedChannel() throws IOException { SSLEngine sslEngine = mock(SSLEngine.class); SSLSession sslSession = mock(SSLSession.class); SSLContextSpi sslContextSpi = new TestSSLContextSpi(sslEngine);