From cf6f402aa2cb0142aaee7ceaf2af6921c1244a87 Mon Sep 17 00:00:00 2001 From: Markus Stoy Date: Tue, 14 Oct 2025 17:47:24 +0100 Subject: [PATCH] fix IntelliJ warnings --- .../com/lmax/nanofix/ChannelInitializer.java | 15 ++--- .../main/java/com/lmax/nanofix/FixClient.java | 6 +- .../lmax/nanofix/FixClientConfiguration.java | 2 +- .../com/lmax/nanofix/FixClientFactory.java | 10 +--- .../java/com/lmax/nanofix/FixSession.java | 4 +- .../main/java/com/lmax/nanofix/FixUtil.java | 4 +- .../concurrent/NamedThreadFactory.java | 2 +- .../com/lmax/nanofix/incoming/FixMessage.java | 2 +- .../nanofix/incoming/FixMessagePublisher.java | 2 +- .../nanofix/incoming/FixParseException.java | 5 +- .../incoming/FixStreamMessageParser.java | 6 +- .../lmax/nanofix/incoming/FixTagParser.java | 4 +- .../com/lmax/nanofix/outgoing/FixMessage.java | 6 +- .../nanofix/outgoing/FixMessageBuilder.java | 5 +- .../transport/AsyncTcpSocketFactory.java | 55 ++++++++----------- .../PublishingConnectionObserver.java | 2 +- .../lmax/nanofix/transport/TcpTransport.java | 23 +++----- .../lmax/nanofix/byteoperations/BitsTest.java | 18 +++--- .../nanofix/byteoperations/ByteUtilTest.java | 24 +++----- .../nanofix/concurrent/ThreadBlockerTest.java | 11 ++-- .../incoming/FixMessageFactoryTest.java | 11 ++-- .../lmax/nanofix/incoming/FixMessageTest.java | 10 ++-- .../lmax/nanofix/incoming/FixMessageUtil.java | 5 +- ...ixStreamMessageParserPermutationsTest.java | 46 +++++++--------- .../incoming/FixStreamMessageParserTest.java | 34 ++++++------ .../nanofix/incoming/FixTagParserTest.java | 5 +- .../outgoing/FixMessageBuilderTest.java | 2 +- 27 files changed, 135 insertions(+), 184 deletions(-) diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java b/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java index 77e8340..16ff9d0 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java @@ -50,15 +50,12 @@ class ChannelInitializer implements ConnectionObserver { @Override public void connectionEstablished() { outboundMessageSender.initialiseOutboundChannel(transport.getWritableByteChannel()); - channelReaderExecutorService.execute(new Runnable() { - @Override - public void run() { - final ReadableByteChannel readableByteChannel = transport.getReadableByteChannel(); - try { - inputStreamReader.blockingStart(readableByteChannel); - } catch (RuntimeException e) { - LOGGER.error("Exception thrown while reading from stream, channel: " + readableByteChannel, e); - } + channelReaderExecutorService.execute(() -> { + final ReadableByteChannel readableByteChannel = transport.getReadableByteChannel(); + try { + inputStreamReader.blockingStart(readableByteChannel); + } catch (RuntimeException e) { + LOGGER.error("Exception thrown while reading from stream, channel: {}", readableByteChannel, e); } }); countDownLatch.countDown(); diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java index 307d983..a440e04 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java @@ -73,7 +73,7 @@ public void send(final String message) { } /** - * Sends a array of bytes string. + * Sends an array of bytes string. * * @param bytes a FIX messages. */ @@ -82,7 +82,7 @@ public void send(final byte[] bytes) { } /** - * Initiates a TCP connection with the remote host specified on construction.. + * Initiates a TCP connection with the remote host specified on construction. */ public void connect() { transportOps.connect(); @@ -94,7 +94,7 @@ public void connect() { } /** - * Initiates a TCP connection with the remote host specified on construction.. + * Initiates a TCP connection with the remote host specified on construction. * * @param timeout the time to wait for a connection to be established * @param units the {@link TimeUnit unit} of the timeout diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java index a2973de..f308709 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java @@ -38,7 +38,7 @@ public static FixClientConfiguration createInitiatingFixClient(final String host } /** - * Listening listening fix client that will listen for inbound tcp connections on port + * Listening fix client that will listen for inbound tcp connections on port * * @param port tcp port number int between 0 and 65535 */ diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java index 1f9cbcc..13ebbb5 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java @@ -42,12 +42,8 @@ public final class FixClientFactory { private static final Logger LOGGER = LoggerFactory.getLogger(FixClientFactory.class); - static final Thread.UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread thread, Throwable throwable) { - LOGGER.error("Uncaught Exception thrown in thread: " + thread.getName(), throwable); - } - }; + static final Thread.UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = (thread, throwable) -> + LOGGER.error("Uncaught Exception thrown in thread: {}", thread.getName(), throwable); private FixClientFactory() { } @@ -68,7 +64,7 @@ public static FixClient createFixClient(final String host, final int port) { } /** - * Create an listening fix client that will listen for inbound tcp connections on port + * Create a listening fix client that will listen for inbound tcp connections on port * * @param port tcp port number int between 0 and 65535 */ diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java index 022875d..8b9b9e8 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java @@ -23,12 +23,10 @@ import com.lmax.nanofix.outgoing.OutboundMessageHandler; public class FixSession { - private int outboundSequenceNumber; - private OutboundMessageHandler outboundMessageSender; + private final OutboundMessageHandler outboundMessageSender; public FixSession(final OutboundMessageHandler outboundMessageSender) { this.outboundMessageSender = outboundMessageSender; - this.outboundSequenceNumber = 1; } public void send(final Collection messages) { diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java index fac0dce..b370f3a 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java @@ -38,8 +38,8 @@ public static Charset getCharset() { public static byte[] newMessage(String... tags) { StringBuilder sb = new StringBuilder(); - for (int i = 0, n = tags.length; i < n; i++) { - sb.append(tags[i]); + for (final String tag : tags) { + sb.append(tag); sb.append(FixTagParser.SOH); } return sb.toString().getBytes(FixUtil.getCharset()); diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java index 04f5915..83f523c 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java @@ -28,7 +28,7 @@ public class NamedThreadFactory implements ThreadFactory { private final String name; private final boolean daemon; private final AtomicInteger count = new AtomicInteger(0); - private Thread.UncaughtExceptionHandler uncaughtExceptionHandler; + private final Thread.UncaughtExceptionHandler uncaughtExceptionHandler; public NamedThreadFactory(final String name, boolean daemon, Thread.UncaughtExceptionHandler uncaughtExceptionHandler) { this.name = name; diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java index 9641c45..c8c4250 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java @@ -43,7 +43,7 @@ public boolean hasValue(int tagId) { } public void replace(int tagId, String value) { - final LinkedList values = new LinkedList(); + final LinkedList values = new LinkedList<>(); values.add(value); multimap.replaceValues(tagId, values); } diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java index 54d7231..80698e0 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java @@ -20,7 +20,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public class FixMessagePublisher implements FixMessageHandler { - List handlers = new CopyOnWriteArrayList(); + List handlers = new CopyOnWriteArrayList<>(); public void subscribeToAllMessages(final FixMessageHandler fixMessageHandler) { handlers.add(fixMessageHandler); diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java index 211f8c0..86f0a30 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java @@ -16,9 +16,8 @@ package com.lmax.nanofix.incoming; -@SuppressWarnings("serial") -public final class FixParseException - extends RuntimeException { +public final class FixParseException extends RuntimeException { + public FixParseException(final String msg) { super(msg); } diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java index cf7a15f..830f757 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java @@ -69,7 +69,7 @@ public void parse(final ByteBuffer segment) { } } catch (final Exception ex) { final String msg = String.format("Exception parsing segment:%n%s %n%s %n adding to %n%s %n%s", - segment.toString(), + segment, new String(segment.array(), 0, segmentLimit, FixUtil.getCharset()), fragmentedMessage.toString(), new String(fragmentedMessage.array(), 0, fragmentedMessage.position(), FixUtil.getCharset())); @@ -118,8 +118,8 @@ private void handleFragmentedMessage(final ByteBuffer segment) { if (-1 != end) { callbackMessage(fragmentedMessage.array(), begin, end); - // our fragmented message didnt need all the bytes in the incoming segment, - // so rewind the segment by the exact number of bytes we didnt use + // our fragmented message didn't need all the bytes in the incoming segment, + // so rewind the segment by the exact number of bytes we didn't use segment.position(segment.position() - (fragmentedMessage.limit() - end)); fragmentedMessage.clear(); } else { diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java index c34fcb9..2949698 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java @@ -97,8 +97,8 @@ private static void raiseException(final String reason, final int equalsIndex) { String msg = String.format("Parse Failed: %s at tagStart=%d equalsIndex=%d message=%s", reason, - Integer.valueOf(tagStart), - Integer.valueOf(equalsIndex), + tagStart, + equalsIndex, new String(message, offset, length, FixUtil.getCharset()).replace('\u0001', '|')); throw new FixParseException(msg); diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java index 6fbce98..34cab4a 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java @@ -32,10 +32,6 @@ public String toFixString() { @Override public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("FixMessage"); - sb.append("{messageWithChecksum='").append(messageWithChecksum).append('\''); - sb.append('}'); - return sb.toString(); + return "FixMessage{messageWithChecksum='" + messageWithChecksum + "'}"; } } diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java index da27fcf..30d1b58 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java @@ -17,7 +17,7 @@ package com.lmax.nanofix.outgoing; import java.math.BigDecimal; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; import com.lmax.nanofix.fields.BusinessRejectionReason; @@ -269,7 +269,7 @@ private String checksum(final String bodyWithLength) { return checksumOverride; } - return String.format("%03d", checksum(bodyWithLength.getBytes(Charset.forName("UTF-8")))); + return String.format("%03d", checksum(bodyWithLength.getBytes(StandardCharsets.UTF_8))); } private int checksum(final byte[] bytes) { @@ -284,7 +284,6 @@ private String messageLength(final String body) { if (messageLengthOverride != null) { return messageLengthOverride; } - return String.valueOf(body.length()); } } diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java index fc5881c..fdf9898 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java @@ -55,48 +55,41 @@ public DelegatingServerSocketChannel bind(final InetSocketAddress socketAddress) @Override public void createSocketOnIncomingConnection(final DelegatingServerSocketChannel serverSocketChannel, final SocketEstablishedCallback socketEstablishedCallback) { - executorService.execute(new Runnable() { - @Override - public void run() { - final SocketChannel socketChannel; + executorService.execute(() -> { + final SocketChannel socketChannel; + try { try { - try { - socketChannel = serverSocketChannel.accept(); - socketEstablishedCallback.onSocketEstablished(socketChannel); - } catch (AsynchronousCloseException e) { - LOGGER.warn("Server socket closed by another thread, while waiting to accept a new inbound connection."); - } catch (ClosedChannelException e) { - LOGGER.warn("Server socket closed, while waiting to accept a new inbound connection.", e); - } catch (IOException e) { - LOGGER.error("IOException occurred while waiting for a connection", e); - throw new GeneralRuntimeException("Failed to accept server socket channel", e); - } - - } catch (RuntimeException e) { - LOGGER.error("Exception thrown: ", e); + socketChannel = serverSocketChannel.accept(); + socketEstablishedCallback.onSocketEstablished(socketChannel); + } catch (AsynchronousCloseException e) { + LOGGER.warn("Server socket closed by another thread, while waiting to accept a new inbound connection."); + } catch (ClosedChannelException e) { + LOGGER.warn("Server socket closed, while waiting to accept a new inbound connection.", e); + } catch (IOException e) { + LOGGER.error("IOException occurred while waiting for a connection", e); + throw new GeneralRuntimeException("Failed to accept server socket channel", e); } + + } catch (RuntimeException e) { + LOGGER.error("Exception thrown: ", e); } }); } @Override public void createSocketOnOutgoingConnection(final InetSocketAddress socketAddress, final SocketEstablishedCallback socketEstablishedCallback) { - executorService.execute(new Runnable() { - @Override - public void run() { + executorService.execute(() -> { + try { + final SocketChannel socketChannel; try { - final SocketChannel socketChannel; - try { - socketChannel = SocketChannel.open(socketAddress); - socketEstablishedCallback.onSocketEstablished(socketChannel); - } catch (IOException e) { - throw new RuntimeException(String.format("Can't connect - host:%s, port:%d", socketAddress.getHostName(), socketAddress.getPort()), e); - } - } catch (RuntimeException e) { - LOGGER.error("Caught Exception while executing", e); + socketChannel = SocketChannel.open(socketAddress); + socketEstablishedCallback.onSocketEstablished(socketChannel); + } catch (IOException e) { + throw new RuntimeException(String.format("Can't connect - host:%s, port:%d", socketAddress.getHostName(), socketAddress.getPort()), e); } + } catch (RuntimeException e) { + LOGGER.error("Caught Exception while executing", e); } - }); } } \ No newline at end of file diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java index 314e6db..6e0f023 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java @@ -21,7 +21,7 @@ public class PublishingConnectionObserver implements ConnectionObserver { - private final Set observers = new CopyOnWriteArraySet(); + private final Set observers = new CopyOnWriteArraySet<>(); public void addObserver(final ConnectionObserver connectionObserver) { observers.add(connectionObserver); diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java index 57105fd..26cf11e 100644 --- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java +++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java @@ -36,8 +36,8 @@ public class TcpTransport implements Transport, ConnectionObserver { private volatile SocketChannel socketChannel; private volatile DelegatingServerSocketChannel serverSocketChannel; - private InetSocketAddress socketAddress; - private SocketFactory asyncTcpSocketFactory; + private final InetSocketAddress socketAddress; + private final SocketFactory asyncTcpSocketFactory; public TcpTransport(final PublishingConnectionObserver publishingTransportObserver, final InetSocketAddress socketAddress, final SocketFactory asyncTcpSocketFactory, final TransportConfig transportConfig) { @@ -50,14 +50,10 @@ public TcpTransport(final PublishingConnectionObserver publishingTransportObserv @Override public void connect() { - asyncTcpSocketFactory.createSocketOnOutgoingConnection(socketAddress, new SocketFactory.SocketEstablishedCallback() { - @Override - public void onSocketEstablished(final SocketChannel socketChannel) { - TcpTransport.this.socketChannel = socketChannel; - publishingTransportObserver.connectionEstablished(); - } + asyncTcpSocketFactory.createSocketOnOutgoingConnection(socketAddress, socketChannel -> { + TcpTransport.this.socketChannel = socketChannel; + publishingTransportObserver.connectionEstablished(); }); - } @Override @@ -147,12 +143,9 @@ public void connectionClosed() { } private void acceptNewConnection() { - asyncTcpSocketFactory.createSocketOnIncomingConnection(serverSocketChannel, new SocketFactory.SocketEstablishedCallback() { - @Override - public void onSocketEstablished(final SocketChannel socketChannel) { - TcpTransport.this.socketChannel = socketChannel; - publishingTransportObserver.connectionEstablished(); - } + asyncTcpSocketFactory.createSocketOnIncomingConnection(serverSocketChannel, socketChannel -> { + TcpTransport.this.socketChannel = socketChannel; + publishingTransportObserver.connectionEstablished(); }); } } diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java index 6495adb..db2a37b 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java @@ -33,63 +33,63 @@ public void setUp() { } @Test - public void shouldWriteAndReadLong() throws Exception { + public void shouldWriteAndReadLong() { long expectedValue = 12893471928734L; Bits.writeLong(data, 3, expectedValue); assertEquals(expectedValue, Bits.readLong(data, 3)); } @Test - public void shouldWriteAndReadNegativeLong() throws Exception { + public void shouldWriteAndReadNegativeLong() { long expectedValue = -722393471928734L; Bits.writeLong(data, 3, expectedValue); assertEquals(expectedValue, Bits.readLong(data, 3)); } @Test - public void shouldWriteAndReadInt() throws Exception { + public void shouldWriteAndReadInt() { int expectedValue = 51345234; Bits.writeInt(data, 3, expectedValue); assertEquals(expectedValue, Bits.readInt(data, 3)); } @Test - public void shouldWriteAndReadNegativeInt() throws Exception { + public void shouldWriteAndReadNegativeInt() { int expectedValue = -34574234; Bits.writeInt(data, 3, expectedValue); assertEquals(expectedValue, Bits.readInt(data, 3)); } @Test - public void shouldWriteAndReadShort() throws Exception { + public void shouldWriteAndReadShort() { short expectedValue = 3452; Bits.writeShort(data, 3, expectedValue); assertEquals(expectedValue, Bits.readShort(data, 3)); } @Test - public void shouldWriteAndReadNegativeShort() throws Exception { + public void shouldWriteAndReadNegativeShort() { short expectedValue = -8123; Bits.writeShort(data, 3, expectedValue); assertEquals(expectedValue, Bits.readShort(data, 3)); } @Test - public void shouldWriteAndReadByte() throws Exception { + public void shouldWriteAndReadByte() { byte expectedValue = 23; Bits.writeShort(data, 3, expectedValue); assertEquals(expectedValue, Bits.readShort(data, 3)); } @Test - public void shouldWriteAndReadNegativeByte() throws Exception { + public void shouldWriteAndReadNegativeByte() { byte expectedValue = -13; Bits.writeByte(data, 3, expectedValue); assertEquals(expectedValue, Bits.readByte(data, 3)); } @Test - public void shouldWriteAndReadBoolean() throws Exception { + public void shouldWriteAndReadBoolean() { Bits.writeBoolean(data, 3, true); assertTrue(Bits.readBoolean(data, 3)); Bits.writeBoolean(data, 3, false); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java index a246436..5d528af 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java @@ -16,7 +16,6 @@ package com.lmax.nanofix.byteoperations; -import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import org.junit.Assert; @@ -107,7 +106,7 @@ public void shouldThrowExceptionWhenJustOutOfRange() { } @Test - public void shouldIdentifyDigitsInAsciiCharacters() throws UnsupportedEncodingException { + public void shouldIdentifyDigitsInAsciiCharacters() { assertTrue("Is a digit", ByteUtil.isAsciiDigit("0".getBytes(StandardCharsets.US_ASCII)[0])); assertTrue("Is a digit", ByteUtil.isAsciiDigit("1".getBytes(StandardCharsets.US_ASCII)[0])); assertTrue("Is a digit", ByteUtil.isAsciiDigit("2".getBytes(StandardCharsets.US_ASCII)[0])); @@ -126,8 +125,7 @@ public void shouldIdentifyDigitsInAsciiCharacters() throws UnsupportedEncodingEx } @Test - public void shouldReadIntegerFromAsciiBytes() - throws UnsupportedEncodingException { + public void shouldReadIntegerFromAsciiBytes() { checkIntegerEncodedAsAsciiValue("0"); checkIntegerEncodedAsAsciiValue("00"); checkIntegerEncodedAsAsciiValue("1"); @@ -139,8 +137,7 @@ public void shouldReadIntegerFromAsciiBytes() } @Test - public void shouldReadLongFromAsciiBytes() - throws UnsupportedEncodingException { + public void shouldReadLongFromAsciiBytes() { checkLongEncodedAsAsciiValue("0"); checkLongEncodedAsAsciiValue("00"); checkLongEncodedAsAsciiValue("1"); @@ -154,20 +151,19 @@ public void shouldReadLongFromAsciiBytes() } @Test - public void shouldConfirmIsIntegerValue() throws UnsupportedEncodingException { + public void shouldConfirmIsIntegerValue() { final byte[] bytes = "123".getBytes(StandardCharsets.US_ASCII); assertTrue(ByteUtil.isInteger(bytes, 0, bytes.length)); } @Test - public void shouldConfirmIsNotIntegerValue() throws UnsupportedEncodingException { + public void shouldConfirmIsNotIntegerValue() { final byte[] bytes = "1;3".getBytes(StandardCharsets.US_ASCII); assertFalse(ByteUtil.isInteger(bytes, 0, bytes.length)); } @Test - public void shouldReplaceSohWithBar() - throws Exception { + public void shouldReplaceSohWithBar() { final byte[] source = "A test string \u0001 containing \u0001 ASCII SOH\u0001".getBytes(StandardCharsets.US_ASCII); final byte[] expected = "A test string | containing | ASCII SOH|".getBytes(StandardCharsets.US_ASCII); @@ -179,7 +175,7 @@ public void shouldReplaceSohWithBar() } @Test - public void shouldEncodeStringAsAscii() throws UnsupportedEncodingException { + public void shouldEncodeStringAsAscii() { final String testSequence = "This is a string of characters that should encode into ascii bytes as simple as 123."; final byte[] result = new byte[testSequence.length()]; @@ -199,15 +195,13 @@ public void shouldOnlyAllowUsAscii() { } - private void checkIntegerEncodedAsAsciiValue(final String integerAsString) - throws UnsupportedEncodingException { + private void checkIntegerEncodedAsAsciiValue(final String integerAsString) { final byte[] bytes = integerAsString.getBytes(StandardCharsets.US_ASCII); final int value = ByteUtil.readIntFromAscii(bytes, 0, bytes.length); assertEquals(Integer.parseInt(integerAsString), value); } - private void checkLongEncodedAsAsciiValue(final String longAsString) - throws UnsupportedEncodingException { + private void checkLongEncodedAsAsciiValue(final String longAsString) { final byte[] bytes = longAsString.getBytes(StandardCharsets.US_ASCII); final long value = ByteUtil.readLongFromAscii(bytes, 0, bytes.length); assertEquals(Long.parseLong(longAsString), value); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java index 924e6d7..7d5279c 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java @@ -30,14 +30,11 @@ public class ThreadBlockerTest { private volatile boolean running = true; @Test - public void threadShouldSwitchBetweenWaitingAndRunningStatesWhenRequested() throws InterruptedException { + public void threadShouldSwitchBetweenWaitingAndRunningStatesWhenRequested() { final ThreadBlocker threadBlocker = new ThreadBlocker(); - final Thread thread = new Thread(new Runnable() { - @Override - public void run() { - while (running) { - threadBlocker.mayWait(); - } + final Thread thread = new Thread(() -> { + while (running) { + threadBlocker.mayWait(); } }); Assert.assertThat(thread.getState(), is(Thread.State.NEW)); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java index d5e300b..3f38e6c 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java @@ -28,16 +28,13 @@ public class FixMessageFactoryTest { private static final byte THREE = 1; @Test - public void shouldConstructFixMessage() throws Exception { + public void shouldConstructFixMessage() { final byte[] msg1 = {ONE, TWO, THREE}; - final FixMessageStreamFactory fixMessageStreamFactory = new FixMessageStreamFactory(new FixMessageHandler() { - @Override - public void onFixMessage(final FixMessage fixMessage) { - Assert.assertThat(fixMessage.getFirstValue(1), is(new String(msg1, 0, 1))); - Assert.assertThat(fixMessage.getFirstValue(2), is(new String(msg1, 1, 2))); + final FixMessageStreamFactory fixMessageStreamFactory = new FixMessageStreamFactory(fixMessage -> { + Assert.assertThat(fixMessage.getFirstValue(1), is(new String(msg1, 0, 1))); + Assert.assertThat(fixMessage.getFirstValue(2), is(new String(msg1, 1, 2))); - } }); fixMessageStreamFactory.messageStart(); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java index b553cd9..0c93fca 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java @@ -30,7 +30,7 @@ public class FixMessageTest { private static final char PIPE_CHAR = '|'; @Test - public void shouldReturnFixMessage() throws Exception { + public void shouldReturnFixMessage() { final Multimap multimap = ArrayListMultimap.create(); multimap.put(1, "firstKey"); multimap.put(2, "secondKey"); @@ -43,7 +43,7 @@ public void shouldReturnFixMessage() throws Exception { } @Test - public void shouldReturnFixMessageWithDuplicateKeys() throws Exception { + public void shouldReturnFixMessageWithDuplicateKeys() { final Multimap multimap = ArrayListMultimap.create(); multimap.put(1, "firstKey"); multimap.put(2, "secondKey"); @@ -57,7 +57,7 @@ public void shouldReturnFixMessageWithDuplicateKeys() throws Exception { } @Test - public void shouldReturnFixMessageWithPipeSeparator() throws Exception { + public void shouldReturnFixMessageWithPipeSeparator() { final Multimap multimap = ArrayListMultimap.create(); multimap.put(1, "firstKey"); multimap.put(2, "secondKey"); @@ -70,7 +70,7 @@ public void shouldReturnFixMessageWithPipeSeparator() throws Exception { } @Test - public void shouldReturnFalseIfFixMessageDoesNotHaveTag() throws Exception { + public void shouldReturnFalseIfFixMessageDoesNotHaveTag() { final Multimap multimap = ArrayListMultimap.create(); final FixMessage fixMessage = new FixMessage(multimap); @@ -78,7 +78,7 @@ public void shouldReturnFalseIfFixMessageDoesNotHaveTag() throws Exception { } @Test - public void shouldReturnFixMessageWithPipeSeparatorWithDuplicateKeys() throws Exception { + public void shouldReturnFixMessageWithPipeSeparatorWithDuplicateKeys() { final Multimap multimap = ArrayListMultimap.create(); multimap.put(1, "firstKey"); multimap.put(2, "secondKey"); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java index e7941b0..a615781 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java @@ -79,8 +79,7 @@ private static void prepareBuffer(final byte[] buffer) { ByteUtil.replace(buffer, 0, buffer.length, BAR, SOH); } - public static void setOrderIdOnNewOrderSingle(final long orderId, final byte[] newOrderSingle) - throws Exception { + public static void setOrderIdOnNewOrderSingle(final long orderId, final byte[] newOrderSingle) { int orderIdOffset = 94; ByteUtil.writeLongAsAscii(newOrderSingle, orderIdOffset, orderId); } @@ -108,7 +107,7 @@ private static void prepareBufferForStringForm(final byte[] buffer) { } @Test - public void shouldSetOrderId() throws Exception { + public void shouldSetOrderId() { byte[] buffer = Arrays.copyOf(NEW_ORDER_SINGLE, NEW_ORDER_SINGLE.length); FixMessageUtil.setOrderIdOnNewOrderSingle(15, buffer); } diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java index f1833fc..eb01f43 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java @@ -85,7 +85,7 @@ public void parseMessagesWithRandomEmptySegments() { } @Test - public void messageBoundaryConditions() throws Exception { + public void messageBoundaryConditions() { final byte[] msgBytes = Bytes.concat(MESSAGE_1, MESSAGE_2, MESSAGE_3); final ByteBuffer bb = ByteBuffer.wrap(msgBytes); final List messages = asList(MESSAGE_1, MESSAGE_2, MESSAGE_3); @@ -104,23 +104,20 @@ public void messageBoundaryConditions() throws Exception { final int consumeFromBoundaryMsg1Msg2 = j; final int consumeFromBoundaryMsg2Msg3 = k; final int consumeFromMsg3Checksum = l; - performIteration(bb, messages, new BytesToConsumeCalculator() { - @Override - public int getBytesToConsume(final int fromPosition) { - if (fromPosition == startOfFirstMessage) { - return consumeFromStart; - } - if (fromPosition < offsetOfFirstMessageChecksum) { - return offsetOfFirstMessageChecksum - fromPosition + consumeFromBoundaryMsg1Msg2; - } - if (fromPosition < offsetOfSecondMessageChecksum) { - return offsetOfSecondMessageChecksum - fromPosition + consumeFromBoundaryMsg2Msg3; - } - if (fromPosition < offsetOfLastMessageChecksum) { - return offsetOfLastMessageChecksum - fromPosition + consumeFromMsg3Checksum; - } - return wholeString.length() - fromPosition; + performIteration(bb, messages, fromPosition -> { + if (fromPosition == startOfFirstMessage) { + return consumeFromStart; } + if (fromPosition < offsetOfFirstMessageChecksum) { + return offsetOfFirstMessageChecksum - fromPosition + consumeFromBoundaryMsg1Msg2; + } + if (fromPosition < offsetOfSecondMessageChecksum) { + return offsetOfSecondMessageChecksum - fromPosition + consumeFromBoundaryMsg2Msg3; + } + if (fromPosition < offsetOfLastMessageChecksum) { + return offsetOfLastMessageChecksum - fromPosition + consumeFromMsg3Checksum; + } + return wholeString.length() - fromPosition; }); } } @@ -130,8 +127,8 @@ public int getBytesToConsume(final int fromPosition) { @SuppressWarnings("checkstyle:regexpsinglelinejava") private void performIteration(final ByteBuffer bb, final List expectedMessages, final BytesToConsumeCalculator bytesConsumer) { - final List messages = new ArrayList(); - final List offsetsUsedForIteration = new ArrayList(); + final List messages = new ArrayList<>(); + final List offsetsUsedForIteration = new ArrayList<>(); final MessageParserCallback callback = new MessageParserCallback() { @Override @@ -167,10 +164,7 @@ public void onParseError(String error) { assertThat(messages.size(), is(expectedMessages.size())); assertThat(messages, containsAllItems(expectedMessages)); - } catch (AssertionError e) { - handleException(bb, offsetsUsedForIteration, e); - throw e; - } catch (RuntimeException e) { + } catch (AssertionError | RuntimeException e) { handleException(bb, offsetsUsedForIteration, e); throw e; } @@ -179,7 +173,7 @@ public void onParseError(String error) { private void handleException(ByteBuffer bb, List offsetsUsedForIteration, Throwable e) { System.out.println("Failed! Message segments used for test: "); - Integer start = 0; + int start = 0; for (Integer end : offsetsUsedForIteration) { System.out.println(FixMessageUtil.convertFixControlCharacters(Arrays.copyOfRange(bb.array(), start, end))); start = end; @@ -187,7 +181,7 @@ private void handleException(ByteBuffer bb, List offsetsUsedForIteratio } private Matcher> containsAllItems(final List expectedMessages) { - return new TypeSafeMatcher>() { + return new TypeSafeMatcher<>() { @Override protected boolean matchesSafely(List actualMessages) { if (actualMessages.size() != expectedMessages.size()) { @@ -195,7 +189,7 @@ protected boolean matchesSafely(List actualMessages) { } Iterator it1 = expectedMessages.iterator(), it2 = actualMessages.iterator(); - for (; it1.hasNext() && it2.hasNext(); ) { + while (it1.hasNext() && it2.hasNext()) { byte[] expected = it1.next(); byte[] actual = it2.next(); diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java index 43011c6..d2b179b 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java @@ -25,8 +25,8 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; public final class FixStreamMessageParserTest { private static final int MAX_MESSAGE_SIZE = 4096; @@ -46,7 +46,7 @@ public void shouldParseFragmentedMessageAtFixMessageStartCodecBoundary() { ByteBuffer inputStream2 = ByteBuffer.wrap(part2); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -88,7 +88,7 @@ public void shouldParseFragmentedMessageWhichHasIncompleteMessagePrefixAtEnd() { final ByteBuffer inputStream2 = ByteBuffer.wrap(part2); final ByteBuffer inputStream3 = ByteBuffer.wrap(part3); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); final MessageParserCallback callback = createMessageParserCallback( new MyMessageParserCallbackTestFactory(messages)); @@ -119,7 +119,7 @@ public void shouldParseFragmentedMessageWhichHasIncompleteEnd() { final ByteBuffer inputStream2 = ByteBuffer.wrap(part2); final ByteBuffer inputStream3 = ByteBuffer.wrap(part3); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); final MessageParserCallback callback = createMessageParserCallback(new MyMessageParserCallbackTestFactory(messages)); final ByteStreamMessageParser parser = new FixStreamMessageParser(MAX_MESSAGE_SIZE); @@ -134,7 +134,7 @@ public void shouldParseFragmentedMessageWhichHasIncompleteEnd() { @Test - public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndSuffix() throws Exception { + public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndSuffix() { final byte[] part1 = FixMessageUtil.convertFixControlCharacters("8=FIX."); final byte[] part2 = FixMessageUtil.convertFixControlCharacters("4.2|9="); final byte[] part3 = FixMessageUtil.convertFixControlCharacters("208|10"); @@ -157,7 +157,7 @@ public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndS final ByteBuffer inputStream7 = ByteBuffer.wrap(part7); final ByteBuffer inputStream8 = ByteBuffer.wrap(part8); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); final MessageParserCallback callback = createMessageParserCallback(new MyMessageParserCallbackTestFactory(messages)); final ByteStreamMessageParser parser = new FixStreamMessageParser(MAX_MESSAGE_SIZE); @@ -251,7 +251,7 @@ public void shouldParseTwoMessagesInSegment() { inputStream.put(newOrderSingle); inputStream.flip(); - final List results = new ArrayList(); + final List results = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -275,7 +275,7 @@ public void onParseError(final String error) { parser.parse(inputStream); - assertTrue(2 == results.size()); + assertEquals(2, results.size()); assertArrayEquals(newOrderSingle, results.get(0)); assertArrayEquals(newOrderSingle, results.get(1)); } @@ -289,7 +289,7 @@ public void shouldParseThreeMessagesInSegment() { inputStream.put(newOrderSingle); inputStream.flip(); - final List results = new ArrayList(); + final List results = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -313,7 +313,7 @@ public void onParseError(final String error) { parser.parse(inputStream); - assertTrue(3 == results.size()); + assertEquals(3, results.size()); assertArrayEquals(newOrderSingle, results.get(0)); assertArrayEquals(newOrderSingle, results.get(1)); assertArrayEquals(newOrderSingle, results.get(2)); @@ -326,7 +326,7 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffers() { inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 70); inputStream1.flip(); - final List results = new ArrayList(); + final List results = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -356,7 +356,7 @@ public void onParseError(final String error) { parser.parse(inputStream2); - assertTrue(1 == results.size()); + assertEquals(1, results.size()); assertArrayEquals(newOrderSingle, results.get(0)); } @@ -367,7 +367,7 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 3); inputStream1.flip(); - final List results = new ArrayList(); + final List results = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -397,7 +397,7 @@ public void onParseError(final String error) { parser.parse(inputStream2); - assertTrue(1 == results.size()); + assertEquals(1, results.size()); assertArrayEquals(newOrderSingle, results.get(0)); } @@ -408,7 +408,7 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 3); inputStream1.flip(); - final List results = new ArrayList(); + final List results = new ArrayList<>(); MessageParserCallback callback = new MessageParserCallback() { @Override @@ -439,7 +439,7 @@ public void onParseError(final String error) { parser.parse(inputStream2); - assertTrue(2 == results.size()); + assertEquals(2, results.size()); assertArrayEquals(newOrderSingle, results.get(0)); assertArrayEquals(newOrderSingle, results.get(1)); } @@ -452,7 +452,7 @@ public void shouldRecogniseTruncatedMessageLessThanBufferSize() throws Exception ByteBuffer firstBuffer = ByteBuffer.wrap(trunactedExecutionReport); ByteBuffer secondBuffer = ByteBuffer.wrap(executionReport); - final List results = new ArrayList(); + final List results = new ArrayList<>(); final int[] truncated = {0}; MessageParserCallback callback = new MessageParserCallback() { diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java index fd0c8a3..26de884 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java @@ -16,7 +16,6 @@ package com.lmax.nanofix.incoming; -import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import org.junit.Before; @@ -37,7 +36,7 @@ public final class FixTagParserTest { private FixTagHandler fixTagHandler; @Before - public void setUp() throws Exception { + public void setUp() { fixTagHandler = mock(FixTagHandler.class); } @@ -61,7 +60,7 @@ public void shouldCountTagsCorrectlyInMessage() { } @Test - public void shouldCountTagsSeparatedByMultipleSeparatorsMessage() throws UnsupportedEncodingException { + public void shouldCountTagsSeparatedByMultipleSeparatorsMessage() { given(fixTagHandler.isFinished()).willReturn(false); final byte[] msg = "8=FIX.4.2\u00019=105|35=A|34=1|49=marketm155yjtfwicmfe\u000152=20100713-17:04:39.641|56=FIX-API|95=9|96=P4ssword.|98=0\u0001108=2|141=Y|10=191|" diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java index 9a8a115..3bf69d6 100644 --- a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java +++ b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java @@ -45,7 +45,7 @@ public void shouldBuildFix424MessageWithRawData() { } @Test - public void shouldBeAbleToBuildMessageWithArbitaryTagAndValue() { + public void shouldBeAbleToBuildMessageWithArbitraryTagAndValue() { final FixMessage fixMessage = new FixMessageBuilder("FIX.99").append(666666, "JunkData").build(); final String expectedFixMessage = fixMessage.toFixString(); assertThat(expectedFixMessage, is("8=FIX.99\u00019=16\u0001666666=JunkData\u000110=111\u0001"));