Merge "Bug 8153: Enforce check-style rules for netconf - netconf-netty-util"
authorTomas Cere <tcere@cisco.com>
Thu, 27 Apr 2017 12:51:40 +0000 (12:51 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 27 Apr 2017 12:51:40 +0000 (12:51 +0000)
33 files changed:
netconf/netconf-netty-util/pom.xml
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/AbstractChannelInitializer.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSession.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSessionNegotiator.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/BufferedWriter.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ChunkedFramingMechanismEncoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfChunkAggregator.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXICodec.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXIToMessageDecoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfHelloMessageToXMLEncoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToXMLEncoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfXMLToHelloMessageDecoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfXMLToMessageDecoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/exi/EXIParameters.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/exi/NetconfStartExiMessage.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/authentication/AuthenticationHandler.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/authentication/LoginPassword.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandlerReader.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandlerWriter.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSessionNegotiatorTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSessionTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/TestingNetconfSession.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/ChunkedFramingMechanismEncoderTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfChunkAggregatorTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXIHandlersTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfHelloMessageToXMLEncoderTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfXMLToHelloMessageDecoderTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfXMLToMessageDecoderTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/exi/EXIParametersTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/exi/NetconfStartExiMessageTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandlerTest.java

index be792df880ca4bbdc7910e2c02adb789b4a4ad5c..d3689608eb58bb7420245cac69703ce0fbeed4f0 100644 (file)
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <propertyExpansion>checkstyle.violationSeverity=error</propertyExpansion>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 
index 6bc9d70f1a11813e027b876c852575593497bddc..c967e8f317a03667634f65d3854e2228bea0e882 100644 (file)
@@ -28,7 +28,8 @@ public abstract class AbstractChannelInitializer<S extends NetconfSession> {
     public void initialize(Channel ch, Promise<S> promise) {
         ch.pipeline().addLast(NETCONF_MESSAGE_AGGREGATOR, new NetconfEOMAggregator());
         initializeMessageDecoder(ch);
-        ch.pipeline().addLast(NETCONF_MESSAGE_FRAME_ENCODER, FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
+        ch.pipeline().addLast(NETCONF_MESSAGE_FRAME_ENCODER,
+                FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
         initializeMessageEncoder(ch);
 
         initializeSessionNegotiator(ch, promise);
index e4c03ed50f43b518622957e179715e87f8f36814..b1c1203c4f1dc5cb295e7ce9c4845c2ab422b90b 100644 (file)
@@ -32,7 +32,8 @@ import org.openexi.sax.TransmogrifierException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractNetconfSession<S extends NetconfSession, L extends NetconfSessionListener<S>> extends AbstractProtocolSession<NetconfMessage> implements NetconfSession, NetconfExiSession {
+public abstract class AbstractNetconfSession<S extends NetconfSession,L extends NetconfSessionListener<S>>
+        extends AbstractProtocolSession<NetconfMessage> implements NetconfSession, NetconfExiSession {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractNetconfSession.class);
     private final L sessionListener;
     private final long sessionId;
@@ -104,7 +105,8 @@ public abstract class AbstractNetconfSession<S extends NetconfSession, L extends
         LOG.debug("Session {} end of input detected while session was in state {}", toString(), isUp() ? "up"
                 : "initialized");
         if (isUp()) {
-            this.sessionListener.onSessionDown(thisInstance(), new IOException("End of input detected. Close the session."));
+            this.sessionListener.onSessionDown(thisInstance(),
+                    new IOException("End of input detected. Close the session."));
         }
     }
 
index b3d35dc3c0d05bd8811505b4c450948052c9f0ff..2f30023f541f94914fac34bac68d8852f383cb68 100644 (file)
@@ -41,7 +41,8 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
-public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionPreferences, S extends AbstractNetconfSession<S, L>, L extends NetconfSessionListener<S>>
+public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionPreferences,
+        S extends AbstractNetconfSession<S, L>, L extends NetconfSessionListener<S>>
     extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractNetconfSessionNegotiator.class);
@@ -54,7 +55,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     private Timeout timeout;
 
     /**
-     * Possible states for Finite State Machine
+     * Possible states for Finite State Machine.
      */
     protected enum State {
         IDLE, OPEN_WAIT, FAILED, ESTABLISHED
@@ -65,8 +66,9 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     private final Timer timer;
     private final long connectionTimeoutMillis;
 
-    protected AbstractNetconfSessionNegotiator(final P sessionPreferences, final Promise<S> promise, final Channel channel, final Timer timer,
-            final L sessionListener, final long connectionTimeoutMillis) {
+    protected AbstractNetconfSessionNegotiator(final P sessionPreferences, final Promise<S> promise,
+                                               final Channel channel, final Timer timer,
+                                               final L sessionListener, final long connectionTimeoutMillis) {
         super(promise, channel);
         this.sessionPreferences = sessionPreferences;
         this.promise = promise;
@@ -95,7 +97,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
 
     private static Optional<SslHandler> getSslHandler(final Channel channel) {
         final SslHandler sslHandler = channel.pipeline().get(SslHandler.class);
-        return sslHandler == null ? Optional.<SslHandler> absent() : Optional.of(sslHandler);
+        return sslHandler == null ? Optional.<SslHandler>absent() : Optional.of(sslHandler);
     }
 
     public P getSessionPreferences() {
@@ -130,7 +132,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
                             channel.close().addListener(new GenericFutureListener<ChannelFuture>() {
                                 @Override
                                 public void operationComplete(final ChannelFuture future) throws Exception {
-                                    if(future.isSuccess()) {
+                                    if (future.isSuccess()) {
                                         LOG.debug("Channel {} closed: success", future.channel());
                                     } else {
                                         LOG.warn("Channel {} closed: fail", future.channel());
@@ -138,7 +140,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
                                 }
                             });
                         }
-                    } else if(channel.isOpen()) {
+                    } else if (channel.isOpen()) {
                         channel.pipeline().remove(NAME_OF_EXCEPTION_HANDLER);
                     }
                 }
@@ -152,12 +154,13 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     }
 
     private void cancelTimeout() {
-        if(timeout!=null) {
+        if (timeout != null) {
             timeout.cancel();
         }
     }
 
-    protected final S getSessionForHelloMessage(final NetconfHelloMessage netconfMessage) throws NetconfDocumentedException {
+    protected final S getSessionForHelloMessage(final NetconfHelloMessage netconfMessage)
+            throws NetconfDocumentedException {
         Preconditions.checkNotNull(netconfMessage, "netconfMessage");
 
         final Document doc = netconfMessage.getDocument();
@@ -171,7 +174,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     }
 
     /**
-     * Insert chunk framing handlers into the pipeline
+     * Insert chunk framing handlers into the pipeline.
      */
     private void insertChunkFramingToPipeline() {
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_FRAME_ENCODER,
@@ -188,11 +191,13 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     /**
      * Remove special inbound handler for hello message. Insert regular netconf xml message (en|de)coders.
      *
+     * <p>
      * Inbound hello message handler should be kept until negotiation is successful
      * It caches any non-hello messages while negotiation is still in progress
      */
     protected final void replaceHelloMessageInboundHandler(final S session) {
-        ChannelHandler helloMessageHandler = replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, new NetconfXMLToMessageDecoder());
+        ChannelHandler helloMessageHandler = replaceChannelHandler(channel,
+                AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, new NetconfXMLToMessageDecoder());
 
         Preconditions.checkState(helloMessageHandler instanceof NetconfXMLToHelloMessageDecoder,
                 "Pipeline handlers misplaced on session: %s, pipeline: %s", session, channel.pipeline());
@@ -200,7 +205,8 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
                 ((NetconfXMLToHelloMessageDecoder) helloMessageHandler).getPostHelloNetconfMessages();
 
         // Process messages received during negotiation
-        // The hello message handler does not have to be synchronized, since it is always call from the same thread by netty
+        // The hello message handler does not have to be synchronized,
+        // since it is always call from the same thread by netty.
         // It means, we are now using the thread now
         for (NetconfMessage message : netconfMessagesFromNegotiation) {
             session.handleMessage(message);
@@ -211,19 +217,22 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
      * Remove special outbound handler for hello message. Insert regular netconf xml message (en|de)coders.
      */
     private void replaceHelloMessageOutboundHandler() {
-        replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, new NetconfMessageToXMLEncoder());
+        replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER,
+                new NetconfMessageToXMLEncoder());
     }
 
-    private static ChannelHandler replaceChannelHandler(final Channel channel, final String handlerKey, final ChannelHandler decoder) {
+    private static ChannelHandler replaceChannelHandler(final Channel channel, final String handlerKey,
+                                                        final ChannelHandler decoder) {
         return channel.pipeline().replace(handlerKey, handlerKey, decoder);
     }
 
-    protected abstract S getSession(L sessionListener, Channel channel, NetconfHelloMessage message) throws NetconfDocumentedException;
+    protected abstract S getSession(L sessionListener, Channel channel, NetconfHelloMessage message)
+            throws NetconfDocumentedException;
 
     private synchronized void changeState(final State newState) {
         LOG.debug("Changing state from : {} to : {} for channel: {}", state, newState, channel);
-        Preconditions.checkState(isStateChangePermitted(state, newState), "Cannot change state from %s to %s for chanel %s", state,
-                newState, channel);
+        Preconditions.checkState(isStateChangePermitted(state, newState),
+                "Cannot change state from %s to %s for chanel %s", state, newState, channel);
         this.state = newState;
     }
 
@@ -252,7 +261,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     }
 
     /**
-     * Handler to catch exceptions in pipeline during negotiation
+     * Handler to catch exceptions in pipeline during negotiation.
      */
     private final class ExceptionHandlingInboundChannelHandler extends ChannelInboundHandlerAdapter {
         @Override
index 78e5ad06c7718b2086884bbc72702854a1f53325..7f3dd3854fdf23df5cefbeab7165b277f999b212 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.netconf.nettyutil.handler;
 
-
 import com.google.common.base.Preconditions;
 import java.io.IOException;
 import java.io.Writer;
@@ -16,10 +15,12 @@ import javax.annotation.concurrent.NotThreadSafe;
 
 /**
  * Custom BufferedWriter optimized for netconf pipeline implemented instead of default BufferedWriter provided by jdk.
+ *
  * <p>
  * The line separator instance field in java.io.BufferedWriter is
  * assigned using AccessController and takes considerable amount of time especially
  * if lots of BufferedWriters are created in the system.
+ *
  * <p>
  * This implementation should only be used if newLine method is not required
  * such as netconf message to XML encoders.
@@ -31,7 +32,7 @@ public final class BufferedWriter extends Writer {
     private static final int DEFAULT_CHAR_BUFFER_SIZE = 8192;
 
     private final Writer writer;
-    private final char buffer[];
+    private final char[] buffer;
     private final int bufferSize;
 
     private int nextChar = 0;
@@ -49,24 +50,27 @@ public final class BufferedWriter extends Writer {
     }
 
     private void flushBuffer() throws IOException {
-        if (nextChar == 0)
+        if (nextChar == 0) {
             return;
+        }
         writer.write(buffer, 0, nextChar);
         nextChar = 0;
     }
 
     @Override
-    public void write(final int c) throws IOException {
-        if (nextChar >= bufferSize)
+    public void write(final int character) throws IOException {
+        if (nextChar >= bufferSize) {
             flushBuffer();
-        buffer[nextChar++] = (char) c;
+        }
+        buffer[nextChar++] = (char) character;
     }
 
     @Override
     public void write(final char[] buffer, final int offset, final int length) throws IOException {
-        if ((offset < 0) || (offset > buffer.length) || (length < 0) ||
-                ((offset + length) > buffer.length) || ((offset + length) < 0)) {
-            throw new IndexOutOfBoundsException(String.format("Buffer size: %d, Offset: %d, Length: %d", buffer.length, offset, length));
+        if ((offset < 0) || (offset > buffer.length)
+                || (length < 0) || ((offset + length) > buffer.length) || ((offset + length) < 0)) {
+            throw new IndexOutOfBoundsException(
+                    String.format("Buffer size: %d, Offset: %d, Length: %d", buffer.length, offset, length));
         } else if (length == 0) {
             return;
         }
@@ -77,29 +81,31 @@ public final class BufferedWriter extends Writer {
             return;
         }
 
-        int b = offset;
+        int bufferOffset = offset;
         final int t = offset + length;
-        while (b < t) {
-            final int d = Math.min(bufferSize - nextChar, t - b);
-            System.arraycopy(buffer, b, this.buffer, nextChar, d);
-            b += d;
+        while (bufferOffset < t) {
+            final int d = Math.min(bufferSize - nextChar, t - bufferOffset);
+            System.arraycopy(buffer, bufferOffset, this.buffer, nextChar, d);
+            bufferOffset += d;
             nextChar += d;
-            if (nextChar >= bufferSize)
+            if (nextChar >= bufferSize) {
                 flushBuffer();
+            }
         }
     }
 
     @Override
     public void write(final String string, final int offset, final int length) throws IOException {
-        int b = offset;
+        int bufferOffset = offset;
         final int t = offset + length;
-        while (b < t) {
-            final int d = Math.min(bufferSize - nextChar, t - b);
-            string.getChars(b, b + d, buffer, nextChar);
-            b += d;
+        while (bufferOffset < t) {
+            final int d = Math.min(bufferSize - nextChar, t - bufferOffset);
+            string.getChars(bufferOffset, bufferOffset + d, buffer, nextChar);
+            bufferOffset += d;
             nextChar += d;
-            if (nextChar >= bufferSize)
+            if (nextChar >= bufferSize) {
                 flushBuffer();
+            }
         }
     }
 
index 8c9a2b35c973267b7336b1713ed9aa29c71e2c29..1d7a3cd5adad2b8b0218e91b1970fb999558b69d 100644 (file)
@@ -27,7 +27,8 @@ public class ChunkedFramingMechanismEncoder extends MessageToByteEncoder<ByteBuf
     }
 
     public ChunkedFramingMechanismEncoder(final int chunkSize) {
-        Preconditions.checkArgument(chunkSize >= MIN_CHUNK_SIZE && chunkSize <= MAX_CHUNK_SIZE, "Unsupported chunk size %s", chunkSize);
+        Preconditions.checkArgument(chunkSize >= MIN_CHUNK_SIZE && chunkSize <= MAX_CHUNK_SIZE,
+                "Unsupported chunk size %s", chunkSize);
         this.chunkSize = chunkSize;
     }
 
index 08eba8e0f2fccec13e9d709e9b8f3ccf559d6188..144b4f5b4c22187b71004a7e1ade5a5bce9b1cab 100644 (file)
@@ -18,12 +18,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class NetconfChunkAggregator extends ByteToMessageDecoder {
-    private final static Logger LOG = LoggerFactory.getLogger(NetconfChunkAggregator.class);
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfChunkAggregator.class);
     private static final String GOT_PARAM_WHILE_WAITING_FOR_PARAM = "Got byte {} while waiting for {}";
     private static final String GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM = "Got byte {} while waiting for {}-{}";
     public static final int DEFAULT_MAXIMUM_CHUNK_SIZE = 16 * 1024 * 1024;
 
-    private static enum State {
+    private enum State {
         HEADER_ONE, // \n
         HEADER_TWO, // #
         HEADER_LENGTH_FIRST, // [1-9]
@@ -40,16 +40,16 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
     private long chunkSize;
     private CompositeByteBuf chunk;
 
-    private static void checkNewLine(final byte b,final String errorMessage) {
-        if (b != '\n') {
-            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, b, (byte)'\n');
+    private static void checkNewLine(final byte byteToCheck, final String errorMessage) {
+        if (byteToCheck != '\n') {
+            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, byteToCheck, (byte)'\n');
             throw new IllegalStateException(errorMessage);
         }
     }
 
-    private static void checkHash(final byte b,final String errorMessage) {
-        if (b != '#') {
-            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, b, (byte)'#');
+    private static void checkHash(final byte byteToCheck, final String errorMessage) {
+        if (byteToCheck != '#') {
+            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, byteToCheck, (byte)'#');
             throw new IllegalStateException(errorMessage);
         }
     }
@@ -62,118 +62,115 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
     }
 
     @Override
-    protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws IllegalStateException {
+    protected void decode(final ChannelHandlerContext ctx,
+                          final ByteBuf in, final List<Object> out) throws IllegalStateException {
         while (in.isReadable()) {
             switch (state) {
-            case HEADER_ONE:
-            {
-                final byte b = in.readByte();
-                checkNewLine(b, "Malformed chunk header encountered (byte 0)");
-
-                state = State.HEADER_TWO;
-
-                initChunk();
-                break;
-            }
-            case HEADER_TWO:
-            {
-                final byte b = in.readByte();
-                checkHash(b, "Malformed chunk header encountered (byte 1)");
-
-                state = State.HEADER_LENGTH_FIRST;
-                break;
-            }
-            case HEADER_LENGTH_FIRST:
-            {
-                final byte b = in.readByte();
-                chunkSize = processHeaderLengthFirst(b);
-                state = State.HEADER_LENGTH_OTHER;
-                break;
-            }
-            case HEADER_LENGTH_OTHER:
-            {
-                final byte b = in.readByte();
-                if (b == '\n') {
-                    state = State.DATA;
+                case HEADER_ONE:
+                {
+                    final byte b = in.readByte();
+                    checkNewLine(b, "Malformed chunk header encountered (byte 0)");
+                    state = State.HEADER_TWO;
+                    initChunk();
                     break;
                 }
-
-                if (b < '0' || b > '9') {
-                    LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte)'0', (byte)'9');
-                    throw new IllegalStateException("Invalid chunk size encountered");
+                case HEADER_TWO:
+                {
+                    final byte b = in.readByte();
+                    checkHash(b, "Malformed chunk header encountered (byte 1)");
+                    state = State.HEADER_LENGTH_FIRST;
+                    break;
                 }
-
-                chunkSize *= 10;
-                chunkSize += b - '0';
-                checkChunkSize();
-                break;
-            }
-            case DATA:
-                /*
-                 * FIXME: this gathers all data into one big chunk before passing
-                 *        it on. Make sure the pipeline can work with partial data
-                 *        and then change this piece to pass the data on as it
-                 *        comes through.
-                 */
-                if (in.readableBytes() < chunkSize) {
-                    LOG.debug("Buffer has {} bytes, need {} to complete chunk", in.readableBytes(), chunkSize);
-                    in.discardReadBytes();
-                    return;
+                case HEADER_LENGTH_FIRST:
+                {
+                    final byte b = in.readByte();
+                    chunkSize = processHeaderLengthFirst(b);
+                    state = State.HEADER_LENGTH_OTHER;
+                    break;
+                }
+                case HEADER_LENGTH_OTHER:
+                {
+                    final byte b = in.readByte();
+                    if (b == '\n') {
+                        state = State.DATA;
+                        break;
+                    }
+                    if (b < '0' || b > '9') {
+                        LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte)'0', (byte)'9');
+                        throw new IllegalStateException("Invalid chunk size encountered");
+                    }
+                    chunkSize *= 10;
+                    chunkSize += b - '0';
+                    checkChunkSize();
+                    break;
+                }
+                case DATA:
+                    /*
+                     * FIXME: this gathers all data into one big chunk before passing
+                     *        it on. Make sure the pipeline can work with partial data
+                     *        and then change this piece to pass the data on as it
+                     *        comes through.
+                     */
+                    if (in.readableBytes() < chunkSize) {
+                        LOG.debug("Buffer has {} bytes, need {} to complete chunk", in.readableBytes(), chunkSize);
+                        in.discardReadBytes();
+                        return;
+                    }
+                    aggregateChunks(in.readBytes((int) chunkSize));
+                    state = State.FOOTER_ONE;
+                    break;
+                case FOOTER_ONE:
+                {
+                    final byte b = in.readByte();
+                    checkNewLine(b,"Malformed chunk footer encountered (byte 0)");
+                    state = State.FOOTER_TWO;
+                    chunkSize = 0;
+                    break;
+                }
+                case FOOTER_TWO:
+                {
+                    final byte b = in.readByte();
+                    checkHash(b,"Malformed chunk footer encountered (byte 1)");
+                    state = State.FOOTER_THREE;
+                    break;
+                }
+                case FOOTER_THREE:
+                {
+                    final byte b = in.readByte();
+                    // In this state, either header-of-new-chunk or message-end is expected
+                    // Depends on the next character
+                    extractNewChunkOrMessageEnd(b);
+                    break;
+                }
+                case FOOTER_FOUR:
+                {
+                    final byte b = in.readByte();
+                    checkNewLine(b,"Malformed chunk footer encountered (byte 3)");
+                    state = State.HEADER_ONE;
+                    out.add(chunk);
+                    chunk = null;
+                    break;
+                }
+                default :
+                {
+                    LOG.info("Unknown state.");
                 }
-                aggregateChunks(in.readBytes((int) chunkSize));
-                state = State.FOOTER_ONE;
-                break;
-            case FOOTER_ONE:
-            {
-                final byte b = in.readByte();
-                checkNewLine(b,"Malformed chunk footer encountered (byte 0)");
-                state = State.FOOTER_TWO;
-                chunkSize = 0;
-                break;
-            }
-            case FOOTER_TWO:
-            {
-                final byte b = in.readByte();
-                checkHash(b,"Malformed chunk footer encountered (byte 1)");
-                state = State.FOOTER_THREE;
-                break;
-            }
-            case FOOTER_THREE:
-            {
-                final byte b = in.readByte();
-
-                // In this state, either header-of-new-chunk or message-end is expected
-                // Depends on the next character
-
-                extractNewChunkOrMessageEnd(b);
-
-                break;
-            }
-            case FOOTER_FOUR:
-            {
-                final byte b = in.readByte();
-                checkNewLine(b,"Malformed chunk footer encountered (byte 3)");
-                state = State.HEADER_ONE;
-                out.add(chunk);
-                chunk = null;
-                break;
-            }
             }
         }
 
         in.discardReadBytes();
     }
 
-    private void extractNewChunkOrMessageEnd(final byte b) {
-        if (isHeaderLengthFirst(b)) {
+    private void extractNewChunkOrMessageEnd(final byte byteToCheck) {
+        if (isHeaderLengthFirst(byteToCheck)) {
             // Extract header length#1 from new chunk
-            chunkSize = processHeaderLengthFirst(b);
+            chunkSize = processHeaderLengthFirst(byteToCheck);
             // Proceed with next chunk processing
             state = State.HEADER_LENGTH_OTHER;
-        } else if (b == '#') {
+        } else if (byteToCheck == '#') {
             state = State.FOOTER_FOUR;
         } else {
-            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte) '#', (byte) '1', (byte) '9');
+            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, byteToCheck, (byte) '#', (byte) '1', (byte) '9');
             throw new IllegalStateException("Malformed chunk footer encountered (byte 2)");
         }
     }
@@ -189,16 +186,16 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
         chunk.writerIndex(chunk.writerIndex() + newChunk.readableBytes());
     }
 
-    private static int processHeaderLengthFirst(final byte b) {
-        if (!isHeaderLengthFirst(b)) {
-            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte)'1', (byte)'9');
+    private static int processHeaderLengthFirst(final byte byteToCheck) {
+        if (!isHeaderLengthFirst(byteToCheck)) {
+            LOG.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, byteToCheck, (byte)'1', (byte)'9');
             throw new IllegalStateException("Invalid chunk size encountered (byte 0)");
         }
 
-        return b - '0';
+        return byteToCheck - '0';
     }
 
-    private static boolean isHeaderLengthFirst(final byte b) {
-        return b >= '1' && b <= '9';
+    private static boolean isHeaderLengthFirst(final byte byteToCheck) {
+        return byteToCheck >= '1' && byteToCheck <= '9';
     }
 }
index 1186a5c4d09b20a043a3d8dd3cb9d6f105974ac7..235b5378c26736ea5c02b49621b22650e55b0920 100644 (file)
@@ -45,12 +45,13 @@ public final class NetconfEXICodec {
      * Since we have a limited number of options we can have, instantiating a weak cache
      * will allow us to reuse instances where possible.
      */
-    private static final LoadingCache<Short, GrammarCache> GRAMMAR_CACHES = CacheBuilder.newBuilder().weakValues().build(new CacheLoader<Short, GrammarCache>() {
-        @Override
-        public GrammarCache load(final Short key) {
-            return new GrammarCache(key);
-        }
-    });
+    private static final LoadingCache<Short, GrammarCache> GRAMMAR_CACHES =
+            CacheBuilder.newBuilder().weakValues().build(new CacheLoader<Short, GrammarCache>() {
+                @Override
+                public GrammarCache load(final Short key) {
+                    return new GrammarCache(key);
+                }
+            });
 
     /**
      * Grammar cache acts as a template and is duplicated by the Transmogrifier and the Reader
index 6d2508757a4e3138c5f3effe1cb7a2e08c757dd3..99d791642a5f9bf1ff5a1d560d2a79b7afb126a1 100644 (file)
@@ -37,10 +37,12 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfEXIToMessageDecoder.class);
     private static final SAXTransformerFactory FACTORY;
+
     static {
         final TransformerFactory f = SAXTransformerFactory.newInstance();
         if (!f.getFeature(SAXTransformerFactory.FEATURE)) {
-            throw new TransformerFactoryConfigurationError(String.format("Factory %s is not a SAXTransformerFactory", f));
+            throw new TransformerFactoryConfigurationError(
+                    String.format("Factory %s is not a SAXTransformerFactory", f));
         }
 
         FACTORY = (SAXTransformerFactory)f;
@@ -64,7 +66,8 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
     }
 
     @Override
-    protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws EXIOptionsException, IOException, SAXException, TransformerConfigurationException  {
+    protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out)
+            throws EXIOptionsException, IOException, SAXException, TransformerConfigurationException  {
         /*
          * Note that we could loop here and process all the messages, but we can't do that.
          * The reason is <stop-exi> operation, which has the contract of immediately stopping
@@ -88,7 +91,7 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
         final DOMResult domResult = new DOMResult(documentBuilder.newDocument());
         handler.setResult(domResult);
 
-        try (final InputStream is = new ByteBufInputStream(in)) {
+        try (InputStream is = new ByteBufInputStream(in)) {
             // Performs internal reset before doing anything
             reader.parse(new InputSource(is));
         }
index 0d50a2f74bed28041f331e8f6625045f6d17bfa2..fac1b2ba4db393aab8a2a2876369c99d46da1c96 100644 (file)
@@ -25,25 +25,28 @@ import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader
  * {@link NetconfHelloMessage}
  * . Used by netconf clients to send information about the user, ip address,
  * protocol etc.
+ *
  * <p>
  * Hello message with header example:
+ *
  * <p>
  *
  * <pre>
  * {@code
  * [tomas;10.0.0.0/10000;tcp;1000;1000;;/home/tomas;;]
- * <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
- * <capabilities>
- * <capability>urn:ietf:params:netconf:base:1.0</capability>
- * </capabilities>
- * </hello>
+ * < hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+ * < capabilities>
+ * < capability>urn:ietf:params:netconf:base:1.0< /capability>
+ * < /capabilities>
+ * < /hello>
  * }
  * </pre>
  */
 public final class NetconfHelloMessageToXMLEncoder extends NetconfMessageToXMLEncoder {
     @Override
     @VisibleForTesting
-    public void encode(ChannelHandlerContext ctx, NetconfMessage msg, ByteBuf out) throws IOException, TransformerException {
+    public void encode(ChannelHandlerContext ctx, NetconfMessage msg, ByteBuf out)
+            throws IOException, TransformerException {
         Preconditions.checkState(msg instanceof NetconfHelloMessage, "Netconf message of type %s expected, was %s",
                 NetconfHelloMessage.class, msg.getClass());
         Optional<NetconfHelloMessageAdditionalHeader> headerOptional = ((NetconfHelloMessage) msg)
index a9500ece2880970342e1ab88baf5897f89bbf6d9..e874ab3a4062db96b41f16f76d6dbce91e3c7c0e 100644 (file)
@@ -39,15 +39,17 @@ public final class NetconfMessageToEXIEncoder extends MessageToByteEncoder<Netco
         this.transmogrifier = Preconditions.checkNotNull(transmogrifier);
     }
 
-    public static NetconfMessageToEXIEncoder create(final NetconfEXICodec codec) throws EXIOptionsException, TransmogrifierException {
+    public static NetconfMessageToEXIEncoder create(final NetconfEXICodec codec)
+            throws EXIOptionsException, TransmogrifierException {
         return new NetconfMessageToEXIEncoder(codec.getTransmogrifier());
     }
 
     @Override
-    protected void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out) throws EXIOptionsException, IOException, TransformerException, TransmogrifierException {
+    protected void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out)
+            throws EXIOptionsException, IOException, TransformerException, TransmogrifierException {
         LOG.trace("Sent to encode : {}", msg);
 
-        try (final OutputStream os = new ByteBufOutputStream(out)) {
+        try (OutputStream os = new ByteBufOutputStream(out)) {
             transmogrifier.setOutputStream(os);
             final ContentHandler handler = transmogrifier.getSAXTransmogrifier();
             final Transformer transformer = ThreadLocalTransformers.getDefaultTransformer();
index 608f1998296f33a0bbb70b4cdf856d4b3b88d096..f033e0efe3406eb1f03edbdf323502e1018dbcfd 100644 (file)
@@ -40,7 +40,8 @@ public class NetconfMessageToXMLEncoder extends MessageToByteEncoder<NetconfMess
 
     @Override
     @VisibleForTesting
-    public void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out) throws IOException, TransformerException {
+    public void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out)
+            throws IOException, TransformerException {
         LOG.trace("Sent to encode : {}", msg);
 
         if (clientId.isPresent()) {
@@ -53,7 +54,8 @@ public class NetconfMessageToXMLEncoder extends MessageToByteEncoder<NetconfMess
 
             // Using custom BufferedWriter that does not provide newLine method as performance improvement
             // see javadoc for BufferedWriter
-            StreamResult result = new StreamResult(new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8)));
+            StreamResult result =
+                    new StreamResult(new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8)));
             DOMSource source = new DOMSource(msg.getDocument());
             ThreadLocalTransformers.getPrettyTransformer().transform(source, result);
         }
index 5353381748e610f2cd3e90076b6fd3a082833a79..5d69d401118e3bf9da1716dbc6e8725461508955 100644 (file)
@@ -34,9 +34,7 @@ import org.xml.sax.SAXException;
 /**
  * Customized NetconfXMLToMessageDecoder that reads additional header with
  * session metadata from
- * {@link NetconfHelloMessage}
- *
- *
+ * {@link NetconfHelloMessage}*
  * This handler should be replaced in pipeline by regular message handler as last step of negotiation.
  * It serves as a message barrier and halts all non-hello netconf messages.
  * Netconf messages after hello should be processed once the negotiation succeeded.
@@ -61,7 +59,8 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
 
     @Override
     @VisibleForTesting
-    public void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws IOException, SAXException, NetconfDocumentedException {
+    public void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out)
+            throws IOException, SAXException, NetconfDocumentedException {
         if (in.readableBytes() == 0) {
             LOG.debug("No more content in incoming buffer.");
             return;
@@ -109,9 +108,10 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
         }
     }
 
-    private static NetconfMessage getNetconfMessage(final String additionalHeader, final Document doc) throws NetconfDocumentedException {
+    private static NetconfMessage getNetconfMessage(final String additionalHeader, final Document doc)
+            throws NetconfDocumentedException {
         NetconfMessage msg = new NetconfMessage(doc);
-        if(NetconfHelloMessage.isHelloMessage(msg)) {
+        if (NetconfHelloMessage.isHelloMessage(msg)) {
             if (additionalHeader != null) {
                 return new NetconfHelloMessage(doc, NetconfHelloMessageAdditionalHeader.fromString(additionalHeader));
             } else {
@@ -145,15 +145,15 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
                 return -1;
             }
         }
-        int j = 0;
+        int index = 0;
         for (int i = 0; i < bytes.length; i++) {
-            if (bytes[i] == sequence[j]) {
-                j++;
-                if (j == sequence.length) {
-                    return i - j + 1;
+            if (bytes[i] == sequence[index]) {
+                index++;
+                if (index == sequence.length) {
+                    return i - index + 1;
                 }
             } else {
-                j = 0;
+                index = 0;
             }
         }
         return -1;
@@ -161,20 +161,20 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
 
     private static void logMessage(final byte[] bytes) {
         if (LOG.isDebugEnabled()) {
-            String s = StandardCharsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString();
-            LOG.debug("Parsing message \n{}", s);
+            String string = StandardCharsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString();
+            LOG.debug("Parsing message \n{}", string);
         }
     }
 
     private static boolean startsWithAdditionalHeader(final byte[] bytes) {
         for (byte[] possibleStart : POSSIBLE_STARTS) {
-            int i = 0;
+            int index = 0;
             for (byte b : possibleStart) {
-                if(bytes[i++] != b) {
+                if (bytes[index++] != b) {
                     break;
                 }
 
-                if(i == possibleStart.length) {
+                if (index == possibleStart.length) {
                     return true;
                 }
             }
@@ -188,7 +188,9 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
     }
 
     /**
-     * @return Collection of NetconfMessages that were not hello, but were received during negotiation
+     * Get netconf messages received during negotiation.
+     *
+     * @return Collection of NetconfMessages that were not hello, but were received during negotiation.
      */
     public Iterable<NetconfMessage> getPostHelloNetconfMessages() {
         return nonHelloMessages;
index fcb92f0e14dca2ded4e4ebd2002fc9f5371da5af..68dba39d63bccae8f2e18280116e722e317d9258 100644 (file)
@@ -25,7 +25,8 @@ public final class NetconfXMLToMessageDecoder extends ByteToMessageDecoder {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfXMLToMessageDecoder.class);
 
     @Override
-    public void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws IOException, SAXException {
+    public void decode(final ChannelHandlerContext ctx, final ByteBuf in,
+                       final List<Object> out) throws IOException, SAXException {
         if (in.isReadable()) {
             if (LOG.isTraceEnabled()) {
                 LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in));
@@ -77,10 +78,10 @@ public final class NetconfXMLToMessageDecoder extends ByteToMessageDecoder {
      * Check whether a byte is whitespace/control character. Considered whitespace characters: <br/>
      * SPACE, \t, \n, \v, \r, \f
      *
-     * @param b byte to check
+     * @param byteToCheck byte to check
      * @return true if the byte is a whitespace/control character
      */
-    private static boolean isWhitespace(final byte b) {
-        return b <= 0x0d && b >= 0x09 || b == 0x20;
+    private static boolean isWhitespace(final byte byteToCheck) {
+        return byteToCheck <= 0x0d && byteToCheck >= 0x09 || byteToCheck == 0x20;
     }
 }
index 8ba28731481cf0fc8dee499e6e876054871e0def..f63a1e0ae1812a48a856f37ef4d0a822896c5ea5 100644 (file)
@@ -38,7 +38,7 @@ public final class EXIParameters {
         this.options = Preconditions.checkNotNull(options);
     }
 
-
+    @SuppressWarnings("checkstyle:FallThrough")
     public static EXIParameters fromXmlElement(final XmlElement root) throws EXIOptionsException {
         final EXIOptions options =  new EXIOptions();
         final NodeList alignmentElements = root.getElementsByTagName(EXI_PARAMETER_ALIGNMENT);
@@ -47,20 +47,21 @@ public final class EXIParameters {
             final String alignmentTextContent = alignmentElement.getTextContent().trim();
 
             switch (alignmentTextContent) {
-            case EXI_PARAMETER_BYTE_ALIGNED:
-                options.setAlignmentType(AlignmentType.byteAligned);
-                break;
-            case EXI_PARAMETER_COMPRESSED:
-                options.setAlignmentType(AlignmentType.compress);
-                break;
-            case EXI_PARAMETER_PRE_COMPRESSION:
-                options.setAlignmentType(AlignmentType.preCompress);
-                break;
-            default:
-                LOG.warn("Unexpected value in alignmentTextContent: {} , using default value", alignmentTextContent);
-            case EXI_PARAMETER_BIT_PACKED:
-                options.setAlignmentType(AlignmentType.bitPacked);
-                break;
+                case EXI_PARAMETER_BYTE_ALIGNED:
+                    options.setAlignmentType(AlignmentType.byteAligned);
+                    break;
+                case EXI_PARAMETER_COMPRESSED:
+                    options.setAlignmentType(AlignmentType.compress);
+                    break;
+                case EXI_PARAMETER_PRE_COMPRESSION:
+                    options.setAlignmentType(AlignmentType.preCompress);
+                    break;
+                default:
+                    LOG.warn("Unexpected value in alignmentTextContent: {} , using default value",
+                            alignmentTextContent);
+                case EXI_PARAMETER_BIT_PACKED:
+                    options.setAlignmentType(AlignmentType.bitPacked);
+                    break;
             }
         } else {
             options.setAlignmentType(AlignmentType.bitPacked);
index f3711ae388c795e5d20396c51968627651ae03f0..3f81a5175e4689ab993c3920b3095cfcefeb9008 100644 (file)
@@ -33,6 +33,7 @@ public final class NetconfStartExiMessage extends NetconfMessage {
     public static final String PIS_KEY = "pis";
     public static final String PREFIXES_KEY = "prefixes";
     private static final Logger LOG = LoggerFactory.getLogger(NetconfStartExiMessage.class);
+
     private NetconfStartExiMessage(final Document doc) {
         super(doc);
     }
@@ -75,37 +76,40 @@ public final class NetconfStartExiMessage extends NetconfMessage {
         }
     }
 
+    @SuppressWarnings("checkstyle:FallThrough")
     private static void addAlignment(final EXIOptions exiOptions, final Document doc, final Element startExiElement) {
         final Element alignmentElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
                 ALIGNMENT_KEY);
 
         String alignmentString;
         switch (exiOptions.getAlignmentType()) {
-        case byteAligned: {
-            alignmentString = EXIParameters.EXI_PARAMETER_BYTE_ALIGNED;
-            break;
-        }
-        case compress: {
-            alignmentString = EXIParameters.EXI_PARAMETER_COMPRESSED;
-            break;
-        }
-        case preCompress: {
-            alignmentString = EXIParameters.EXI_PARAMETER_PRE_COMPRESSION;
-            break;
-        }
-        default:
-            LOG.warn("Unexpected value in EXI alignment type: {} , using default value", exiOptions.getAlignmentType());
-        case bitPacked: {
-            alignmentString = EXIParameters.EXI_PARAMETER_BIT_PACKED;
-            break;
-        }
+            case byteAligned: {
+                alignmentString = EXIParameters.EXI_PARAMETER_BYTE_ALIGNED;
+                break;
+            }
+            case compress: {
+                alignmentString = EXIParameters.EXI_PARAMETER_COMPRESSED;
+                break;
+            }
+            case preCompress: {
+                alignmentString = EXIParameters.EXI_PARAMETER_PRE_COMPRESSION;
+                break;
+            }
+            default:
+                LOG.warn("Unexpected value in EXI alignment type: {} , using default value",
+                        exiOptions.getAlignmentType());
+            case bitPacked: {
+                alignmentString = EXIParameters.EXI_PARAMETER_BIT_PACKED;
+                break;
+            }
         }
 
         alignmentElement.setTextContent(alignmentString);
         startExiElement.appendChild(alignmentElement);
     }
 
-    private static void createFidelityElement(final Document doc, final List<Element> fidelityElements, final boolean fidelity, final String fidelityName) {
+    private static void createFidelityElement(final Document doc, final List<Element> fidelityElements,
+                                              final boolean fidelity, final String fidelityName) {
 
         if (fidelity) {
             fidelityElements.add(doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
index c6c417f7d0afdd3a52c4fdc7aeb5212fce8c30ef..aed43347d863ee9269911ed4cb66fb7b49535b78 100644 (file)
@@ -18,5 +18,6 @@ public abstract class AuthenticationHandler {
 
     public abstract String getUsername();
 
-    public abstract org.apache.sshd.client.future.AuthFuture authenticate(final ClientSession session) throws IOException;
+    public abstract org.apache.sshd.client.future.AuthFuture authenticate(ClientSession session)
+            throws IOException;
 }
index 6219f91b2d9998a6c2d2027a457f615f14de69cb..46cb2c717b314cb64548c553354087bf5df2f082 100644 (file)
@@ -14,7 +14,7 @@ import org.apache.sshd.client.future.AuthFuture;
 
 /**
  * Class Providing username/password authentication option to
- * {@link org.opendaylight.netconf.nettyutil.handler.ssh.client.AsyncSshHandler}
+ * {@link org.opendaylight.netconf.nettyutil.handler.ssh.client.AsyncSshHandler}.
  */
 public class LoginPassword extends AuthenticationHandler {
     private final String username;
index cb642c1a9954cba715cbb381431f9467c3c731c3..8f6e2baa6304583b456901717bf48e4ec3988e7e 100644 (file)
@@ -44,6 +44,7 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
     private static final long DEFAULT_TIMEOUT = -1L;
 
     public static final SshClient DEFAULT_CLIENT;
+
     static {
         final Map<String, String> props = new HashMap<>();
         props.put(SshClient.AUTH_TIMEOUT, Long.toString(DEFAULT_TIMEOUT));
@@ -77,29 +78,31 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
     }
 
     /**
+     * Constructor of {@code AsyncSshHandler}.
      *
-     * @param authenticationHandler
-     * @param sshClient started SshClient
-     * @throws IOException
+     * @param authenticationHandler authentication handler
+     * @param sshClient             started SshClient
+     * @throws IOException          if the I/O operation fails
      */
-    public AsyncSshHandler(final AuthenticationHandler authenticationHandler, final SshClient sshClient) throws IOException {
+    public AsyncSshHandler(final AuthenticationHandler authenticationHandler,
+                           final SshClient sshClient) throws IOException {
         this.authenticationHandler = Preconditions.checkNotNull(authenticationHandler);
         this.sshClient = Preconditions.checkNotNull(sshClient);
     }
 
-    public static AsyncSshHandler createForNetconfSubsystem(final AuthenticationHandler authenticationHandler) throws IOException {
+    public static AsyncSshHandler createForNetconfSubsystem(final AuthenticationHandler authenticationHandler)
+            throws IOException {
         return new AsyncSshHandler(authenticationHandler, DEFAULT_CLIENT);
     }
 
     /**
+     * Create AsyncSshHandler for netconf subsystem. Negotiation future has to be set to success after successful
+     * netconf negotiation.
      *
-     * Create AsyncSshHandler for netconf subsystem. Negotiation future has to be set to success after successful netconf
-     * negotiation.
-     *
-     * @param authenticationHandler
-     * @param negotiationFuture
-     * @return
-     * @throws IOException
+     * @param authenticationHandler authentication handler
+     * @param negotiationFuture     negotiation future
+     * @return                      {@code AsyncSshHandler}
+     * @throws IOException          if the I/O operation fails
      */
     public static AsyncSshHandler createForNetconfSubsystem(final AuthenticationHandler authenticationHandler,
             final Future<?> negotiationFuture) throws IOException {
@@ -135,9 +138,8 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
                         handleSshAuthenticated(session, ctx);
                     } else {
                         // Exception does not have to be set in the future, add simple exception in such case
-                        final Throwable exception = future.getException() == null ?
-                                new IllegalStateException("Authentication failed") :
-                                future.getException();
+                        final Throwable exception = future.getException() == null
+                                ? new IllegalStateException("Authentication failed") : future.getException();
                         handleSshSetupFailure(ctx, exception);
                     }
                 }
@@ -149,14 +151,15 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
 
     private synchronized void handleSshAuthenticated(final ClientSession session, final ChannelHandlerContext ctx) {
         try {
-            LOG.debug("SSH session authenticated on channel: {}, server version: {}", ctx.channel(), session.getServerVersion());
+            LOG.debug("SSH session authenticated on channel: {}, server version: {}", ctx.channel(),
+                    session.getServerVersion());
 
             channel = session.createSubsystemChannel(SUBSYSTEM);
             channel.setStreaming(ClientChannel.Streaming.Async);
             channel.open().addListener(new SshFutureListener<OpenFuture>() {
                 @Override
                 public void operationComplete(final OpenFuture future) {
-                    if(future.isOpened()) {
+                    if (future.isOpened()) {
                         handleSshChanelOpened(ctx);
                     } else {
                         handleSshSetupFailure(ctx, future.getException());
@@ -173,7 +176,7 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
     private synchronized void handleSshChanelOpened(final ChannelHandlerContext ctx) {
         LOG.trace("SSH subsystem channel opened successfully on channel: {}", ctx.channel());
 
-        if(negotiationFuture == null) {
+        if (negotiationFuture == null) {
             connectPromise.setSuccess();
         }
 
@@ -191,19 +194,20 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
             }
         }, channel.toString(), channel.getAsyncOut());
 
-        // if readAsyncListener receives immediate close, it will close this handler and closing this handler sets channel variable to null
-        if(channel != null) {
+        // if readAsyncListener receives immediate close,
+        // it will close this handler and closing this handler sets channel variable to null
+        if (channel != null) {
             sshWriteAsyncHandler = new AsyncSshHandlerWriter(channel.getAsyncIn());
             ctx.fireChannelActive();
         }
     }
 
-    private synchronized void handleSshSetupFailure(final ChannelHandlerContext ctx, final Throwable e) {
-        LOG.warn("Unable to setup SSH connection on channel: {}", ctx.channel(), e);
+    private synchronized void handleSshSetupFailure(final ChannelHandlerContext ctx, final Throwable error) {
+        LOG.warn("Unable to setup SSH connection on channel: {}", ctx.channel(), error);
 
         // If the promise is not yet done, we have failed with initial connect and set connectPromise to failure
-        if(!connectPromise.isDone()) {
-            connectPromise.setFailure(e);
+        if (!connectPromise.isDone()) {
+            connectPromise.setFailure(error);
         }
 
         disconnect(ctx, ctx.newPromise());
@@ -215,11 +219,12 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
     }
 
     @Override
-    public synchronized void connect(final ChannelHandlerContext ctx, final SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise) throws Exception {
+    public synchronized void connect(final ChannelHandlerContext ctx, final SocketAddress remoteAddress,
+                                     final SocketAddress localAddress, final ChannelPromise promise) throws Exception {
         LOG.debug("SSH session connecting on channel {}. promise: {} ", ctx.channel(), connectPromise);
         this.connectPromise = promise;
 
-        if(negotiationFuture != null) {
+        if (negotiationFuture != null) {
 
             negotiationFutureListener = new GenericFutureListener<Future<?>>() {
                 @Override
@@ -240,36 +245,39 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
         disconnect(ctx, promise);
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     @Override
     public synchronized void disconnect(final ChannelHandlerContext ctx, final ChannelPromise promise) {
-        LOG.trace("Closing SSH session on channel: {} with connect promise in state: {}", ctx.channel(), connectPromise);
+        LOG.trace("Closing SSH session on channel: {} with connect promise in state: {}",
+                ctx.channel(),connectPromise);
 
-        // If we have already succeeded and the session was dropped after, we need to fire inactive to notify reconnect logic
-        if(connectPromise.isSuccess()) {
+        // If we have already succeeded and the session was dropped after,
+        // we need to fire inactive to notify reconnect logic
+        if (connectPromise.isSuccess()) {
             ctx.fireChannelInactive();
         }
 
-        if(sshWriteAsyncHandler != null) {
+        if (sshWriteAsyncHandler != null) {
             sshWriteAsyncHandler.close();
         }
 
-        if(sshReadAsyncListener != null) {
+        if (sshReadAsyncListener != null) {
             sshReadAsyncListener.close();
         }
 
         //If connection promise is not already set, it means negotiation failed
         //we must set connection promise to failure
-        if(!connectPromise.isDone()) {
+        if (!connectPromise.isDone()) {
             connectPromise.setFailure(new IllegalStateException("Negotiation failed"));
         }
 
         //Remove listener from negotiation future, we don't want notifications
         //from negotiation anymore
-        if(negotiationFuture != null) {
+        if (negotiationFuture != null) {
             negotiationFuture.removeListener(negotiationFutureListener);
         }
 
-        if(session!= null && !session.isClosed() && !session.isClosing()) {
+        if (session != null && !session.isClosed() && !session.isClosing()) {
             session.close(false).addListener(new SshFutureListener<CloseFuture>() {
                 @Override
                 public void operationComplete(final CloseFuture future) {
@@ -281,9 +289,11 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
             });
         }
 
-        // Super disconnect is necessary in this case since we are using NioSocketChannel and it needs to cleanup its resources
-        // e.g. Socket that it tries to open in its constructor (https://bugs.opendaylight.org/show_bug.cgi?id=2430)
-        // TODO better solution would be to implement custom ChannelFactory + Channel that will use mina SSH lib internally: port this to custom channel implementation
+        // Super disconnect is necessary in this case since we are using NioSocketChannel and it needs
+        // to cleanup its resources e.g. Socket that it tries to open in its constructor
+        // (https://bugs.opendaylight.org/show_bug.cgi?id=2430)
+        // TODO better solution would be to implement custom ChannelFactory + Channel
+        // that will use mina SSH lib internally: port this to custom channel implementation
         try {
             // Disconnect has to be closed after inactive channel event was fired, because it interferes with it
             super.disconnect(ctx, ctx.newPromise());
index b54eb4616907c60ca45de6ff292e6826bfb8fc25..c79b71308ace4d270c15d93564f91cd1877ec880 100644 (file)
@@ -35,7 +35,8 @@ public final class AsyncSshHandlerReader implements SshFutureListener<IoReadFutu
     private Buffer buf;
     private IoReadFuture currentReadFuture;
 
-    public AsyncSshHandlerReader(final AutoCloseable connectionClosedCallback, final ReadMsgHandler readHandler, final String channelId, final IoInputStream asyncOut) {
+    public AsyncSshHandlerReader(final AutoCloseable connectionClosedCallback, final ReadMsgHandler readHandler,
+                                 final String channelId, final IoInputStream asyncOut) {
         this.connectionClosedCallback = connectionClosedCallback;
         this.readHandler = readHandler;
         this.channelId = channelId;
@@ -46,14 +47,14 @@ public final class AsyncSshHandlerReader implements SshFutureListener<IoReadFutu
 
     @Override
     public synchronized void operationComplete(final IoReadFuture future) {
-        if(future.getException() != null) {
+        if (future.getException() != null) {
 
             //if asyncout is already set to null by close method, do nothing
-            if(asyncOut == null) {
+            if (asyncOut == null) {
                 return;
             }
 
-            if(asyncOut.isClosed() || asyncOut.isClosing()) {
+            if (asyncOut.isClosed() || asyncOut.isClosing()) {
                 // Ssh dropped
                 LOG.debug("Ssh session dropped on channel: {}", channelId, future.getException());
             } else {
@@ -65,8 +66,9 @@ public final class AsyncSshHandlerReader implements SshFutureListener<IoReadFutu
 
         if (future.getRead() > 0) {
             final ByteBuf msg = Unpooled.wrappedBuffer(buf.array(), 0, future.getRead());
-            if(LOG.isTraceEnabled()) {
-                LOG.trace("Reading message on channel: {}, message: {}", channelId, AsyncSshHandlerWriter.byteBufToString(msg));
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Reading message on channel: {}, message: {}",
+                        channelId, AsyncSshHandlerWriter.byteBufToString(msg));
             }
             readHandler.onMessageRead(msg);
 
@@ -77,6 +79,7 @@ public final class AsyncSshHandlerReader implements SshFutureListener<IoReadFutu
         }
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     private void invokeDisconnect() {
         try {
             connectionClosedCallback.close();
@@ -89,7 +92,7 @@ public final class AsyncSshHandlerReader implements SshFutureListener<IoReadFutu
     @Override
     public synchronized void close() {
         // Remove self as listener on close to prevent reading from closed input
-        if(currentReadFuture != null) {
+        if (currentReadFuture != null) {
             currentReadFuture.removeListener(this);
             currentReadFuture = null;
         }
index e9a1d75c55e33c897ad29241dc9ce0792655972d..e333da2b7610ab6b210e4c158b5e9b2f2cbcf2e7 100644 (file)
@@ -37,8 +37,8 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
     // TODO implement Limiting mechanism for pending writes
     // But there is a possible issue with limiting:
     // 1. What to do when queue is full ? Immediate Fail for every request ?
-    // 2. At this level we might be dealing with Chunks of messages(not whole messages) and unexpected behavior might occur
-    // when we send/queue 1 chunk and fail the other chunks
+    // 2. At this level we might be dealing with Chunks of messages(not whole messages)
+    // and unexpected behavior might occur when we send/queue 1 chunk and fail the other chunks
 
     private volatile IoOutputStream asyncIn;
 
@@ -78,7 +78,8 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
 
     //sending message with pending
     //if resending message not succesfull, then attribute wasPending is true
-    private void writeWithPendingDetection(final ChannelHandlerContext ctx, final ChannelPromise promise, final ByteBuf byteBufMsg, final boolean wasPending) {
+    private void writeWithPendingDetection(final ChannelHandlerContext ctx, final ChannelPromise promise,
+                                           final ByteBuf byteBufMsg, final boolean wasPending) {
         try {
 
             if (LOG.isTraceEnabled()) {
@@ -94,15 +95,17 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
                     // while the pending write was in progress from the write callback
                     synchronized (asyncIn) {
                         if (LOG.isTraceEnabled()) {
-                            LOG.trace("Ssh write request finished on channel: {} with result: {}: and ex:{}, message: {}",
-                                    ctx.channel(), future.isWritten(), future.getException(), byteBufToString(byteBufMsg));
+                            LOG.trace(
+                                "Ssh write request finished on channel: {} with result: {}: and ex:{}, message: {}",
+                                ctx.channel(), future.isWritten(), future.getException(), byteBufToString(byteBufMsg));
                         }
 
                         // Notify success or failure
                         if (future.isWritten()) {
                             promise.setSuccess();
                         } else {
-                            LOG.warn("Ssh write request failed on channel: {} for message: {}", ctx.channel(), byteBufToString(byteBufMsg), future.getException());
+                            LOG.warn("Ssh write request failed on channel: {} for message: {}", ctx.channel(),
+                                    byteBufToString(byteBufMsg), future.getException());
                             promise.setFailure(future.getException());
                         }
 
@@ -117,14 +120,15 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
                     }
 
                     // Check pending queue and schedule next
-                    // At this time we are guaranteed that we are not in pending state anymore so the next request should succeed
+                    // At this time we are guaranteed that we are not in pending state anymore
+                    // so the next request should succeed
                     writePendingIfAny();
                 }
             });
 
         } catch (final WritePendingException e) {
 
-            if(wasPending == false){
+            if (wasPending == false) {
                 queueRequest(ctx, byteBufMsg, promise);
             }
         }
@@ -139,7 +143,8 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
             final PendingWriteRequest pendingWrite = pending.peek();
             final ByteBuf msg = pendingWrite.msg;
             if (LOG.isTraceEnabled()) {
-                LOG.trace("Writing pending request on channel: {}, message: {}", pendingWrite.ctx.channel(), byteBufToString(msg));
+                LOG.trace("Writing pending request on channel: {}, message: {}",
+                        pendingWrite.ctx.channel(), byteBufToString(msg));
             }
 
             writeWithPendingDetection(pendingWrite.ctx, pendingWrite.promise, msg, true);
@@ -160,7 +165,8 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
         }
         new PendingWriteRequest(ctx, msg, promise).pend(pending);
 //        } catch (final Exception ex) {
-//            LOG.warn("Unable to queue write request on channel: {}. Setting fail for the request: {}", ctx.channel(), ex, byteBufToString(msg));
+//            LOG.warn("Unable to queue write request on channel: {}. Setting fail for the request: {}",
+//                    ctx.channel(), ex, byteBufToString(msg));
 //            msg.release();
 //            promise.setFailure(ex);
 //        }
@@ -184,7 +190,7 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
         private final ByteBuf msg;
         private final ChannelPromise promise;
 
-        public PendingWriteRequest(final ChannelHandlerContext ctx, final ByteBuf msg, final ChannelPromise promise) {
+        PendingWriteRequest(final ChannelHandlerContext ctx, final ByteBuf msg, final ChannelPromise promise) {
             this.ctx = ctx;
             // Reset reader index, last write (failed) attempt moved index to the end
             msg.resetReaderIndex();
@@ -196,8 +202,8 @@ public final class AsyncSshHandlerWriter implements AutoCloseable {
             // Preconditions.checkState(pending.size() < MAX_PENDING_WRITES,
             // "Too much pending writes(%s) on channel: %s, remote window is not getting read or is too small",
             // pending.size(), ctx.channel());
-            Preconditions.checkState(pending.offer(this), "Cannot pend another request write (pending count: %s) on channel: %s",
-                    pending.size(), ctx.channel());
+            Preconditions.checkState(pending.offer(this),
+                "Cannot pend another request write (pending count: %s) on channel: %s", pending.size(), ctx.channel());
         }
     }
 }
index 4da5b2c89029da8735896912d37f7d79504a0c9f..af64d2901576d1d1cc993b475e36c407eed300c3 100644 (file)
@@ -75,12 +75,15 @@ public class AbstractNetconfSessionNegotiatorTest {
         MockitoAnnotations.initMocks(this);
         channel = new EmbeddedChannel();
         xmlToHello = new NetconfXMLToHelloMessageDecoder();
-        channel.pipeline().addLast(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, new ChannelInboundHandlerAdapter());
+        channel.pipeline().addLast(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER,
+                new ChannelInboundHandlerAdapter());
         channel.pipeline().addLast(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, xmlToHello);
-        channel.pipeline().addLast(NETCONF_MESSAGE_FRAME_ENCODER, FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
+        channel.pipeline().addLast(NETCONF_MESSAGE_FRAME_ENCODER,
+                FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
         channel.pipeline().addLast(NETCONF_MESSAGE_AGGREGATOR, new NetconfEOMAggregator());
         hello = NetconfHelloMessage.createClientHello(Collections.emptySet(), Optional.absent());
-        helloBase11 = NetconfHelloMessage.createClientHello(Collections.singleton(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1), Optional.absent());
+        helloBase11 = NetconfHelloMessage.createClientHello(Collections
+                .singleton(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1), Optional.absent());
         prefs = new NetconfSessionPreferences(helloBase11);
         doReturn(promise).when(promise).setFailure(any());
         doReturn(promise).when(promise).setSuccess(any());
@@ -136,7 +139,8 @@ public class AbstractNetconfSessionNegotiatorTest {
         final AbstractNetconfSession session = negotiator.getSessionForHelloMessage(helloBase11);
         Assert.assertNotNull(session);
         Assert.assertTrue(channel.pipeline().get(NETCONF_MESSAGE_AGGREGATOR) instanceof NetconfChunkAggregator);
-        Assert.assertTrue(channel.pipeline().get(NETCONF_MESSAGE_FRAME_ENCODER) instanceof ChunkedFramingMechanismEncoder);
+        Assert.assertTrue(channel.pipeline().get(NETCONF_MESSAGE_FRAME_ENCODER)
+                instanceof ChunkedFramingMechanismEncoder);
     }
 
     @Test
@@ -177,7 +181,7 @@ public class AbstractNetconfSessionNegotiatorTest {
 
         @Override
         protected TestingNetconfSession getSession(final NetconfSessionListener sessionListener, final Channel channel,
-                                                   final NetconfHelloMessage message) throws NetconfDocumentedException {
+                                               final NetconfHelloMessage message) throws NetconfDocumentedException {
             return new TestingNetconfSession(sessionListener, channel, 0L);
         }
 
index 8edfca9296bb7df336415822dc5622e6fd5af912..7dda1cdac8dcf67d2a3ee269e5e283fb84d92ec9 100644 (file)
@@ -66,7 +66,8 @@ public class AbstractNetconfSessionTest {
         doNothing().when(listener).onMessage(any(TestingNetconfSession.class), any(NetconfMessage.class));
         doNothing().when(listener).onSessionUp(any(TestingNetconfSession.class));
         doNothing().when(listener).onSessionDown(any(TestingNetconfSession.class), any(Exception.class));
-        doNothing().when(listener).onSessionTerminated(any(TestingNetconfSession.class), any(NetconfTerminationReason.class));
+        doNothing().when(listener).onSessionTerminated(any(TestingNetconfSession.class),
+                any(NetconfTerminationReason.class));
 
         doReturn(writeFuture).when(writeFuture).addListener(any(GenericFutureListener.class));
 
@@ -88,7 +89,8 @@ public class AbstractNetconfSessionTest {
             }
         }).when(eventLoop).execute(any(Runnable.class));
 
-        clientHello = NetconfHelloMessage.createClientHello(Collections.<String>emptySet(), Optional.<NetconfHelloMessageAdditionalHeader>absent());
+        clientHello = NetconfHelloMessage.createClientHello(Collections.<String>emptySet(),
+                Optional.<NetconfHelloMessageAdditionalHeader>absent());
     }
 
     @Test
@@ -122,14 +124,17 @@ public class AbstractNetconfSessionTest {
         doReturn("handler").when(mock).toString();
 
         testingNetconfSession.replaceMessageDecoder(mock);
-        verify(pipeline).replace(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, mock);
+        verify(pipeline).replace(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER,
+                AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, mock);
         testingNetconfSession.replaceMessageEncoder(mock);
-        verify(pipeline).replace(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, mock);
+        verify(pipeline).replace(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER,
+                AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, mock);
         testingNetconfSession.replaceMessageEncoderAfterNextMessage(mock);
         verifyNoMoreInteractions(pipeline);
 
         testingNetconfSession.sendMessage(clientHello);
-        verify(pipeline, times(2)).replace(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, mock);
+        verify(pipeline, times(2)).replace(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER,
+                AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, mock);
     }
 
     @Test
@@ -154,7 +159,8 @@ public class AbstractNetconfSessionTest {
     @Test
     public void testSendMessage() throws Exception {
         final TestingNetconfSession testingNetconfSession = new TestingNetconfSession(listener, channel, 1L);
-        final NetconfHelloMessage clientHello = NetconfHelloMessage.createClientHello(Collections.<String>emptySet(), Optional.<NetconfHelloMessageAdditionalHeader>absent());
+        final NetconfHelloMessage clientHello = NetconfHelloMessage.createClientHello(Collections.<String>emptySet(),
+                Optional.<NetconfHelloMessageAdditionalHeader>absent());
         testingNetconfSession.sendMessage(clientHello);
         verify(channel).writeAndFlush(clientHello);
     }
index b7a1c6c741a456aff47b8a35a4956ac002c9ad49..cb8733ee05194224659e1b045fe2061becf3056a 100644 (file)
@@ -14,9 +14,11 @@ import io.netty.handler.codec.MessageToByteEncoder;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.api.NetconfSessionListener;
 
-class TestingNetconfSession extends AbstractNetconfSession<TestingNetconfSession, NetconfSessionListener<TestingNetconfSession>> {
+class TestingNetconfSession
+        extends AbstractNetconfSession<TestingNetconfSession, NetconfSessionListener<TestingNetconfSession>> {
 
-    TestingNetconfSession(final NetconfSessionListener<TestingNetconfSession> sessionListener, final Channel channel, final long sessionId) {
+    TestingNetconfSession(final NetconfSessionListener<TestingNetconfSession> sessionListener,
+                          final Channel channel, final long sessionId) {
         super(sessionListener, channel, sessionId);
     }
 
@@ -26,7 +28,8 @@ class TestingNetconfSession extends AbstractNetconfSession<TestingNetconfSession
     }
 
     @Override
-    protected void addExiHandlers(final ByteToMessageDecoder decoder, final MessageToByteEncoder<NetconfMessage> encoder) {
+    protected void addExiHandlers(final ByteToMessageDecoder decoder,
+                                  final MessageToByteEncoder<NetconfMessage> encoder) {
     }
 
     @Override
index c8837dfd95c5d54e20d951bfc5f300c6b5c59a8b..bb95ff1b0223e8390d22769f7b8eb2649270735b 100644 (file)
@@ -55,10 +55,10 @@ public class ChunkedFramingMechanismEncoderTest {
 
         byte[] buf = new byte[destination.readableBytes()];
         destination.readBytes(buf);
-        String s = StandardCharsets.US_ASCII.decode(ByteBuffer.wrap(buf)).toString();
+        String string = StandardCharsets.US_ASCII.decode(ByteBuffer.wrap(buf)).toString();
 
-        assertTrue(s.startsWith("\n#256\na"));
-        assertTrue(s.endsWith("\n#20\naaaaaaaaaaaaaaaaaaaa\n##\n"));
+        assertTrue(string.startsWith("\n#256\na"));
+        assertTrue(string.endsWith("\n#20\naaaaaaaaaaaaaaaaaaaa\n##\n"));
     }
 
     private static byte[] getByteArray(final int size) {
index 321b34ccf77bfc0602e40141f6c13df860cdd6af..a9a67f19c43e0474006b1b92e6ee328fea10b352 100644 (file)
@@ -19,20 +19,20 @@ import org.junit.Test;
 
 public class NetconfChunkAggregatorTest {
 
-    private static final String CHUNKED_MESSAGE = "\n#4\n" +
-            "<rpc" +
-            "\n#18\n" +
-            " message-id=\"102\"\n" +
-            "\n#79\n" +
-            "     xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" +
-            "  <close-session/>\n" +
-            "</rpc>" +
-            "\n##\n";
-
-    public static final String EXPECTED_MESSAGE = "<rpc message-id=\"102\"\n" +
-            "     xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" +
-            "  <close-session/>\n" +
-            "</rpc>";
+    private static final String CHUNKED_MESSAGE = "\n#4\n"
+            + "<rpc"
+            + "\n#18\n"
+            + " message-id=\"102\"\n"
+            + "\n#79\n"
+            + "     xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+            + "  <close-session/>\n"
+            + "</rpc>"
+            "\n##\n";
+
+    public static final String EXPECTED_MESSAGE = "<rpc message-id=\"102\"\n"
+            + "     xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+            + "  <close-session/>\n"
+            "</rpc>";
 
     private static final String CHUNKED_MESSAGE_ONE = "\n#101\n" + EXPECTED_MESSAGE + "\n##\n";
 
index f80b4dacf1df1f6f11e91e2a122edc54181b7f81..b1b6e6d56ab3fea5a3554c7e3614cf034371c383 100644 (file)
@@ -48,7 +48,8 @@ public class NetconfEXIHandlersTest {
         this.msgAsExi = msgToExi(msgAsString, codec);
     }
 
-    private static byte[] msgToExi(final String msgAsString, final NetconfEXICodec codec) throws EXIOptionsException, TransmogrifierException, IOException {
+    private static byte[] msgToExi(final String msgAsString,final NetconfEXICodec codec)
+            throws EXIOptionsException, TransmogrifierException, IOException {
         final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
         final Transmogrifier transmogrifier = codec.getTransmogrifier();
         transmogrifier.setOutputStream(byteArrayOutputStream);
index 7eaceff6697ccc31fe8d37f8dcaa0cefb9580560..794ce8dad2d014ac66996a954229ddddd69bf52c 100644 (file)
@@ -36,7 +36,8 @@ public class NetconfHelloMessageToXMLEncoderTest {
 
     @Test
     public void testEncode() throws Exception {
-        final NetconfMessage msg = new NetconfHelloMessage(XmlUtil.readXmlToDocument("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"),
+        final NetconfMessage msg = new NetconfHelloMessage(XmlUtil.readXmlToDocument(
+                "<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"),
                 NetconfHelloMessageAdditionalHeader.fromString("[tomas;10.0.0.0:10000;tcp;client;]"));
         final ByteBuf destination = Unpooled.buffer();
         new NetconfHelloMessageToXMLEncoder().encode(ctx, msg, destination);
@@ -48,7 +49,8 @@ public class NetconfHelloMessageToXMLEncoderTest {
 
     @Test
     public void testEncodeNoHeader() throws Exception {
-        final NetconfMessage msg = new NetconfHelloMessage(XmlUtil.readXmlToDocument("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"));
+        final NetconfMessage msg = new NetconfHelloMessage(XmlUtil.readXmlToDocument(
+                "<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"));
         final ByteBuf destination = Unpooled.buffer();
         new NetconfHelloMessageToXMLEncoder().encode(ctx, msg, destination);
 
@@ -59,7 +61,8 @@ public class NetconfHelloMessageToXMLEncoderTest {
 
     @Test(expected = IllegalStateException.class)
     public void testEncodeNotHello() throws Exception {
-        final NetconfMessage msg = new NetconfMessage(XmlUtil.readXmlToDocument("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"));
+        final NetconfMessage msg = new NetconfMessage(XmlUtil.readXmlToDocument(
+                "<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>"));
         new NetconfHelloMessageToXMLEncoder().encode(ctx, msg, null);
     }
 }
\ No newline at end of file
index 9ee511ace0356178c4719baaf76bbfba9784cb0a..fc20f9585d4a8f7e1c0702bbe1f5e564bd7985e4 100644 (file)
@@ -28,7 +28,8 @@ public class NetconfXMLToHelloMessageDecoderTest {
     @Test
     public void testDecodeWithHeader() throws Exception {
         final ByteBuf src = Unpooled.wrappedBuffer(String.format("%s\n%s",
-                "[tomas;10.0.0.0:10000;tcp;client;]", "<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>").getBytes());
+                "[tomas;10.0.0.0:10000;tcp;client;]",
+                "<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>").getBytes());
         final List<Object> out = Lists.newArrayList();
         new NetconfXMLToHelloMessageDecoder().decode(null, src, out);
 
@@ -36,13 +37,16 @@ public class NetconfXMLToHelloMessageDecoderTest {
         assertThat(out.get(0), CoreMatchers.instanceOf(NetconfHelloMessage.class));
         final NetconfHelloMessage hello = (NetconfHelloMessage) out.get(0);
         assertTrue(hello.getAdditionalHeader().isPresent());
-        assertEquals("[tomas;10.0.0.0:10000;tcp;client;]" + System.lineSeparator(), hello.getAdditionalHeader().get().toFormattedString());
-        assertThat(XmlUtil.toString(hello.getDocument()), CoreMatchers.containsString("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\""));
+        assertEquals("[tomas;10.0.0.0:10000;tcp;client;]" + System.lineSeparator(),
+                hello.getAdditionalHeader().get().toFormattedString());
+        assertThat(XmlUtil.toString(hello.getDocument()),
+                CoreMatchers.containsString("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\""));
     }
 
     @Test
     public void testDecodeNoHeader() throws Exception {
-        final ByteBuf src = Unpooled.wrappedBuffer("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
+        final ByteBuf src =
+                Unpooled.wrappedBuffer("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
         final List<Object> out = Lists.newArrayList();
         new NetconfXMLToHelloMessageDecoder().decode(null, src, out);
 
@@ -54,9 +58,12 @@ public class NetconfXMLToHelloMessageDecoderTest {
 
     @Test
     public void testDecodeCaching() throws Exception {
-        final ByteBuf msg1 = Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
-        final ByteBuf msg2 = Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
-        final ByteBuf src = Unpooled.wrappedBuffer("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
+        final ByteBuf msg1 =
+                Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
+        final ByteBuf msg2 =
+                Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
+        final ByteBuf src =
+                Unpooled.wrappedBuffer("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
         final List<Object> out = Lists.newArrayList();
         final NetconfXMLToHelloMessageDecoder decoder = new NetconfXMLToHelloMessageDecoder();
         decoder.decode(null, src, out);
@@ -70,7 +77,8 @@ public class NetconfXMLToHelloMessageDecoderTest {
 
     @Test(expected = IllegalStateException.class)
     public void testDecodeNotHelloReceived() throws Exception {
-        final ByteBuf msg1 = Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
+        final ByteBuf msg1 =
+                Unpooled.wrappedBuffer("<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"/>".getBytes());
         final List<Object> out = Lists.newArrayList();
         NetconfXMLToHelloMessageDecoder decoder = new NetconfXMLToHelloMessageDecoder();
         decoder.decode(null, msg1, out);
index 37b7b2a9cd0609a00a4f3cdbdf0da06fef4f5699..ea5bd62df6c6991ab5455486f52475bb658519f5 100644 (file)
@@ -39,7 +39,8 @@ public class NetconfXMLToMessageDecoderTest {
          * A leading LF is the case reported in BUG-2838.
          */
         final ArrayList<Object> out = Lists.newArrayList();
-        new NetconfXMLToMessageDecoder().decode(null, Unpooled.wrappedBuffer("\n<?xml version=\"1.0\" encoding=\"UTF-8\"?><msg/>".getBytes()), out);
+        new NetconfXMLToMessageDecoder().decode(null,
+                Unpooled.wrappedBuffer("\n<?xml version=\"1.0\" encoding=\"UTF-8\"?><msg/>".getBytes()), out);
         assertEquals(1, out.size());
     }
 
@@ -51,11 +52,12 @@ public class NetconfXMLToMessageDecoderTest {
          * (eg CSR1000V running IOS 15.4(1)S)
          */
         final ArrayList<Object> out = Lists.newArrayList();
-        new NetconfXMLToMessageDecoder().decode(null, Unpooled.wrappedBuffer("\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?><msg/>".getBytes()), out);
+        new NetconfXMLToMessageDecoder().decode(null,
+                Unpooled.wrappedBuffer("\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?><msg/>".getBytes()), out);
         assertEquals(1, out.size());
     }
 
-    @Test(expected=SAXParseException.class)
+    @Test(expected = SAXParseException.class)
     public void testDecodeGibberish() throws Exception {
         /* Test that we reject inputs where we cannot find the xml start '<' character */
         final ArrayList<Object> out = Lists.newArrayList();
@@ -78,7 +80,7 @@ public class NetconfXMLToMessageDecoderTest {
          */
 
         final ArrayList<Object> out = Lists.newArrayList();
-        byte whitespaces[] = {' ', '\t', '\n', '\r', '\f', 0x0b /* vertical tab */};
+        byte[] whitespaces = {' ', '\t', '\n', '\r', '\f', 0x0b /* vertical tab */};
         new NetconfXMLToMessageDecoder().decode(
                 null,
                 Unpooled.copiedBuffer(
index 9879d61e6c33142956f8f18b93b3a0b6800d266e..f14e0995b0a466620fe59d51a42f134e144731cc 100644 (file)
@@ -25,22 +25,22 @@ public class EXIParametersTest {
     @Parameterized.Parameters
     public static Iterable<Object[]> data() throws Exception {
         final String noChangeXml =
-                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n" +
-                "<alignment>bit-packed</alignment>\n" +
-                "</start-exi>\n";
+                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+                + "<alignment>bit-packed</alignment>\n"
+                "</start-exi>\n";
 
 
         final String fullOptionsXml =
-                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n" +
-                "<alignment>byte-aligned</alignment>\n" +
-                "<fidelity>\n" +
-                "<comments/>\n" +
-                "<dtd/>\n" +
-                "<lexical-values/>\n" +
-                "<pis/>\n" +
-                "<prefixes/>\n" +
-                "</fidelity>\n" +
-                "</start-exi>\n";
+                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+                + "<alignment>byte-aligned</alignment>\n"
+                + "<fidelity>\n"
+                + "<comments/>\n"
+                + "<dtd/>\n"
+                + "<lexical-values/>\n"
+                + "<pis/>\n"
+                + "<prefixes/>\n"
+                + "</fidelity>\n"
+                "</start-exi>\n";
 
         final EXIOptions fullOptions = new EXIOptions();
         fullOptions.setAlignmentType(AlignmentType.byteAligned);
index 24e93d97380d4866a3908a659e89f249405dda1c..d7ccba6f3b6490f9720873d8fddc80501541aabe 100644 (file)
@@ -24,25 +24,27 @@ public class NetconfStartExiMessageTest {
 
     @Parameterized.Parameters
     public static Iterable<Object[]> data() throws Exception {
-        final String noChangeXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" +
-                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n" +
-                "<alignment>bit-packed</alignment>\n" +
-                "</start-exi>\n" +
-                "</rpc>";
+        final String noChangeXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "
+                + "ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+                + "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+                + "<alignment>bit-packed</alignment>\n"
+                + "</start-exi>\n"
+                + "</rpc>";
 
 
-        final String fullOptionsXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" +
-                "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n" +
-                "<alignment>byte-aligned</alignment>\n" +
-                "<fidelity>\n" +
-                "<comments/>\n" +
-                "<dtd/>\n" +
-                "<lexical-values/>\n" +
-                "<pis/>\n" +
-                "<prefixes/>\n" +
-                "</fidelity>\n" +
-                "</start-exi>\n" +
-                "</rpc>";
+        final String fullOptionsXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "
+                + "ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+                + "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+                + "<alignment>byte-aligned</alignment>\n"
+                + "<fidelity>\n"
+                + "<comments/>\n"
+                + "<dtd/>\n"
+                + "<lexical-values/>\n"
+                + "<pis/>\n"
+                + "<prefixes/>\n"
+                + "</fidelity>\n"
+                + "</start-exi>\n"
+                + "</rpc>";
 
         final EXIOptions fullOptions = new EXIOptions();
         fullOptions.setAlignmentType(AlignmentType.byteAligned);
index 4f11465dd2e66bc4e138b3f63d8a93fe7effd616..f1806b43cef396659dea16e04f50aa9d6c19d8ed 100644 (file)
@@ -221,7 +221,8 @@ public class AsyncSshHandlerTest {
             @Override
             public void onSuccess(final SshFutureListener<IoReadFuture> result) {
                 doReturn(new IllegalStateException()).when(mockedReadFuture).getException();
-                doReturn(mockedReadFuture).when(mockedReadFuture).removeListener(Matchers.<SshFutureListener<IoReadFuture>>any());
+                doReturn(mockedReadFuture).when(mockedReadFuture)
+                        .removeListener(Matchers.<SshFutureListener<IoReadFuture>>any());
                 doReturn(true).when(asyncOut).isClosing();
                 doReturn(true).when(asyncOut).isClosed();
                 result.operationComplete(mockedReadFuture);
@@ -251,7 +252,8 @@ public class AsyncSshHandlerTest {
             @Override
             public void onSuccess(final SshFutureListener<IoReadFuture> result) {
                 doReturn(new IllegalStateException()).when(mockedReadFuture).getException();
-                doReturn(mockedReadFuture).when(mockedReadFuture).removeListener(Matchers.<SshFutureListener<IoReadFuture>>any());
+                doReturn(mockedReadFuture).when(mockedReadFuture)
+                        .removeListener(Matchers.<SshFutureListener<IoReadFuture>>any());
                 result.operationComplete(mockedReadFuture);
             }
         });
@@ -340,11 +342,14 @@ public class AsyncSshHandlerTest {
 
         final ChannelPromise firstWritePromise = getMockedPromise();
 
-        // intercept listener for first write, so we can invoke successful write later thus simulate pending of the first write
-        final ListenableFuture<SshFutureListener<IoWriteFuture>> firstWriteListenerFuture = stubAddListener(ioWriteFuture);
+        // intercept listener for first write,
+        // so we can invoke successful write later thus simulate pending of the first write
+        final ListenableFuture<SshFutureListener<IoWriteFuture>> firstWriteListenerFuture =
+                stubAddListener(ioWriteFuture);
         asyncSshHandler.write(ctx, Unpooled.copiedBuffer(new byte[]{0,1,2,3,4,5}), firstWritePromise);
         final SshFutureListener<IoWriteFuture> firstWriteListener = firstWriteListenerFuture.get();
-        // intercept second listener, this is the listener for pending write for the pending write to know when pending state ended
+        // intercept second listener,
+        // this is the listener for pending write for the pending write to know when pending state ended
         final ListenableFuture<SshFutureListener<IoWriteFuture>> pendingListener = stubAddListener(ioWriteFuture);
 
         final ChannelPromise secondWritePromise = getMockedPromise();
@@ -386,8 +391,10 @@ public class AsyncSshHandlerTest {
 
         final ChannelPromise firstWritePromise = getMockedPromise();
 
-        // intercept listener for first write, so we can invoke successful write later thus simulate pending of the first write
-        final ListenableFuture<SshFutureListener<IoWriteFuture>> firstWriteListenerFuture = stubAddListener(ioWriteFuture);
+        // intercept listener for first write,
+        // so we can invoke successful write later thus simulate pending of the first write
+        final ListenableFuture<SshFutureListener<IoWriteFuture>> firstWriteListenerFuture =
+                stubAddListener(ioWriteFuture);
         asyncSshHandler.write(ctx, Unpooled.copiedBuffer(new byte[]{0,1,2,3,4,5}), firstWritePromise);
 
         final ChannelPromise secondWritePromise = getMockedPromise();
@@ -464,7 +471,8 @@ public class AsyncSshHandlerTest {
         return sshSession;
     }
 
-    private ChannelSubsystem getMockedSubsystemChannel(final IoInputStream asyncOut, final IoOutputStream asyncIn) throws IOException {
+    private ChannelSubsystem getMockedSubsystemChannel(final IoInputStream asyncOut,
+                                                       final IoOutputStream asyncIn) throws IOException {
         final ChannelSubsystem subsystemChannel = mock(ChannelSubsystem.class);
         doReturn("subsystemChannel").when(subsystemChannel).toString();
 
@@ -597,14 +605,15 @@ public class AsyncSshHandlerTest {
         return spy(new DefaultChannelPromise(channel));
     }
 
-    private static abstract class SuccessFutureListener<T extends SshFuture<T>> implements FutureCallback<SshFutureListener<T>> {
+    private abstract static class SuccessFutureListener<T extends SshFuture<T>>
+            implements FutureCallback<SshFutureListener<T>> {
 
         @Override
-        public abstract void onSuccess(final SshFutureListener<T> result);
+        public abstract void onSuccess(SshFutureListener<T> result);
 
         @Override
-        public void onFailure(final Throwable t) {
-            throw new RuntimeException(t);
+        public void onFailure(final Throwable throwable) {
+            throw new RuntimeException(throwable);
         }
     }
 }